84 lines
1.9 KiB
Go
84 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
"github.com/op/go-logging"
|
|
|
|
"git.ohea.xyz/golang/config"
|
|
|
|
"git.ohea.xyz/mediasrv/server/database"
|
|
"git.ohea.xyz/mediasrv/server/rest"
|
|
)
|
|
|
|
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, "mediasrv")
|
|
} else {
|
|
home := os.Getenv("HOME")
|
|
return filepath.Join(home, ".local", "share", "mediasrv")
|
|
}
|
|
}
|
|
|
|
var log = logging.MustGetLogger("mediasrv-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: "mediasrv",
|
|
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)
|
|
return
|
|
}
|
|
|
|
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.RunServer(configData.Config.Address, configData.Config.Port, data_dir, configData.Config.ScanDirectory)
|
|
|
|
}
|