/// <summary>
/// Shows a Trakt Rate Dialog (Love/Hate) or 10-Heart based on settings
/// </summary>
/// <param name="rateObject">Type of object being rated</param>
public static string ShowRateDialog <T>(T rateObject)
{
if (GUIGraphicsContext.form.InvokeRequired)
{
ShowRateDialogDelegate <T> d = ShowRateDialog <T>;
return((string)GUIGraphicsContext.form.Invoke(d, rateObject));
}
TraktRateValue currentRating = TraktRateValue.unrate;
GUIRateDialog ratingDlg = (GUIRateDialog)GUIWindowManager.GetWindow(GUIRateDialog.ID);
ratingDlg.Reset();
ratingDlg.SetHeading(Translation.RateHeading);
// show simple love/hate icons or 10-heart icons
ratingDlg.ShowAdvancedRatings = TraktSettings.ShowAdvancedRatingsDialog;
// if item is not rated, it will default to love
if (rateObject is TraktRateEpisode)
{
TraktRateEpisode item = rateObject as TraktRateEpisode;
ratingDlg.SetLine(1, string.Format("{0} - {1}x{2}", item.Title, item.Season, item.Episode));
if (ratingDlg.ShowAdvancedRatings)
{
ratingDlg.Rated = item.Rating == "0" || !item.Rating.IsNumber() ? TraktRateValue.seven : (TraktRateValue)Convert.ToInt32(item.Rating);
}
else
{
ratingDlg.Rated = item.Rating == "0" || !item.Rating.IsNumber() ? TraktRateValue.ten : (TraktRateValue)Convert.ToInt32(item.Rating);
}
}
else if (rateObject is TraktRateSeries)
{
TraktRateSeries item = rateObject as TraktRateSeries;
ratingDlg.SetLine(1, item.Title);
if (ratingDlg.ShowAdvancedRatings)
{
ratingDlg.Rated = item.Rating == "0" || !item.Rating.IsNumber() ? TraktRateValue.seven : (TraktRateValue)Convert.ToInt32(item.Rating);
}
else
{
ratingDlg.Rated = item.Rating == "0" || !item.Rating.IsNumber() ? TraktRateValue.ten : (TraktRateValue)Convert.ToInt32(item.Rating);
}
}
else
{
TraktRateMovie item = rateObject as TraktRateMovie;
ratingDlg.SetLine(1, item.Title);
if (ratingDlg.ShowAdvancedRatings)
{
ratingDlg.Rated = item.Rating == "0" || !item.Rating.IsNumber() ? TraktRateValue.seven : (TraktRateValue)Convert.ToInt32(item.Rating);
}
else
{
ratingDlg.Rated = item.Rating == "0" || !item.Rating.IsNumber() ? TraktRateValue.ten : (TraktRateValue)Convert.ToInt32(item.Rating);
}
}
// show dialog
ratingDlg.DoModal(ratingDlg.GetID);
if (!ratingDlg.IsSubmitted)
{
return("-1");
}
if (rateObject is TraktRateEpisode)
{
TraktRateEpisode item = rateObject as TraktRateEpisode;
currentRating = ratingDlg.Rated;
item.Rating = (int)currentRating != 0 ? ((int)currentRating).ToString() : "unrate";
Thread rateThread = new Thread(delegate(object obj)
{
TraktRateResponse response = TraktAPI.TraktAPI.RateEpisode(item);
TraktLogger.LogTraktResponse(response);
})
{
IsBackground = true,
Name = "Rate"
};
rateThread.Start(item);
}
else if (rateObject is TraktRateSeries)
{
TraktRateSeries item = rateObject as TraktRateSeries;
currentRating = ratingDlg.Rated;
item.Rating = (int)currentRating != 0 ? ((int)currentRating).ToString() : "unrate";
Thread rateThread = new Thread(delegate(object obj)
{
TraktRateResponse response = TraktAPI.TraktAPI.RateSeries(item);
TraktLogger.LogTraktResponse(response);
})
{
IsBackground = true,
Name = "Rate"
};
rateThread.Start(item);
}
else
{
TraktRateMovie item = rateObject as TraktRateMovie;
currentRating = ratingDlg.Rated;
item.Rating = (int)currentRating != 0 ? ((int)currentRating).ToString() : "unrate";
Thread rateThread = new Thread(delegate(object obj)
{
TraktRateResponse response = TraktAPI.TraktAPI.RateMovie(item);
TraktLogger.LogTraktResponse(response);
})
{
IsBackground = true,
Name = "Rate"
};
rateThread.Start(item);
}
// return new rating (0 - 10)
// old love / hate enum values are deprecated
// if using basic ratings 1 = hate and 10 = love
// 0 is unrate
return(((int)currentRating).ToString());
}