package tmdb import ( "context" "fmt" "math/rand/v2" "time" "codeberg.org/danjones000/my-log/files" "codeberg.org/danjones000/my-log/models" sdk "github.com/cyruzin/golang-tmdb" ) func Drop(ctx context.Context, url string, now time.Time) (models.Log, error) { var log models.Log select { case <-ctx.Done(): return log, context.Cause(ctx) default: } inf, err := Parse(url) if err != nil { return log, err } var entry models.Entry if inf.Type == Movie { det, err := FetchMovieDetails(inf) if err != nil { return log, err } entry, err = GetLogEntryForMovie(det) if err != nil { return log, err } } else if inf.Type == Series { det, err := FetchEpisodeDetails(inf) if err != nil { return log, err } entry, err = GetLogEntryForEpisode(det) if err != nil { return log, err } } else { return log, fmt.Errorf("unknown type: %s", inf.Type) } log.Name = "watched" log.Entries = []models.Entry{entry} files.Append(log) return log, nil } func GetLogEntryForEpisode(det TVDetails) (ent models.Entry, err error) { ent.Title = fmt.Sprintf("%s - %s %dx%02d", det.Episode.Name, det.Series.Name, det.Episode.SeasonNumber, det.Episode.EpisodeNumber) ent.Date = time.Now().Local() fields := &models.Metas{} fields.AppendTo("tmdb", det.Series.ID) fields.AppendTo("show", det.Series.Name) fields.AppendTo("episode", det.Episode.Name) fields.AppendTo("air_date", det.Episode.AirDate) fields.AppendTo("id", fmt.Sprintf("tag:themoviedborg,%s:Episode/%d/season/%d/episode/%d/%d", det.Episode.AirDate, det.Series.ID, det.Episode.SeasonNumber, det.Episode.EpisodeNumber, rand.Int())) fields.AppendTo("url", fmt.Sprintf("https://themoviedb.org/tv/%d/season/%d/episode/%d", det.Series.ID, det.Episode.SeasonNumber, det.Episode.EpisodeNumber)) fields.AppendTo("episode_num", det.Episode.EpisodeNumber) fields.AppendTo("season_num", det.Episode.SeasonNumber) fields.AppendTo("via", "drop-tmdb") if det.Episode.Overview != "" { fields.AppendTo("note", det.Episode.Overview) } ent.Fields = *fields return } func GetLogEntryForMovie(det *sdk.MovieDetails) (ent models.Entry, err error) { ent.Title = fmt.Sprintf("%s (%s)", det.Title, det.ReleaseDate) ent.Date = time.Now().Local() fields := &models.Metas{} fields.AppendTo("tmdb", det.ID) fields.AppendTo("id", fmt.Sprintf("tag:themoviedborg,%s:Movie/%d/%d", det.ReleaseDate, det.ID, rand.Int())) fields.AppendTo("url", fmt.Sprintf("https://themoviedb.org/movie/%d", det.ID)) // url https://www.themoviedb.org/movie/776503 fields.AppendTo("release_date", det.ReleaseDate) cts := det.OriginCountry if len(cts) == 1 { fields.AppendTo("country", cts[0]) } else if len(cts) > 1 { fields.AppendTo("country", cts) } gens := make([]string, len(det.Genres)) for idx, g := range det.Genres { gens[idx] = g.Name } if len(gens) == 1 { fields.AppendTo("genre", gens[0]) } else if len(gens) > 1 { fields.AppendTo("genre", gens) } // fields.AppendTo("mpaa") if det.Overview != "" { fields.AppendTo("note", det.Overview) } ent.Fields = *fields return }