internal static void showRatingsDialog(DBTable item, bool auto) { if (item == null) return; MPTVSeriesLog.Write("Asking to rate", MPTVSeriesLog.LogLevel.Debug); GUIListItem pItem = null; Listlevel level = item is DBEpisode ? Listlevel.Episode : Listlevel.Series; string value = "0"; string dlgHeading = (level == Listlevel.Episode ? Translation.RateEpisode : Translation.RateSeries); if (System.IO.File.Exists(GUIGraphicsContext.Skin + @"\TVSeries.RatingDialog.xml")) { GUIUserRating ratingDlg = (GUIUserRating)GUIWindowManager.GetWindow(GUIUserRating.ID); ratingDlg.Reset(); ratingDlg.SetHeading((level == Listlevel.Episode ? Translation.RateEpisode : Translation.RateSeries)); if (level == Listlevel.Series) { ratingDlg.SetLine(1, string.Format(Translation.RateDialogLabel, item.ToString())); } else { ratingDlg.SetLine(1, string.Format(Translation.RateDialogLabel, Translation.Episode)); ratingDlg.SetLine(2, item.ToString()); } if (DBOption.GetOptions(DBOption.cRatingDisplayStars) == 10) { ratingDlg.DisplayStars = GUIUserRating.StarDisplay.TEN_STARS; ratingDlg.Rating = DBOption.GetOptions(DBOption.cDefaultRating); } else { ratingDlg.DisplayStars = GUIUserRating.StarDisplay.FIVE_STARS; ratingDlg.Rating = (int)(DBOption.GetOptions(DBOption.cDefaultRating) / 2); } ratingDlg.DoModal(ratingDlg.GetID); if (ratingDlg.IsSubmitted) { if (ratingDlg.DisplayStars == GUIUserRating.StarDisplay.FIVE_STARS) value = (ratingDlg.Rating * 2).ToString(); else value = ratingDlg.Rating.ToString(); } else return; } else { IDialogbox dlg = (IDialogbox)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU); dlg.Reset(); dlg.SetHeading(dlgHeading + ": " + item.ToString()); // List Rating 1 Star to 10 Stars // Re-use existing menu labels to represent star value pItem = new GUIListItem(Translation.RatingStar); dlg.Add(pItem); pItem.ItemId = 1; for (int i = 2; i < 11; i++) { pItem = new GUIListItem(Translation.RatingStars); dlg.Add(pItem); pItem.ItemId = i; } // Reset Rating (Rate = 0) pItem = new GUIListItem(Translation.ResetRating); dlg.Add(pItem); pItem.ItemId = 11; if (auto) { pItem = new GUIListItem(Translation.DontAskToRate); dlg.Add(pItem); pItem.ItemId = 12; } dlg.DoModal(GUIWindowManager.ActiveWindow); if (dlg.SelectedId == -1 || dlg.SelectedId > 12) return; // cancelled if (dlg.SelectedLabelText == Translation.DontAskToRate && auto) { DBOption.SetOptions(DBOption.cAskToRate, false); return; } // Get Rating Value value = dlg.SelectedId.ToString(); // Reset rating if (dlg.SelectedLabelText == Translation.ResetRating) value = "0"; } new Thread(delegate(object o) { DBTable tItem = ((KeyValuePair<DBTable, string>)o).Key; string tValue = ((KeyValuePair<DBTable, string>)o).Value; Listlevel tLevel = tItem is DBEpisode ? Listlevel.Episode : Listlevel.Series; string id = tItem[tLevel == Listlevel.Episode ? DBOnlineEpisode.cID : DBOnlineSeries.cID]; // Submit rating online database int rating = -1; if (Int32.TryParse(tValue, out rating)) { Online_Parsing_Classes.OnlineAPI.SubmitRating(tLevel == Listlevel.Episode ? Online_Parsing_Classes.OnlineAPI.RatingType.episode : Online_Parsing_Classes.OnlineAPI.RatingType.series, id, rating); if (level == Listlevel.Episode) FollwitConnector.Rate((DBEpisode)item, rating); else FollwitConnector.Rate((DBSeries)item, rating); } }) { IsBackground = true, Name = "tvdb rating sender" }.Start(new KeyValuePair<DBTable, string>(item, value)); // Apply to local database item["myRating"] = value; // recalculate rating/votes double currRating = string.IsNullOrEmpty(item["Rating"]) ? 0.0 : (double)item["Rating"]; double currCount = string.IsNullOrEmpty(item["RatingCount"]) ? 0.0 : (double)item["RatingCount"]; item["Rating"] = ((currRating * currCount) + double.Parse(value)) / (currCount + 1); item["RatingCount"] = currCount + 1; // tell any listeners that user rated episode/series if (RateItem != null) RateItem(item, value); item.Commit(); }