From 0cb39d41e88a5bdea92e8fa58c1a8aafacd8ad32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Fri, 19 Jul 2024 00:57:12 +0200 Subject: [PATCH] Fixing WinUI build and bringing Wino.Server basics. --- .../Interfaces/IWinoSynchronizerFactory.cs | 11 -- .../Translations/en_US/resources.json | 5 +- Wino.Core.Domain/Wino.Core.Domain.NET8.csproj | 3 + .../Services/StatePersistenceService.cs | 7 +- Wino.Core/Wino.Core.NET8.csproj | 3 +- Wino.Core/WinoSynchronizerFactory.cs | 124 ------------------ Wino.Mail.WinUI/App.xaml.cs | 11 +- Wino.Mail.WinUI/Wino.Mail.WinUI.csproj | 5 +- Wino.Mail/Services/DialogService.cs | 2 + Wino.Messages/Wino.Messaging.NET8.csproj | 13 ++ Wino.Server.NET8/App.xaml | 16 +++ Wino.Server.NET8/App.xaml.cs | 35 +++++ .../Assets/LockScreenLogo.scale-200.png | Bin 0 -> 432 bytes .../Assets/SplashScreen.scale-200.png | Bin 0 -> 5372 bytes .../Assets/Square150x150Logo.scale-200.png | Bin 0 -> 1755 bytes .../Assets/Square44x44Logo.scale-200.png | Bin 0 -> 637 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 283 bytes Wino.Server.NET8/Assets/StoreLogo.png | Bin 0 -> 456 bytes .../Assets/Wide310x150Logo.scale-200.png | Bin 0 -> 2097 bytes .../Assets}/Wino_Icon.ico | Bin Wino.Server.NET8/Package.appxmanifest | 51 +++++++ Wino.Server.NET8/Program.cs | 97 ++++++++++++++ .../Properties/launchSettings.json | 10 ++ Wino.Server.NET8/TrayIconResources.xaml | 45 +++++++ Wino.Server.NET8/TrayIconResources.xaml.cs | 17 +++ Wino.Server.NET8/Wino.Server.NET8.csproj | 98 ++++++++++++++ Wino.Server.NET8/app.manifest | 19 +++ {Wino.Server => Wino.Server.OLD}/App.xaml | 1 - {Wino.Server => Wino.Server.OLD}/App.xaml.cs | 30 +++-- Wino.Server.OLD/Images/Wino_Icon.ico | Bin 0 -> 126743 bytes Wino.Server.OLD/Program.cs | 25 ++++ .../ServerContext.cs | 0 .../ServerViewModel.cs | 0 .../TrayIconResoasdurces.xaml | 0 Wino.Server.OLD/TrayIconResources.xaml | 42 ++++++ Wino.Server.OLD/TrayIconResources.xaml.cs | 17 +++ Wino.Server.OLD/Wino.Server.NET8.csproj | 50 +++++++ .../Wino.Server.csproj | 0 Wino.Server/AssemblyInfo.cs | 10 -- Wino.WinUI.sln | 46 ++++++- 40 files changed, 626 insertions(+), 167 deletions(-) delete mode 100644 Wino.Core.Domain/Interfaces/IWinoSynchronizerFactory.cs delete mode 100644 Wino.Core/WinoSynchronizerFactory.cs create mode 100644 Wino.Messages/Wino.Messaging.NET8.csproj create mode 100644 Wino.Server.NET8/App.xaml create mode 100644 Wino.Server.NET8/App.xaml.cs create mode 100644 Wino.Server.NET8/Assets/LockScreenLogo.scale-200.png create mode 100644 Wino.Server.NET8/Assets/SplashScreen.scale-200.png create mode 100644 Wino.Server.NET8/Assets/Square150x150Logo.scale-200.png create mode 100644 Wino.Server.NET8/Assets/Square44x44Logo.scale-200.png create mode 100644 Wino.Server.NET8/Assets/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 Wino.Server.NET8/Assets/StoreLogo.png create mode 100644 Wino.Server.NET8/Assets/Wide310x150Logo.scale-200.png rename {Wino.Server/Images => Wino.Server.NET8/Assets}/Wino_Icon.ico (100%) create mode 100644 Wino.Server.NET8/Package.appxmanifest create mode 100644 Wino.Server.NET8/Program.cs create mode 100644 Wino.Server.NET8/Properties/launchSettings.json create mode 100644 Wino.Server.NET8/TrayIconResources.xaml create mode 100644 Wino.Server.NET8/TrayIconResources.xaml.cs create mode 100644 Wino.Server.NET8/Wino.Server.NET8.csproj create mode 100644 Wino.Server.NET8/app.manifest rename {Wino.Server => Wino.Server.OLD}/App.xaml (90%) rename {Wino.Server => Wino.Server.OLD}/App.xaml.cs (84%) create mode 100644 Wino.Server.OLD/Images/Wino_Icon.ico create mode 100644 Wino.Server.OLD/Program.cs rename {Wino.Server => Wino.Server.OLD}/ServerContext.cs (100%) rename {Wino.Server => Wino.Server.OLD}/ServerViewModel.cs (100%) rename Wino.Server/TrayIconResources.xaml => Wino.Server.OLD/TrayIconResoasdurces.xaml (100%) create mode 100644 Wino.Server.OLD/TrayIconResources.xaml create mode 100644 Wino.Server.OLD/TrayIconResources.xaml.cs create mode 100644 Wino.Server.OLD/Wino.Server.NET8.csproj rename {Wino.Server => Wino.Server.OLD}/Wino.Server.csproj (100%) delete mode 100644 Wino.Server/AssemblyInfo.cs diff --git a/Wino.Core.Domain/Interfaces/IWinoSynchronizerFactory.cs b/Wino.Core.Domain/Interfaces/IWinoSynchronizerFactory.cs deleted file mode 100644 index b14480c9..00000000 --- a/Wino.Core.Domain/Interfaces/IWinoSynchronizerFactory.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using Wino.Core.Domain.Entities; - -namespace Wino.Core.Domain.Interfaces -{ - public interface IWinoSynchronizerFactory : IInitializeAsync - { - IBaseSynchronizer GetAccountSynchronizer(Guid accountId); - IBaseSynchronizer CreateNewSynchronizer(MailAccount account); - } -} diff --git a/Wino.Core.Domain/Translations/en_US/resources.json b/Wino.Core.Domain/Translations/en_US/resources.json index 01c35517..44c5bbb8 100644 --- a/Wino.Core.Domain/Translations/en_US/resources.json +++ b/Wino.Core.Domain/Translations/en_US/resources.json @@ -521,6 +521,7 @@ "SettingsSignature_AddCustomSignature_Button": "Add signature", "SettingsSignature_EditSignature_Title": "Edit signature", "SettingsSignature_DeleteSignature_Title": "Delete signature", - "SettingsSignature_NoneSignatureName": "None" - + "SettingsSignature_NoneSignatureName": "None", + "WinoSystemTray_LaunchWino": "Launch Wino", + "WinoSystemTray_QuitWino": "Quit" } diff --git a/Wino.Core.Domain/Wino.Core.Domain.NET8.csproj b/Wino.Core.Domain/Wino.Core.Domain.NET8.csproj index 33b44636..7dc4c8e4 100644 --- a/Wino.Core.Domain/Wino.Core.Domain.NET8.csproj +++ b/Wino.Core.Domain/Wino.Core.Domain.NET8.csproj @@ -56,6 +56,9 @@ + + + diff --git a/Wino.Core.UWP/Services/StatePersistenceService.cs b/Wino.Core.UWP/Services/StatePersistenceService.cs index e94067ed..12c232f3 100644 --- a/Wino.Core.UWP/Services/StatePersistenceService.cs +++ b/Wino.Core.UWP/Services/StatePersistenceService.cs @@ -115,10 +115,11 @@ namespace Wino.Services private void UpdateAppCoreWindowTitle() { - var appView = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView(); + // TODO: WinUI + //var appView = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView(); - if (appView != null) - appView.Title = CoreWindowTitle; + //if (appView != null) + // appView.Title = CoreWindowTitle; } } } diff --git a/Wino.Core/Wino.Core.NET8.csproj b/Wino.Core/Wino.Core.NET8.csproj index 5f9dd96f..4ad33ba1 100644 --- a/Wino.Core/Wino.Core.NET8.csproj +++ b/Wino.Core/Wino.Core.NET8.csproj @@ -13,7 +13,7 @@ - + @@ -30,6 +30,7 @@ + diff --git a/Wino.Core/WinoSynchronizerFactory.cs b/Wino.Core/WinoSynchronizerFactory.cs deleted file mode 100644 index 89c34409..00000000 --- a/Wino.Core/WinoSynchronizerFactory.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Wino.Core.Authenticators; -using Wino.Core.Domain.Entities; -using Wino.Core.Domain.Interfaces; -using Wino.Core.Integration.Processors; -using Wino.Core.Services; -using Wino.Core.Synchronizers; - -namespace Wino.Core -{ - /// - /// Factory that keeps track of all integrator with associated mail accounts. - /// Synchronizer per-account makes sense because re-generating synchronizers are not ideal. - /// Users might interact with multiple accounts in 1 app session. - /// - public class WinoSynchronizerFactory : IWinoSynchronizerFactory - { - private readonly List synchronizerCache = new List(); - - private bool isInitialized = false; - private readonly INativeAppService _nativeAppService; - private readonly ITokenService _tokenService; - private readonly IFolderService _folderService; - private readonly IAccountService _accountService; - private readonly IContactService _contactService; - - private readonly INotificationBuilder _notificationBuilder; - private readonly ISignatureService _signatureService; - private readonly IDatabaseService _databaseService; - private readonly IMimeFileService _mimeFileService; - private readonly IOutlookChangeProcessor _outlookChangeProcessor; - private readonly IGmailChangeProcessor _gmailChangeProcessor; - private readonly IImapChangeProcessor _imapChangeProcessor; - - public WinoSynchronizerFactory(INativeAppService nativeAppService, - ITokenService tokenService, - IFolderService folderService, - IAccountService accountService, - IContactService contactService, - INotificationBuilder notificationBuilder, - ISignatureService signatureService, - IDatabaseService databaseService, - IMimeFileService mimeFileService, - IOutlookChangeProcessor outlookChangeProcessor, - IGmailChangeProcessor gmailChangeProcessor, - IImapChangeProcessor imapChangeProcessor) - { - _contactService = contactService; - _notificationBuilder = notificationBuilder; - _nativeAppService = nativeAppService; - _tokenService = tokenService; - _folderService = folderService; - _accountService = accountService; - _signatureService = signatureService; - _databaseService = databaseService; - _mimeFileService = mimeFileService; - _outlookChangeProcessor = outlookChangeProcessor; - _gmailChangeProcessor = gmailChangeProcessor; - _imapChangeProcessor = imapChangeProcessor; - } - - public IBaseSynchronizer GetAccountSynchronizer(Guid accountId) - => synchronizerCache.Find(a => a.Account.Id == accountId); - - private IBaseSynchronizer CreateIntegratorWithDefaultProcessor(MailAccount mailAccount) - { - var providerType = mailAccount.ProviderType; - - switch (providerType) - { - case Domain.Enums.MailProviderType.Outlook: - var outlookAuthenticator = new OutlookAuthenticator(_tokenService, _nativeAppService); - return new OutlookSynchronizer(mailAccount, outlookAuthenticator, _outlookChangeProcessor); - case Domain.Enums.MailProviderType.Gmail: - var gmailAuthenticator = new GmailAuthenticator(_tokenService, _nativeAppService); - return new GmailSynchronizer(mailAccount, gmailAuthenticator, _gmailChangeProcessor); - case Domain.Enums.MailProviderType.Office365: - break; - case Domain.Enums.MailProviderType.Yahoo: - break; - case Domain.Enums.MailProviderType.IMAP4: - return new ImapSynchronizer(mailAccount, _imapChangeProcessor); - default: - break; - } - - return null; - } - - public void DeleteSynchronizer(MailAccount account) - { - var synchronizer = GetAccountSynchronizer(account.Id); - - if (synchronizer == null) return; - - synchronizerCache.Remove(synchronizer); - } - - public async Task InitializeAsync() - { - if (isInitialized) return; - - var accounts = await _accountService.GetAccountsAsync(); - - foreach (var account in accounts) - { - CreateNewSynchronizer(account); - } - - isInitialized = true; - } - - public IBaseSynchronizer CreateNewSynchronizer(MailAccount account) - { - var synchronizer = CreateIntegratorWithDefaultProcessor(account); - - synchronizerCache.Add(synchronizer); - - return synchronizer; - } - } -} diff --git a/Wino.Mail.WinUI/App.xaml.cs b/Wino.Mail.WinUI/App.xaml.cs index 51503247..bee644f7 100644 --- a/Wino.Mail.WinUI/App.xaml.cs +++ b/Wino.Mail.WinUI/App.xaml.cs @@ -3,7 +3,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Media; -using Wino.Core; +using Windows.Storage; using Wino.Core.Domain.Interfaces; using Wino.Core.Services; using Wino.Core.WinUI.Services; @@ -16,6 +16,8 @@ namespace Wino private WindowEx m_Window; private Frame m_ShellFrame; + private readonly IApplicationConfiguration _applicationFolderConfiguration; + public App() { if (WebAuthenticator.CheckOAuthRedirectionActivation()) return; @@ -24,6 +26,7 @@ namespace Wino Services = ConfigureServices(); + _applicationFolderConfiguration = Services.GetService(); _logInitializer = Services.GetService(); ConfigureLogger(); @@ -31,10 +34,12 @@ namespace Wino ConfigurePrelaunch(); ConfigureXbox(); + // Make sure the paths are setup on app start. + _applicationFolderConfiguration.ApplicationDataFolderPath = ApplicationData.Current.LocalFolder.Path; + _applicationFolderConfiguration.PublisherSharedFolderPath = ApplicationData.Current.GetPublisherCacheFolder(ApplicationConfiguration.SharedFolderName).Path; + _themeService = Services.GetService(); _databaseService = Services.GetService(); - _appInitializerService = Services.GetService(); - _synchronizerFactory = Services.GetService(); _translationService = Services.GetService(); _appShellService = Services.GetService(); diff --git a/Wino.Mail.WinUI/Wino.Mail.WinUI.csproj b/Wino.Mail.WinUI/Wino.Mail.WinUI.csproj index 339dcdcf..4ac4ae89 100644 --- a/Wino.Mail.WinUI/Wino.Mail.WinUI.csproj +++ b/Wino.Mail.WinUI/Wino.Mail.WinUI.csproj @@ -14,6 +14,7 @@ 10.0.19041.35-preview True False + True False SHA256 False @@ -107,8 +108,6 @@ - - @@ -199,7 +198,7 @@ - + diff --git a/Wino.Mail/Services/DialogService.cs b/Wino.Mail/Services/DialogService.cs index 20e09b1b..e5f81625 100644 --- a/Wino.Mail/Services/DialogService.cs +++ b/Wino.Mail/Services/DialogService.cs @@ -21,6 +21,8 @@ using Wino.Dialogs; using Wino.Helpers; using Wino.Core.WinUI.Services; using Wino.Messaging.Server; +using Windows.Foundation.Metadata; + #if NET8_0 diff --git a/Wino.Messages/Wino.Messaging.NET8.csproj b/Wino.Messages/Wino.Messaging.NET8.csproj new file mode 100644 index 00000000..e691aa99 --- /dev/null +++ b/Wino.Messages/Wino.Messaging.NET8.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + disable + disable + Wino.Messaging + + + + + + diff --git a/Wino.Server.NET8/App.xaml b/Wino.Server.NET8/App.xaml new file mode 100644 index 00000000..69096344 --- /dev/null +++ b/Wino.Server.NET8/App.xaml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/Wino.Server.NET8/App.xaml.cs b/Wino.Server.NET8/App.xaml.cs new file mode 100644 index 00000000..0c435100 --- /dev/null +++ b/Wino.Server.NET8/App.xaml.cs @@ -0,0 +1,35 @@ +using H.NotifyIcon; +using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Input; + +namespace Wino.Server.NET8 +{ + public partial class App : Application + { + public TaskbarIcon? TrayIcon { get; private set; } + public Window? Window { get; set; } + + public bool HandleClosedEvents { get; set; } = true; + public App() + { + InitializeComponent(); + } + + protected override void OnLaunched(LaunchActivatedEventArgs args) + { + + } + + private void InitializeTrayIcon() + { + var showHideWindowCommand = (XamlUICommand)Resources["ShowHideWindowCommand"]; + // showHideWindowCommand.ExecuteRequested ; + + var exitApplicationCommand = (XamlUICommand)Resources["ExitApplicationCommand"]; + //exitApplicationCommand.ExecuteRequested += ExitApplicationCommand_ExecuteRequested; + + TrayIcon = (TaskbarIcon)Resources["TrayIcon"]; + TrayIcon.ForceCreate(); + } + } +} diff --git a/Wino.Server.NET8/Assets/LockScreenLogo.scale-200.png b/Wino.Server.NET8/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..7440f0d4bf7c7e26e4e36328738c68e624ee851e GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezr3(FqV6|IEGZ*x-#9g>~Mkr+x6^F zy~CDX2QIMs&Gcs3RnRBoxBA!*(Mfw0KTCYuYk0WlEIV>qBmPl! zq4ukrvfADX@#p8fbLY(H47N+k`FZ(FZh?cDro7>{8mkBO3>^oaIx`3!Jl)Qq)HI!+ z(S=1{o~eT)&W^=Ea8C`-17(Jv5(nHFJ{dOjGdxLVkY_y6&S1whfuFI4MM0kF0f&cO zPDVpV%nz;Id$>+0Ga5e9625-JcI)oq=#Pa3p^>8BB}21BUw@eN!-6@w%X+^`+Vn?! zryu|3T>kVWNBYyBc=7Y6H#s1Ah!OI_nezW zXTqOdkv2Az6KKBV=$yHdF^R3Fqw(TZEoNSZX>reXJ#bwX42%f|Pgg&ebxsLQ010xn AssI20 literal 0 HcmV?d00001 diff --git a/Wino.Server.NET8/Assets/SplashScreen.scale-200.png b/Wino.Server.NET8/Assets/SplashScreen.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..32f486a86792a5e34cd9a8261b394c49b48f86be GIT binary patch literal 5372 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 literal 0 HcmV?d00001 diff --git a/Wino.Server.NET8/Assets/Square44x44Logo.scale-200.png b/Wino.Server.NET8/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..f713bba67f551ef91020b75716a4dc8ebd744b1c GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^5g^RL1|$oo8kjIJFu8cTIEGZ*dUI*J;2{SImxtDO zm%3!R$UazoY}x{$j0P5ABYXWr(l=jxJ6ps1W{tV=^>{Dl><3nv3A}sm=EZ)#l3`NR zpZda3^rNox*D1%NC98Z~L*6zipLw~Gxn&(Y-;KmJ+aR6eLabU-L#y8HW%7P-E_-VlLqIabbHPHKT*)fT@9iWJ7iWgOT9%0}Lrj>lztPxWq6sPw3pi z#-<=#$jjrP_DD*i!RLsn0mIA=>4~N)IMYWIf=j%-zuKCdMG%tHYot70D1| zvWa0wMhauW#S>1CnI_;>!1Q3zMA17@DOVq{MQ+{U7^a&yA+%dMCG;WNPV0i;w$tu; zX^b}UKziPM)(<;)ruW;-`)bBN+rQNM*Zs_>?n$|FVFo-e*PZb*@U7VAd+tHb4e?=Blc~}S6K)wL}r*Gf`BM#QB z+y>N$mCswb4d{^{S9v_!eQj4fTRMOwOCi?lSk9%<=vAz}jM-*PQtH@Odn1LZcd^j#o> hW$4xn+CT+ep9lJ{OAO?njobhL002ovPDHLkV1nYebbkN< literal 0 HcmV?d00001 diff --git a/Wino.Server.NET8/Assets/StoreLogo.png b/Wino.Server.NET8/Assets/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..a4586f26bdf7841cad10f39cdffe2aca3af252c1 GIT binary patch literal 456 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2o;fF!p=8IEGZ*dUM0H=rDtTTVkd2 z(%lbKn@VS_lUaADVB&;Z6F#LM+mPsa?e>FnHo;HND^!P`-lX%BH~FOg%y&x+t*x!? zg$#_1A1kgsSvO(fw`bOmo;lrJX8byO1j^gf7qohR%mmt z@L)WX;>gqgK|tWJvQ5j;4;=gt4HXVKSMYRv5RhY5vS~TqfK_NAP*r{h!!g^BZ;w4r z7CGdsai)y;fJQc`7{Zc2b==h%o`Op$|bg6a&nL{*m7-=0>k4M4-PXlU;G-?%*(*g>iFt^ U$m#7DfHB12>FVdQ&MBb@0G`#n8vpc0sq%A~kJcD9FY~qQRMt?ZR3YyDZt}Od;|mgpc{2dv9AHF){kXU%k({ z=Y8JidEayHTkG@twPZ|U3_^%3ct-OgLSiFAqDN!|tbCX@c@?4P`2x*TMK!+Q4b?k0 ziW7!!KF6dPWcF<%I|iznM~`QJ_V7sHGV_D`dhgpA9Vd@&X}ErK+j~_rdv;Bp?OA@a zFXOk7eWOJe5NcK;6h$FaM&7JxNc#-@QTwzW6x#d_zmQNkz5) zPI;kh;3d;5UCJU+9a(cOxX(|edWoOiAEdGU#kPJ&xnc2||3vDbuhBCkj-pb0as$Zl z5;}4n=**n6(1g`JEtSy;SG6X;#-F~Oz3lESG2b5`j@wAwY4Yp<=4Xeb>iH=6aicF?DxD&q{`!&}ct zBI)aycwuobQAf&678Uf+Mmh-@9RUhyH~>?w0dixO0#jZjEc9R^=5NZw=|a(kcB?9^ zfnTiEFXp-q#B;Tn>(O%$A*ud^Rg&eVH6Y_5Y%!E39RR&s?XpG`gKwU!6FE1 z7X)DC7)*(5g}lh`4`{i~DZcWupZI`K)_4P)VE{@gc7@Xsd^86zl~_mOYH?I4!aGeX z^E(_=L6?PgveDQ+r%P@UISEXrkn`LHJZ##+!-anV>6h)IkKp;E@p8+3&(5%kS2)ld*J*rJccZM0iyaAx7+F~GW1UWFK&3X$PE1^}NH zgAG9ck5K!{07OwU@j@Do>TbH=CDEo#4m0cEyAuXy_<&jlzJVcKweSJ5 z&=q~iIn18$w8yb=rmEmHxVEUA^?RwnB?6Qlp1os8@*dWTGL2bhzZ!s*xqScR?EPL` zo(JwNdKUUYy7GtvZ3asXm)cgFvCx9EmAi;|w=a0iGiv%%VYKh`P0Wma4y`Xyx|T~( zAmfGbgbEEC7)j8b@WA@+5W3a61HJXC1dX@6_T|Czk0I0zBk%tnW~()VWITGI!`$c< gARL?UBrYYkwoDw4eo*CrzXGTrZ@;GF>596)00d&n@&Et; literal 0 HcmV?d00001 diff --git a/Wino.Server/Images/Wino_Icon.ico b/Wino.Server.NET8/Assets/Wino_Icon.ico similarity index 100% rename from Wino.Server/Images/Wino_Icon.ico rename to Wino.Server.NET8/Assets/Wino_Icon.ico diff --git a/Wino.Server.NET8/Package.appxmanifest b/Wino.Server.NET8/Package.appxmanifest new file mode 100644 index 00000000..46572777 --- /dev/null +++ b/Wino.Server.NET8/Package.appxmanifest @@ -0,0 +1,51 @@ + + + + + + + + + + Wino.Server.NET8 + bkaan + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Wino.Server.NET8/Program.cs b/Wino.Server.NET8/Program.cs new file mode 100644 index 00000000..f7933cc0 --- /dev/null +++ b/Wino.Server.NET8/Program.cs @@ -0,0 +1,97 @@ +using System; +using System.Runtime.InteropServices; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.UI.Dispatching; +using Microsoft.Windows.AppLifecycle; +using Wino.Server.NET8; + +namespace Wino.Server +{ + class Program + { + private const string WinoActivationKey = nameof(WinoActivationKey); + + [STAThread] + static void Main(string[] args) + { + WinRT.ComWrappersSupport.InitializeComWrappers(); + bool isRedirect = DecideRedirection(); + if (!isRedirect) + { + Microsoft.UI.Xaml.Application.Start((p) => + { + var context = new DispatcherQueueSynchronizationContext( + DispatcherQueue.GetForCurrentThread()); + SynchronizationContext.SetSynchronizationContext(context); + new App(); + }); + } + } + + private static bool DecideRedirection() + { + bool isRedirect = false; + + AppActivationArguments args = AppInstance.GetCurrent().GetActivatedEventArgs(); + ExtendedActivationKind kind = args.Kind; + + try + { + AppInstance keyInstance = AppInstance.FindOrRegisterForKey(WinoActivationKey); + + if (keyInstance.IsCurrent) + { + keyInstance.Activated += OnActivated; + } + else + { + isRedirect = true; + RedirectActivationTo(args, keyInstance); + } + } + + catch (Exception ex) + { + + } + + return isRedirect; + } + + [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] + private static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName); + + [DllImport("kernel32.dll")] + private static extern bool SetEvent(IntPtr hEvent); + + [DllImport("ole32.dll")] + private static extern uint CoWaitForMultipleObjects(uint dwFlags, uint dwMilliseconds, ulong nHandles, IntPtr[] pHandles, out uint dwIndex); + + private static IntPtr redirectEventHandle = IntPtr.Zero; + + // Do the redirection on another thread, and use a non-blocking + // wait method to wait for the redirection to complete. + public static void RedirectActivationTo( + AppActivationArguments args, AppInstance keyInstance) + { + redirectEventHandle = CreateEvent(IntPtr.Zero, true, false, null); + + Task.Run(() => + { + keyInstance.RedirectActivationToAsync(args).AsTask().Wait(); + SetEvent(redirectEventHandle); + }); + + uint CWMO_DEFAULT = 0; + uint INFINITE = 0xFFFFFFFF; + + _ = CoWaitForMultipleObjects(CWMO_DEFAULT, INFINITE, 1, new IntPtr[] { redirectEventHandle }, out uint handleIndex); + } + + private static void OnActivated(object sender, AppActivationArguments args) + { + ExtendedActivationKind kind = args.Kind; + } + } +} diff --git a/Wino.Server.NET8/Properties/launchSettings.json b/Wino.Server.NET8/Properties/launchSettings.json new file mode 100644 index 00000000..9d3f5df3 --- /dev/null +++ b/Wino.Server.NET8/Properties/launchSettings.json @@ -0,0 +1,10 @@ +{ + "profiles": { + "Wino.Server.NET8 (Package)": { + "commandName": "MsixPackage" + }, + "Wino.Server.NET8 (Unpackaged)": { + "commandName": "Project" + } + } +} \ No newline at end of file diff --git a/Wino.Server.NET8/TrayIconResources.xaml b/Wino.Server.NET8/TrayIconResources.xaml new file mode 100644 index 00000000..b42183ca --- /dev/null +++ b/Wino.Server.NET8/TrayIconResources.xaml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Wino.Server.NET8/TrayIconResources.xaml.cs b/Wino.Server.NET8/TrayIconResources.xaml.cs new file mode 100644 index 00000000..59014a5c --- /dev/null +++ b/Wino.Server.NET8/TrayIconResources.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.UI.Xaml; + +namespace Wino.Server +{ + partial class TrayIconResources : ResourceDictionary + { + public TrayIconResources() + { + this.InitializeComponent(); + } + } +} diff --git a/Wino.Server.NET8/Wino.Server.NET8.csproj b/Wino.Server.NET8/Wino.Server.NET8.csproj new file mode 100644 index 00000000..b1ec355e --- /dev/null +++ b/Wino.Server.NET8/Wino.Server.NET8.csproj @@ -0,0 +1,98 @@ + + + WinExe + net8.0-windows10.0.19041.0 + 10.0.17763.0 + Wino.Server + app.manifest + x86;x64;ARM64 + win-x86;win-x64;win-arm64 + win10-x86;win10-x64;win10-arm64 + win-$(Platform).pubxml + true + true + + + + + DISABLE_XAML_GENERATED_MAIN + + + DISABLE_XAML_GENERATED_MAIN + + + DISABLE_XAML_GENERATED_MAIN + + + DISABLE_XAML_GENERATED_MAIN + + + DISABLE_XAML_GENERATED_MAIN + + + DISABLE_XAML_GENERATED_MAIN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Always + + + + + + MSBuild:Compile + + + + + + true + + \ No newline at end of file diff --git a/Wino.Server.NET8/app.manifest b/Wino.Server.NET8/app.manifest new file mode 100644 index 00000000..22057a5f --- /dev/null +++ b/Wino.Server.NET8/app.manifest @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + PerMonitorV2 + + + \ No newline at end of file diff --git a/Wino.Server/App.xaml b/Wino.Server.OLD/App.xaml similarity index 90% rename from Wino.Server/App.xaml rename to Wino.Server.OLD/App.xaml index f36b711a..212bf19b 100644 --- a/Wino.Server/App.xaml +++ b/Wino.Server.OLD/App.xaml @@ -2,7 +2,6 @@ x:Class="Wino.Server.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - ShutdownMode="OnExplicitShutdown" xmlns:local="clr-namespace:Wino.Server"> diff --git a/Wino.Server/App.xaml.cs b/Wino.Server.OLD/App.xaml.cs similarity index 84% rename from Wino.Server/App.xaml.cs rename to Wino.Server.OLD/App.xaml.cs index 3e9ce04f..1c214895 100644 --- a/Wino.Server/App.xaml.cs +++ b/Wino.Server.OLD/App.xaml.cs @@ -1,9 +1,10 @@ using System; using System.Threading; using System.Threading.Tasks; -using System.Windows; using H.NotifyIcon; using Microsoft.Extensions.DependencyInjection; +using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Input; using Windows.Storage; using Wino.Core; using Wino.Core.Domain.Interfaces; @@ -28,12 +29,17 @@ namespace Wino.Server public new static App Current => (App)Application.Current; - private TaskbarIcon? notifyIcon; + private TaskbarIcon notifyIcon; private static Mutex _mutex = null; private EventWaitHandle _eventWaitHandle; public IServiceProvider Services { get; private set; } + public App() + { + InitializeComponent(); + } + private IServiceProvider ConfigureServices() { var services = new ServiceCollection(); @@ -72,8 +78,10 @@ namespace Wino.Server return serverViewModel; } - protected override async void OnStartup(StartupEventArgs e) + protected override void OnLaunched(LaunchActivatedEventArgs args) { + base.OnLaunched(args); + _mutex = new Mutex(true, WinoServerAppName, out bool isCreatedNew); _eventWaitHandle = new EventWaitHandle(false, EventResetMode.AutoReset, WinoServerActiatedName); @@ -102,7 +110,6 @@ namespace Wino.Server Services = ConfigureServices(); - base.OnStartup(e); var serverViewModel = await InitializeNewServerAsync(); @@ -117,14 +124,21 @@ namespace Wino.Server _eventWaitHandle.Set(); // Terminate this instance. - Shutdown(); + // Shutdown(); } + } - protected override void OnExit(ExitEventArgs e) + private void InitializeNotifyIcon() { - notifyIcon?.Dispose(); - base.OnExit(e); + var showHideWindowCommand = (XamlUICommand)Resources["ShowHideWindowCommand"]; + showHideWindowCommand.ExecuteRequested += ShowHideWindowCommand_ExecuteRequested; + + var exitApplicationCommand = (XamlUICommand)Resources["ExitApplicationCommand"]; + exitApplicationCommand.ExecuteRequested += ExitApplicationCommand_ExecuteRequested; + + notifyIcon = (TaskbarIcon)Resources["TrayIcon"]; + notifyIcon.ForceCreate(); } } } diff --git a/Wino.Server.OLD/Images/Wino_Icon.ico b/Wino.Server.OLD/Images/Wino_Icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..be12c8934f87e61dc8ad5367e8ecfb10b7f2cce4 GIT binary patch literal 126743 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 literal 0 HcmV?d00001 diff --git a/Wino.Server.OLD/Program.cs b/Wino.Server.OLD/Program.cs new file mode 100644 index 00000000..59b627b0 --- /dev/null +++ b/Wino.Server.OLD/Program.cs @@ -0,0 +1,25 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.UI.Dispatching; + +namespace Wino.Server.WinUI +{ + [STAThread] + static async Task Main(string[] args) + { + WinRT.ComWrappersSupport.InitializeComWrappers(); + bool isRedirect = await DecideRedirection(); + if (!isRedirect) + { + Microsoft.UI.Xaml.Application.Start((p) => + { + var context = new DispatcherQueueSynchronizationContext( + DispatcherQueue.GetForCurrentThread()); + SynchronizationContext.SetSynchronizationContext(context); + new App(); + }); + } + return 0; + } +} diff --git a/Wino.Server/ServerContext.cs b/Wino.Server.OLD/ServerContext.cs similarity index 100% rename from Wino.Server/ServerContext.cs rename to Wino.Server.OLD/ServerContext.cs diff --git a/Wino.Server/ServerViewModel.cs b/Wino.Server.OLD/ServerViewModel.cs similarity index 100% rename from Wino.Server/ServerViewModel.cs rename to Wino.Server.OLD/ServerViewModel.cs diff --git a/Wino.Server/TrayIconResources.xaml b/Wino.Server.OLD/TrayIconResoasdurces.xaml similarity index 100% rename from Wino.Server/TrayIconResources.xaml rename to Wino.Server.OLD/TrayIconResoasdurces.xaml diff --git a/Wino.Server.OLD/TrayIconResources.xaml b/Wino.Server.OLD/TrayIconResources.xaml new file mode 100644 index 00000000..73a6b342 --- /dev/null +++ b/Wino.Server.OLD/TrayIconResources.xaml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Wino.Server.OLD/TrayIconResources.xaml.cs b/Wino.Server.OLD/TrayIconResources.xaml.cs new file mode 100644 index 00000000..f9caa347 --- /dev/null +++ b/Wino.Server.OLD/TrayIconResources.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.UI.Xaml; + +namespace Wino.Server.WinUI +{ + partial class TrayIconResources : ResourceDictionary + { + public TrayIconResources() + { + this.InitializeComponent(); + } + } +} diff --git a/Wino.Server.OLD/Wino.Server.NET8.csproj b/Wino.Server.OLD/Wino.Server.NET8.csproj new file mode 100644 index 00000000..73788538 --- /dev/null +++ b/Wino.Server.OLD/Wino.Server.NET8.csproj @@ -0,0 +1,50 @@ + + + WinExe + net8.0-windows10.0.22621.0 + 10.0.17763.0 + Wino.Server.WinUI + app.manifest + x86;x64;ARM64 + win-x86;win-x64;win-arm64 + win10-x86;win10-x64;win10-arm64 + win-$(Platform).pubxml + true + true + + + Wino.Server.App + + + + + + + + + + + + + + Always + + + + + + + + + + + + + + + + + MSBuild:Compile + + + \ No newline at end of file diff --git a/Wino.Server/Wino.Server.csproj b/Wino.Server.OLD/Wino.Server.csproj similarity index 100% rename from Wino.Server/Wino.Server.csproj rename to Wino.Server.OLD/Wino.Server.csproj diff --git a/Wino.Server/AssemblyInfo.cs b/Wino.Server/AssemblyInfo.cs deleted file mode 100644 index b0ec8275..00000000 --- a/Wino.Server/AssemblyInfo.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Windows; - -[assembly: ThemeInfo( - ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located - //(used if a resource is not found in the page, - // or application resource dictionaries) - ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located - //(used if a resource is not found in the page, - // app, or any theme specific resource dictionaries) -)] diff --git a/Wino.WinUI.sln b/Wino.WinUI.sln index c1226036..1fce069d 100644 --- a/Wino.WinUI.sln +++ b/Wino.WinUI.sln @@ -13,7 +13,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wino.Core.WinUI", "Wino.Cor EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wino.BackgroundTasks.NET8", "Wino.BackgroundTasks\Wino.BackgroundTasks.NET8.csproj", "{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wino.Mail.WinUI", "Wino.Mail.WinUI\Wino.Mail.WinUI.csproj", "{955936B2-112B-4756-8BC7-67FF12BF9759}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wino.Mail.WinUI", "Wino.Mail.WinUI\Wino.Mail.WinUI.csproj", "{955936B2-112B-4756-8BC7-67FF12BF9759}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wino.Messaging.NET8", "Wino.Messages\Wino.Messaging.NET8.csproj", "{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wino.Server.NET8", "Wino.Server.NET8\Wino.Server.NET8.csproj", "{A3B3BDBB-5946-4058-8038-55A97DBCFB38}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -131,6 +135,46 @@ Global {955936B2-112B-4756-8BC7-67FF12BF9759}.Release|x86.ActiveCfg = Release|x86 {955936B2-112B-4756-8BC7-67FF12BF9759}.Release|x86.Build.0 = Release|x86 {955936B2-112B-4756-8BC7-67FF12BF9759}.Release|x86.Deploy.0 = Release|x86 + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|ARM64.Build.0 = Debug|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|x64.ActiveCfg = Debug|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|x64.Build.0 = Debug|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|x86.ActiveCfg = Debug|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|x86.Build.0 = Debug|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|Any CPU.Build.0 = Release|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|ARM64.ActiveCfg = Release|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|ARM64.Build.0 = Release|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|x64.ActiveCfg = Release|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|x64.Build.0 = Release|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|x86.ActiveCfg = Release|Any CPU + {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|x86.Build.0 = Release|Any CPU + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|Any CPU.ActiveCfg = Debug|x64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|Any CPU.Build.0 = Debug|x64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|Any CPU.Deploy.0 = Debug|x64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|ARM64.Build.0 = Debug|ARM64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|x64.ActiveCfg = Debug|x64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|x64.Build.0 = Debug|x64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|x64.Deploy.0 = Debug|x64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|x86.ActiveCfg = Debug|x86 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|x86.Build.0 = Debug|x86 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|x86.Deploy.0 = Debug|x86 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|Any CPU.ActiveCfg = Release|x64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|Any CPU.Build.0 = Release|x64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|Any CPU.Deploy.0 = Release|x64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|ARM64.ActiveCfg = Release|ARM64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|ARM64.Build.0 = Release|ARM64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|ARM64.Deploy.0 = Release|ARM64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|x64.ActiveCfg = Release|x64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|x64.Build.0 = Release|x64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|x64.Deploy.0 = Release|x64 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|x86.ActiveCfg = Release|x86 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|x86.Build.0 = Release|x86 + {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|x86.Deploy.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE