diff options
| author | Adam Mathes <adam@adammathes.com> | 2026-02-14 08:58:38 -0800 |
|---|---|---|
| committer | Adam Mathes <adam@adammathes.com> | 2026-02-14 08:58:38 -0800 |
| commit | e3c379d069ffa9661561d25cdbf2f5894a2f8ee8 (patch) | |
| tree | 24d0e9f5610dd9c8f873c5b78e6bc1c88d32840a /internal/importer/importer.go | |
| parent | 4b06155fbde91a1bef6361ef36efb28789861928 (diff) | |
| download | neko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.tar.gz neko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.tar.bz2 neko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.zip | |
Refactor: project structure, implement dependency injection, and align v2 UI with v1
Diffstat (limited to 'internal/importer/importer.go')
| -rw-r--r-- | internal/importer/importer.go | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/internal/importer/importer.go b/internal/importer/importer.go new file mode 100644 index 0000000..73a2cd8 --- /dev/null +++ b/internal/importer/importer.go @@ -0,0 +1,89 @@ +package importer + +import ( + // "bufio" + "encoding/json" + //"fmt" + "io" + "log" + "os" + + "adammathes.com/neko/models/feed" + "adammathes.com/neko/models/item" +) + +type IItem struct { + Title string `json:"title"` + Url string `json:"url"` + Description string `json:"description"` + ReadState bool `json:"read"` + Starred bool `json:"starred"` + Date *IDate `json:"date"` + Feed *IFeed `json:"feed"` +} + +type IFeed struct { + Url string `json:"url"` + Title string `json:"title"` + WebUrl string `json:"web_url"` +} + +type IDate struct { + Date string `json:"$date"` +} + +func ImportJSON(filename string) error { + + f, err := os.Open(filename) + if err != nil { + return err + } + defer f.Close() + + dec := json.NewDecoder(f) + for { + var ii IItem + if err := dec.Decode(&ii); err == io.EOF { + break + } else if err != nil { + return err + } else { + err := InsertIItem(&ii) + if err != nil { + log.Println(err) + } + } + } + return nil +} + +func InsertIItem(ii *IItem) error { + var f feed.Feed + + if ii.Feed == nil { + return nil + } + err := f.ByUrl(ii.Feed.Url) + if err != nil { + f.Url = ii.Feed.Url + f.Title = ii.Feed.Title + err = f.Create() + if err != nil { + return err + } + } + + var i item.Item + i.FeedId = f.Id + i.Title = ii.Title + i.Url = ii.Url + i.Description = ii.Description + + if ii.Date != nil { + i.PublishDate = ii.Date.Date + } + + err = i.Create() + log.Printf("inserted %s\n", i.Url) + return err +} |
