Skip to content

Commit

Permalink
using interface{} for almost every function
Browse files Browse the repository at this point in the history
  • Loading branch information
XiovV committed Nov 17, 2019
1 parent 617e385 commit 87b69c4
Show file tree
Hide file tree
Showing 14 changed files with 619 additions and 605 deletions.
165 changes: 1 addition & 164 deletions channel_database_handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@ package main
import (
"encoding/json"
"fmt"
log "github.com/sirupsen/logrus"
"io/ioutil"
"os"
"strconv"
"time"

log "github.com/sirupsen/logrus"
)

func openJSONDatabase(dbName string) ([]byte, error) {
Expand All @@ -29,85 +27,6 @@ func openJSONDatabase(dbName string) ([]byte, error) {
return byteValue, nil
}

func (c Channel) UpdateDownloadHistory(videoID string) error {
log.Info("updating download history")

byteValue, err := openJSONDatabase(CONFIG_ROOT + "channels.json")
if err != nil {
return fmt.Errorf("UpdateDownloadHistory: %s", err)
}

var db []Channel

err = json.Unmarshal(byteValue, &db)
if err != nil {
return fmt.Errorf("UpdateDownloadHistory: %s", err)
}

for i, channel := range db {
if channel.ChannelURL == c.ChannelURL {
db[i].DownloadHistory = append(c.DownloadHistory, videoID)
log.Info(db)
break
}
}

return writeDb(db, CONFIG_ROOT+"channels.json")
}

func (c Channel) UpdateLastChecked() error {
log.Info("updating last checked date and time for: ", c.Name)

byteValue, err := openJSONDatabase(CONFIG_ROOT + "channels.json")
if err != nil {
return fmt.Errorf("UpdateLastChecked: %s", err)
}

var db []Channel

err = json.Unmarshal(byteValue, &db)
if err != nil {
return fmt.Errorf("UpdateLastChecked: %s", err)
}

for i, item := range db {
if item.ChannelURL == c.ChannelURL {
dt := time.Now()
db[i].LastChecked = dt.Format("01-02-2006 15:04:05")
log.Info("last checked date and time updated successfully")
break
}
}

return writeDb(db, CONFIG_ROOT+"channels.json")
}

func UpdateCheckingInterval(interval string) (Response, error) {
log.Info("updating checking interval")

byteValue, err := openJSONDatabase(CONFIG_ROOT + "channels.json")
if err != nil {
return Response{Type: "Error", Key: "ERROR_OPENING_DATABASE", Message: "There was an error opening channels.json: " + err.Error()}, fmt.Errorf("UpdateCheckingInterval: %s", err)
}

var db []Channel

err = json.Unmarshal(byteValue, &db)
if err != nil {
return Response{Type: "Error", Key: "ERROR_UNMRASHALLING_JSON", Message: "There was an error unmarshalling json: " + err.Error()}, fmt.Errorf("UpdateCheckingInterval: %s", err)
}

if len(db) > 0 {
db[0].CheckingInterval = interval
err = writeDb(db, CONFIG_ROOT+"channels.json")
if err != nil {
return Response{Type: "Error", Key: "ERROR_WRITING_TO_DATABASE", Message: "There was an error writing to channels.json: " + err.Error()}, fmt.Errorf("UpdateCheckingInterval: %s", err)
}
return Response{Type: "Success", Key: "UPDATE_CHECKING_INTERVAL_SUCCESS", Message: "Successfully updated the checking interval"}, nil
}
return Response{Type: "Error", Key: "DATABASE_EMPTY", Message: "There has to be at least one channel in the database before updating the checking interval."}, nil
}

func GetCheckingInterval() (int, error) {
log.Info("getting checking interval")

Expand All @@ -134,32 +53,6 @@ func GetCheckingInterval() (int, error) {
return 0, nil
}

func (c Channel) UpdateLatestDownloaded(videoID string) error {
log.Info("updating latest downloaded video id")

byteValue, err := openJSONDatabase(CONFIG_ROOT + "channels.json")
if err != nil {
return fmt.Errorf("UpdateLatestDownloaded: %s", err)
}

var db []Channel

err = json.Unmarshal(byteValue, &db)
if err != nil {
return fmt.Errorf("UpdateLatestDownloaded: %s", err)
}

for i, item := range db {
if item.ChannelURL == c.ChannelURL {
db[i].LatestDownloaded = videoID
log.Info("latest downloaded video id updated successfully")
break
}
}

return writeDb(db, CONFIG_ROOT+"channels.json")
}

func (c Channel) GetFromDatabase() (Channel, error) {
byteValue, err := openJSONDatabase(CONFIG_ROOT + "channels.json")
if err != nil {
Expand All @@ -177,25 +70,6 @@ func (c Channel) GetFromDatabase() (Channel, error) {
return Channel{}, fmt.Errorf("Couldn't find channel in the database: %s", c.ChannelURL)
}

func (c Channel) AddToDatabase() error {
byteValue, err := openJSONDatabase(CONFIG_ROOT + "channels.json")
if err != nil {
return fmt.Errorf("AddToDatabase: %s", err)
}

var db []Channel

json.Unmarshal(byteValue, &db)

log.Info("adding channel to DB")
db = append(db, c)
err = writeDb(db, CONFIG_ROOT+"channels.json")
if err != nil {
return fmt.Errorf("AddToDatabase: %s", err)
}
return nil
}

func writeDb(db []Channel, dbName string) error {
result, err := json.Marshal(db)
if err != nil {
Expand All @@ -216,41 +90,4 @@ func writeDb(db []Channel, dbName string) error {
return nil
}

func (c Channel) Delete() error {
log.Info("Removing channel from database")
byteValue, err := openJSONDatabase(CONFIG_ROOT + "channels.json")
if err != nil {
return fmt.Errorf("Delete: %s", err)
}
var db []Channel

json.Unmarshal(byteValue, &db)

for i, item := range db {
if item.ChannelURL == c.ChannelURL {
db = RemoveAtIndexChannel(db, i)
log.Info("successfully removed channel from channels.json")
}
}

writeDb(db, CONFIG_ROOT+"channels.json")
return nil
}

func (c Channel) DoesExist() (bool, error) {
byteValue, err := openJSONDatabase(CONFIG_ROOT + "channels.json")
if err != nil {
return false, fmt.Errorf("DoesExist: %s", err)
}
var db []Channel

json.Unmarshal(byteValue, &db)

for _, channel := range db {
if channel.ChannelURL == c.ChannelURL {
return true, nil
}
}

return false, nil
}
34 changes: 20 additions & 14 deletions channel_handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ func HandleAddChannel(w http.ResponseWriter, r *http.Request) {

channel := Channel{ChannelURL: channelData.ChannelURL}

doesChannelExist, err := channel.DoesExist()
log.Info("CHECKING IF CHANNEL ALREADY EXISTS")
doesChannelExist, err := DoesExist(channel)
if err != nil {
log.Info("error doesChannelExist: ", err)
ReturnResponse(w, Response{Type: "Error", Key: "DOES_EXIST_ERROR", Message: "There was an error while trying to check if the channel already exists" + err.Error()})
Expand All @@ -47,32 +48,37 @@ func HandleAddChannel(w http.ResponseWriter, r *http.Request) {
log.Info("this channel already exists")
ReturnResponse(w, Response{Type: "Success", Key: "CHANNEL_ALREADY_EXISTS", Message: "This channel already exists"})
} else {
channelMetadata, err := channel.GetMetadata()
log.Info("channel doesn't exist")
channelMetadata, err := GetMetadata(channel)
if err != nil {
ReturnResponse(w, Response{Type: "Error", Key: "ERROR_GETTING_METADATA", Message: "There was an error getting channel metadata: " + err.Error()})
}

if channelData.DownloadMode == "Audio Only" {
channel = Channel{ChannelURL: channelData.ChannelURL, DownloadMode: channelData.DownloadMode, Name: channelMetadata.Uploader, PreferredExtensionForAudio: channelData.FileExtension, DownloadHistory: []string{}, LastChecked: time.Now().Format("01-02-2006 15:04:05"), CheckingInterval: ""}
} else if channelData.DownloadMode == "Video And Audio" {
channel = Channel{ChannelURL: channelData.ChannelURL, DownloadMode: channelData.DownloadMode, Name: channelMetadata.Uploader, PreferredExtensionForVideo: channelData.FileExtension, DownloadHistory: []string{}, LastChecked: time.Now().Format("01-02-2006 15:04:05"), CheckingInterval: ""}
switch channelMetadata := channelMetadata.(type) {
case ChannelMetadata:
if channelData.DownloadMode == "Audio Only" {
channel = Channel{ChannelURL: channelData.ChannelURL, DownloadMode: channelData.DownloadMode, Name: channelMetadata.Uploader, PreferredExtensionForAudio: channelData.FileExtension, DownloadHistory: []string{}, LastChecked: time.Now().Format("01-02-2006 15:04:05"), CheckingInterval: ""}
} else if channelData.DownloadMode == "Video And Audio" {
channel = Channel{ChannelURL: channelData.ChannelURL, DownloadMode: channelData.DownloadMode, Name: channelMetadata.Uploader, PreferredExtensionForVideo: channelData.FileExtension, DownloadHistory: []string{}, LastChecked: time.Now().Format("01-02-2006 15:04:05"), CheckingInterval: ""}
}
}
err = channel.AddToDatabase()

err = AddToDatabase(channel)
if err != nil {
log.Error(err)
ReturnResponse(w, Response{Type: "Error", Key: "ERROR_ADDING_CHANNEL", Message: "There was an error adding the channel to the database" + err.Error()})
}
if channelData.DownloadEntireChannel == true {
err := channel.DownloadEntire()
if err != nil {
ReturnResponse(w, Response{Type: "Error", Key: "ERROR_DOWNLOADING_ENTIRE_CHANNEL", Message: "There was an error downloading the entire channel" + err.Error()})
}
//err := channel.DownloadEntire()
//if err != nil {
// ReturnResponse(w, Response{Type: "Error", Key: "ERROR_DOWNLOADING_ENTIRE_CHANNEL", Message: "There was an error downloading the entire channel" + err.Error()})
//}
} else {
if err != nil {
log.Error(err)
ReturnResponse(w, Response{Type: "Error", Key: "ERROR_ADDING_CHANNEL", Message: "There was an error adding the channel to the database" + err.Error()})
}
err = channel.Download(channelData.DownloadMode, channelData.FileExtension, channelData.DownloadQuality)

err = Download(channel, channelData.DownloadQuality, channelData.FileExtension)
if err != nil {
log.Error(err)
ReturnResponse(w, Response{Type: "Error", Key: "ERROR_DOWNLOADING", Message: "There was an error while downloading: " + err.Error()})
Expand Down Expand Up @@ -136,7 +142,7 @@ func HandleDeleteChannel(w http.ResponseWriter, r *http.Request) {
channelURL = strings.Replace(channelURL, "delChannel", "", -1)
channel := Channel{ChannelURL: channelURL}

channel.Delete()
Delete(channel)

ReturnResponse(w, Response{Type: "Success", Key: "DELETE_CHANNEL_SUCCESS", Message: "Channel removed"})
}
Expand Down
29 changes: 28 additions & 1 deletion config/channels.json
Original file line number Diff line number Diff line change
@@ -1 +1,28 @@
[]
[
{
"ChannelURL": "https://www.youtube.com/user/HungOverGargoyle",
"LatestDownloaded": "eyp-YuzhTN4",
"DownloadMode": "Audio Only",
"Name": "Electronic Gems",
"PreferredExtensionForAudio": "m4a",
"PreferredExtensionForVideo": "",
"DownloadHistory": [
"eyp-YuzhTN4"
],
"LastChecked": "11-17-2019 21:47:33",
"CheckingInterval": ""
},
{
"ChannelURL": "https://www.youtube.com/user/NewRetroWave",
"LatestDownloaded": "5cgHw_Fm9bM",
"DownloadMode": "Audio Only",
"Name": "NewRetroWave",
"PreferredExtensionForAudio": "m4a",
"PreferredExtensionForVideo": "",
"DownloadHistory": [
"5cgHw_Fm9bM"
],
"LastChecked": "11-17-2019 21:47:41",
"CheckingInterval": ""
}
]
16 changes: 15 additions & 1 deletion config/playlists.json
Original file line number Diff line number Diff line change
@@ -1 +1,15 @@
[]
[
{
"PlaylistURL": "https://www.youtube.com/watch?v=rDBbaGCCIhk\u0026list=PLyIFQr1wryPKEzgoT30OgiY7oNzQP5wK1",
"LatestDownloaded": "rDBbaGCCIhk",
"DownloadMode": "Audio Only",
"Name": "💵 NewRetroWave Millions List 💵",
"PreferredExtensionForAudio": "m4a",
"PreferredExtensionForVideo": "",
"DownloadHistory": [
"rDBbaGCCIhk"
],
"LastChecked": "11-17-2019 21:37:33",
"CheckingInterval": ""
}
]
Loading

0 comments on commit 87b69c4

Please sign in to comment.