protected override bool GrabFileDetails() { try { selectedMovie = MyFilmsDetail.GetCurrentMovie(); _mediaDetail = new BasicMediaDetail(); _mediaDetail.Title = selectedMovie.Title; _mediaDetail.Year = selectedMovie.Year; _mediaDetail.ImdbID = selectedMovie.IMDBNumber; _mediaDetail.Thumb = selectedMovie.Picture; _mediaDetail.FanArt = selectedMovie.Fanart; _mediaDetail.Files = new List<FileInfo>(); string[] files = selectedMovie.File.Trim().Split(new Char[] { ';' }); foreach (string file in files) { _mediaDetail.Files.Add(new FileInfo(file)); } return true; } catch (Exception e) { logger.ErrorException(string.Format("Unexpected error when pulling data from MyFilms{0}", Environment.NewLine), e); return false; } }
public static bool GetCurrentMediaItem(out MediaItem currentMediaItem) { FileLog.Info("Getting selected movie information from My Films."); currentMediaItem = new MediaItem(); selectedMovie = MyFilmsDetail.GetCurrentMovie(); currentMediaItem.Title = selectedMovie.Title; currentMediaItem.Year = selectedMovie.Year; currentMediaItem.Poster = selectedMovie.Picture; currentMediaItem.Plot = GUIPropertyManager.GetProperty("#myfilms.db.description.value").Trim(); // Get local file information currentMediaItem.FullPath = selectedMovie.File; // Check if TMDb ID is available int tmdbid = 0; if (int.TryParse(selectedMovie.TMDBNumber, out tmdbid)) { if (tmdbid > 0) currentMediaItem.TMDb = tmdbid.ToString(); } // Next best ID to use string imdbid = selectedMovie.IMDBNumber; if (!string.IsNullOrEmpty(imdbid) && imdbid.Length == 9) currentMediaItem.IMDb = imdbid; return true; }
public static TraktRateMovie CreateRateData(MFMovie movie, String rating) { string username = TraktSettings.Username; string password = TraktSettings.Password; if (String.IsNullOrEmpty(username) || String.IsNullOrEmpty(password)) return null; TraktRateMovie rateData = new TraktRateMovie { Title = movie.Title, Year = movie.Year.ToString(), IMDBID = movie.IMDBNumber, TMDBID = null, UserName = username, Password = password, Rating = rating }; return rateData; }
/// <summary> /// Creates Scrobble data based on a MFMovie object /// </summary> /// <param name="movie">The movie to base the object on</param> /// <returns>The Trakt scrobble data to send</returns> public static TraktScrobbleMovie CreateScrobbleData(MFMovie movie) { double duration = g_Player.Duration; double progress = 0.0; // get current progress of player (in seconds) to work out percent complete if (duration > 0.0) progress = (g_Player.CurrentPosition / duration) * 100.0; var scrobbleData = new TraktScrobbleMovie { Movie = new TraktMovie { Ids = new TraktMovieId { Imdb = movie.IMDBNumber.ToNullIfEmpty(), Tmdb = movie.TMDBNumber.ToNullableInt32() }, Title = movie.Title, Year = movie.Year }, Progress = Math.Round(progress, 2), AppVersion = TraktSettings.Version, AppDate = TraktSettings.BuildDate }; return scrobbleData; }
private void OnToggleWatched(MFMovie movie, bool watched, int count) { TraktLogger.Info("Received togglewatched event from MyFilms"); if (TraktSettings.AccountStatus != ConnectionState.Connected) return; // don't do anything if movie is blocked if (TraktSettings.BlockedFilenames.Contains(movie.File) || TraktSettings.BlockedFolders.Any(f => movie.File.ToLowerInvariant().Contains(f.ToLowerInvariant()))) { TraktLogger.Info("Movie {0} is on the blocked list so we didn't update Trakt", movie.Title); return; } Thread toggleWatchedThread = new Thread((o) => { MFMovie tMovie = o as MFMovie; TraktResponse response = TraktAPI.TraktAPI.SyncMovieLibrary(CreateSyncData(tMovie), watched ? TraktSyncModes.seen : TraktSyncModes.unseen); TraktAPI.TraktAPI.LogTraktResponse(response); }) { IsBackground = true, Name = "My Films Toggle Watched" }; toggleWatchedThread.Start(movie); }
private void OnStoppedMovie(MFMovie movie) { if (TraktSettings.AccountStatus != ConnectionState.Connected) return; if (!TraktSettings.BlockedFilenames.Contains(movie.File) && !TraktSettings.BlockedFolders.Any(f => movie.File.ToLowerInvariant().Contains(f.ToLowerInvariant()))) { TraktLogger.Info("Stopped My Films movie playback: '{0}'", movie.Title); CurrentMovie = null; StopScrobble(); // send cancelled watching state Thread cancelWatching = new Thread(delegate() { TraktMovieScrobble scrobbleData = new TraktMovieScrobble { UserName = TraktSettings.Username, Password = TraktSettings.Password }; TraktResponse response = TraktAPI.TraktAPI.ScrobbleMovieState(scrobbleData, TraktScrobbleStates.cancelwatching); TraktAPI.TraktAPI.LogTraktResponse(response); }) { IsBackground = true, Name = "Cancel Watching Movie" }; cancelWatching.Start(); } }
private void OnStartedMovie(MFMovie movie) { if (TraktSettings.AccountStatus != ConnectionState.Connected) return; if (!TraktSettings.BlockedFilenames.Contains(movie.File) && !TraktSettings.BlockedFolders.Any(f => movie.File.ToLowerInvariant().Contains(f.ToLowerInvariant()))) { TraktLogger.Info("Starting My Films movie playback: '{0}'", movie.Title); CurrentMovie = movie; } }
private void OnRateItem(MFMovie movie, string value) { TraktLogger.Info("Recieved rating event from MyFilms"); if (TraktSettings.AccountStatus != ConnectionState.Connected) return; // don't do anything if movie is blocked if (TraktSettings.BlockedFilenames.Contains(movie.File) || TraktSettings.BlockedFolders.Any(f => movie.File.ToLowerInvariant().Contains(f.ToLowerInvariant()))) { TraktLogger.Info("Movie {0} is on the blocked list so we didn't update Trakt", movie.Title); return; } // My Films is a 100 point scale out of 10. Treat as decimal and then round off string rating = Math.Round(Convert.ToDecimal(value), MidpointRounding.AwayFromZero).ToString(); TraktRateResponse response = null; Thread rateThread = new Thread((o) => { MFMovie tMovie = o as MFMovie; response = TraktAPI.TraktAPI.RateMovie(CreateRateData(tMovie, rating)); TraktAPI.TraktAPI.LogTraktResponse(response); }) { IsBackground = true, Name = "My Films Rate" }; rateThread.Start(movie); }
/// <summary> /// Creates Sync Data based on a single IMDBMovie object /// </summary> /// <param name="Movie">The movie to base the object on</param> /// <returns>The Trakt Sync data to send</returns> public static TraktMovieSync CreateSyncData(MFMovie Movie) { string username = TraktSettings.Username; string password = TraktSettings.Password; if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) return null; List<TraktMovieSync.Movie> moviesList = new List<TraktMovieSync.Movie>(); moviesList.Add(new TraktMovieSync.Movie { IMDBID = Movie.IMDBNumber, Title = Movie.Title, Year = Movie.Year.ToString() }); TraktMovieSync syncData = new TraktMovieSync { UserName = username, Password = password, MovieList = moviesList }; return syncData; }
/// <summary> /// Shows the Rate Movie Dialog after playback has ended /// </summary> /// <param name="movie">The movie being rated</param> private void ShowRateDialog(MFMovie movie) { if (!TraktSettings.ShowRateDialogOnWatched) return; // not enabled if (movie.RatingUser > 0) return; // already rated TraktLogger.Debug("Showing rate dialog for movie. Title = '{0}', Year = '{1}', IMDb ID = '{2}', TMDb ID = '{3}'", movie.Title, movie.Year, movie.IMDBNumber ?? "<empty>", movie.TMDBNumber ?? "<empty>"); var rateThread = new Thread((objMovie) => { var movieToRate = objMovie as MFMovie; if (movieToRate == null) return; var rateObject = new TraktSyncMovieRated { Ids = new TraktMovieId { Imdb = movieToRate.IMDBNumber.ToNullIfEmpty(), Tmdb = movie.TMDBNumber.ToNullableInt32() }, Title = movieToRate.Title, Year = movieToRate.Year, RatedAt = DateTime.UtcNow.ToISO8601() }; // get the rating submitted to trakt.tv int rating = GUI.GUIUtils.ShowRateDialog<TraktSyncMovieRated>(rateObject); if (rating > 0) { TraktLogger.Debug("Rating {0} ({1}) as {2}/10", movieToRate.Title, movie.Year, rating.ToString()); movieToRate.RatingUser = (float)rating; movieToRate.Username = TraktSettings.Username; movieToRate.Commit(); // update skin properties if movie is still selected if (GUICommon.GetProperty("#myfilms.user.mastertitle.value").Equals(movieToRate.Title)) { GUICommon.SetProperty("#myfilms.user.rating.value", movieToRate.RatingUser.ToString()); } // add to cache TraktCache.AddMovieToRatings(rateObject, rating); } }) { Name = "Rate", IsBackground = true }; rateThread.Start(movie); }
private void OnRateItem(MFMovie movie, string value) { TraktLogger.Info("Recieved rating event from MyFilms"); if (TraktSettings.AccountStatus != ConnectionState.Connected) return; // don't do anything if movie is blocked if (TraktSettings.BlockedFilenames.Contains(movie.File) || TraktSettings.BlockedFolders.Any(f => movie.File.ToLowerInvariant().Contains(f.ToLowerInvariant()))) { TraktLogger.Info("Movie {0} is on the blocked list so we didn't update Trakt", movie.Title); return; } // Add setting for this later to control love/hate value double rating = Convert.ToDouble(value); TraktRateResponse response = null; Thread rateThread = new Thread((o) => { MFMovie tMovie = o as MFMovie; if (rating >= 7.0) response = TraktAPI.TraktAPI.RateMovie(CreateRateData(tMovie, TraktRateValue.love.ToString())); else response = TraktAPI.TraktAPI.RateMovie(CreateRateData(tMovie, TraktRateValue.hate.ToString())); TraktAPI.TraktAPI.LogTraktResponse(response); }) { IsBackground = true, Name = "My Films Rate" }; rateThread.Start(movie); }
private void OnToggleWatched(MFMovie movie, bool watched, int count) { TraktLogger.Info("Received togglewatched event from My Films. Title = '{0}', Year = '{1}', IMDb ID = '{2}', TMDb ID = '{3}'", movie.Title, movie.Year, movie.IMDBNumber ?? "<empty>", movie.TMDBNumber ?? "<empty>"); if (TraktSettings.AccountStatus != ConnectionState.Connected) return; // don't do anything if movie is blocked if (TraktSettings.BlockedFilenames.Contains(movie.File) || TraktSettings.BlockedFolders.Any(f => movie.File.ToLowerInvariant().Contains(f.ToLowerInvariant()))) { TraktLogger.Info("Movie {0} is on the blocked list so we didn't update Trakt", movie.Title); return; } var toggleWatchedThread = new Thread((o) => { var tMovie = o as MFMovie; if (!watched) { var traktMovie = new TraktMovie { Ids = new TraktMovieId { Imdb = tMovie.IMDBNumber, Tmdb = movie.TMDBNumber.ToNullableInt32() }, Title = tMovie.Title, Year = tMovie.Year }; // update local cache TraktCache.RemoveMovieFromWatchHistory(traktMovie); var response = TraktAPI.TraktAPI.RemoveMovieFromWatchedHistory(traktMovie); TraktLogger.LogTraktResponse(response); } else { // no longer need movie in recommendations or watchlist RemoveMovieFromRecommendations(tMovie); RemoveMovieFromWatchlist(tMovie); var traktMovie = new TraktSyncMovieWatched { Ids = new TraktMovieId { Imdb = tMovie.IMDBNumber, Tmdb = movie.TMDBNumber.ToNullableInt32() }, Title = tMovie.Title, Year = tMovie.Year, WatchedAt = DateTime.UtcNow.ToISO8601() }; var response = TraktAPI.TraktAPI.AddMovieToWatchedHistory(traktMovie); TraktLogger.LogTraktResponse(response); if (response != null && response.NotFound != null && response.NotFound.Movies.Count == 0) { // update local cache TraktCache.AddMovieToWatchHistory(traktMovie); } } }) { IsBackground = true, Name = "ToggleWatched" }; toggleWatchedThread.Start(movie); }
private void OnStoppedMovie(MFMovie movie) { CurrentMovie = null; if (TraktSettings.AccountStatus != ConnectionState.Connected) return; if (!TraktSettings.BlockedFilenames.Contains(movie.File) && !TraktSettings.BlockedFolders.Any(f => movie.File.ToLowerInvariant().Contains(f.ToLowerInvariant()))) { TraktLogger.Info("Stopped My Films movie playback. Title = '{0}', Year = '{1}', IMDb ID = '{2}', TMDb ID = '{3}'", movie.Title, movie.Year, movie.IMDBNumber ?? "<empty>", movie.TMDBNumber ?? "<empty>"); // stop scrobbling var scrobbleData = CreateScrobbleData(movie); var stopScrobble = new Thread(objScrobble => { var tScrobbleData = objScrobble as TraktScrobbleMovie; if (tScrobbleData == null) return; var response = TraktAPI.TraktAPI.PauseMovieScrobble(tScrobbleData); TraktLogger.LogTraktResponse(response); if (response != null && response.Movie != null && response.Action == "pause") { // add to cache TraktCache.AddMovieToPausedData(response.Movie, response.Progress); } }) { IsBackground = true, Name = "Scrobble" }; stopScrobble.Start(scrobbleData); } }
private void OnStartedMovie(MFMovie movie) { if (TraktSettings.AccountStatus != ConnectionState.Connected) return; if (!TraktSettings.BlockedFilenames.Contains(movie.File) && !TraktSettings.BlockedFolders.Any(f => movie.File.ToLowerInvariant().Contains(f.ToLowerInvariant()))) { TraktLogger.Info("Starting My Films movie playback. Title = '{0}', Year = '{1}', IMDb ID = '{2}', TMDb ID = '{3}'", movie.Title, movie.Year, movie.IMDBNumber ?? "<empty>", movie.TMDBNumber ?? "<empty>"); CurrentMovie = movie; } }
private void OnRateItem(MFMovie movie, string value) { TraktLogger.Info("Received rating event from MyFilms. Title = '{0}', Year = '{1}', IMDb ID = '{2}', TMDb ID = '{3}'", movie.Title, movie.Year, movie.IMDBNumber ?? "<empty>", movie.TMDBNumber ?? "<empty>"); if (TraktSettings.AccountStatus != ConnectionState.Connected) return; // don't do anything if movie is blocked if (TraktSettings.BlockedFilenames.Contains(movie.File) || TraktSettings.BlockedFolders.Any(f => movie.File.ToLowerInvariant().Contains(f.ToLowerInvariant()))) { TraktLogger.Info("Movie {0} is on the blocked list so we didn't update Trakt", movie.Title); return; } var rateThread = new Thread((o) => { var tMovie = o as MFMovie; // My Films is a 100 point scale out of 10. Treat as decimal and then round off int rating = Convert.ToInt32(Math.Round(Convert.ToDecimal(value), MidpointRounding.AwayFromZero)); var rateMovie = new TraktSyncMovieRated { Ids = new TraktMovieId { Imdb = tMovie.IMDBNumber, Tmdb = tMovie.TMDBNumber.ToNullableInt32() }, Title = tMovie.Title, Year = tMovie.Year, Rating = rating, RatedAt = DateTime.UtcNow.ToISO8601() }; var response = TraktAPI.TraktAPI.AddMovieToRatings(rateMovie); TraktLogger.LogTraktResponse(response); if (response != null && response.NotFound != null && response.NotFound.Movies.Count == 0) { // update local cache if (rating > 0) { TraktCache.AddMovieToRatings(rateMovie, rating); } } }) { IsBackground = true, Name = "Rate" }; rateThread.Start(movie); }
private bool MovieMatch(MFMovie mfMovie, TraktMovie traktMovie) { // IMDb comparison if (!string.IsNullOrEmpty(traktMovie.Ids.Imdb) && !string.IsNullOrEmpty(BasicHandler.GetProperImdbId(mfMovie.IMDBNumber))) { return string.Compare(BasicHandler.GetProperImdbId(mfMovie.IMDBNumber), traktMovie.Ids.Imdb, true) == 0; } // TMDb comparison if (!string.IsNullOrEmpty(mfMovie.TMDBNumber) && traktMovie.Ids.Tmdb.HasValue) { return string.Compare(mfMovie.TMDBNumber, traktMovie.Ids.Tmdb.ToString(), true) == 0; } // Title & Year comparison return string.Compare(mfMovie.Title, traktMovie.Title, true) == 0 && mfMovie.Year.ToString() == traktMovie.Year.ToString(); }
private void OnWatchedMovie(MFMovie movie) { if (TraktSettings.AccountStatus != ConnectionState.Connected) return; CurrentMovie = null; if (!TraktSettings.BlockedFilenames.Contains(movie.File) && !TraktSettings.BlockedFolders.Any(f => movie.File.ToLowerInvariant().Contains(f.ToLowerInvariant()))) { Thread scrobbleMovie = new Thread(delegate(object obj) { MFMovie watchedMovie = obj as MFMovie; if (watchedMovie == null) return; // show trakt rating dialog ShowRateDialog(watchedMovie); TraktLogger.Info("My Films movie considered watched: '{0}'", watchedMovie.Title); // get scrobble data to send to api TraktMovieScrobble scrobbleData = CreateScrobbleData(watchedMovie); if (scrobbleData == null) return; // set duration/progress in scrobble data scrobbleData.Duration = Convert.ToInt32(g_Player.Duration / 60).ToString(); scrobbleData.Progress = "100"; TraktResponse response = TraktAPI.TraktAPI.ScrobbleMovieState(scrobbleData, TraktScrobbleStates.scrobble); TraktAPI.TraktAPI.LogTraktResponse(response); }) { IsBackground = true, Name = "Scrobble Movie" }; scrobbleMovie.Start(movie); } }
private void OnWatchedMovie(MFMovie movie) { CurrentMovie = null; if (TraktSettings.AccountStatus != ConnectionState.Connected) return; if (!TraktSettings.BlockedFilenames.Contains(movie.File) && !TraktSettings.BlockedFolders.Any(f => movie.File.ToLowerInvariant().Contains(f.ToLowerInvariant()))) { TraktLogger.Info("My Films movie considered watched. Title = '{0}', Year = '{1}', IMDb ID = '{2}', TMDb ID = '{3}'", movie.Title, movie.Year, movie.IMDBNumber ?? "<empty>", movie.TMDBNumber ?? "<empty>"); // show trakt rating dialog ShowRateDialog(movie); // no longer need movie in recommendations or watchlist RemoveMovieFromRecommendations(movie); RemoveMovieFromWatchlist(movie); // stop scrobbling var scrobbleData = CreateScrobbleData(movie); var stopScrobble = new Thread(objScrobble => { var tScrobbleData = objScrobble as TraktScrobbleMovie; if (tScrobbleData == null) return; // check progress is enough to mark as watched online if (tScrobbleData.Progress < 80) tScrobbleData.Progress = 100; var response = TraktAPI.TraktAPI.StopMovieScrobble(tScrobbleData); TraktLogger.LogTraktResponse(response); if (response != null && response.Movie != null && response.Action == "scrobble") { // add to cache TraktCache.AddMovieToWatchHistory(response.Movie); } }) { IsBackground = true, Name = "Scrobble" }; stopScrobble.Start(scrobbleData); } }
/// <summary> /// Shows the Rate Movie Dialog after playback has ended /// </summary> /// <param name="movie">The movie being rated</param> private void ShowRateDialog(MFMovie movie) { if (!TraktSettings.ShowRateDialogOnWatched) return; // not enabled if (movie.Rating > 0) return; // already rated TraktLogger.Debug("Showing rate dialog for '{0}'", movie.Title); new Thread((o) => { MFMovie movieToRate = o as MFMovie; if (movieToRate == null) return; TraktRateMovie rateObject = new TraktRateMovie { IMDBID = movieToRate.IMDBNumber, TMDBID = movieToRate.TMDBNumber, Title = movieToRate.Title, Year = movieToRate.Year.ToString(), UserName = TraktSettings.Username, Password = TraktSettings.Password }; // get the rating submitted to trakt int rating = int.Parse(GUIUtils.ShowRateDialog<TraktRateMovie>(rateObject)); if (rating > 0) { TraktLogger.Debug("Rating {0} as {1}/10", movieToRate.Title, rating.ToString()); movieToRate.Rating = (float)rating; movieToRate.Username = TraktSettings.Username; movieToRate.Commit(); } }) { Name = "Rate", IsBackground = true }.Start(movie); }
/// <summary> /// Creates Scrobble data based on a IMDBMovie object /// </summary> /// <param name="movie">The movie to base the object on</param> /// <returns>The Trakt scrobble data to send</returns> public static TraktMovieScrobble CreateScrobbleData(MFMovie movie) { string username = TraktSettings.Username; string password = TraktSettings.Password; if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) return null; TraktMovieScrobble scrobbleData = new TraktMovieScrobble { Title = movie.Title, Year = movie.Year.ToString(), IMDBID = movie.IMDBNumber, PluginVersion = TraktSettings.Version, MediaCenter = "Mediaportal", MediaCenterVersion = Assembly.GetEntryAssembly().GetName().Version.ToString(), MediaCenterBuildDate = String.Empty, UserName = username, Password = password }; return scrobbleData; }
private MFMovie GetCurrentMovie() { var movie = new MFMovie { ID = this.ID, Title = this.Title, TranslatedTitle = this.TranslatedTitle, FormattedTitle = this.FormattedTitle, GroupName = this.GroupName, CategoryTrakt = this.CategoryTrakt, Edition = this.Edition, IMDBNumber = this.IMDBNumber, TMDBNumber = this.TMDBNumber, Year = this.Year, Category = this.Category, Length = this.Length, Rating = this.Rating, RatingUser = this.RatingUser, Watched = this.Watched, WatchedCount = this.WatchedCount, DateTime = this.DateTime, DateAdded = this.DateAdded, File = this.File, Trailer = this.Trailer, Path = this.Path, Picture = this.Picture, Fanart = this.Fanart, Config = this.Config, Username = this.Username, ReadOnly = this.ReadOnly }; return movie; }
/// <summary> /// Removes movie from Watchlist /// </summary> private void RemoveMovieFromWatchlist(MFMovie movie) { if (movie.CategoryTrakt == null) return; if (movie.CategoryTrakt.Contains(Translation.Recommendations)) { TraktLogger.Info("Removing movie from trakt watchlist. Title = '{0}', Year = '{1}', IMDb ID = '{2}', TMDb ID = '{3}'", movie.Title, movie.Year, movie.IMDBNumber ?? "<empty>", movie.TMDBNumber ?? "<empty>"); movie.CategoryTrakt.Remove(Translation.WatchList); movie.Username = TraktSettings.Username; movie.Commit(); } }