diff --git a/src/Anilibria/Pages/MaintenancePage/MaintenancePageView.xaml b/src/Anilibria/Pages/MaintenancePage/MaintenancePageView.xaml
index b114d78..8211c9f 100644
--- a/src/Anilibria/Pages/MaintenancePage/MaintenancePageView.xaml
+++ b/src/Anilibria/Pages/MaintenancePage/MaintenancePageView.xaml
@@ -56,7 +56,8 @@
+ Grid.Column="1"
+ VerticalAlignment="Top">
@@ -65,7 +66,8 @@
+ VerticalAlignment="Top"
+ Margin="0 24 0 0">
@@ -90,7 +92,8 @@
+ VerticalAlignment="Top"
+ Margin="0 24 0 0">
@@ -98,7 +101,7 @@
-
+
+
+
diff --git a/src/Anilibria/Pages/MaintenancePage/MaintenancePageViewModel.cs b/src/Anilibria/Pages/MaintenancePage/MaintenancePageViewModel.cs
index c4c5baf..d9d055f 100644
--- a/src/Anilibria/Pages/MaintenancePage/MaintenancePageViewModel.cs
+++ b/src/Anilibria/Pages/MaintenancePage/MaintenancePageViewModel.cs
@@ -2,16 +2,17 @@
using Anilibria.Services;
using Anilibria.Services.Implementations;
using System;
+using System.IO;
using System.Threading.Tasks;
using System.Windows.Input;
+using Windows.Storage;
+using Windows.Storage.Pickers;
-namespace Anilibria.Pages.MaintenancePage
-{
- public class MaintenancePageViewModel : ViewModel, INavigation
- {
+namespace Anilibria.Pages.MaintenancePage {
+ public class MaintenancePageViewModel : ViewModel, INavigation {
private readonly IAnalyticsService m_AnalyticsService;
- private readonly object m_ClearPosterLock = new object();
+ private readonly object m_ClearPosterLock = new object ();
private const string PosterGroupName = "Poster";
@@ -24,6 +25,22 @@ public MaintenancePageViewModel ( IAnalyticsService analyticsService ) {
private void CreateCommands () {
ClearPosterCacheCommand = CreateCommand ( ClearPosterCache );
ShowSidebarCommand = CreateCommand ( OpenSidebar );
+ ImportReleasesFromFileCommand = CreateCommand ( ImportReleasesFromFile );
+ }
+
+ private async void ImportReleasesFromFile () {
+ var openPicker = new FileOpenPicker ();
+ openPicker.ViewMode = PickerViewMode.Thumbnail;
+ openPicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
+ openPicker.FileTypeFilter.Add ( ".releases" );
+
+ var file = await openPicker.PickSingleFileAsync ();
+ if ( file == null ) return;
+
+ var content = await FileIO.ReadTextAsync ( file );
+
+ var synchronizeService = SyncService.Current ();
+ await synchronizeService.SynchronizeReleasesFromContent ( content );
}
private void OpenSidebar () => ShowSidebar?.Invoke ();
@@ -56,6 +73,8 @@ public void NavigateTo ( object parameter ) {
public ICommand ClearPosterCacheCommand { get; set; }
+ public ICommand ImportReleasesFromFileCommand { get; set; }
+
public ICommand ShowSidebarCommand { get; set; }
}
diff --git a/src/Anilibria/Services/ISynchronizationService.cs b/src/Anilibria/Services/ISynchronizationService.cs
index 257cde8..04f26c0 100644
--- a/src/Anilibria/Services/ISynchronizationService.cs
+++ b/src/Anilibria/Services/ISynchronizationService.cs
@@ -17,6 +17,12 @@ public interface ISynchronizationService {
///
Task SynchronizeReleases ();
+ ///
+ /// Synchronize releases from json content.
+ ///
+ /// Json content.
+ Task SynchronizeReleasesFromContent ( string content );
+
///
/// Synchronize youtubes.
///
diff --git a/src/Anilibria/Services/Implementations/SynchronizeService.cs b/src/Anilibria/Services/Implementations/SynchronizeService.cs
index aabf34c..38cf501 100644
--- a/src/Anilibria/Services/Implementations/SynchronizeService.cs
+++ b/src/Anilibria/Services/Implementations/SynchronizeService.cs
@@ -6,6 +6,7 @@
using Anilibria.Services.PresentationClasses;
using Anilibria.Storage;
using Anilibria.Storage.Entities;
+using Newtonsoft.Json;
namespace Anilibria.Services.Implementations {
@@ -186,14 +187,30 @@ private void UpdateCachedRelease ( Release release , ReleaseEntity releaseEntity
.ToList ();
}
+ public async Task SynchronizeReleasesFromContent ( string content ) {
+ await SynchronizeReleasesFromSource (
+ () => Task.FromResult ( JsonConvert.DeserializeObject> ( content ) )
+ );
+ }
+
public async Task SynchronizeReleases () {
+ await SynchronizeReleasesFromSource (
+ async () => {
+ var releases = await m_AnilibriaApiService.GetPage ( 1 , 2000 );
+ var schedules = await m_AnilibriaApiService.GetSchedule ();
+
+ SaveSchedule ( schedules );
+
+ return releases;
+ }
+ );
+ }
+
+ private async Task SynchronizeReleasesFromSource ( Func>> loadContentHandler ) {
try {
var firstRun = !m_ReleasesService.GetReleases ().Any ();
- var releases = await m_AnilibriaApiService.GetPage ( 1 , 2000 );
- var schedules = await m_AnilibriaApiService.GetSchedule ();
-
- SaveSchedule ( schedules );
+ var releases = await loadContentHandler ();
var cacheReleases = m_ReleasesService.GetReleases ().ToList ();