internal static void PerformMaintenance()
{
TraktLogger.Info("Performing maintenance tasks");
using (Settings xmlreader = new MPSettings())
{
int currentSettingsVersion = xmlreader.GetValueAsInt(cTrakt, cSettingsVersion, SettingsVersion);
// check if any maintenance task is required
if (currentSettingsVersion >= SettingsVersion) return;
// upgrade settings for each version
while (currentSettingsVersion < SettingsVersion)
{
switch (currentSettingsVersion)
{
case 0:
xmlreader.RemoveEntry(cTrakt, cLastActivityLoad);
xmlreader.RemoveEntry(cTrakt, cLastTrendingMovies);
xmlreader.RemoveEntry(cTrakt, cLastTrendingShows);
xmlreader.RemoveEntry(cTrakt, cLastStatistics);
currentSettingsVersion++;
break;
case 1:
// trailers plugin now supports tvshows, seasons and episodes.
xmlreader.SetValueAsBool(cTrakt, "UseTrailersPlugin", true);
currentSettingsVersion++;
break;
case 2:
// Only use Trailers plugin now for Trailers functionality.
xmlreader.RemoveEntry(cTrakt, "UseTrailersPlugin");
xmlreader.RemoveEntry(cTrakt, "DefaultTVShowTrailerSite");
xmlreader.RemoveEntry(cTrakt, "DefaultMovieTrailerSite");
// Remove old activity settings
xmlreader.RemoveEntry(cTrakt, "ShowCommunityActivity");
xmlreader.RemoveEntry(cTrakt, "IncludeMeInFriendsActivity");
// Remove old category/filter node ids for MovingPictures (not needed)
xmlreader.RemoveEntry(cTrakt, "MovingPicturesCategoryId");
xmlreader.RemoveEntry(cTrakt, "MovingPicturesFilterId");
currentSettingsVersion++;
break;
case 3:
// Remove 4TR / My Anime plugin handlers (plugins no longer developed or superceded)
xmlreader.RemoveEntry(cTrakt, "ForTheRecordRecordings");
xmlreader.RemoveEntry(cTrakt, "ForTheRecordTVLive");
xmlreader.RemoveEntry(cTrakt, "MyAnime");
// Clear existing passwords as they're no longer hashed in new API v2
xmlreader.RemoveEntry(cTrakt, cPassword);
xmlreader.RemoveEntry(cTrakt, cUserLogins);
// Remove Advanced Rating setting, there is only one now
xmlreader.RemoveEntry(cTrakt, "ShowAdvancedRatingsDialog");
// Remove SkippedMovies and AlreadyExistMovies as data structures changed
xmlreader.RemoveEntry(cTrakt, "SkippedMovies");
xmlreader.RemoveEntry(cTrakt, "AlreadyExistMovies");
// Remove old show collection cache
xmlreader.RemoveEntry(cTrakt, "ShowsInCollection");
// Reset some defaults
xmlreader.RemoveEntry(cTrakt, cSyncRatings);
xmlreader.RemoveEntry(cTrakt, cDashboardActivityPollInterval);
xmlreader.RemoveEntry(cTrakt, cDashboardTrendingPollInterval);
xmlreader.RemoveEntry(cTrakt, cDashboardLoadDelay);
xmlreader.RemoveEntry(cTrakt, cShowRateDlgForPlaylists);
xmlreader.RemoveEntry(cTrakt, cSearchTypes);
// Remove any persisted data that has changed with with new API v2
try
{
if (File.Exists(cLastActivityFileCache)) File.Delete(cLastActivityFileCache);
if (File.Exists(cLastTrendingShowFileCache)) File.Delete(cLastTrendingShowFileCache);
if (File.Exists(cLastTrendingMovieFileCache)) File.Delete(cLastTrendingMovieFileCache);
if (File.Exists(cLastStatisticsFileCache)) File.Delete(cLastStatisticsFileCache);
// Remove old artwork - filenames have changed
string imagePath = Config.GetFolder(Config.Dir.Thumbs) + "\\Trakt";
if (Directory.Exists(imagePath))
{
Directory.Delete(imagePath, true);
}
}
catch (Exception e)
{
TraktLogger.Error("Failed to remove v1 API persisted data from disk, Reason = '{0}'", e.Message);
}
currentSettingsVersion++;
break;
case 4:
try
{
// Fix bad upgrade from previous release
string dashboardPersistence = Config.GetFolder(Config.Dir.Config) + "\\Trakt\\Dashboard";
if (Directory.Exists(dashboardPersistence))
{
Directory.Delete(dashboardPersistence, true);
}
}
catch (Exception e)
{
TraktLogger.Error("Failed to remove v1 API persisted data from disk, Reason = '{0}'", e.Message);
}
currentSettingsVersion++;
break;
case 5:
// Clear existing passwords, change of encryption/decryption technique
xmlreader.RemoveEntry(cTrakt, cPassword);
xmlreader.RemoveEntry(cTrakt, cUserLogins);
currentSettingsVersion++;
break;
case 6:
// Save Sync Interval in Hours from Milliseconds
int syncTimerLength = xmlreader.GetValueAsInt(cTrakt, cSyncTimerLength, 24);
if (syncTimerLength > 24)
{
// requires upgrade
xmlreader.SetValue(cTrakt, cSyncTimerLength, syncTimerLength / 3600000);
}
currentSettingsVersion++;
break;
case 7:
// upgrade last activity view
xmlreader.RemoveEntry(cTrakt, cActivityStreamView);
// remove last paused item processed - stored in last activities
xmlreader.RemoveEntry(cTrakt, "LastPausedItemProcessed");
currentSettingsVersion++;
break;
case 8:
// cleanup cached likes, API changed to include a user object for lists
// i.e. the user that owns the list
try
{
var folderName = Path.Combine(Config.GetFolder(Config.Dir.Config), @"Trakt");
var matches = Directory.GetFiles(folderName, "Liked.json", SearchOption.AllDirectories);
foreach (string file in matches)
{
File.Delete(file);
}
}
catch (Exception e)
{
TraktLogger.Error("Failed to remove previously cached likes from disk, Reason = '{0}'", e.Message);
}
currentSettingsVersion++;
break;
case 9:
// remove old thumbs folder
try
{
DirectoryInfo di = new DirectoryInfo(Path.Combine(Config.GetFolder(Config.Dir.Thumbs), @"Trakt"));
foreach (FileInfo file in di.GetFiles())
{
file.Delete();
}
foreach (DirectoryInfo dir in di.GetDirectories())
{
dir.Delete(true);
}
}
catch (Exception e)
{
TraktLogger.Error("Failed to remove previously cached thumbs from disk, Reason = '{0}'", e.Message);
}
// update default sizes for requests so we dont hit any limits from TMDb by default
xmlreader.SetValue(cTrakt, cMaxAnticipatedMoviesRequest, 40);
xmlreader.SetValue(cTrakt, cMaxAnticipatedShowsRequest, 40);
xmlreader.SetValue(cTrakt, cMaxPopularMoviesRequest, 40);
xmlreader.SetValue(cTrakt, cMaxPopularShowsRequest, 40);
xmlreader.SetValue(cTrakt, cMaxRelatedMoviesUnWatchedRequest, 40);
xmlreader.SetValue(cTrakt, cMaxRelatedShowsUnWatchedRequest, 40);
xmlreader.SetValue(cTrakt, cMaxTrendingMoviesRequest, 40);
xmlreader.SetValue(cTrakt, cMaxTrendingShowsRequest, 40);
xmlreader.SetValue(cTrakt, cMaxUserWatchedEpisodesRequest, 40);
xmlreader.SetValue(cTrakt, cMaxUserWatchedMoviesRequest, 40);
xmlreader.SetValue(cTrakt, cMaxUserCommentsRequest, 40);
currentSettingsVersion++;
break;
}
}
}
Settings.SaveCache();
}