137 lines
3.5 KiB
Go
137 lines
3.5 KiB
Go
package database
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
_ "github.com/go-sql-driver/mysql"
|
|
"openmediacenter/apiGo/api/types"
|
|
)
|
|
|
|
var db *sql.DB
|
|
var DBName string
|
|
|
|
// store the command line parameter for Videoprefix
|
|
var SettingsVideoPrefix = ""
|
|
|
|
type DatabaseConfig struct {
|
|
DBHost string
|
|
DBPort int
|
|
DBUser string
|
|
DBPassword string
|
|
DBName string
|
|
}
|
|
|
|
func InitDB(dbconf *DatabaseConfig) {
|
|
DBName = dbconf.DBName
|
|
|
|
// Open up our database connection.
|
|
var err error
|
|
db, err = sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", dbconf.DBUser, dbconf.DBPassword, dbconf.DBHost, dbconf.DBPort, dbconf.DBName))
|
|
|
|
// if there is an error opening the connection, handle it
|
|
if err != nil {
|
|
fmt.Printf("Error while connecting to database! - %s\n", err.Error())
|
|
}
|
|
|
|
if db != nil {
|
|
ping := db.Ping()
|
|
if ping != nil {
|
|
fmt.Printf("Error while connecting to database! - %s\n", ping.Error())
|
|
}
|
|
}
|
|
}
|
|
|
|
func Query(query string, args ...interface{}) *sql.Rows {
|
|
// perform a db.Query insert
|
|
res, err := db.Query(query, args...)
|
|
|
|
// if there is an error inserting, handle it
|
|
if err != nil {
|
|
fmt.Printf("Error while requesting data! - %s\n", err.Error())
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
func QueryRow(SQL string, args ...interface{}) *sql.Row {
|
|
return db.QueryRow(SQL, args...)
|
|
}
|
|
|
|
// edit something in the DB and give only an error response
|
|
func Edit(query string, args ...interface{}) error {
|
|
_, err := db.Exec(query, args...)
|
|
return err
|
|
}
|
|
|
|
// insert/edit a query and return last insert id
|
|
func Insert(query string, args ...interface{}) (error, int64) {
|
|
resp, err := db.Exec(query, args...)
|
|
var id int64 = 0
|
|
if err == nil {
|
|
id, err = resp.LastInsertId()
|
|
}
|
|
|
|
return err, id
|
|
}
|
|
|
|
func SuccessQuery(query string, args ...interface{}) []byte {
|
|
return ManualSuccessResponse(Edit(query, args...))
|
|
}
|
|
|
|
func ManualSuccessResponse(err error) []byte {
|
|
if err == nil {
|
|
return []byte(`{"result":"success"}`)
|
|
} else {
|
|
return []byte(fmt.Sprintf(`{"result":"%s"}`, err.Error()))
|
|
}
|
|
}
|
|
|
|
func Close() {
|
|
db.Close()
|
|
}
|
|
|
|
func GetSettings() types.SettingsType {
|
|
var result types.SettingsType
|
|
|
|
// query settings and infotile values
|
|
query := fmt.Sprintf(`
|
|
SELECT (
|
|
SELECT COUNT(*)
|
|
FROM videos
|
|
) AS videonr,
|
|
(
|
|
SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS Size
|
|
FROM information_schema.TABLES
|
|
WHERE TABLE_SCHEMA = '%s'
|
|
GROUP BY table_schema
|
|
) AS dbsize,
|
|
(
|
|
SELECT COUNT(*)
|
|
FROM tags
|
|
) AS difftagnr,
|
|
(
|
|
SELECT COUNT(*)
|
|
FROM video_tags
|
|
) AS tagsadded,
|
|
video_path, episode_path, password, mediacenter_name, TMDB_grabbing, DarkMode
|
|
FROM settings
|
|
LIMIT 1`, DBName)
|
|
|
|
var DarkMode int
|
|
var TMDBGrabbing int
|
|
|
|
err := QueryRow(query).Scan(&result.VideoNr, &result.DBSize, &result.DifferentTags, &result.TagsAdded,
|
|
&result.VideoPath, &result.EpisodePath, &result.Password, &result.MediacenterName, &TMDBGrabbing, &DarkMode)
|
|
|
|
if err != nil {
|
|
fmt.Println(err.Error())
|
|
}
|
|
|
|
result.TMDBGrabbing = TMDBGrabbing != 0
|
|
result.PasswordEnabled = result.Password != "-1"
|
|
result.DarkMode = DarkMode != 0
|
|
result.PathPrefix = SettingsVideoPrefix
|
|
|
|
return result
|
|
}
|