-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
108 lines (87 loc) · 2.27 KB
/
main.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package main
// Functions that end with "_go" are meant to be Goroutines
import (
"database/sql"
"log"
"os"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"github.com/OutOfContainment/RBDE/gui"
"github.com/OutOfContainment/RBDE/sound"
_ "github.com/mattn/go-sqlite3"
)
var tracksAmount int
func main() {
log.Println("Start")
// set font
if _, err := os.Stat("font.ttf"); err == nil {
os.Setenv("FYNE_FONT", "font.ttf")
} else {
log.Println("'font.ttf' not found; using default font.")
}
// open existing database || create database
records := getDatabase()
defer records.Close()
sound := sound.NewSound(records)
// Initialise window
RBDE := app.New()
win := RBDE.NewWindow("DiEmu")
win.Resize(fyne.NewSize(240, 400))
win.SetContent(gui.Skeleton(RBDE, win, sound, tracksAmount))
// Open window
defer log.Println("Goodbye.")
defer win.ShowAndRun()
defer log.Println("Open window ##")
}
func getDatabase() *sql.DB {
if _, err := os.Stat("records.db"); err == nil {
records, err := sql.Open("sqlite3", "./records.db")
if err != nil {
log.Fatal("Could not open existing database ", err)
}
tracksAmount = getTracksAmount(records)
log.Println(tracksAmount, "tracks in opened database")
return records
} else {
createDB()
records, err := sql.Open("sqlite3", "./records.db")
if err != nil {
log.Fatal("Could not open database ", err)
}
createTable(records)
return records
}
}
func createDB() {
log.Println("Creating records.db ..")
file, err := os.Create("records.db")
if err != nil {
log.Fatal(err.Error())
}
file.Close()
log.Println("records.db created")
}
func createTable(records *sql.DB) {
createRecordsTableSQL := `CREATE TABLE IF NOT EXISTS record (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
sample_count INTEGER,
wav_data BLOB
);`
log.Println("Create records table ..")
statement, err := records.Prepare(createRecordsTableSQL)
if err != nil {
log.Fatal(err.Error())
}
statement.Exec()
log.Println("Records table created")
}
func getTracksAmount(db *sql.DB) int {
getTracksAmountQuery := "SELECT COUNT(id) FROM record"
getTracksAmountStatement, err := db.Prepare(getTracksAmountQuery)
if err != nil {
log.Fatal("ErrorSQLOpen", err)
}
getTracksAmountStatement.QueryRow().Scan(&tracksAmount)
return tracksAmount
}