diff options
Diffstat (limited to 'db/db.go')
-rw-r--r-- | db/db.go | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/db/db.go b/db/db.go new file mode 100644 index 0000000..2d6a4d5 --- /dev/null +++ b/db/db.go @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: ISC +// Copyright © 2021 siddharth <s@ricketyspace.net> + +package db + +import ( + "encoding/json" + "fmt" + "os" + "path" + + "ricketyspace.net/fern/file" +) + +var dbPath string + +type FernDB struct { + // Key: feed-id + // Value: feed-id's entries that were downloaded + downloaded map[string][]string +} + +func init() { + dbPath = "" // Reset. + + // Construct default dbPath + h, err := os.UserHomeDir() + if err != nil { + return + } + dbPath = path.Join(h, ".config", "fern", "db.json") + +} + +func Open() (*FernDB, error) { + if len(dbPath) == 0 { + return nil, fmt.Errorf("FernDB path not set") + } + + // Check if db exists. + _, err := os.Stat(dbPath) + if err != nil { + // db does not exist yet; create an empty one. + db := new(FernDB) + db.downloaded = make(map[string][]string) + return db, nil + } + + // Read db from disk. + f, err := os.Open(dbPath) + if err != nil { + return nil, err + } + bs, err := file.Read(f) + if err != nil { + return nil, err + } + + // Unmarshal db into an object. + db := new(FernDB) + err = json.Unmarshal(bs, &db.downloaded) + if err != nil { + return nil, err + } + return db, nil +} |