1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package main
- import (
- "encoding/json"
- "fmt"
- "log"
- "time"
- "github.com/HouzuoGuo/tiedot/db"
- "github.com/fatih/color"
- )
- func dbInsertDownload(download *downloadItem) error {
- _, err := myDB.Use("Downloads").Insert(map[string]interface{}{
- "URL": download.URL,
- "Time": download.Time.String(),
- "Destination": download.Destination,
- "Filename": download.Filename,
- "ChannelID": download.ChannelID,
- "UserID": download.UserID,
- })
- return err
- }
- func dbFindDownloadByID(id int) *downloadItem {
- downloads := myDB.Use("Downloads")
- readBack, err := downloads.Read(id)
- if err != nil {
- log.Println(lg("Database", "Downloads", color.HiRedString, "Failed to read database:\t%s", err))
- }
- timeT, _ := time.Parse("2006-01-02 15:04:05.999999999 -0700 MST", readBack["Time"].(string))
- return &downloadItem{
- URL: readBack["URL"].(string),
- Time: timeT,
- Destination: readBack["Destination"].(string),
- Filename: readBack["Filename"].(string),
- ChannelID: readBack["ChannelID"].(string),
- UserID: readBack["UserID"].(string),
- }
- }
- func dbFindDownloadByURL(inputURL string) []*downloadItem {
- var query interface{}
- json.Unmarshal([]byte(fmt.Sprintf(`[{"eq": "%s", "in": ["URL"]}]`, inputURL)), &query)
- queryResult := make(map[int]struct{})
- db.EvalQuery(query, myDB.Use("Downloads"), &queryResult)
- downloadedImages := make([]*downloadItem, 0)
- for id := range queryResult {
- downloadedImages = append(downloadedImages, dbFindDownloadByID(id))
- }
- return downloadedImages
- }
- func dbDeleteByChannelID(channelID string) {
- var query interface{}
- json.Unmarshal([]byte(fmt.Sprintf(`[{"eq": "%s", "in": ["ChannelID"]}]`, channelID)), &query)
- queryResult := make(map[int]struct{})
- db.EvalQuery(query, myDB.Use("Downloads"), &queryResult)
- for id := range queryResult {
- myDB.Use("Downloads").Delete(id)
- }
- }
- //#region Statistics
- func dbDownloadCount() int {
- i := 0
- myDB.Use("Downloads").ForEachDoc(func(id int, docContent []byte) (willMoveOn bool) {
- i++
- return true
- })
- return i
- }
- func dbDownloadCountByChannel(channelID string) int {
- var query interface{}
- json.Unmarshal([]byte(fmt.Sprintf(`[{"eq": "%s", "in": ["ChannelID"]}]`, channelID)), &query)
- queryResult := make(map[int]struct{})
- db.EvalQuery(query, myDB.Use("Downloads"), &queryResult)
- downloadedImages := make([]*downloadItem, 0)
- for id := range queryResult {
- downloadedImages = append(downloadedImages, dbFindDownloadByID(id))
- }
- return len(downloadedImages)
- }
- //#endregion
|