diff --git a/apiGo/videoparser/ReIndexTVShows.go b/apiGo/videoparser/ReIndexTVShows.go index dee9ec0..7f5336c 100644 --- a/apiGo/videoparser/ReIndexTVShows.go +++ b/apiGo/videoparser/ReIndexTVShows.go @@ -1,7 +1,123 @@ package videoparser -import "openmediacenter/apiGo/api/types" +import ( + "fmt" + "openmediacenter/apiGo/api/types" + "openmediacenter/apiGo/database" + "regexp" + "strconv" + "strings" +) func startTVShowReindex(files []Show, sett types.SettingsType) { // have fun with db insertions here! + + allTVshows := getAllTVShows() + + for _, file := range files { + // insert new TVShow entry if not existing. + insertShowIfNotExisting(file, allTVshows) + + insertEpisodesIfNotExisting(file) + } +} + +func insertEpisodesIfNotExisting(show Show) { + query := fmt.Sprintf("SELECT tvshow_episodes.name, season, episode FROM tvshow_episodes JOIN tvshow t on t.id = tvshow_episodes.tvshow_id WHERE t.name='%s'", show.Name) + rows := database.Query(query) + + var dbepisodes []string + for rows.Next() { + var epname string + var season int + var episode int + err := rows.Scan(&epname, &season, &episode) + if err != nil { + fmt.Println(err.Error()) + } + + dbepisodes = append(dbepisodes, fmt.Sprintf("%s S%02dE%02d.mp4", epname, season, episode)) + } + + // get those episodes that are missing in db + diff := difference(show.files, dbepisodes) + + for _, s := range diff { + insertEpisode(s, show.Name) + } + + fmt.Println("diff is...") + fmt.Println(diff) +} + +func insertEpisode(path string, ShowName string) { + seasonRegex := regexp.MustCompile("S[0-9][0-9]") + episodeRegex := regexp.MustCompile("E[0-9][0-9]") + matchENDPattern := regexp.MustCompile(" S[0-9][0-9]E[0-9][0-9].+$") + + seasonStr := seasonRegex.FindString(path)[1:] + episodeStr := episodeRegex.FindString(path)[1:] + extString := matchENDPattern.FindString(path) + name := strings.TrimSuffix(path, extString) + + season, err := strconv.ParseInt(seasonStr, 10, 8) + episode, err := strconv.ParseInt(episodeStr, 10, 8) + if err != nil { + fmt.Println(err.Error()) + } + + query := fmt.Sprintf(` +INSERT INTO tvshow_episodes (name, season, poster, tvshow_id, episode) +VALUES ('%s', %d, '%s', (SELECT tvshow.id FROM tvshow WHERE tvshow.name='%s'), %d)`, name, season, "", ShowName, episode) + err = database.Edit(query) + if err != nil { + fmt.Println(err.Error()) + } +} + +// difference returns the elements in `a` that aren't in `b`. +func difference(a, b []string) []string { + mb := make(map[string]struct{}, len(b)) + for _, x := range b { + mb[x] = struct{}{} + } + var diff []string + for _, x := range a { + if _, found := mb[x]; !found { + diff = append(diff, x) + } + } + return diff +} + +func insertShowIfNotExisting(show Show, allShows *[]string) { + // if show already exists return + fmt.Println(*allShows) + for _, s := range *allShows { + if s == show.Name { + return + } + } + + // todo load tmdb pic + query := fmt.Sprintf("INSERT INTO tvshow (name, thumbnail) VALUES ('%s', '%s')", show.Name, "") + err := database.Edit(query) + if err != nil { + fmt.Println(err.Error()) + } +} + +func getAllTVShows() *[]string { + query := "SELECT name FROM tvshow" + rows := database.Query(query) + + var res []string + for rows.Next() { + var show string + rows.Scan(&show) + + res = append(res, show) + } + + return &res } diff --git a/apiGo/videoparser/WebSocketConnector.go b/apiGo/videoparser/WebSocketConnector.go index a1fe5ca..7aaac6f 100644 --- a/apiGo/videoparser/WebSocketConnector.go +++ b/apiGo/videoparser/WebSocketConnector.go @@ -29,10 +29,6 @@ func newChatSender() *ChatSender { } } -func (t *ChatSender) TestCall() { - fmt.Println("hello world") -} - func (t *ChatSender) ServeHTTP(w http.ResponseWriter, r *http.Request) { c, err := websocket.Accept(w, r, &websocket.AcceptOptions{ OriginPatterns: []string{"*"}, diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index bcd5dfd..0000000 Binary files a/public/favicon.ico and /dev/null differ diff --git a/public/index.html b/public/index.html index 92fbfdd..880a2f1 100644 --- a/public/index.html +++ b/public/index.html @@ -2,14 +2,14 @@ - + - +