-
Notifications
You must be signed in to change notification settings - Fork 2
/
share.go
235 lines (216 loc) · 7.54 KB
/
share.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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
// share elements
package share
import (
"database/sql"
"fmt"
"log"
"os"
"path/filepath"
"strconv"
"strings"
"time"
"github.com/eliranwong/gobible/internal/check"
"github.com/eliranwong/gobible/internal/regex"
"github.com/eliranwong/gobible/internal/shortcuts"
sqlite "github.com/mattn/go-sqlite3"
"github.com/spf13/viper"
)
var Data string = "gobible_data"
var FyneTheme string = "dark"
var Bibles []string
var SelectedBibles []string = []string{"KJV", "NET"}
var Bible string = "NET"
var BookName string = "John"
var BookAbb string = "John"
var Reference string = "John 3:16"
var Book int = 43
var Chapter int = 3
var Verse int = 16
var Mode string = ""
var DividerStr string = "--------------------"
var SearchMethod = "and"
var SearchCaseSensitive = false
var Ch1 chan [][]string = make(chan [][]string)
var Ch2 chan [][]string = make(chan [][]string)
var Ch3 chan [][]string = make(chan [][]string)
var Ch4 chan [][]string = make(chan [][]string)
var Ch5 chan [][]string = make(chan [][]string)
var Ch6 chan [][]string = make(chan [][]string)
var Ch7 chan [][]string = make(chan [][]string)
var Ch8 chan [][]string = make(chan [][]string)
var Ch9 chan [][]string = make(chan [][]string)
var Ch10 chan [][]string = make(chan [][]string)
var Ch11 chan [][]string = make(chan [][]string)
var Ch12 chan [][]string = make(chan [][]string)
var Ch13 chan [][]string = make(chan [][]string)
var Ch14 chan [][]string = make(chan [][]string)
var Ch15 chan [][]string = make(chan [][]string)
var Ch16 chan [][]string = make(chan [][]string)
var Ch17 chan [][]string = make(chan [][]string)
var Ch18 chan [][]string = make(chan [][]string)
var Ch19 chan [][]string = make(chan [][]string)
var Ch20 chan [][]string = make(chan [][]string)
var Ch21 chan [][]string = make(chan [][]string)
var Ch22 chan [][]string = make(chan [][]string)
var Ch23 chan [][]string = make(chan [][]string)
var Ch24 chan [][]string = make(chan [][]string)
var Ch25 chan [][]string = make(chan [][]string)
var Ch26 chan [][]string = make(chan [][]string)
var Ch27 chan [][]string = make(chan [][]string)
var Ch28 chan [][]string = make(chan [][]string)
var Ch29 chan [][]string = make(chan [][]string)
var Ch30 chan [][]string = make(chan [][]string)
var Ch31 chan [][]string = make(chan [][]string)
var Ch32 chan [][]string = make(chan [][]string)
var Ch33 chan [][]string = make(chan [][]string)
var Ch34 chan [][]string = make(chan [][]string)
var Ch35 chan [][]string = make(chan [][]string)
var Ch36 chan [][]string = make(chan [][]string)
var Ch37 chan [][]string = make(chan [][]string)
var Ch38 chan [][]string = make(chan [][]string)
var Ch39 chan [][]string = make(chan [][]string)
var Ch40 chan [][]string = make(chan [][]string)
var Ch41 chan [][]string = make(chan [][]string)
var Ch42 chan [][]string = make(chan [][]string)
var Ch43 chan [][]string = make(chan [][]string)
var Ch44 chan [][]string = make(chan [][]string)
var Ch45 chan [][]string = make(chan [][]string)
var Ch46 chan [][]string = make(chan [][]string)
var Ch47 chan [][]string = make(chan [][]string)
var Ch48 chan [][]string = make(chan [][]string)
var Ch49 chan [][]string = make(chan [][]string)
var Ch50 chan [][]string = make(chan [][]string)
var Ch51 chan [][]string = make(chan [][]string)
var Ch52 chan [][]string = make(chan [][]string)
var Ch53 chan [][]string = make(chan [][]string)
var Ch54 chan [][]string = make(chan [][]string)
var Ch55 chan [][]string = make(chan [][]string)
var Ch56 chan [][]string = make(chan [][]string)
var Ch57 chan [][]string = make(chan [][]string)
var Ch58 chan [][]string = make(chan [][]string)
var Ch59 chan [][]string = make(chan [][]string)
var Ch60 chan [][]string = make(chan [][]string)
var Ch61 chan [][]string = make(chan [][]string)
var Ch62 chan [][]string = make(chan [][]string)
var Ch63 chan [][]string = make(chan [][]string)
var Ch64 chan [][]string = make(chan [][]string)
var Ch65 chan [][]string = make(chan [][]string)
var Ch66 chan [][]string = make(chan [][]string)
var Ch67 chan [][]string = make(chan [][]string)
func Divider() {
fmt.Println(DividerStr)
}
func Check() {
fmt.Println(FyneTheme, Bible, BookName, BookAbb, Reference, Book, Chapter, Verse)
}
func SetupData() {
// default data directory; relative to executable file
if !(check.FileExists(filepath.Join(Data, "bibles", "NET.bible"))) {
wd, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
log.Fatal(err)
}
// mac binary ends with '/GoBible.app/Contents/MacOS'
wd = strings.Replace(wd, "/GoBible.app/Contents/MacOS", "", -1)
Data = filepath.Join(wd, "gobible_data")
}
// alternate path: use gobible data installed in home directory
alternateDataPath := filepath.Join(os.Getenv("HOME"), "gobible", "gobible_data")
if !(check.FileExists(Data)) && (check.FileExists(alternateDataPath)) {
Data = alternateDataPath
}
bibles, _ := shortcuts.WalkMatch(filepath.Join(Data, filepath.FromSlash("bibles")), "*.bible", true)
bibles = RemoveEmptyString(bibles)
Bibles = bibles
}
func RemoveEmptyString(s []string) []string {
var r []string
for _, str := range s {
if str != "" {
r = append(r, str)
}
}
return r
}
func StringSliceToIntSlice(stringSlice []string) []int {
intSlice := []int{}
for _, v := range stringSlice {
num, _ := strconv.Atoi(v)
intSlice = append(intSlice, num)
}
return intSlice
}
func IntSliceToStringSlice(intSlice []int) []string {
stringSlice := []string{}
for _, v := range intSlice {
stringSlice = append(stringSlice, strconv.Itoa(v))
}
return stringSlice
}
func TimeTrack(start time.Time, name string) {
elapsed := time.Since(start)
fmt.Printf("%s took %s", name, elapsed)
}
func RegisterSql() {
// supports query like, FROM VERSES WHERE regexp("%v", SCRIPTURE)
sql.Register("sqlite3_custom", &sqlite.SQLiteDriver{
ConnectHook: func(conn *sqlite.SQLiteConn) error {
if err := conn.RegisterFunc("regexpSelect", regex.RegexpSelect, true); err != nil {
return err
}
if err := conn.RegisterFunc("regexp", regex.Regexp, true); err != nil {
return err
}
return nil
},
})
}
// create empty file if it does not exist
func TouchFile(name string) error {
file, err := os.OpenFile(name, os.O_RDONLY|os.O_CREATE, 0644)
if err != nil {
return err
}
return file.Close()
}
// get config
func GetConfig() {
TouchFile(filepath.Join(Data, "config.json"))
viper.AddConfigPath(Data)
viper.SetConfigName("config")
viper.SetConfigType("json")
// ignore reading error in case the file is an empty or corrupted one
viper.ReadInConfig()
viper.SetDefault("bible.selectedBibles", SelectedBibles)
viper.SetDefault("bible.bible", Bible)
viper.SetDefault("bible.bookName", BookName)
viper.SetDefault("bible.bookAbb", BookAbb)
viper.SetDefault("bible.reference", Reference)
viper.SetDefault("bible.book", Book)
viper.SetDefault("bible.chapter", Chapter)
viper.SetDefault("bible.verse", Verse)
SelectedBibles = viper.GetStringSlice("bible.selectedBibles")
Bible = viper.GetString("bible.bible")
BookName = viper.GetString("bible.bookName")
BookAbb = viper.GetString("bible.bookAbb")
Reference = viper.GetString("bible.reference")
Book = viper.GetInt("bible.book")
Chapter = viper.GetInt("bible.chapter")
Verse = viper.GetInt("bible.verse")
}
// save config
func SetConfig() {
viper.Set("bible.selectedBibles", SelectedBibles)
viper.Set("bible.bible", Bible)
viper.Set("bible.bookName", BookName)
viper.Set("bible.bookAbb", BookAbb)
viper.Set("bible.reference", Reference)
viper.Set("bible.book", Book)
viper.Set("bible.chapter", Chapter)
viper.Set("bible.verse", Verse)
//fmt.Println(viper.ConfigFileUsed())
err := viper.WriteConfig()
if err != nil {
fmt.Printf("Errors: %v\n", err)
}
}