package main import ( "os" "path/filepath" _ "github.com/mattn/go-sqlite3" "github.com/op/go-logging" "github.com/restitux/ikinuki-server/database" "github.com/restitux/ikinuki-server/rest" "gitlab.com/ohea/golang/config" ) func get_data_dir() string { // Find data directory // Linux (XDG base directory specification compliant) xdg_data_home := os.Getenv("XDG_DATA_HOME") if xdg_data_home != "" { return filepath.Join(xdg_data_home, "ikinuki") } else { home := os.Getenv("HOME") return filepath.Join(home, ".local", "share", "ikinuki") } } var log = logging.MustGetLogger("ikinuki-server") type Config struct { Address string Port int ScanDirectory string } func main() { var format = logging.MustStringFormatter( `%{color}%{time:15:04:05.000} %{level:.4s}:%{color:reset} %{message}`, ) backend := logging.NewLogBackend(os.Stderr, "", 0) backendFormatter := logging.NewBackendFormatter(backend, format) backendLeveled := logging.AddModuleLevel(backendFormatter) backendLeveled.SetLevel(logging.DEBUG, "") logging.SetBackend(backendLeveled) configData := config.Config[Config]{ Name: "ikinuki", Filename: "server", Config: Config{ Address: "127.0.0.1", Port: 32520, ScanDirectory: "FILL IN", }, } ret, err := configData.Get() if ret == true { log.Warningf("Created config file at %v, please edit and launch again\n", *configData.ConfigFile) } data_dir := get_data_dir() db, is_new, err := database.OpenDatabase(data_dir) if err != nil { log.Fatalf("Could not open database: %v", err) } defer db.Close() if is_new { err = database.ScanTvshowRoot(configData.Config.ScanDirectory, db) if err != nil { log.Fatalf("Could not scan directory \"%v\": %v\n", configData.Config.ScanDirectory, err) } } rest.RunHTTPServer(configData.Config.Address, configData.Config.Port, data_dir) }