// This file is part of beagles.
//
// Copyright © 2020 Chris Palmer <chris@red-oxide.org>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package main
import (
"bytes"
"io/ioutil"
"os"
"path/filepath"
"github.com/BurntSushi/toml"
wlog "github.com/DataDrake/waterlog"
)
var (
// Version of the application
Version string
// ConfigDir is the path defined during build i.e. ~/.config/beagles
ConfigDir string
// ShareDir is the path defined during build i.e. ~/usr/local/share/beagles
// ShareDir string
// CacheDir is the path defined during build i.e. ~/.cache/beagles
CacheDir string
)
func main() {
path := filepath.Clean(filepath.Join(CacheDir, "beagles.db"))
db, err := ReadDB(path)
if err != nil {
wlog.Fatal(err.Error())
}
theme := readConfig()
i := initUI(db, theme)
for x, item := range db.Queue {
if x == 0 {
i.Content.setText(item.Item.Link, item.Item.Content)
}
i.List.add(item.Item)
}
if err := i.App.run(i.Pages, true); err != nil {
wlog.Fatal(err.Error())
}
}
func readConfig() themeType {
cltheme := &commandLineTheme{
BackgroundColor: "transparent",
ForegroundColor: "#d8dee9",
}
cnttheme := &contentTheme{
BackgroundColor: "transparent",
ForegroundColor: "#e5e9f0",
}
htheme := &helpTheme{
BackgroundColor: "transparent",
ForegroundColor: "#e5e9f0",
}
ltheme := &listTheme{
BackgroundColor: "transparent",
ForegroundColor: "#e5e9f0",
}
dtheme := themeType{
BackgroundColor: "#88c0d0",
ForegroundColor: "#2e3440",
ErrorColor: "#bf616a",
Separator: "#88c0d0",
CommandLine: cltheme,
Content: cnttheme,
List: ltheme,
Help: htheme,
}
path := filepath.Clean(filepath.Join(ConfigDir, "config.toml"))
if _, err := os.Stat(path); os.IsNotExist(err) {
buf := &bytes.Buffer{}
if err := toml.NewEncoder(buf).Encode(&dtheme); err != nil {
return dtheme
}
if err := ioutil.WriteFile(filepath.Clean(path), buf.Bytes(), 0600); err != nil {
return dtheme
}
return dtheme
}
cfg, err := ioutil.ReadFile(filepath.Clean(path))
if err != nil {
return dtheme
}
theme := themeType{}
if err := toml.Unmarshal(cfg, &theme); err != nil {
return dtheme
}
return theme
}