diff --git a/.github/config/gitversion.yml b/.github/config/gitversion.yml
index f4a115a..b0eb3bf 100644
--- a/.github/config/gitversion.yml
+++ b/.github/config/gitversion.yml
@@ -1,4 +1,4 @@
-next-version: 2.0
+next-version: 1.0.0
assembly-versioning-scheme: MajorMinorPatch
assembly-file-versioning-scheme: MajorMinorPatch
@@ -9,3 +9,10 @@ branches:
increment: Patch
tag: ''
is-release-branch: true
+ test:
+ regex: ^features
+ mode: ContinuousDelivery
+ increment: Patch
+ tag: ''
+ is-release-branch: true
+ source-branches: []
diff --git a/.github/workflows/push_master.yml b/.github/workflows/push_master.yml
new file mode 100644
index 0000000..accf086
--- /dev/null
+++ b/.github/workflows/push_master.yml
@@ -0,0 +1,66 @@
+name: Build and publish application on master push
+
+
+on:
+ push:
+ branches:
+ - "master"
+ - "features/github_actions"
+ #paths:
+ #- "VDownload**"
+
+
+jobs:
+ build:
+ name: Build
+ runs-on: windows-latest
+ env:
+ MSBUILD_PATH: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\devenv.com
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+ - name: Setup GitVersion
+ uses: gittools/actions/gitversion/setup@v0.9.7
+ with:
+ versionSpec: 5.x
+ - name: Determine Version
+ uses: gittools/actions/gitversion/execute@v0.9.7
+ id: gitversion
+ with:
+ useConfigFile: true
+ configFilePath: .github/config/gitversion.yml
+ - name: Set version in VDownload.csproj file
+ id: package_version
+ uses: KageKirin/set-csproj-version@v0
+ with:
+ file: VDownload/VDownload.csproj
+ version: ${{steps.gitversion.outputs.SemVer}}
+ - name: Set version in Package.appxmanifest file
+ uses: Nambers/ReplaceStringInFile@v1.3
+ with:
+ path: VDownload/Package.appxmanifest
+ oldString: 0\.0\.0\.0
+ newString: ${{steps.gitversion.outputs.SemVer}}.0
+ showFileContent: true
+ escapeBackslash: true
+ - name: Set version in app.manifest file
+ uses: Nambers/ReplaceStringInFile@v1.3
+ with:
+ path: VDownload/app.manifest
+ oldString: 0\.0\.0\.0
+ newString: ${{steps.gitversion.outputs.SemVer}}.0
+ showFileContent: true
+ escapeBackslash: true
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: 8.0.x
+ - name: Build application
+ run: dotnet build -o build
+ - name: Upload artifact
+ uses: actions/upload-artifact@v2
+ with:
+ name: build
+ path: build
diff --git a/VDownload.Core/VDownload.Core.Strings/StringResource.cs b/VDownload.Core/VDownload.Core.Strings/StringResource.cs
new file mode 100644
index 0000000..5b2fc9f
--- /dev/null
+++ b/VDownload.Core/VDownload.Core.Strings/StringResource.cs
@@ -0,0 +1,41 @@
+using Windows.ApplicationModel.Resources;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.IO;
+
+namespace VDownload.Core.Strings
+{
+ public class StringResource
+ {
+ #region FIELDS
+
+ protected ResourceLoader _resourceLoader;
+
+ #endregion
+
+
+
+ #region CONSTRUCTORS
+
+ internal StringResource(ResourceLoader resourceLoader)
+ {
+ _resourceLoader = resourceLoader;
+ }
+
+ #endregion
+
+
+
+ #region PUBLIC METHODS
+
+ public string Get(string key)
+ {
+ return _resourceLoader.GetString(key);
+ }
+
+ #endregion
+ }
+}
diff --git a/VDownload.Core/VDownload.Core.Strings/StringResourcesManager.cs b/VDownload.Core/VDownload.Core.Strings/StringResourcesManager.cs
new file mode 100644
index 0000000..3bcdad2
--- /dev/null
+++ b/VDownload.Core/VDownload.Core.Strings/StringResourcesManager.cs
@@ -0,0 +1,57 @@
+using Microsoft.UI.Xaml;
+using Windows.ApplicationModel.Resources;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.IO;
+
+namespace VDownload.Core.Strings
+{
+ public static class StringResourcesManager
+ {
+ #region PROPERTIES
+
+ public static StringResource BaseView { get; } = BuildResource("BaseViewResources");
+ public static StringResource HomeView { get; } = BuildResource("HomeViewResources");
+ public static StringResource HomeVideoView { get; } = BuildResource("HomeVideoViewResources");
+ public static StringResource HomeVideoCollectionView { get; } = BuildResource("HomeVideoCollectionViewResources");
+ public static StringResource HomeDownloadsView { get; } = BuildResource("HomeDownloadsViewResources");
+ public static StringResource AuthenticationView { get; } = BuildResource("AuthenticationViewResources");
+ public static StringResource Notifications { get; } = BuildResource("NotificationsResources");
+ public static StringResource Search { get; } = BuildResource("SearchResources");
+ public static StringResource Common { get; } = BuildResource("CommonResources");
+ public static StringResource DialogButtons { get; } = BuildResource("DialogButtonsResources");
+ public static StringResource SettingsView { get; } = BuildResource("SettingsViewResources");
+ public static StringResource FilenameTemplate { get; } = BuildResource("FilenameTemplateResources");
+ public static StringResource AboutView { get; } = BuildResource("AboutViewResources");
+ public static StringResource SubscriptionsView { get; } = BuildResource("SubscriptionsViewResources");
+
+ #endregion
+
+
+
+ #region PRIVATE METHODS
+
+ private static StringResource BuildResource(string resourceName)
+ {
+ File.AppendAllText("C:\\Users\\mateusz\\Desktop\\test.txt", $"teststring {resourceName}\n");
+ ResourceLoader loader;
+ try
+ {
+ loader = new ResourceLoader($"VDownload.Core.Strings/{resourceName}");
+ File.AppendAllText("C:\\Users\\mateusz\\Desktop\\test.txt", $"afterteststring {resourceName}\n");
+ }
+ catch (Exception e)
+ {
+
+ File.AppendAllText("C:\\Users\\mateusz\\Desktop\\test.txt", $"teststringerror {e.Message}\n");
+ throw;
+ }
+ return new StringResource(loader);
+ }
+
+ #endregion
+ }
+}
diff --git a/VDownload.Core/VDownload.Core.Strings/VDownload.Core.Strings.csproj b/VDownload.Core/VDownload.Core.Strings/VDownload.Core.Strings.csproj
index 7a200cb..146088e 100644
--- a/VDownload.Core/VDownload.Core.Strings/VDownload.Core.Strings.csproj
+++ b/VDownload.Core/VDownload.Core.Strings/VDownload.Core.Strings.csproj
@@ -15,8 +15,48 @@
+
+ Always
+
+
+ Always
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
+
+
+ Always
diff --git a/VDownload.Core/VDownload.Core.Tasks/DownloadTask.cs b/VDownload.Core/VDownload.Core.Tasks/DownloadTask.cs
index da21750..f855683 100644
--- a/VDownload.Core/VDownload.Core.Tasks/DownloadTask.cs
+++ b/VDownload.Core/VDownload.Core.Tasks/DownloadTask.cs
@@ -11,11 +11,11 @@ using System.Linq;
using Windows.Storage;
using System.IO;
using VDownload.Services.UI.Notifications;
-using VDownload.Services.UI.StringResources;
using System.Collections.Generic;
using System.Net.Http;
using Instances.Exceptions;
using FFMpegCore.Exceptions;
+using VDownload.Core.Strings;
namespace VDownload.Core.Tasks
{
@@ -39,7 +39,6 @@ namespace VDownload.Core.Tasks
protected readonly IConfigurationService _configurationService;
protected readonly ISettingsService _settingsService;
protected readonly IFFmpegService _ffmpegService;
- protected readonly IStringResourcesService _stringResourcesService;
protected readonly INotificationsService _notificationsService;
#endregion
@@ -87,12 +86,11 @@ namespace VDownload.Core.Tasks
#region CONSTRUCTORS
- internal DownloadTask(Video video, VideoDownloadOptions downloadOptions, IConfigurationService configurationService, ISettingsService settingsService, IFFmpegService ffmpegService, IStringResourcesService stringResourcesService, INotificationsService notificationsService)
+ internal DownloadTask(Video video, VideoDownloadOptions downloadOptions, IConfigurationService configurationService, ISettingsService settingsService, IFFmpegService ffmpegService, INotificationsService notificationsService)
{
_configurationService = configurationService;
_settingsService = settingsService;
_ffmpegService = ffmpegService;
- _stringResourcesService = stringResourcesService;
_notificationsService = notificationsService;
_video = video;
@@ -165,8 +163,8 @@ namespace VDownload.Core.Tasks
List content = new List()
{
- $"{_stringResourcesService.NotificationsResources.Get("Title")}: {Video.Title}",
- $"{_stringResourcesService.NotificationsResources.Get("Author")}: {Video.Author}"
+ $"{StringResourcesManager.Notifications.Get("Title")}: {Video.Title}",
+ $"{StringResourcesManager.Notifications.Get("Author")}: {Video.Author}"
};
string errorMessage = null;
@@ -222,15 +220,15 @@ namespace VDownload.Core.Tasks
if (ex is TaskCanceledException || ex is HttpRequestException)
{
- message = _stringResourcesService.HomeDownloadsViewResources.Get("ErrorDownloadingTimeout");
+ message = StringResourcesManager.HomeDownloadsView.Get("ErrorDownloadingTimeout");
}
else if (ex is InstanceFileNotFoundException)
{
- message = _stringResourcesService.HomeDownloadsViewResources.Get("ErrorFFmpegPath");
+ message = StringResourcesManager.HomeDownloadsView.Get("ErrorFFmpegPath");
}
else if (ex is FFMpegException)
{
- message = _stringResourcesService.HomeDownloadsViewResources.Get("ErrorFFmpeg");
+ message = StringResourcesManager.HomeDownloadsView.Get("ErrorFFmpeg");
}
else
{
@@ -249,15 +247,15 @@ namespace VDownload.Core.Tasks
case TaskResult.Error:
if (_settingsService.Data.Common.Notifications.OnUnsuccessful)
{
- string title = _stringResourcesService.NotificationsResources.Get("OnUnsuccessfulTitle");
- content.Add($"{_stringResourcesService.NotificationsResources.Get("Message")}: {errorMessage}");
+ string title = StringResourcesManager.Notifications.Get("OnUnsuccessfulTitle");
+ content.Add($"{StringResourcesManager.Notifications.Get("Message")}: {errorMessage}");
_notificationsService.SendNotification(title, content);
}
break;
case TaskResult.Success:
if (_settingsService.Data.Common.Notifications.OnSuccessful)
{
- string title = _stringResourcesService.NotificationsResources.Get("OnSuccessfulTitle");
+ string title = StringResourcesManager.Notifications.Get("OnSuccessfulTitle");
_notificationsService.SendNotification(title, content);
}
break;
diff --git a/VDownload.Core/VDownload.Core.Tasks/DownloadTaskFactoryService.cs b/VDownload.Core/VDownload.Core.Tasks/DownloadTaskFactoryService.cs
index ff2b3f2..1e25a64 100644
--- a/VDownload.Core/VDownload.Core.Tasks/DownloadTaskFactoryService.cs
+++ b/VDownload.Core/VDownload.Core.Tasks/DownloadTaskFactoryService.cs
@@ -7,7 +7,6 @@ using VDownload.Models;
using VDownload.Services.Data.Configuration;
using VDownload.Services.Data.Settings;
using VDownload.Services.UI.Notifications;
-using VDownload.Services.UI.StringResources;
using VDownload.Services.Utility.FFmpeg;
namespace VDownload.Core.Tasks
@@ -26,7 +25,6 @@ namespace VDownload.Core.Tasks
protected readonly IConfigurationService _configurationService;
protected readonly ISettingsService _settingsService;
protected readonly IFFmpegService _ffmpegService;
- protected readonly IStringResourcesService _stringResourcesService;
protected readonly INotificationsService _notificationsService;
#endregion
@@ -35,12 +33,11 @@ namespace VDownload.Core.Tasks
#region CONSTRUCTORS
- public DownloadTaskFactoryService(IConfigurationService configurationService, ISettingsService settingsService, IFFmpegService ffmpegService, IStringResourcesService stringResourcesService, INotificationsService notificationsService)
+ public DownloadTaskFactoryService(IConfigurationService configurationService, ISettingsService settingsService, IFFmpegService ffmpegService, INotificationsService notificationsService)
{
_configurationService = configurationService;
_settingsService = settingsService;
_ffmpegService = ffmpegService;
- _stringResourcesService = stringResourcesService;
_notificationsService = notificationsService;
}
@@ -52,7 +49,7 @@ namespace VDownload.Core.Tasks
public DownloadTask Create(Video video, VideoDownloadOptions downloadOptions)
{
- return new DownloadTask(video, downloadOptions, _configurationService, _settingsService, _ffmpegService, _stringResourcesService, _notificationsService);
+ return new DownloadTask(video, downloadOptions, _configurationService, _settingsService, _ffmpegService, _notificationsService);
}
#endregion
diff --git a/VDownload.Core/VDownload.Core.Tasks/VDownload.Core.Tasks.csproj b/VDownload.Core/VDownload.Core.Tasks/VDownload.Core.Tasks.csproj
index 29a2a02..ae5c5fc 100644
--- a/VDownload.Core/VDownload.Core.Tasks/VDownload.Core.Tasks.csproj
+++ b/VDownload.Core/VDownload.Core.Tasks/VDownload.Core.Tasks.csproj
@@ -19,8 +19,8 @@
-
+
diff --git a/VDownload.Core/VDownload.Core.ViewModels/About/AboutViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/About/AboutViewModel.cs
index 938ad57..6d824a3 100644
--- a/VDownload.Core/VDownload.Core.ViewModels/About/AboutViewModel.cs
+++ b/VDownload.Core/VDownload.Core.ViewModels/About/AboutViewModel.cs
@@ -9,10 +9,10 @@ using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
+using VDownload.Core.Strings;
using VDownload.Core.ViewModels.About.Helpers;
using VDownload.Services.Data.Configuration;
using VDownload.Services.Data.Configuration.Models;
-using VDownload.Services.UI.StringResources;
using Windows.System.UserProfile;
namespace VDownload.Core.ViewModels.About
@@ -21,7 +21,6 @@ namespace VDownload.Core.ViewModels.About
{
#region SERVICES
- protected readonly IStringResourcesService _stringResourcesService;
protected readonly IConfigurationService _configurationService;
#endregion
@@ -51,15 +50,14 @@ namespace VDownload.Core.ViewModels.About
#region CONSTRUCTORS
- public AboutViewModel(IStringResourcesService stringResourcesService, IConfigurationService configurationService)
+ public AboutViewModel(IConfigurationService configurationService)
{
- _stringResourcesService = stringResourcesService;
_configurationService = configurationService;
string version = Assembly.GetEntryAssembly().GetCustomAttribute()?.InformationalVersion;
if (version == "0.0.0")
{
- version = _stringResourcesService.AboutViewResources.Get("SelfbuiltVersion");
+ version = StringResourcesManager.AboutView.Get("SelfbuiltVersion");
}
_version = version;
diff --git a/VDownload.Core/VDownload.Core.ViewModels/Authentication/AuthenticationViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/Authentication/AuthenticationViewModel.cs
index 4356c02..1c210df 100644
--- a/VDownload.Core/VDownload.Core.ViewModels/Authentication/AuthenticationViewModel.cs
+++ b/VDownload.Core/VDownload.Core.ViewModels/Authentication/AuthenticationViewModel.cs
@@ -8,9 +8,9 @@ using System.Net.Http;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
+using VDownload.Core.Strings;
using VDownload.Services.Data.Configuration;
using VDownload.Services.UI.Dialogs;
-using VDownload.Services.UI.StringResources;
using VDownload.Services.UI.WebView;
using VDownload.Sources.Twitch.Authentication;
@@ -36,7 +36,6 @@ namespace VDownload.Core.ViewModels.Authentication
protected readonly IDialogsService _dialogsService;
protected readonly IWebViewService _webViewService;
protected readonly IConfigurationService _configurationService;
- protected readonly IStringResourcesService _stringResourcesService;
protected readonly ITwitchAuthenticationService _twitchAuthenticationService;
#endregion
@@ -60,12 +59,11 @@ namespace VDownload.Core.ViewModels.Authentication
#region CONSTRUCTORS
- public AuthenticationViewModel(IDialogsService dialogsService, IWebViewService webViewService, IConfigurationService configurationService, IStringResourcesService stringResourcesService, ITwitchAuthenticationService twitchAuthenticationService)
+ public AuthenticationViewModel(IDialogsService dialogsService, IWebViewService webViewService, IConfigurationService configurationService, ITwitchAuthenticationService twitchAuthenticationService)
{
_dialogsService = dialogsService;
_webViewService = webViewService;
_configurationService = configurationService;
- _stringResourcesService = stringResourcesService;
_twitchAuthenticationService = twitchAuthenticationService;
}
@@ -100,7 +98,7 @@ namespace VDownload.Core.ViewModels.Authentication
Sources.Twitch.Configuration.Models.Authentication auth = _configurationService.Twitch.Authentication;
string authUrl = string.Format(auth.Url, auth.ClientId, auth.RedirectUrl, auth.ResponseType, string.Join(' ', auth.Scopes));
- string url = await _webViewService.Show(new Uri(authUrl), (url) => url.StartsWith(auth.RedirectUrl), _stringResourcesService.AuthenticationViewResources.Get("TwitchAuthenticationWindowTitle"));
+ string url = await _webViewService.Show(new Uri(authUrl), (url) => url.StartsWith(auth.RedirectUrl), StringResourcesManager.AuthenticationView.Get("TwitchAuthenticationWindowTitle"));
Regex regex = new Regex(auth.RedirectUrlRegex);
Match match = regex.Match(url);
@@ -112,8 +110,8 @@ namespace VDownload.Core.ViewModels.Authentication
}
else
{
- string title = _stringResourcesService.AuthenticationViewResources.Get("TwitchAuthenticationDialogTitle");
- string message = _stringResourcesService.AuthenticationViewResources.Get("TwitchAuthenticationDialogMessage");
+ string title = StringResourcesManager.AuthenticationView.Get("TwitchAuthenticationDialogTitle");
+ string message = StringResourcesManager.AuthenticationView.Get("TwitchAuthenticationDialogMessage");
await _dialogsService.ShowOk(title, message);
}
}
@@ -138,11 +136,11 @@ namespace VDownload.Core.ViewModels.Authentication
if (!NetworkHelper.Instance.ConnectionInformation.IsInternetAvailable)
{
TwitchButtonEnable = false;
- TwitchDescription = _stringResourcesService.AuthenticationViewResources.Get("TwitchAuthenticationDescriptionNotAuthenticatedNoInternetConnection");
+ TwitchDescription = StringResourcesManager.AuthenticationView.Get("TwitchAuthenticationDescriptionNotAuthenticatedNoInternetConnection");
}
else
{
- TwitchDescription = _stringResourcesService.AuthenticationViewResources.Get("TwitchAuthenticationDescriptionNotAuthenticated");
+ TwitchDescription = StringResourcesManager.AuthenticationView.Get("TwitchAuthenticationDescriptionNotAuthenticated");
}
TwitchButtonState = AuthenticationButton.SignIn;
}
@@ -155,7 +153,7 @@ namespace VDownload.Core.ViewModels.Authentication
}
catch (Exception ex) when (ex is TaskCanceledException || ex is HttpRequestException)
{
- TwitchDescription = _stringResourcesService.AuthenticationViewResources.Get("TwitchAuthenticationDescriptionCannotValidate");
+ TwitchDescription = StringResourcesManager.AuthenticationView.Get("TwitchAuthenticationDescriptionCannotValidate");
TwitchButtonState = AuthenticationButton.SignIn;
TwitchButtonEnable = false;
return;
@@ -163,13 +161,13 @@ namespace VDownload.Core.ViewModels.Authentication
if (validationResult.Success)
{
- TwitchDescription = string.Format(_stringResourcesService.AuthenticationViewResources.Get("TwitchAuthenticationDescriptionAuthenticated"), validationResult.TokenData.Login, validationResult.TokenData.ExpirationDate);
+ TwitchDescription = string.Format(StringResourcesManager.AuthenticationView.Get("TwitchAuthenticationDescriptionAuthenticated"), validationResult.TokenData.Login, validationResult.TokenData.ExpirationDate);
TwitchButtonState = AuthenticationButton.SignOut;
}
else
{
await _twitchAuthenticationService.DeleteToken();
- TwitchDescription = _stringResourcesService.AuthenticationViewResources.Get("TwitchAuthenticationDescriptionAuthenticationInvalid");
+ TwitchDescription = StringResourcesManager.AuthenticationView.Get("TwitchAuthenticationDescriptionAuthenticationInvalid");
TwitchButtonState = AuthenticationButton.SignIn;
}
}
diff --git a/VDownload.Core/VDownload.Core.ViewModels/BaseViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/BaseViewModel.cs
index cd7ff21..4c36354 100644
--- a/VDownload.Core/VDownload.Core.ViewModels/BaseViewModel.cs
+++ b/VDownload.Core/VDownload.Core.ViewModels/BaseViewModel.cs
@@ -10,10 +10,10 @@ using VDownload.Core.ViewModels.Authentication;
using VDownload.Core.ViewModels.Home;
using VDownload.Core.ViewModels.Settings;
using VDownload.Services.UI.DictionaryResources;
-using VDownload.Services.UI.StringResources;
using SimpleToolkit.UI.Models;
using VDownload.Core.ViewModels.About;
using VDownload.Core.ViewModels.Subscriptions;
+using VDownload.Core.Strings;
namespace VDownload.Core.ViewModels
{
@@ -21,7 +21,6 @@ namespace VDownload.Core.ViewModels
{
#region SERVICES
- protected readonly IStringResourcesService _stringResourcesService;
protected readonly IDictionaryResourcesService _dictionaryResourcesService;
#endregion
@@ -53,9 +52,8 @@ namespace VDownload.Core.ViewModels
#region CONSTRUCTORS
- public BaseViewModel(IStringResourcesService stringResourcesService, IDictionaryResourcesService dictionaryResourcesService)
+ public BaseViewModel(IDictionaryResourcesService dictionaryResourcesService)
{
- _stringResourcesService = stringResourcesService;
_dictionaryResourcesService = dictionaryResourcesService;
Items = new ReadOnlyObservableCollection
@@ -64,13 +62,13 @@ namespace VDownload.Core.ViewModels
{
new NavigationViewItem()
{
- Name = _stringResourcesService.BaseViewResources.Get("HomeNavigationViewItem"),
+ Name = StringResourcesManager.BaseView.Get("HomeNavigationViewItem"),
IconSource = _dictionaryResourcesService.Get("ImageBaseViewHome"),
ViewModel = typeof(HomeViewModel),
},
new NavigationViewItem()
{
- Name = _stringResourcesService.BaseViewResources.Get("SubscriptionsNavigationViewItem"),
+ Name = StringResourcesManager.BaseView.Get("SubscriptionsNavigationViewItem"),
IconSource = _dictionaryResourcesService.Get("ImageBaseViewSubscriptions"),
ViewModel = typeof(SubscriptionsViewModel),
},
@@ -82,13 +80,13 @@ namespace VDownload.Core.ViewModels
{
new NavigationViewItem()
{
- Name = _stringResourcesService.BaseViewResources.Get("AboutNavigationViewItem"),
+ Name = StringResourcesManager.BaseView.Get("AboutNavigationViewItem"),
IconSource = _dictionaryResourcesService.Get("ImageBaseViewAbout"),
ViewModel = typeof(AboutViewModel),
},
new NavigationViewItem()
{
- Name = _stringResourcesService.BaseViewResources.Get("AuthenticationNavigationViewItem"),
+ Name = StringResourcesManager.BaseView.Get("AuthenticationNavigationViewItem"),
IconSource = _dictionaryResourcesService.Get("ImageBaseViewAuthentication"),
ViewModel = typeof(AuthenticationViewModel),
}
diff --git a/VDownload.Core/VDownload.Core.ViewModels/Home/HomeDownloadsViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/Home/HomeDownloadsViewModel.cs
index 47e53a5..e32dbc4 100644
--- a/VDownload.Core/VDownload.Core.ViewModels/Home/HomeDownloadsViewModel.cs
+++ b/VDownload.Core/VDownload.Core.ViewModels/Home/HomeDownloadsViewModel.cs
@@ -7,10 +7,10 @@ using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using VDownload.Core.Strings;
using VDownload.Core.Tasks;
using VDownload.Services.Data.Settings;
using VDownload.Services.UI.Dialogs;
-using VDownload.Services.UI.StringResources;
namespace VDownload.Core.ViewModels.Home
{
@@ -21,7 +21,6 @@ namespace VDownload.Core.ViewModels.Home
protected readonly IDownloadTaskManager _tasksManager;
protected readonly IDialogsService _dialogsService;
- protected readonly IStringResourcesService _stringResourcesService;
protected readonly ISettingsService _settingsService;
#endregion
@@ -41,13 +40,12 @@ namespace VDownload.Core.ViewModels.Home
#region CONSTRUCTORS
- public HomeDownloadsViewModel(IDownloadTaskManager tasksManager, IDialogsService dialogsService, IStringResourcesService stringResourcesService, ISettingsService settingsService)
+ public HomeDownloadsViewModel(IDownloadTaskManager tasksManager, IDialogsService dialogsService, ISettingsService settingsService)
{
_tasksManager = tasksManager;
_tasksManager.TaskCollectionChanged += Tasks_CollectionChanged;
_dialogsService = dialogsService;
- _stringResourcesService = stringResourcesService;
_settingsService = settingsService;
_taskListIsEmpty = _tasksManager.Tasks.Count == 0;
@@ -73,8 +71,8 @@ namespace VDownload.Core.ViewModels.Home
{
if (!NetworkHelper.Instance.ConnectionInformation.IsInternetAvailable)
{
- string title = _stringResourcesService.HomeDownloadsViewResources.Get("DialogErrorTitle");
- string message = _stringResourcesService.HomeDownloadsViewResources.Get("DialogErrorMessageNoInternetConnection");
+ string title = StringResourcesManager.HomeDownloadsView.Get("DialogErrorTitle");
+ string message = StringResourcesManager.HomeDownloadsView.Get("DialogErrorMessageNoInternetConnection");
await _dialogsService.ShowOk(title, message);
return;
}
@@ -87,8 +85,8 @@ namespace VDownload.Core.ViewModels.Home
NetworkHelper.Instance.ConnectionInformation.IsInternetOnMeteredConnection
)
{
- string title = _stringResourcesService.CommonResources.Get("StartAtMeteredConnectionDialogTitle");
- string message = _stringResourcesService.CommonResources.Get("StartAtMeteredConnectionDialogMessage");
+ string title = StringResourcesManager.Common.Get("StartAtMeteredConnectionDialogTitle");
+ string message = StringResourcesManager.Common.Get("StartAtMeteredConnectionDialogMessage");
DialogResultYesNo result = await _dialogsService.ShowYesNo(title, message);
continueEnqueue = result == DialogResultYesNo.Yes;
}
diff --git a/VDownload.Core/VDownload.Core.ViewModels/Home/HomeVideoCollectionViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/Home/HomeVideoCollectionViewModel.cs
index ca3fe15..430cb2b 100644
--- a/VDownload.Core/VDownload.Core.ViewModels/Home/HomeVideoCollectionViewModel.cs
+++ b/VDownload.Core/VDownload.Core.ViewModels/Home/HomeVideoCollectionViewModel.cs
@@ -18,9 +18,9 @@ using SimpleToolkit.MVVM;
using System.Text.RegularExpressions;
using VDownload.Services.Utility.Filename;
using VDownload.Services.UI.Dialogs;
-using VDownload.Services.UI.StringResources;
using CommunityToolkit.WinUI.Helpers;
using VDownload.Services.Data.Application;
+using VDownload.Core.Strings;
namespace VDownload.Core.ViewModels.Home
{
@@ -34,7 +34,6 @@ namespace VDownload.Core.ViewModels.Home
protected readonly IStoragePickerService _storagePickerService;
protected readonly IFilenameService _filenameService;
protected readonly IDialogsService _dialogsService;
- protected readonly IStringResourcesService _stringResourcesService;
protected readonly IApplicationDataService _applicationDataService;
#endregion
@@ -181,14 +180,13 @@ namespace VDownload.Core.ViewModels.Home
#region CONSTRUCTORS
- public HomeVideoCollectionViewModel(IDownloadTaskManager tasksManager, ISettingsService settingsService, IStoragePickerService storagePickerService, IFilenameService filenameService, IDialogsService dialogsService, IStringResourcesService stringResourcesService, IApplicationDataService applicationDataService)
+ public HomeVideoCollectionViewModel(IDownloadTaskManager tasksManager, ISettingsService settingsService, IStoragePickerService storagePickerService, IFilenameService filenameService, IDialogsService dialogsService, IApplicationDataService applicationDataService)
{
_tasksManager = tasksManager;
_settingsService = settingsService;
_storagePickerService = storagePickerService;
_filenameService = filenameService;
_dialogsService = dialogsService;
- _stringResourcesService = stringResourcesService;
_applicationDataService = applicationDataService;
_removedVideos = new List();
@@ -306,8 +304,8 @@ namespace VDownload.Core.ViewModels.Home
NetworkHelper.Instance.ConnectionInformation.IsInternetOnMeteredConnection
)
{
- string title = _stringResourcesService.CommonResources.Get("StartAtMeteredConnectionDialogTitle");
- string message = _stringResourcesService.CommonResources.Get("StartAtMeteredConnectionDialogMessage");
+ string title = StringResourcesManager.Common.Get("StartAtMeteredConnectionDialogTitle");
+ string message = StringResourcesManager.Common.Get("StartAtMeteredConnectionDialogMessage");
DialogResultYesNo result = await _dialogsService.ShowYesNo(title, message);
download = result == DialogResultYesNo.Yes;
}
diff --git a/VDownload.Core/VDownload.Core.ViewModels/Home/HomeVideoViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/Home/HomeVideoViewModel.cs
index 4c4e483..8ebb554 100644
--- a/VDownload.Core/VDownload.Core.ViewModels/Home/HomeVideoViewModel.cs
+++ b/VDownload.Core/VDownload.Core.ViewModels/Home/HomeVideoViewModel.cs
@@ -8,13 +8,13 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using VDownload.Core.Strings;
using VDownload.Core.Tasks;
using VDownload.Models;
using VDownload.Services.Data.Application;
using VDownload.Services.Data.Settings;
using VDownload.Services.UI.Dialogs;
using VDownload.Services.UI.StoragePicker;
-using VDownload.Services.UI.StringResources;
using VDownload.Services.Utility.Filename;
namespace VDownload.Core.ViewModels.Home
@@ -29,7 +29,6 @@ namespace VDownload.Core.ViewModels.Home
protected readonly IStoragePickerService _storagePickerService;
protected readonly IFilenameService _filenameService;
protected readonly IDialogsService _dialogsService;
- protected readonly IStringResourcesService _stringResourcesService;
protected readonly IApplicationDataService _applicationDataService;
#endregion
@@ -98,14 +97,13 @@ namespace VDownload.Core.ViewModels.Home
#region CONSTRUCTORS
- public HomeVideoViewModel(IDownloadTaskManager tasksManager, ISettingsService settingsService, IStoragePickerService storagePickerService, IFilenameService filenameService, IDialogsService dialogsService, IStringResourcesService stringResourcesService, IApplicationDataService applicationDataService)
+ public HomeVideoViewModel(IDownloadTaskManager tasksManager, ISettingsService settingsService, IStoragePickerService storagePickerService, IFilenameService filenameService, IDialogsService dialogsService, IApplicationDataService applicationDataService)
{
_tasksManager = tasksManager;
_settingsService = settingsService;
_storagePickerService = storagePickerService;
_filenameService = filenameService;
_dialogsService = dialogsService;
- _stringResourcesService = stringResourcesService;
_applicationDataService = applicationDataService;
}
@@ -184,8 +182,8 @@ namespace VDownload.Core.ViewModels.Home
NetworkHelper.Instance.ConnectionInformation.IsInternetOnMeteredConnection
)
{
- string title = _stringResourcesService.CommonResources.Get("StartAtMeteredConnectionDialogTitle");
- string message = _stringResourcesService.CommonResources.Get("StartAtMeteredConnectionDialogMessage");
+ string title = StringResourcesManager.Common.Get("StartAtMeteredConnectionDialogTitle");
+ string message = StringResourcesManager.Common.Get("StartAtMeteredConnectionDialogMessage");
DialogResultYesNo result = await _dialogsService.ShowYesNo(title, message);
download = result == DialogResultYesNo.Yes;
}
diff --git a/VDownload.Core/VDownload.Core.ViewModels/Home/HomeViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/Home/HomeViewModel.cs
index 9319f71..050750e 100644
--- a/VDownload.Core/VDownload.Core.ViewModels/Home/HomeViewModel.cs
+++ b/VDownload.Core/VDownload.Core.ViewModels/Home/HomeViewModel.cs
@@ -7,13 +7,13 @@ using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
+using VDownload.Core.Strings;
using VDownload.Core.Tasks;
using VDownload.Models;
using VDownload.Services.Data.Configuration;
using VDownload.Services.Data.Settings;
using VDownload.Services.Data.Subscriptions;
using VDownload.Services.UI.Dialogs;
-using VDownload.Services.UI.StringResources;
using VDownload.Sources;
using VDownload.Sources.Common;
using VDownload.Sources.Twitch.Configuration.Models;
@@ -45,7 +45,6 @@ namespace VDownload.Core.ViewModels.Home
protected readonly IConfigurationService _configurationService;
protected readonly ISettingsService _settingsService;
- protected readonly IStringResourcesService _stringResourcesService;
protected readonly ISearchService _searchService;
protected readonly ISubscriptionsDataService _subscriptionsDataService;
protected readonly IDialogsService _dialogsService;
@@ -116,11 +115,10 @@ namespace VDownload.Core.ViewModels.Home
#region CONSTRUCTORS
- public HomeViewModel(IConfigurationService configurationService, ISettingsService settingsService, IStringResourcesService stringResourcesService, ISearchService searchService, ISubscriptionsDataService subscriptionsDataService, IDialogsService dialogsService, IDownloadTaskManager downloadTaskManager, HomeVideoViewModel videoViewModel, HomeVideoCollectionViewModel videoCollectionViewModel)
+ public HomeViewModel(IConfigurationService configurationService, ISettingsService settingsService, ISearchService searchService, ISubscriptionsDataService subscriptionsDataService, IDialogsService dialogsService, IDownloadTaskManager downloadTaskManager, HomeVideoViewModel videoViewModel, HomeVideoCollectionViewModel videoCollectionViewModel)
{
_configurationService = configurationService;
_settingsService = settingsService;
- _stringResourcesService = stringResourcesService;
_searchService = searchService;
_subscriptionsDataService = subscriptionsDataService;
_dialogsService = dialogsService;
@@ -181,7 +179,7 @@ namespace VDownload.Core.ViewModels.Home
StartSearch();
- SubscriptionsVideoList subList = new SubscriptionsVideoList { Name = _stringResourcesService.CommonResources.Get("SubscriptionVideoListName") };
+ SubscriptionsVideoList subList = new SubscriptionsVideoList { Name = StringResourcesManager.Common.Get("SubscriptionVideoListName") };
List tasks = new List();
try
{
@@ -218,14 +216,14 @@ namespace VDownload.Core.ViewModels.Home
if (subList.Count > 0)
{
- OptionBarMessage = $"{_stringResourcesService.HomeViewResources.Get("OptionBarMessageVideosFound")} {subList.Count}";
+ OptionBarMessage = $"{StringResourcesManager.HomeView.Get("OptionBarMessageVideosFound")} {subList.Count}";
_videoCollectionViewModel.LoadCollection(subList);
MainContent = _videoCollectionView;
}
else
{
- OptionBarMessage = _stringResourcesService.HomeViewResources.Get("OptionBarMessageVideosNotFound");
+ OptionBarMessage = StringResourcesManager.HomeView.Get("OptionBarMessageVideosNotFound");
}
OptionBarSearchNotPending = true;
@@ -285,7 +283,7 @@ namespace VDownload.Core.ViewModels.Home
}
catch (MediaSearchException ex)
{
- ShowError(_stringResourcesService.SearchResources.Get(ex.StringCode));
+ ShowError(StringResourcesManager.Search.Get(ex.StringCode));
return;
}
catch (Exception ex) when (ex is TaskCanceledException || ex is HttpRequestException)
@@ -321,7 +319,7 @@ namespace VDownload.Core.ViewModels.Home
}
catch (MediaSearchException ex)
{
- ShowError(_stringResourcesService.SearchResources.Get(ex.StringCode));
+ ShowError(StringResourcesManager.Search.Get(ex.StringCode));
return;
}
catch (Exception ex) when (ex is TaskCanceledException || ex is HttpRequestException)
@@ -357,8 +355,8 @@ namespace VDownload.Core.ViewModels.Home
NetworkHelper.Instance.ConnectionInformation.IsInternetOnMeteredConnection
)
{
- string title = _stringResourcesService.CommonResources.Get("StartAtMeteredConnectionDialogTitle");
- string message = _stringResourcesService.CommonResources.Get("StartAtMeteredConnectionDialogMessage");
+ string title = StringResourcesManager.Common.Get("StartAtMeteredConnectionDialogTitle");
+ string message = StringResourcesManager.Common.Get("StartAtMeteredConnectionDialogMessage");
DialogResultYesNo result = await _dialogsService.ShowYesNo(title, message);
if (result == DialogResultYesNo.No)
{
@@ -417,14 +415,14 @@ namespace VDownload.Core.ViewModels.Home
{
OptionBarSearchNotPending = false;
OptionBarLoading = true;
- OptionBarMessage = _stringResourcesService.HomeViewResources.Get("OptionBarMessageLoading");
+ OptionBarMessage = StringResourcesManager.HomeView.Get("OptionBarMessageLoading");
}
protected async void BackToDownload_EventHandler(object sender, EventArgs e) => await Navigation();
- protected string ErrorNoInternetConnection() => _stringResourcesService.HomeViewResources.Get("ErrorInfoBarNoInternetConnection");
+ protected string ErrorNoInternetConnection() => StringResourcesManager.HomeView.Get("ErrorInfoBarNoInternetConnection");
- protected string ErrorSearchTimeout() => _stringResourcesService.SearchResources.Get("SearchTimeout");
+ protected string ErrorSearchTimeout() => StringResourcesManager.Search.Get("SearchTimeout");
#endregion
}
diff --git a/VDownload.Core/VDownload.Core.ViewModels/Settings/SettingsViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/Settings/SettingsViewModel.cs
index cfa9784..1330ecc 100644
--- a/VDownload.Core/VDownload.Core.ViewModels/Settings/SettingsViewModel.cs
+++ b/VDownload.Core/VDownload.Core.ViewModels/Settings/SettingsViewModel.cs
@@ -6,11 +6,11 @@ using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
+using VDownload.Core.Strings;
using VDownload.Models;
using VDownload.Services.Data.Configuration;
using VDownload.Services.Data.Settings;
using VDownload.Services.UI.StoragePicker;
-using VDownload.Services.UI.StringResources;
namespace VDownload.Core.ViewModels.Settings
{
@@ -20,7 +20,6 @@ namespace VDownload.Core.ViewModels.Settings
protected readonly ISettingsService _settingsService;
protected readonly IConfigurationService _configurationService;
- protected readonly IStringResourcesService _stringResourcesService;
protected readonly IStoragePickerService _storagePickerService;
#endregion
@@ -176,16 +175,15 @@ namespace VDownload.Core.ViewModels.Settings
#region CONSTRUCTORS
- public SettingsViewModel(ISettingsService settingsService, IConfigurationService configurationService, IStringResourcesService stringResourcesService, IStoragePickerService storagePickerService)
+ public SettingsViewModel(ISettingsService settingsService, IConfigurationService configurationService, IStoragePickerService storagePickerService)
{
_settingsService = settingsService;
_configurationService = configurationService;
- _stringResourcesService = stringResourcesService;
_storagePickerService = storagePickerService;
base.PropertyChanged += PropertyChangedEventHandler;
- _tasksFilenameTemplateTooltip = string.Join('\n', _configurationService.Common.FilenameTemplates.Select(x => _stringResourcesService.FilenameTemplateResources.Get(x.Name)));
+ _tasksFilenameTemplateTooltip = string.Join('\n', _configurationService.Common.FilenameTemplates.Select(x => StringResourcesManager.FilenameTemplate.Get(x.Name)));
}
#endregion
diff --git a/VDownload.Core/VDownload.Core.ViewModels/Subscriptions/SubscriptionsViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/Subscriptions/SubscriptionsViewModel.cs
index 31d8712..63bfefb 100644
--- a/VDownload.Core/VDownload.Core.ViewModels/Subscriptions/SubscriptionsViewModel.cs
+++ b/VDownload.Core/VDownload.Core.ViewModels/Subscriptions/SubscriptionsViewModel.cs
@@ -9,10 +9,10 @@ using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
+using VDownload.Core.Strings;
using VDownload.Core.ViewModels.Subscriptions.Helpers;
using VDownload.Models;
using VDownload.Services.Data.Subscriptions;
-using VDownload.Services.UI.StringResources;
using VDownload.Sources;
using VDownload.Sources.Common;
@@ -23,7 +23,6 @@ namespace VDownload.Core.ViewModels.Subscriptions
#region SERVICES
protected readonly ISearchService _searchService;
- protected readonly IStringResourcesService _stringResourcesService;
protected readonly ISubscriptionsDataService _subscriptionsDataService;
#endregion
@@ -53,10 +52,9 @@ namespace VDownload.Core.ViewModels.Subscriptions
#region CONSTRUCTORS
- public SubscriptionsViewModel(ISearchService searchService, IStringResourcesService stringResourcesService, ISubscriptionsDataService subscriptionsDataService)
+ public SubscriptionsViewModel(ISearchService searchService, ISubscriptionsDataService subscriptionsDataService)
{
_searchService = searchService;
- _stringResourcesService = stringResourcesService;
_subscriptionsDataService = subscriptionsDataService;
_playlists = new ObservableCollection();
@@ -96,7 +94,7 @@ namespace VDownload.Core.ViewModels.Subscriptions
{
if (!NetworkHelper.Instance.ConnectionInformation.IsInternetAvailable)
{
- ShowError(_stringResourcesService.SubscriptionsViewResources.Get("NoInternetConnectionError"));
+ ShowError(StringResourcesManager.SubscriptionsView.Get("NoInternetConnectionError"));
return;
}
@@ -109,18 +107,18 @@ namespace VDownload.Core.ViewModels.Subscriptions
}
catch (MediaSearchException ex)
{
- ShowError(_stringResourcesService.SearchResources.Get(ex.StringCode));
+ ShowError(StringResourcesManager.Search.Get(ex.StringCode));
return;
}
catch (Exception ex) when (ex is TaskCanceledException || ex is HttpRequestException)
{
- ShowError(_stringResourcesService.SearchResources.Get("SearchTimeout"));
+ ShowError(StringResourcesManager.Search.Get("SearchTimeout"));
return;
}
if (_subscriptionsDataService.Data.Any(x => x.Source == playlist.Source && x.Name == playlist.Name))
{
- ShowError(_stringResourcesService.SubscriptionsViewResources.Get("DuplicateError"));
+ ShowError(StringResourcesManager.SubscriptionsView.Get("DuplicateError"));
return;
}
diff --git a/VDownload.Core/VDownload.Core.ViewModels/VDownload.Core.ViewModels.csproj b/VDownload.Core/VDownload.Core.ViewModels/VDownload.Core.ViewModels.csproj
index e493bd7..bf03ae7 100644
--- a/VDownload.Core/VDownload.Core.ViewModels/VDownload.Core.ViewModels.csproj
+++ b/VDownload.Core/VDownload.Core.ViewModels/VDownload.Core.ViewModels.csproj
@@ -24,7 +24,6 @@
-
diff --git a/VDownload.Core/VDownload.Core.Views/ViewModelToViewConverter.cs b/VDownload.Core/VDownload.Core.Views/ViewModelToViewConverter.cs
index bcf00dd..79b497a 100644
--- a/VDownload.Core/VDownload.Core.Views/ViewModelToViewConverter.cs
+++ b/VDownload.Core/VDownload.Core.Views/ViewModelToViewConverter.cs
@@ -31,13 +31,7 @@ namespace VDownload.Core.Views
{ typeof(AuthenticationViewModel), typeof(AuthenticationView) }
};
- #endregion
-
-
-
- #region PROPERTIES
-
- public static IServiceProvider ServiceProvider { protected get; set; }
+ protected static IServiceProvider _serviceProvider;
#endregion
@@ -45,6 +39,8 @@ namespace VDownload.Core.Views
#region PUBLIC METHODS
+ public static void Initialize(IServiceProvider serviceProvider) => _serviceProvider = serviceProvider;
+
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value is null)
@@ -53,11 +49,11 @@ namespace VDownload.Core.Views
}
if (value is Type type && _viewModelViewBinding.ContainsKey(type))
{
- return ServiceProvider.GetService(_viewModelViewBinding[type]);
+ return _serviceProvider.GetService(_viewModelViewBinding[type]);
}
if (_viewModelViewBinding.ContainsKey(value.GetType()))
{
- return ServiceProvider.GetService(_viewModelViewBinding[value.GetType()]);
+ return _serviceProvider.GetService(_viewModelViewBinding[value.GetType()]);
}
return null;
}
diff --git a/VDownload.Services/VDownload.Services.Common/IInitializableService.cs b/VDownload.Services/VDownload.Services.Common/IInitializableService.cs
new file mode 100644
index 0000000..726f8e3
--- /dev/null
+++ b/VDownload.Services/VDownload.Services.Common/IInitializableService.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace VDownload.Services.Common
+{
+ public interface IInitializableService
+ {
+ #region METHODS
+
+ Task Initialize();
+
+ #endregion
+ }
+
+ public interface IInitializableService
+ {
+ #region METHODS
+
+ Task Initialize(T arg);
+
+ #endregion
+ }
+}
diff --git a/VDownload.Services/VDownload.Services.Common/VDownload.Services.Common.csproj b/VDownload.Services/VDownload.Services.Common/VDownload.Services.Common.csproj
new file mode 100644
index 0000000..fa71b7a
--- /dev/null
+++ b/VDownload.Services/VDownload.Services.Common/VDownload.Services.Common.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Application/ApplicationDataService.cs b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Application/ApplicationDataService.cs
index 9684b3a..90f84c8 100644
--- a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Application/ApplicationDataService.cs
+++ b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Application/ApplicationDataService.cs
@@ -4,11 +4,12 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using VDownload.Services.Common;
using VDownload.Services.Data.Configuration;
namespace VDownload.Services.Data.Application
{
- public interface IApplicationDataService
+ public interface IApplicationDataService : IInitializableService
{
#region PROPERTIES
@@ -73,6 +74,8 @@ namespace VDownload.Services.Data.Application
#region PUBLIC METHODS
+ public async Task Initialize() => await Load();
+
public async Task Load()
{
if (File.Exists(_filePath))
diff --git a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Application/VDownload.Services.Data.Application.csproj b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Application/VDownload.Services.Data.Application.csproj
index 8b38c4b..62d33a0 100644
--- a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Application/VDownload.Services.Data.Application.csproj
+++ b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Application/VDownload.Services.Data.Application.csproj
@@ -11,6 +11,7 @@
+
diff --git a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Authentication/AuthenticationDataService.cs b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Authentication/AuthenticationDataService.cs
index 80a0840..f97de09 100644
--- a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Authentication/AuthenticationDataService.cs
+++ b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Authentication/AuthenticationDataService.cs
@@ -4,11 +4,12 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using VDownload.Services.Common;
using VDownload.Services.Data.Configuration;
namespace VDownload.Services.Data.Authentication
{
- public interface IAuthenticationDataService
+ public interface IAuthenticationDataService : IInitializableService
{
#region PROPERTIES
@@ -70,6 +71,8 @@ namespace VDownload.Services.Data.Authentication
#region PUBLIC METHODS
+ public async Task Initialize() => await Load();
+
public async Task Load()
{
Data = null;
diff --git a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Authentication/VDownload.Services.Data.Authentication.csproj b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Authentication/VDownload.Services.Data.Authentication.csproj
index 8b38c4b..62d33a0 100644
--- a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Authentication/VDownload.Services.Data.Authentication.csproj
+++ b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Authentication/VDownload.Services.Data.Authentication.csproj
@@ -11,6 +11,7 @@
+
diff --git a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Settings/SettingsService.cs b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Settings/SettingsService.cs
index 2d83230..898eb44 100644
--- a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Settings/SettingsService.cs
+++ b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Settings/SettingsService.cs
@@ -4,11 +4,12 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using VDownload.Services.Common;
using VDownload.Services.Data.Configuration;
namespace VDownload.Services.Data.Settings
{
- public interface ISettingsService
+ public interface ISettingsService : IInitializableService
{
#region PROPERTIES
@@ -73,6 +74,8 @@ namespace VDownload.Services.Data.Settings
#region PUBLIC METHODS
+ public async Task Initialize() => await Load();
+
public async Task Load()
{
if (File.Exists(_filePath))
diff --git a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Settings/VDownload.Services.Data.Settings.csproj b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Settings/VDownload.Services.Data.Settings.csproj
index 12f9356..e689809 100644
--- a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Settings/VDownload.Services.Data.Settings.csproj
+++ b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Settings/VDownload.Services.Data.Settings.csproj
@@ -13,6 +13,7 @@
+
diff --git a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Subscriptions/SubscriptionsDataService.cs b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Subscriptions/SubscriptionsDataService.cs
index 4caee21..db08b2d 100644
--- a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Subscriptions/SubscriptionsDataService.cs
+++ b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Subscriptions/SubscriptionsDataService.cs
@@ -2,13 +2,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
+using VDownload.Services.Common;
using VDownload.Services.Data.Configuration;
namespace VDownload.Services.Data.Subscriptions
{
- public interface ISubscriptionsDataService
+ public interface ISubscriptionsDataService : IInitializableService
{
#region PROPERTIES
@@ -72,6 +74,8 @@ namespace VDownload.Services.Data.Subscriptions
#region PUBLIC METHODS
+ public async Task Initialize() => await Load();
+
public async Task Load()
{
if (File.Exists(_filePath))
diff --git a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Subscriptions/VDownload.Services.Data.Subscriptions.csproj b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Subscriptions/VDownload.Services.Data.Subscriptions.csproj
index d81009e..4c44878 100644
--- a/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Subscriptions/VDownload.Services.Data.Subscriptions.csproj
+++ b/VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Subscriptions/VDownload.Services.Data.Subscriptions.csproj
@@ -12,6 +12,7 @@
+
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Dialogs/DialogsService.cs b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Dialogs/DialogsService.cs
index 845663d..2e91dea 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Dialogs/DialogsService.cs
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Dialogs/DialogsService.cs
@@ -6,22 +6,13 @@ using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
-using VDownload.Services.UI.StringResources;
+using VDownload.Core.Strings;
+using VDownload.Services.Common;
namespace VDownload.Services.UI.Dialogs
{
- public interface IDialogsService
+ public interface IDialogsService : IInitializableService
{
- #region PROPERTIES
-
- XamlRoot DefaultRoot { get; set; }
-
- #endregion
-
-
-
- #region METHODS
-
Task ShowClose(string title, string message);
Task ShowDouble(string title, string message, string primaryButtonText, string secondaryButtonText);
Task ShowOk(string title, string message);
@@ -30,53 +21,21 @@ namespace VDownload.Services.UI.Dialogs
Task ShowTriple(string title, string message, string primaryButtonText, string secondaryButtonText, string cancelButtonText);
Task ShowYesNo(string title, string message);
Task ShowYesNoCancel(string title, string message);
-
- #endregion
}
public class DialogsService : IDialogsService
{
- #region SERVICES
-
- protected readonly IStringResourcesService _stringResourcesService;
-
- #endregion
-
-
-
#region FIELDS
- protected string _okString;
- protected string _closeString;
- protected string _cancelString;
- protected string _yesString;
- protected string _noString;
+ protected string _okString = StringResourcesManager.DialogButtons.Get("OK");
+ protected string _closeString = StringResourcesManager.DialogButtons.Get("Close");
+ protected string _cancelString = StringResourcesManager.DialogButtons.Get("Cancel");
+ protected string _yesString = StringResourcesManager.DialogButtons.Get("Yes");
+ protected string _noString = StringResourcesManager.DialogButtons.Get("No");
- #endregion
-
-
-
- #region PROPERTIES
-
- public XamlRoot DefaultRoot { get; set; }
-
- #endregion
-
-
-
- #region CONSTRUCTORS
-
- public DialogsService(IStringResourcesService stringResourcesService)
- {
- _stringResourcesService = stringResourcesService;
- _okString = _stringResourcesService.DialogButtonsResources.Get("OK");
- _closeString = _stringResourcesService.DialogButtonsResources.Get("Close");
- _cancelString = _stringResourcesService.DialogButtonsResources.Get("Cancel");
- _yesString = _stringResourcesService.DialogButtonsResources.Get("Yes");
- _noString = _stringResourcesService.DialogButtonsResources.Get("No");
- }
+ protected XamlRoot _root;
#endregion
@@ -84,6 +43,8 @@ namespace VDownload.Services.UI.Dialogs
#region PUBLIC METHODS
+ public async Task Initialize(XamlRoot arg) => await Task.Run(() => _root = arg);
+
public async Task ShowOk(string title, string message) => await ShowSingle(title, message, _okString);
public async Task ShowClose(string title, string message) => await ShowSingle(title, message, _closeString);
public async Task ShowSingle(string title, string message, string buttonText)
@@ -138,7 +99,7 @@ namespace VDownload.Services.UI.Dialogs
{
Title = title,
Content = message,
- XamlRoot = DefaultRoot
+ XamlRoot = _root
};
}
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Dialogs/VDownload.Services.UI.Dialogs.csproj b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Dialogs/VDownload.Services.UI.Dialogs.csproj
index 8744244..6167d47 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Dialogs/VDownload.Services.UI.Dialogs.csproj
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Dialogs/VDownload.Services.UI.Dialogs.csproj
@@ -15,6 +15,7 @@
-
+
+
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.DictionaryResources/DictionaryResourcesService.cs b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.DictionaryResources/DictionaryResourcesService.cs
index 5c97eef..4c4ae40 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.DictionaryResources/DictionaryResourcesService.cs
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.DictionaryResources/DictionaryResourcesService.cs
@@ -4,10 +4,12 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using VDownload.Services.Common;
+using Windows.Media.Core;
namespace VDownload.Services.UI.DictionaryResources
{
- public interface IDictionaryResourcesService
+ public interface IDictionaryResourcesService : IInitializableService
{
T Get(string key);
}
@@ -16,9 +18,9 @@ namespace VDownload.Services.UI.DictionaryResources
public class DictionaryResourcesService : IDictionaryResourcesService
{
- #region CONSTRUCTORS
+ #region FIELDS
- public DictionaryResourcesService() { }
+ protected ResourceDictionary _resources;
#endregion
@@ -26,9 +28,11 @@ namespace VDownload.Services.UI.DictionaryResources
#region PUBLIC METHODS
+ public async Task Initialize(ResourceDictionary arg) => await Task.Run(() => _resources = arg);
+
public T Get(string key)
{
- Application.Current.Resources.TryGetValue(key, out object value);
+ _resources.TryGetValue(key, out object value);
if (value is not null && value is T cast)
{
return cast;
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.DictionaryResources/VDownload.Services.UI.DictionaryResources.csproj b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.DictionaryResources/VDownload.Services.UI.DictionaryResources.csproj
index 0404798..54b8411 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.DictionaryResources/VDownload.Services.UI.DictionaryResources.csproj
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.DictionaryResources/VDownload.Services.UI.DictionaryResources.csproj
@@ -15,6 +15,7 @@
+
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Notifications/NotificationsService.cs b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Notifications/NotificationsService.cs
index 653760b..527dbd2 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Notifications/NotificationsService.cs
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Notifications/NotificationsService.cs
@@ -1,17 +1,19 @@
using Microsoft.Toolkit.Uwp.Notifications;
+using Microsoft.UI.Xaml;
using Microsoft.Windows.AppNotifications;
using Microsoft.Windows.AppNotifications.Builder;
+using SimpleToolkit.UI.WinUI.Helpers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using VDownload.Services.Common;
namespace VDownload.Services.UI.Notifications
{
- public interface INotificationsService
+ public interface INotificationsService : IInitializableService
{
- void Initialize(Action notificationInvoked);
void SendNotification(string title, IEnumerable message);
}
@@ -19,7 +21,15 @@ namespace VDownload.Services.UI.Notifications
public class NotificationsService : INotificationsService
{
- #region CONSTRCUTORS
+ #region FIELDS
+
+ protected Window _window;
+
+ #endregion
+
+
+
+ #region CONSTRUCTORS
~NotificationsService()
{
@@ -32,12 +42,14 @@ namespace VDownload.Services.UI.Notifications
#region PUBLIC METHODS
- public void Initialize(Action notificationInvoked)
+ public async Task Initialize(Window window) => await Task.Run(() =>
{
- AppNotificationManager.Default.NotificationInvoked += (obj, args) => notificationInvoked.Invoke();
+ _window = window;
+
+ AppNotificationManager.Default.NotificationInvoked += NotificationInvoked;
AppNotificationManager.Default.Register();
- }
+ });
public void SendNotification(string title, IEnumerable message)
{
@@ -54,5 +66,13 @@ namespace VDownload.Services.UI.Notifications
}
#endregion
+
+
+
+ #region PRIVATE METHODS
+
+ private void NotificationInvoked(AppNotificationManager sender, AppNotificationActivatedEventArgs args) => WindowHelper.ShowWindow(_window);
+
+ #endregion
}
}
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Notifications/VDownload.Services.UI.Notifications.csproj b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Notifications/VDownload.Services.UI.Notifications.csproj
index 8d89a91..e6fa01d 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Notifications/VDownload.Services.UI.Notifications.csproj
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Notifications/VDownload.Services.UI.Notifications.csproj
@@ -13,5 +13,10 @@
+
+
+
+
+
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StoragePicker/StoragePickerService.cs b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StoragePicker/StoragePickerService.cs
index 5981f8c..effbd19 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StoragePicker/StoragePickerService.cs
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StoragePicker/StoragePickerService.cs
@@ -3,24 +3,15 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
+using VDownload.Services.Common;
using Windows.Storage;
using Windows.Storage.Pickers;
using WinRT.Interop;
namespace VDownload.Services.UI.StoragePicker
{
- public interface IStoragePickerService
+ public interface IStoragePickerService : IInitializableService
{
- #region PROPERTIES
-
- Window DefaultRoot { get; set; }
-
- #endregion
-
-
-
- #region METHODS
-
Task OpenDirectory();
Task OpenDirectory(StoragePickerStartLocation startLocation);
Task> OpenMultipleFiles();
@@ -33,17 +24,15 @@ namespace VDownload.Services.UI.StoragePicker
Task OpenSingleFile(string[] fileTypes, StoragePickerStartLocation startLocation);
Task SaveFile(FileSavePickerFileTypeChoice[] fileTypes, string defaultFileType);
Task SaveFile(FileSavePickerFileTypeChoice[] fileTypes, string defaultFileType, StoragePickerStartLocation startLocation);
-
- #endregion
}
public class StoragePickerService : IStoragePickerService
{
- #region PROPERTIES
+ #region FIELDS
- public Window DefaultRoot { get; set; }
+ protected Window _root;
#endregion
@@ -51,6 +40,8 @@ namespace VDownload.Services.UI.StoragePicker
#region PUBLIC METHODS
+ public async Task Initialize(Window arg) => await Task.Run(() => _root = arg);
+
public async Task OpenDirectory() => await OpenDirectory(StoragePickerStartLocation.Unspecified);
public async Task OpenDirectory(StoragePickerStartLocation startLocation)
{
@@ -111,7 +102,7 @@ namespace VDownload.Services.UI.StoragePicker
protected void InitializePicker(object picker)
{
- var hwnd = WindowNative.GetWindowHandle(DefaultRoot);
+ var hwnd = WindowNative.GetWindowHandle(_root);
InitializeWithWindow.Initialize(picker, hwnd);
}
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StoragePicker/VDownload.Services.UI.StoragePicker.csproj b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StoragePicker/VDownload.Services.UI.StoragePicker.csproj
index 6ea7798..8407c20 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StoragePicker/VDownload.Services.UI.StoragePicker.csproj
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StoragePicker/VDownload.Services.UI.StoragePicker.csproj
@@ -13,4 +13,8 @@
+
+
+
+
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StringResources/StringResourcesService.cs b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StringResources/StringResourcesService.cs
index e7bf3e0..97f9e2c 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StringResources/StringResourcesService.cs
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StringResources/StringResourcesService.cs
@@ -82,7 +82,11 @@ namespace VDownload.Services.UI.StringResources
#region PRIVATE METHODS
- protected StringResources BuildResource(string resourceName) => new StringResources(ResourceLoader.GetForViewIndependentUse($"{_configurationService.Common.StringResourcesAssembly}/{resourceName}"));
+ protected StringResources BuildResource(string resourceName)
+ {
+ ResourceLoader loader = new ResourceLoader($"{_configurationService.Common.StringResourcesAssembly}/{resourceName}");
+ return new StringResources(loader);
+ }
#endregion
}
diff --git a/VDownload.sln b/VDownload.sln
index 117e850..0261eef 100644
--- a/VDownload.sln
+++ b/VDownload.sln
@@ -53,8 +53,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VDownload.Core", "VDownload
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VDownload.Models", "VDownload.Models\VDownload.Models.csproj", "{16B56EA9-C218-4A8E-B3DE-29F200EF2EE2}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VDownload.Services.UI.StringResources", "VDownload.Services\VDownload.Services.UI\VDownload.Services.UI.StringResources\VDownload.Services.UI.StringResources.csproj", "{6F6CA153-1AC6-454A-ACDC-2C706E2A437E}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VDownload.Services.UI.DictionaryResources", "VDownload.Services\VDownload.Services.UI\VDownload.Services.UI.DictionaryResources\VDownload.Services.UI.DictionaryResources.csproj", "{8DC55331-B9F3-4811-8474-348662963260}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VDownload.Sources.Twitch.Settings", "VDownload.Sources\VDownload.Sources.Twitch\VDownload.Sources.Twitch.Settings\VDownload.Sources.Twitch.Settings.csproj", "{A726FD43-B111-423B-BAF6-D65B4C0E37B5}"
@@ -73,7 +71,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VDownload.Services.Utility.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VDownload.Services.Data.Application", "VDownload.Services\VDownload.Services.Data\VDownload.Services.Data.Application\VDownload.Services.Data.Application.csproj", "{4983E15B-3730-4646-A2BD-16B9ECC9E4FF}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VDownload.Services.Data.Subscriptions", "VDownload.Services\VDownload.Services.Data\VDownload.Services.Data.Subscriptions\VDownload.Services.Data.Subscriptions.csproj", "{3193DABC-87F8-4256-9449-3CF42FEF7098}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VDownload.Services.Data.Subscriptions", "VDownload.Services\VDownload.Services.Data\VDownload.Services.Data.Subscriptions\VDownload.Services.Data.Subscriptions.csproj", "{3193DABC-87F8-4256-9449-3CF42FEF7098}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VDownload.Services.Common", "VDownload.Services\VDownload.Services.Common\VDownload.Services.Common.csproj", "{267F5A31-1257-4820-9FE5-C11D26CC3C55}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -381,22 +381,6 @@ Global
{16B56EA9-C218-4A8E-B3DE-29F200EF2EE2}.Release|x64.Build.0 = Release|Any CPU
{16B56EA9-C218-4A8E-B3DE-29F200EF2EE2}.Release|x86.ActiveCfg = Release|Any CPU
{16B56EA9-C218-4A8E-B3DE-29F200EF2EE2}.Release|x86.Build.0 = Release|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Debug|ARM64.Build.0 = Debug|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Debug|x64.ActiveCfg = Debug|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Debug|x64.Build.0 = Debug|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Debug|x86.ActiveCfg = Debug|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Debug|x86.Build.0 = Debug|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Release|Any CPU.Build.0 = Release|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Release|ARM64.ActiveCfg = Release|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Release|ARM64.Build.0 = Release|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Release|x64.ActiveCfg = Release|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Release|x64.Build.0 = Release|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Release|x86.ActiveCfg = Release|Any CPU
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E}.Release|x86.Build.0 = Release|Any CPU
{8DC55331-B9F3-4811-8474-348662963260}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8DC55331-B9F3-4811-8474-348662963260}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8DC55331-B9F3-4811-8474-348662963260}.Debug|ARM64.ActiveCfg = Debug|Any CPU
@@ -557,6 +541,22 @@ Global
{3193DABC-87F8-4256-9449-3CF42FEF7098}.Release|x64.Build.0 = Release|Any CPU
{3193DABC-87F8-4256-9449-3CF42FEF7098}.Release|x86.ActiveCfg = Release|Any CPU
{3193DABC-87F8-4256-9449-3CF42FEF7098}.Release|x86.Build.0 = Release|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Debug|x64.Build.0 = Debug|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Debug|x86.Build.0 = Debug|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Release|Any CPU.Build.0 = Release|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Release|ARM64.Build.0 = Release|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Release|x64.ActiveCfg = Release|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Release|x64.Build.0 = Release|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Release|x86.ActiveCfg = Release|Any CPU
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -582,7 +582,6 @@ Global
{711FA7BE-27DA-425D-9777-967F6E519CFF} = {8D94F264-4EE9-4C24-AB77-2CCA36858309}
{8E850249-E79D-40E7-B02D-393632DF8B8E} = {9A8EB967-1EAB-439E-8FDB-B9ACAC6499EC}
{64A217AE-4E95-468E-85C3-67C27D689FF4} = {9A8EB967-1EAB-439E-8FDB-B9ACAC6499EC}
- {6F6CA153-1AC6-454A-ACDC-2C706E2A437E} = {4CC2DC7D-27D2-4F52-89DF-7D45B41BB40F}
{8DC55331-B9F3-4811-8474-348662963260} = {4CC2DC7D-27D2-4F52-89DF-7D45B41BB40F}
{A726FD43-B111-423B-BAF6-D65B4C0E37B5} = {8D94F264-4EE9-4C24-AB77-2CCA36858309}
{E1D4352C-51AC-4572-8515-0B4E89A2442F} = {8539067C-9968-4AEB-928C-FEDC43989A79}
@@ -593,6 +592,7 @@ Global
{4647EFB5-A206-4F47-976D-BAED11B52579} = {1020167A-4101-496E-82CF-41B65769DD28}
{4983E15B-3730-4646-A2BD-16B9ECC9E4FF} = {05A45688-7EEF-4656-818A-2477625C3707}
{3193DABC-87F8-4256-9449-3CF42FEF7098} = {05A45688-7EEF-4656-818A-2477625C3707}
+ {267F5A31-1257-4820-9FE5-C11D26CC3C55} = {8D351DB0-74E6-4C1E-A123-34D6BBBD5585}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9FD7B842-C3E2-4FD0-AD8A-C8E619280AB7}
diff --git a/VDownload/Activation/ActivationHandler.cs b/VDownload/Activation/ActivationHandler.cs
new file mode 100644
index 0000000..1d6ef5f
--- /dev/null
+++ b/VDownload/Activation/ActivationHandler.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace VDownload.Activation
+{
+ public interface IActivationHandler
+ {
+ bool CanHandle(object args);
+ Task HandleAsync(object args);
+ }
+
+
+
+ public abstract class ActivationHandler : IActivationHandler
+ where T : class
+ {
+ #region PUBLIC METHODS
+
+ public bool CanHandle(object args) => args is T && CanHandleInternal((args as T)!);
+
+ public async Task HandleAsync(object args) => await HandleInternalAsync((args as T)!);
+
+ #endregion
+
+
+
+ #region PRIVATE METHODS
+
+ protected virtual bool CanHandleInternal(T args) => true;
+
+ protected abstract Task HandleInternalAsync(T args);
+
+ #endregion
+ }
+}
diff --git a/VDownload/Activation/ActivationService.cs b/VDownload/Activation/ActivationService.cs
new file mode 100644
index 0000000..1cb9125
--- /dev/null
+++ b/VDownload/Activation/ActivationService.cs
@@ -0,0 +1,137 @@
+using Microsoft.UI.Xaml;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using VDownload.Core.Views;
+using VDownload.Services.Common;
+using VDownload.Services.Data.Application;
+using VDownload.Services.Data.Authentication;
+using VDownload.Services.Data.Settings;
+using VDownload.Services.Data.Subscriptions;
+using VDownload.Services.UI.Dialogs;
+using VDownload.Services.UI.DictionaryResources;
+using VDownload.Services.UI.Notifications;
+using VDownload.Services.UI.StoragePicker;
+
+namespace VDownload.Activation
+{
+ public interface IActivationService
+ {
+ Task ActivateAsync(object activationArgs);
+ }
+
+
+
+ public class ActivationService : IActivationService
+ {
+ #region SERVICES
+ protected readonly ActivationHandler _defaultHandler;
+ protected readonly IEnumerable _activationHandlers;
+
+ #endregion
+
+
+
+ #region FIELDS
+
+ protected readonly ICollection> _beforeActivationInitializations = new List>();
+ protected readonly ICollection> _afterActivationInitializations = new List>();
+ protected readonly ICollection> _afterWindowRootLoadedInitializations = new List>();
+
+ protected BaseWindow _window;
+
+ #endregion
+
+
+
+ #region CONSTRUCTORS
+
+ public ActivationService(ActivationHandler defaultHandler, IEnumerable activationHandlers, ISettingsService settingsService, IApplicationDataService applicationDataService, IAuthenticationDataService authenticationDataService, ISubscriptionsDataService subscriptionsDataService, IStoragePickerService storagePickerService, INotificationsService notificationsService, IDictionaryResourcesService dictionaryResourcesService, IDialogsService dialogsService)
+ {
+ _defaultHandler = defaultHandler;
+ _activationHandlers = activationHandlers;
+
+ _beforeActivationInitializations.Add(() => dictionaryResourcesService.Initialize((App.Current as App).Resources));
+
+ _afterActivationInitializations.Add(settingsService.Initialize);
+ _afterActivationInitializations.Add(applicationDataService.Initialize);
+ _afterActivationInitializations.Add(authenticationDataService.Initialize);
+ _afterActivationInitializations.Add(subscriptionsDataService.Initialize);
+ _afterActivationInitializations.Add(() => storagePickerService.Initialize(_window));
+ _afterActivationInitializations.Add(() => notificationsService.Initialize(_window));
+
+ _afterWindowRootLoadedInitializations.Add(() => dialogsService.Initialize(_window.XamlRoot));
+ }
+
+ #endregion
+
+
+
+ #region PUBLIC METHODS
+
+ public async Task ActivateAsync(object activationArgs)
+ {
+ File.AppendAllText("C:\\Users\\mateusz\\Desktop\\test.txt", "testactivate\n");
+ await InitializeAsync();
+ ViewModelToViewConverter.Initialize((App.Current as App)!.Host.Services);
+ File.AppendAllText("C:\\Users\\mateusz\\Desktop\\test.txt", "test1\n");
+
+ await HandleActivationAsync(activationArgs);
+
+ File.AppendAllText("C:\\Users\\mateusz\\Desktop\\test.txt", "test2\n");
+ _window = App.GetService();
+ File.AppendAllText("C:\\Users\\mateusz\\Desktop\\test.txt", "test3\n");
+ _window.RootLoaded += Window_RootLoaded;
+ _window.Activate();
+ File.AppendAllText("C:\\Users\\mateusz\\Desktop\\test.txt", "test4\n");
+
+ await StartupAsync();
+ }
+
+ #endregion
+
+
+
+ #region PRIVATE METHODS
+
+ #region EVENT HANDLERS
+
+ protected async void Window_RootLoaded(object sender, EventArgs e) => await AfterWindowRootLoaded();
+
+ #endregion
+
+ protected async Task InitializeAsync()
+ {
+ List tasks = new List();
+ foreach (Func init in _beforeActivationInitializations)
+ {
+ tasks.Add(init.Invoke());
+ }
+ await Task.WhenAll(tasks);
+ }
+
+ protected async Task StartupAsync() => await Task.WhenAll(_afterActivationInitializations.Select(x => x.Invoke()));
+
+ protected async Task AfterWindowRootLoaded() => await Task.WhenAll(_afterWindowRootLoadedInitializations.Select(x => x.Invoke()));
+
+ protected async Task HandleActivationAsync(object activationArgs)
+ {
+ var activationHandler = _activationHandlers.FirstOrDefault(h => h.CanHandle(activationArgs));
+
+ if (activationHandler != null)
+ {
+ await activationHandler.HandleAsync(activationArgs);
+ }
+
+ if (_defaultHandler.CanHandle(activationArgs))
+ {
+ await _defaultHandler.HandleAsync(activationArgs);
+ }
+ }
+
+ #endregion
+ }
+}
diff --git a/VDownload/Activation/DefaultActivationHandler.cs b/VDownload/Activation/DefaultActivationHandler.cs
new file mode 100644
index 0000000..402ec4c
--- /dev/null
+++ b/VDownload/Activation/DefaultActivationHandler.cs
@@ -0,0 +1,21 @@
+using Microsoft.UI.Xaml;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace VDownload.Activation
+{
+ public class DefaultActivationHandler : ActivationHandler
+ {
+ #region PRIVATE METHODS
+
+ protected override async Task HandleInternalAsync(LaunchActivatedEventArgs args)
+ {
+ await Task.CompletedTask;
+ }
+
+ #endregion
+ }
+}
diff --git a/VDownload/App.xaml.cs b/VDownload/App.xaml.cs
index fc2d7c1..22ce65d 100644
--- a/VDownload/App.xaml.cs
+++ b/VDownload/App.xaml.cs
@@ -1,12 +1,18 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
using Microsoft.Toolkit.Uwp.Notifications;
+using Microsoft.UI;
using Microsoft.UI.Xaml;
using Microsoft.Windows.AppNotifications;
using System;
+using System.IO;
+using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
+using VDownload.Activation;
using VDownload.Core.Tasks;
using VDownload.Core.ViewModels;
using VDownload.Core.ViewModels.About;
@@ -30,7 +36,6 @@ using VDownload.Services.UI.Dialogs;
using VDownload.Services.UI.DictionaryResources;
using VDownload.Services.UI.Notifications;
using VDownload.Services.UI.StoragePicker;
-using VDownload.Services.UI.StringResources;
using VDownload.Services.UI.WebView;
using VDownload.Services.Utility.Encryption;
using VDownload.Services.Utility.FFmpeg;
@@ -47,11 +52,21 @@ namespace VDownload
{
public partial class App : Application
{
- #region FIELDS
+ #region PROPERTIES
- protected IServiceProvider _serviceProvider;
+ public static BaseWindow Window { get; protected set; }
- protected BaseWindow _window;
+ public static T GetService() where T : class
+ {
+ if ((App.Current as App)!.Host.Services.GetService(typeof(T)) is not T service)
+ {
+ throw new ArgumentException($"{typeof(T)} needs to be registered in ConfigureServices within App.xaml.cs.");
+ }
+
+ return service;
+ }
+
+ public IHost Host { get; set; }
#endregion
@@ -63,22 +78,36 @@ namespace VDownload
{
this.InitializeComponent();
+ Host = Microsoft.Extensions.Hosting.Host
+ .CreateDefaultBuilder()
+ .UseContentRoot(AppContext.BaseDirectory)
+ .ConfigureAppConfiguration((builder) =>
+ {
+ builder.Sources.Add(new JsonConfigurationSource
+ {
+ Path = "configuration.json"
+ });
+ })
+ .ConfigureLogging((builder) =>
+ {
+ builder.AddConsole();
+ })
+ .ConfigureServices((context, services) =>
+ {
+ BuildCore(services);
- IServiceCollection services = new ServiceCollection();
+ BuildDataServices(services);
+ BuildUIServices(services);
+ BuildUtilityServices(services);
+ BuildSourcesServices(services);
- BuildCore(services);
+ BuildTasksManager(services);
+ BuildPresentation(services);
+ BuildActivation(services);
+ })
+ .Build();
- BuildConfiguration(services);
-
- BuildDataServices(services);
- BuildUIServices(services);
- BuildUtilityServices(services);
- BuildSourcesServices(services);
-
- BuildTasksManager(services);
- BuildPresentation(services);
-
- _serviceProvider = services.BuildServiceProvider();
+ UnhandledException += UnhandledExceptionCatched;
}
#endregion
@@ -87,27 +116,30 @@ namespace VDownload
#region PRIVATE METHODS
+ #region EVENT HANDLERS
+
+ protected override async void OnLaunched(LaunchActivatedEventArgs args)
+ {
+ base.OnLaunched(args);
+
+ File.AppendAllText("C:\\Users\\mateusz\\Desktop\\test.txt", "testlaunched\n");
+
+ await GetService().ActivateAsync(args);
+ }
+
+ protected void UnhandledExceptionCatched(object sender, Microsoft.UI.Xaml.UnhandledExceptionEventArgs e)
+ {
+ File.AppendAllText("C:\\Users\\mateusz\\Desktop\\test.txt", $"test {e.Message} {e.Exception.StackTrace}\n");
+ Environment.Exit(0);
+ }
+
+ #endregion
+
protected void BuildCore(IServiceCollection services)
{
services.AddSingleton();
}
- protected void BuildConfiguration(IServiceCollection services)
- {
- IConfigurationBuilder configBuilder = new ConfigurationBuilder
- {
- Sources =
- {
- new JsonConfigurationSource
- {
- Path = "configuration.json"
- }
- }
- };
- IConfiguration config = configBuilder.Build();
- services.AddSingleton(config);
- }
-
protected void BuildDataServices(IServiceCollection services)
{
services.AddSingleton();
@@ -119,7 +151,6 @@ namespace VDownload
protected void BuildUIServices(IServiceCollection services)
{
- services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
@@ -178,40 +209,11 @@ namespace VDownload
services.AddTransient();
}
- protected async Task InitializeServices()
+ protected void BuildActivation(IServiceCollection services)
{
- IApplicationDataService applicationDataService = _serviceProvider.GetService();
- ISettingsService settingsService = _serviceProvider.GetService();
- IAuthenticationDataService authenticationDataService = _serviceProvider.GetService();
- ISubscriptionsDataService subscriptionsDataService = _serviceProvider.GetService();
- Task initViewModelToViewConverterTask = Task.Run(() => ViewModelToViewConverter.ServiceProvider = _serviceProvider);
- Task initStoragePickerServiceTask = Task.Run(() => _serviceProvider.GetService().DefaultRoot = _window);
- Task initNotificationsServiceTask = Task.Run(() => _serviceProvider.GetService().Initialize(() => WindowHelper.ShowWindow(_window)));
+ services.AddTransient, DefaultActivationHandler>();
- await Task.WhenAll(
- applicationDataService.Load(),
- settingsService.Load(),
- authenticationDataService.Load(),
- subscriptionsDataService.Load(),
- initStoragePickerServiceTask,
- initViewModelToViewConverterTask,
- initNotificationsServiceTask
- );
- }
-
- protected override async void OnLaunched(LaunchActivatedEventArgs args)
- {
- _window = _serviceProvider.GetService();
- _window.RootLoaded += Window_RootLoaded;
- _window.Activate();
-
- await InitializeServices();
- }
-
- protected void Window_RootLoaded(object sender, EventArgs e)
- {
- IDialogsService dialogsService = _serviceProvider.GetService();
- dialogsService.DefaultRoot = _window.XamlRoot;
+ services.AddSingleton();
}
#endregion
diff --git a/VDownload/Package.appxmanifest b/VDownload/Package.appxmanifest
index a07c131..0efd66c 100644
--- a/VDownload/Package.appxmanifest
+++ b/VDownload/Package.appxmanifest
@@ -11,7 +11,7 @@
diff --git a/VDownload/VDownload.csproj b/VDownload/VDownload.csproj
index f25b174..eefb73b 100644
--- a/VDownload/VDownload.csproj
+++ b/VDownload/VDownload.csproj
@@ -1,24 +1,24 @@
WinExe
- net8.0-windows10.0.19041.0
- 10.0.17763.0
- VDownload
- app.manifest
- x86;x64;ARM64
- win10-x86;win10-x64;win10-arm64
- win10-$(Platform).pubxml
- true
- true
- true
- true
- false
- Assets\Logo\Logo.ico
- LICENSE
- True
- 0.0.0
- false
- true
+ net8.0-windows10.0.19041.0
+ 10.0.17763.0
+ VDownload
+ app.manifest
+ x64;ARM64
+ win10-x64;win10-arm64
+ win10-$(Platform).pubxml
+ true
+ true
+ true
+ false
+ Assets\Logo\Logo.ico
+ LICENSE
+ True
+ 0.0.0
+ false
+ None
+ true
@@ -168,6 +168,7 @@
+
@@ -188,8 +189,12 @@
+
+
+
+
@@ -199,14 +204,17 @@
-
+
+
+
+
diff --git a/VDownload/WindowHelper.cs b/VDownload/WindowHelper.cs
deleted file mode 100644
index e63b411..0000000
--- a/VDownload/WindowHelper.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using Microsoft.UI.Xaml;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.InteropServices;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace VDownload
-{
- public static partial class WindowHelper
- {
- #region PUBLIC METHODS
-
- public static void ShowWindow(Window window)
- {
- // Bring the window to the foreground... first get the window handle...
- var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(window);
-
- // Restore window if minimized... requires DLL import above
- ShowWindow(hwnd, 0x00000009);
-
- // And call SetForegroundWindow... requires DLL import above
- SetForegroundWindow(hwnd);
- }
-
- #endregion
-
-
-
- #region PRIVATE METHODS
-
- [LibraryImport("user32.dll")]
- [return: MarshalAs(UnmanagedType.Bool)]
- private static partial bool ShowWindow(IntPtr hWnd, int nCmdShow);
-
- [LibraryImport("user32.dll")]
- [return: MarshalAs(UnmanagedType.Bool)]
- private static partial bool SetForegroundWindow(IntPtr hWnd);
-
- #endregion
- }
-}
diff --git a/VDownload/app.manifest b/VDownload/app.manifest
index f61aa10..92e60ea 100644
--- a/VDownload/app.manifest
+++ b/VDownload/app.manifest
@@ -1,6 +1,6 @@
-
+
@@ -13,4 +13,4 @@
PerMonitorV2
-
\ No newline at end of file
+