-
Notifications
You must be signed in to change notification settings - Fork 0
/
init.go
90 lines (74 loc) · 1.49 KB
/
init.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package database
import (
"database/sql"
"errors"
"os"
"path"
_ "github.com/mattn/go-sqlite3"
)
var DB *sql.DB
func Start(f string) error {
userConfigDir, err := os.UserConfigDir()
if err != nil {
return err
}
chorusConfigDir := path.Join(userConfigDir, "chorus")
err = os.Mkdir(chorusConfigDir, 0777)
if !errors.Is(err, os.ErrExist) && err != nil {
return err
}
err = os.Mkdir(path.Join(chorusConfigDir, "pictures"), 0777)
if !errors.Is(err, os.ErrExist) && err != nil {
return err
}
dbPath := path.Join(chorusConfigDir, f)
db, err := sql.Open("sqlite3", dbPath)
if err != nil {
return err
}
DB = db
err = createTable()
if err != nil {
return err
}
return nil
}
func createTable() error {
q := `
CREATE TABLE IF NOT EXISTS albums (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
artist TEXT,
picture INTEGER REFERENCES pictures(id),
year INT,
UNIQUE(name, artist)
);
CREATE TABLE IF NOT EXISTS songs (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
picture INTEGER REFERENCES pictures(id),
path TEXT NOT NULL,
album INTEGER REFERENCES albums(id),
artist INTEGER REFERENCES artist(id),
track INTEGER,
disc INTEGER,
year INTEGER,
duration INTEGER,
mime TEXT
);
CREATE TABLE IF NOT EXISTS artists (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL UNIQUE
);
CREATE TABLE IF NOT EXISTS pictures (
id INTEGER PRIMARY KEY,
path TEXT NOT NULL UNIQUE,
mime TEXT
)
`
_, err := DB.Exec(q)
if err != nil {
return err
}
return nil
}