Merge pull request #84 from mateuszskoczek/features/github_actions
Features/GitHub actions
This commit is contained in:
9
.github/config/gitversion.yml
vendored
9
.github/config/gitversion.yml
vendored
@@ -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: []
|
||||
|
||||
66
.github/workflows/push_master.yml
vendored
Normal file
66
.github/workflows/push_master.yml
vendored
Normal file
@@ -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
|
||||
41
VDownload.Core/VDownload.Core.Strings/StringResource.cs
Normal file
41
VDownload.Core/VDownload.Core.Strings/StringResource.cs
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,48 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PRIResource Update="Strings\en-US\AboutViewResources.resw">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</PRIResource>
|
||||
<PRIResource Update="Strings\en-US\AuthenticationViewResources.resw">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</PRIResource>
|
||||
<PRIResource Update="Strings\en-US\BaseViewResources.resw">
|
||||
<Generator></Generator>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</PRIResource>
|
||||
<PRIResource Update="Strings\en-US\CommonResources.resw">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</PRIResource>
|
||||
<PRIResource Update="Strings\en-US\DialogButtonsResources.resw">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</PRIResource>
|
||||
<PRIResource Update="Strings\en-US\FilenameTemplateResources.resw">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</PRIResource>
|
||||
<PRIResource Update="Strings\en-US\HomeDownloadsViewResources.resw">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</PRIResource>
|
||||
<PRIResource Update="Strings\en-US\HomeVideoCollectionViewResources.resw">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</PRIResource>
|
||||
<PRIResource Update="Strings\en-US\HomeVideoViewResources.resw">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</PRIResource>
|
||||
<PRIResource Update="Strings\en-US\HomeViewResources.resw">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</PRIResource>
|
||||
<PRIResource Update="Strings\en-US\NotificationsResources.resw">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</PRIResource>
|
||||
<PRIResource Update="Strings\en-US\SearchResources.resw">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</PRIResource>
|
||||
<PRIResource Update="Strings\en-US\SettingsViewResources.resw">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</PRIResource>
|
||||
<PRIResource Update="Strings\en-US\SubscriptionsViewResources.resw">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</PRIResource>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -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<string> content = new List<string>()
|
||||
{
|
||||
$"{_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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
<ProjectReference Include="..\..\VDownload.Services\VDownload.Services.Data\VDownload.Services.Data.Configuration\VDownload.Services.Data.Configuration.csproj" />
|
||||
<ProjectReference Include="..\..\VDownload.Services\VDownload.Services.Data\VDownload.Services.Data.Settings\VDownload.Services.Data.Settings.csproj" />
|
||||
<ProjectReference Include="..\..\VDownload.Services\VDownload.Services.UI\VDownload.Services.UI.Notifications\VDownload.Services.UI.Notifications.csproj" />
|
||||
<ProjectReference Include="..\..\VDownload.Services\VDownload.Services.UI\VDownload.Services.UI.StringResources\VDownload.Services.UI.StringResources.csproj" />
|
||||
<ProjectReference Include="..\..\VDownload.Services\VDownload.Services.Utility\VDownload.Services.Utility.FFmpeg\VDownload.Services.Utility.FFmpeg.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Core.Strings\VDownload.Core.Strings.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -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<AssemblyInformationalVersionAttribute>()?.InformationalVersion;
|
||||
if (version == "0.0.0")
|
||||
{
|
||||
version = _stringResourcesService.AboutViewResources.Get("SelfbuiltVersion");
|
||||
version = StringResourcesManager.AboutView.Get("SelfbuiltVersion");
|
||||
}
|
||||
_version = version;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<NavigationViewItem>
|
||||
@@ -64,13 +62,13 @@ namespace VDownload.Core.ViewModels
|
||||
{
|
||||
new NavigationViewItem()
|
||||
{
|
||||
Name = _stringResourcesService.BaseViewResources.Get("HomeNavigationViewItem"),
|
||||
Name = StringResourcesManager.BaseView.Get("HomeNavigationViewItem"),
|
||||
IconSource = _dictionaryResourcesService.Get<string>("ImageBaseViewHome"),
|
||||
ViewModel = typeof(HomeViewModel),
|
||||
},
|
||||
new NavigationViewItem()
|
||||
{
|
||||
Name = _stringResourcesService.BaseViewResources.Get("SubscriptionsNavigationViewItem"),
|
||||
Name = StringResourcesManager.BaseView.Get("SubscriptionsNavigationViewItem"),
|
||||
IconSource = _dictionaryResourcesService.Get<string>("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<string>("ImageBaseViewAbout"),
|
||||
ViewModel = typeof(AboutViewModel),
|
||||
},
|
||||
new NavigationViewItem()
|
||||
{
|
||||
Name = _stringResourcesService.BaseViewResources.Get("AuthenticationNavigationViewItem"),
|
||||
Name = StringResourcesManager.BaseView.Get("AuthenticationNavigationViewItem"),
|
||||
IconSource = _dictionaryResourcesService.Get<string>("ImageBaseViewAuthentication"),
|
||||
ViewModel = typeof(AuthenticationViewModel),
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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<VideoViewModel>();
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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<Task> tasks = new List<Task>();
|
||||
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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<PlaylistViewModel>();
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
<ProjectReference Include="..\..\VDownload.Services\VDownload.Services.UI\VDownload.Services.UI.Dialogs\VDownload.Services.UI.Dialogs.csproj" />
|
||||
<ProjectReference Include="..\..\VDownload.Services\VDownload.Services.UI\VDownload.Services.UI.DictionaryResources\VDownload.Services.UI.DictionaryResources.csproj" />
|
||||
<ProjectReference Include="..\..\VDownload.Services\VDownload.Services.UI\VDownload.Services.UI.StoragePicker\VDownload.Services.UI.StoragePicker.csproj" />
|
||||
<ProjectReference Include="..\..\VDownload.Services\VDownload.Services.UI\VDownload.Services.UI.StringResources\VDownload.Services.UI.StringResources.csproj" />
|
||||
<ProjectReference Include="..\..\VDownload.Services\VDownload.Services.UI\VDownload.Services.UI.WebView\VDownload.Services.UI.WebView.csproj" />
|
||||
<ProjectReference Include="..\..\VDownload.Services\VDownload.Services.Utility\VDownload.Services.Utility.Filename\VDownload.Services.Utility.Filename.csproj" />
|
||||
<ProjectReference Include="..\..\VDownload.Sources\VDownload.Sources.Twitch\VDownload.Sources.Twitch.Authentication\VDownload.Sources.Twitch.Authentication.csproj" />
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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<T>
|
||||
{
|
||||
#region METHODS
|
||||
|
||||
Task Initialize(T arg);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
@@ -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))
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\VDownload.Services.Common\VDownload.Services.Common.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services.Data.Configuration\VDownload.Services.Data.Configuration.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\VDownload.Services.Common\VDownload.Services.Common.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services.Data.Configuration\VDownload.Services.Data.Configuration.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\VDownload.Models\VDownload.Models.csproj" />
|
||||
<ProjectReference Include="..\..\..\VDownload.Sources\VDownload.Sources.Twitch\VDownload.Sources.Twitch.Settings\VDownload.Sources.Twitch.Settings.csproj" />
|
||||
<ProjectReference Include="..\..\VDownload.Services.Common\VDownload.Services.Common.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services.Data.Configuration\VDownload.Services.Data.Configuration.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\VDownload.Models\VDownload.Models.csproj" />
|
||||
<ProjectReference Include="..\..\VDownload.Services.Common\VDownload.Services.Common.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services.Data.Configuration\VDownload.Services.Data.Configuration.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -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<XamlRoot>
|
||||
{
|
||||
#region PROPERTIES
|
||||
|
||||
XamlRoot DefaultRoot { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region METHODS
|
||||
|
||||
Task ShowClose(string title, string message);
|
||||
Task<DialogResult> 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<DialogResult> ShowTriple(string title, string message, string primaryButtonText, string secondaryButtonText, string cancelButtonText);
|
||||
Task<DialogResultYesNo> ShowYesNo(string title, string message);
|
||||
Task<DialogResultYesNoCancel> 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
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\VDownload.Services.UI.StringResources\VDownload.Services.UI.StringResources.csproj" />
|
||||
<ProjectReference Include="..\..\..\VDownload.Core\VDownload.Core.Strings\VDownload.Core.Strings.csproj" />
|
||||
<ProjectReference Include="..\..\VDownload.Services.Common\VDownload.Services.Common.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -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<ResourceDictionary>
|
||||
{
|
||||
T Get<T>(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<T>(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;
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\VDownload.Services.Common\VDownload.Services.Common.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services.UI.Notifications\VDownload.Services.UI.Notifications.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -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<Window>
|
||||
{
|
||||
void Initialize(Action notificationInvoked);
|
||||
void SendNotification(string title, IEnumerable<string> 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<string> 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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,5 +13,10 @@
|
||||
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.3" />
|
||||
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.5.240227000" />
|
||||
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.3233" />
|
||||
<PackageReference Include="SimpleToolkit.UI.WinUI.Helpers" Version="1.7.5" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\VDownload.Services.Common\VDownload.Services.Common.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -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<Window>
|
||||
{
|
||||
#region PROPERTIES
|
||||
|
||||
Window DefaultRoot { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region METHODS
|
||||
|
||||
Task<string?> OpenDirectory();
|
||||
Task<string?> OpenDirectory(StoragePickerStartLocation startLocation);
|
||||
Task<IEnumerable<string>> OpenMultipleFiles();
|
||||
@@ -33,17 +24,15 @@ namespace VDownload.Services.UI.StoragePicker
|
||||
Task<string?> OpenSingleFile(string[] fileTypes, StoragePickerStartLocation startLocation);
|
||||
Task<string?> SaveFile(FileSavePickerFileTypeChoice[] fileTypes, string defaultFileType);
|
||||
Task<string?> 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<string?> OpenDirectory() => await OpenDirectory(StoragePickerStartLocation.Unspecified);
|
||||
public async Task<string?> 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -13,4 +13,8 @@
|
||||
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.5.240227000" />
|
||||
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.3233" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\VDownload.Services.Common\VDownload.Services.Common.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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}
|
||||
|
||||
38
VDownload/Activation/ActivationHandler.cs
Normal file
38
VDownload/Activation/ActivationHandler.cs
Normal file
@@ -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<T> : 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
|
||||
}
|
||||
}
|
||||
137
VDownload/Activation/ActivationService.cs
Normal file
137
VDownload/Activation/ActivationService.cs
Normal file
@@ -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<LaunchActivatedEventArgs> _defaultHandler;
|
||||
protected readonly IEnumerable<IActivationHandler> _activationHandlers;
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region FIELDS
|
||||
|
||||
protected readonly ICollection<Func<Task>> _beforeActivationInitializations = new List<Func<Task>>();
|
||||
protected readonly ICollection<Func<Task>> _afterActivationInitializations = new List<Func<Task>>();
|
||||
protected readonly ICollection<Func<Task>> _afterWindowRootLoadedInitializations = new List<Func<Task>>();
|
||||
|
||||
protected BaseWindow _window;
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region CONSTRUCTORS
|
||||
|
||||
public ActivationService(ActivationHandler<LaunchActivatedEventArgs> defaultHandler, IEnumerable<IActivationHandler> 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<BaseWindow>();
|
||||
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<Task> tasks = new List<Task>();
|
||||
foreach (Func<Task> 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
|
||||
}
|
||||
}
|
||||
21
VDownload/Activation/DefaultActivationHandler.cs
Normal file
21
VDownload/Activation/DefaultActivationHandler.cs
Normal file
@@ -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<LaunchActivatedEventArgs>
|
||||
{
|
||||
#region PRIVATE METHODS
|
||||
|
||||
protected override async Task HandleInternalAsync(LaunchActivatedEventArgs args)
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -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<T>() 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,13 +78,24 @@ namespace VDownload
|
||||
{
|
||||
this.InitializeComponent();
|
||||
|
||||
|
||||
IServiceCollection services = new ServiceCollection();
|
||||
|
||||
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);
|
||||
|
||||
BuildConfiguration(services);
|
||||
|
||||
BuildDataServices(services);
|
||||
BuildUIServices(services);
|
||||
BuildUtilityServices(services);
|
||||
@@ -77,8 +103,11 @@ namespace VDownload
|
||||
|
||||
BuildTasksManager(services);
|
||||
BuildPresentation(services);
|
||||
BuildActivation(services);
|
||||
})
|
||||
.Build();
|
||||
|
||||
_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<IActivationService>().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<HttpClient>();
|
||||
}
|
||||
|
||||
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<IConfigurationService, ConfigurationService>();
|
||||
@@ -119,7 +151,6 @@ namespace VDownload
|
||||
|
||||
protected void BuildUIServices(IServiceCollection services)
|
||||
{
|
||||
services.AddSingleton<IStringResourcesService, StringResourcesService>();
|
||||
services.AddSingleton<IDictionaryResourcesService, DictionaryResourcesService>();
|
||||
services.AddSingleton<IWebViewService, WebViewService>();
|
||||
services.AddSingleton<IStoragePickerService, StoragePickerService>();
|
||||
@@ -178,40 +209,11 @@ namespace VDownload
|
||||
services.AddTransient<BaseWindow>();
|
||||
}
|
||||
|
||||
protected async Task InitializeServices()
|
||||
protected void BuildActivation(IServiceCollection services)
|
||||
{
|
||||
IApplicationDataService applicationDataService = _serviceProvider.GetService<IApplicationDataService>();
|
||||
ISettingsService settingsService = _serviceProvider.GetService<ISettingsService>();
|
||||
IAuthenticationDataService authenticationDataService = _serviceProvider.GetService<IAuthenticationDataService>();
|
||||
ISubscriptionsDataService subscriptionsDataService = _serviceProvider.GetService<ISubscriptionsDataService>();
|
||||
Task initViewModelToViewConverterTask = Task.Run(() => ViewModelToViewConverter.ServiceProvider = _serviceProvider);
|
||||
Task initStoragePickerServiceTask = Task.Run(() => _serviceProvider.GetService<IStoragePickerService>().DefaultRoot = _window);
|
||||
Task initNotificationsServiceTask = Task.Run(() => _serviceProvider.GetService<INotificationsService>().Initialize(() => WindowHelper.ShowWindow(_window)));
|
||||
services.AddTransient<ActivationHandler<LaunchActivatedEventArgs>, 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<BaseWindow>();
|
||||
_window.RootLoaded += Window_RootLoaded;
|
||||
_window.Activate();
|
||||
|
||||
await InitializeServices();
|
||||
}
|
||||
|
||||
protected void Window_RootLoaded(object sender, EventArgs e)
|
||||
{
|
||||
IDialogsService dialogsService = _serviceProvider.GetService<IDialogsService>();
|
||||
dialogsService.DefaultRoot = _window.XamlRoot;
|
||||
services.AddSingleton<IActivationService, ActivationService>();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
<Identity
|
||||
Name="VDownload"
|
||||
Publisher="CN=mateusz"
|
||||
Publisher="CN=Mateusz Skoczek"
|
||||
Version="0.0.0.0" />
|
||||
|
||||
<mp:PhoneIdentity PhoneProductId="df3e7de0-430a-4a93-a68b-48c2f3ec497a" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
|
||||
|
||||
@@ -5,11 +5,10 @@
|
||||
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
|
||||
<RootNamespace>VDownload</RootNamespace>
|
||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||
<Platforms>x86;x64;ARM64</Platforms>
|
||||
<RuntimeIdentifiers>win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
|
||||
<Platforms>x64;ARM64</Platforms>
|
||||
<RuntimeIdentifiers>win10-x64;win10-arm64</RuntimeIdentifiers>
|
||||
<PublishProfile>win10-$(Platform).pubxml</PublishProfile>
|
||||
<UseWinUI>true</UseWinUI>
|
||||
<EnableMsixTooling>true</EnableMsixTooling>
|
||||
<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
|
||||
<UseRidGraph>true</UseRidGraph>
|
||||
<EnableCoreMrtTooling Condition=" '$(BuildingInsideVisualStudio)' != 'true' ">false</EnableCoreMrtTooling>
|
||||
@@ -18,7 +17,8 @@
|
||||
<PackageRequireLicenseAcceptance>True</PackageRequireLicenseAcceptance>
|
||||
<Version>0.0.0</Version>
|
||||
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<WindowsPackageType>None</WindowsPackageType>
|
||||
<EnableMsixTooling>true</EnableMsixTooling>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Content Remove="Assets\BaseView\AuthenticationDark.png" />
|
||||
@@ -168,6 +168,7 @@
|
||||
<PackageReference Include="CommunityToolkit.WinUI.Converters" Version="8.0.240109" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.3" />
|
||||
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.5.240227000" />
|
||||
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.3233" />
|
||||
@@ -188,8 +189,12 @@
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\VDownload.Core\VDownload.Core.Strings\VDownload.Core.Strings.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Core\VDownload.Core.Tasks\VDownload.Core.Tasks.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Core\VDownload.Core.ViewModels\VDownload.Core.ViewModels.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Core\VDownload.Core.Views\VDownload.Core.Views.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Models\VDownload.Models.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services\VDownload.Services.Common\VDownload.Services.Common.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services\VDownload.Services.Data\VDownload.Services.Data.Application\VDownload.Services.Data.Application.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services\VDownload.Services.Data\VDownload.Services.Data.Authentication\VDownload.Services.Data.Authentication.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services\VDownload.Services.Data\VDownload.Services.Data.Configuration\VDownload.Services.Data.Configuration.csproj" />
|
||||
@@ -199,14 +204,17 @@
|
||||
<ProjectReference Include="..\VDownload.Services\VDownload.Services.UI\VDownload.Services.UI.DictionaryResources\VDownload.Services.UI.DictionaryResources.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services\VDownload.Services.UI\VDownload.Services.UI.Notifications\VDownload.Services.UI.Notifications.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services\VDownload.Services.UI\VDownload.Services.UI.StoragePicker\VDownload.Services.UI.StoragePicker.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services\VDownload.Services.UI\VDownload.Services.UI.StringResources\VDownload.Services.UI.StringResources.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services\VDownload.Services.UI\VDownload.Services.UI.WebView\VDownload.Services.UI.WebView.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services\VDownload.Services.Utility\VDownload.Services.Utility.Encryption\VDownload.Services.Utility.Encryption.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services\VDownload.Services.Utility\VDownload.Services.Utility.FFmpeg\VDownload.Services.Utility.FFmpeg.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services\VDownload.Services.Utility\VDownload.Services.Utility.Filename\VDownload.Services.Utility.Filename.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Services\VDownload.Services.Utility\VDownload.Services.Utility.HttpClient\VDownload.Services.Utility.HttpClient.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Sources\VDownload.Sources.Common\VDownload.Sources.Common.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Sources\VDownload.Sources.Twitch\VDownload.Sources.Twitch.Api\VDownload.Sources.Twitch.Api.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Sources\VDownload.Sources.Twitch\VDownload.Sources.Twitch.Authentication\VDownload.Sources.Twitch.Authentication.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Sources\VDownload.Sources.Twitch\VDownload.Sources.Twitch.Configuration\VDownload.Sources.Twitch.Configuration.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Sources\VDownload.Sources.Twitch\VDownload.Sources.Twitch.Models\VDownload.Sources.Twitch.Models.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Sources\VDownload.Sources.Twitch\VDownload.Sources.Twitch.Settings\VDownload.Sources.Twitch.Settings.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Sources\VDownload.Sources.Twitch\VDownload.Sources.Twitch\VDownload.Sources.Twitch.csproj" />
|
||||
<ProjectReference Include="..\VDownload.Sources\VDownload.Sources\VDownload.Sources.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<assemblyIdentity version="1.0.0.0" name="VDownload.app"/>
|
||||
<assemblyIdentity version="0.0.0.0" name="VDownload.app"/>
|
||||
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
|
||||
Reference in New Issue
Block a user