private void UpdateFileRating(PlexRatingsData currentFile) { uint?fileRating = RatingsManager.FileRating(currentFile.file); int? plexFileRating = RatingsManager.PlexRatingFromFile(currentFile.file); int? plexDbRating = (int?)currentFile.rating; uint?newRating = Convert.ToUInt32(RatingsManager.FileRatingFromPlexRating(plexDbRating)); if (newRating == 0) { newRating = null; } string message = string.Format("Updating file rating for file \"{0}\", from {1} to {2}", currentFile.file, fileRating == null ? 0 : fileRating, newRating == null ? 0 : newRating); ShellFile so = ShellFile.FromFilePath(currentFile.file); #if DEBUG Debug.Print(message); #else so.Properties.System.Rating.Value = newRating; #endif MessageManager.Instance.MessageWrite(this, MessageItem.MessageLevel.Information, message); }
private void SyncRating(PlexRatingsData currentFile) { try { if (currentFile != null && File.Exists(currentFile.file)) { try { int?plexFileRating = RatingsManager.PlexRatingFromFile(currentFile.file); int?plexDbRating = (int?)currentFile.rating; if (plexFileRating != plexDbRating) { // NOTE: Plex wins if both the file and db have ratings that are different if (plexDbRating != null) { UpdateFileRating(currentFile); } else { UpdatePlexDbRating(currentFile); } } } catch (Exception ex) { MessageManager.Instance.ExceptionWrite(this, ex); } } } catch (Exception ex) { MessageManager.Instance.ExceptionWrite(this, ex); } }
private void UpdatePlexDbRating(PlexRatingsData currentFile) { int?plexFileRating = RatingsManager.PlexRatingFromFile(currentFile.file); int?plexDbRating = (int?)currentFile.rating; string sql = string.Empty; string message = string.Empty; // the rating(s) of a given file sql = string.Format( @"SELECT * FROM metadata_item_settings WHERE account_id = {0} AND guid = '{1}';", Settings.PlexAccountId, currentFile.guid); if (m_PlexDb.RecordsExists(sql)) { message = string.Format("Updating Plex rating for file \"{0}\" from {1} to {2}", currentFile.file, plexDbRating == null ? 0 : plexDbRating, plexFileRating == null ? 0 : plexFileRating); MessageManager.Instance.MessageWrite(this, MessageItem.MessageLevel.Information, message); bwProcess.ReportProgress(-2); // Update a rating entry sql = @" UPDATE metadata_item_settings SET rating = {0} WHERE account_id = {1} AND guid = '{2}'"; sql = string.Format(sql, plexFileRating, Settings.PlexAccountId, currentFile.guid); } else { message = string.Format("Creating Plex rating for file \"{0}\", rating {1}", currentFile.file, plexFileRating == null ? 0 : plexFileRating); MessageManager.Instance.MessageWrite(this, MessageItem.MessageLevel.Information, message); bwProcess.ReportProgress(-3); // Create a rating entry sql = @" INSERT INTO metadata_item_settings ([account_id], [guid], [rating], [view_offset], [view_count], [last_viewed_at], [created_at], [updated_at]) VALUES({0}, '{1}', {2}, NULL, 0, NULL, DATE('now'), DATE('now'));"; sql = string.Format(sql, Settings.PlexAccountId, currentFile.guid, plexFileRating); } #if DEBUG Debug.Print(message); #else m_PlexDb.ExecutePlexSql(sql); #endif }