53 Commits

Author SHA1 Message Date
Burak Kaan Köse
2fbcf8e104 Launching server. 2024-07-22 11:05:04 +02:00
Burak Kaan Köse
495885e006 Cleaning up the solution. Separating Shared.WinRT, Services and Synchronization. Removing synchronization from app. Reducing bundle size by 45mb. 2024-07-21 05:45:02 +02:00
Burak Kaan Köse
f112f369a7 Add server projects. Packaging with WinUI server doesn't work. Payload contains two or more files etc. 2024-07-21 02:17:11 +02:00
Burak Kaan Köse
1f472d78e0 Error handling for rendering mail on request. 2024-07-21 01:58:17 +02:00
Burak Kaan Köse
ebf4bc6f97 Ditch UWP solution completely. 2024-07-20 23:32:39 +02:00
Burak Kaan Köse
654b7ec1a7 Remove packaging and server for now. 2024-07-20 18:38:29 +02:00
Burak Kaan Köse
e3a36b9191 Some warnings 2024-07-20 18:37:57 +02:00
Burak Kaan Köse
2944e80540 Remove duplicate packagereference for mimekit. 2024-07-20 18:21:22 +02:00
Burak Kaan Köse
2d6155ae6f Revert everything back. Mission failed. 2024-07-20 04:16:45 +02:00
Burak Kaan Köse
e04c17d591 Removing UWP project. 2024-07-20 03:07:21 +02:00
Burak Kaan Köse
5b68f237f0 I don't know some changes.... 2024-07-19 20:31:13 +02:00
Burak Kaan Köse
026151e7e4 Change App.xaml to resolve packaging issues for server. 2024-07-19 20:30:50 +02:00
Burak Kaan Köse
7d0934b679 Switch back to WPF server. 2024-07-19 04:26:06 +02:00
Burak Kaan Köse
756cf5992c Implement NET8 server but without packaging capability. 2024-07-19 03:06:01 +02:00
Burak Kaan Köse
0cb39d41e8 Fixing WinUI build and bringing Wino.Server basics. 2024-07-19 00:57:12 +02:00
Burak Kaan Köse
3f17a10ad0 Fixing UWP solution. 2024-07-18 23:59:20 +02:00
Burak Kaan Köse
5a1aafb3ce merge communication branch 2024-07-18 22:21:52 +02:00
Burak Kaan Köse
38f44a8b39 Delegating changes to UI and triggering new background synchronization. 2024-07-18 20:03:58 +02:00
Burak Kaan Köse
7ef045a0ad Removal of background task service from core. 2024-07-18 15:07:17 +02:00
Burak Kaan Köse
a9a9907bc6 Removed IWinoSynchronizerFactory from UWP project. 2024-07-17 23:22:53 +02:00
Burak Kaan Köse
329eae3a25 UIMessage communication. Single instancing for server and re-connection mechanism on suspension. 2024-07-17 22:36:10 +02:00
Burak Kaan Köse
ad1c7e1fd3 Fix server-client connection. 2024-07-17 00:20:40 +02:00
Burak Kaan Köse
06d85594d8 Enable generating assembly info to deal with unsupported os platform warnings. 2024-07-17 00:20:30 +02:00
Burak Kaan Köse
7d3dbc6bb0 Remove debug code. 2024-07-16 23:29:54 +02:00
Burak Kaan Köse
ec4162e71f Wino.Server and Wino.Packaging projects. Enabling full trust for UWP and app service connection manager basics. 2024-07-16 23:28:57 +02:00
Burak Kaan Köse
3b8454269e Separation of messages. Introducing Wino.Messages library. 2024-07-16 14:56:46 +02:00
Aleh Khantsevich
2e0dd24cdd Fix title bar caption buttons theme 2024-07-15 00:20:22 +02:00
Aleh Khantsevich
403e5e5de0 Get rid of Newtonsoft 2024-07-14 20:35:17 +02:00
Aleh Khantsevich
fbdd068274 Fixed theme service WinUI 2024-07-14 18:50:32 +02:00
Burak Kaan Köse
564485a574 Bring back manifest extensions for publisher shared folder access. 2024-07-14 16:51:08 +02:00
Burak Kaan Köse
0280710a73 Init app shell service for UWP. 2024-07-14 16:38:29 +02:00
Burak Kaan Köse
d152a87db9 Fix UWP build. 2024-07-14 16:32:47 +02:00
Aleh Khantsevich
592e5d899e Revert "Fixed theme service"
This reverts commit 2de78f520c.
2024-07-14 15:37:34 +02:00
Aleh Khantsevich
2de78f520c Fixed theme service 2024-07-14 13:17:51 +02:00
Aleh Khantsevich
cba937a640 Remove WinAppSDK references from libraries. Not needed at current stage. 2024-07-14 00:13:15 +02:00
Aleh Khantsevich
eb9568a76e Update packages ( except WinAppSDK) 2024-07-13 23:52:49 +02:00
Burak Kaan Köse
76a9fe496a Merge branch 'feature/WinUI' of https://github.com/bkaankose/Wino-Mail into feature/WinUI 2024-07-13 20:46:04 +02:00
Aleh Khantsevich
a19330afa4 Add JS files to the bundle 2024-07-13 20:37:22 +02:00
Burak Kaan Köse
75dec01eb8 One more fix for dialogs. 2024-07-13 20:37:10 +02:00
Aleh Khantsevich
bd6a929988 Fix wino fonts 2024-07-13 19:07:12 +02:00
Burak Kaan Köse
91b6a4204e Fixing dialog presentations. 2024-07-13 18:36:35 +02:00
Burak Kaan Köse
e6e758e9ba Basic window handling. 2024-07-13 03:45:55 +02:00
Burak Kaan Köse
ef151aa7a6 Linking all views. 2024-07-12 21:45:42 +02:00
Burak Kaan Köse
1ff82e62ff Remove BackdropMaterial usage in XAML for WinUI 3 2024-07-12 19:01:16 +02:00
Burak Kaan Köse
c45d0022d6 Shared core and views part 1 2024-07-12 02:29:17 +02:00
Burak Kaan Köse
bdfff1536d Blank WinUI project. 2024-07-12 01:11:39 +02:00
Burak Kaan Köse
6ce806e4ef Remove Wino.Calendar project temporarily from UWP solution. 2024-07-11 16:49:40 +02:00
Burak Kaan Köse
40657ee109 Add background tasks project for NET8 2024-07-11 16:49:00 +02:00
Burak Kaan Köse
9edb06c1cc Standartization of Core.UWP project file for NET8 WinUI 2024-07-11 16:38:43 +02:00
Burak Kaan Köse
dec5d2b2b7 Remove duplicate package reference 2024-07-11 16:15:22 +02:00
Burak Kaan Köse
ffd7cef409 Override default namespaces 2024-07-11 16:14:39 +02:00
Burak Kaan Köse
f62cc1e243 .NET8 projects for core projects and view models. 2024-07-11 16:12:49 +02:00
Burak Kaan Köse
f7656da56d Get rid of Xamarin dependency in core project. 2024-07-11 16:10:54 +02:00
857 changed files with 9383 additions and 15966 deletions

3
.github/FUNDING.yml vendored
View File

@@ -1,3 +0,0 @@
# These are supported funding model platforms
github: [bkaankose]

View File

@@ -1,20 +0,0 @@
---
name: Bug Report
about: Something is not working as intended
title: "[Bug]"
labels: bug
assignees: bkaankose
---
**Describe the bug**
A clear and concise description of what the bug is.
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.

View File

@@ -1,17 +0,0 @@
---
name: Feature Proposal
about: Suggest an idea for this project
title: "[Proposal]"
labels: enhancement
assignees: ''
---
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Is your proposal implemented in Windows Mail?**
Wino's priority is to catch up with the feature set of Windows Mail first.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@@ -1,42 +0,0 @@
{
"AttributesTolerance": 2,
"KeepFirstAttributeOnSameLine": false,
"MaxAttributeCharactersPerLine": 0,
"MaxAttributesPerLine": 1,
"NewlineExemptionElements": "RadialGradientBrush, GradientStop, LinearGradientBrush, ScaleTransform, SkewTransform, RotateTransform, TranslateTransform, Trigger, Condition, Setter",
"SeparateByGroups": false,
"AttributeIndentation": 0,
"AttributeIndentationStyle": 1,
"RemoveDesignTimeReferences": false,
"IgnoreDesignTimeReferencePrefix": false,
"EnableAttributeReordering": true,
"AttributeOrderingRuleGroups": [
"x:Class",
"xmlns, xmlns:x",
"xmlns:*",
"x:Key, Key, x:Name, Name, x:Uid, Uid, Title",
"Grid.Row, Grid.RowSpan, Grid.Column, Grid.ColumnSpan, Canvas.Left, Canvas.Top, Canvas.Right, Canvas.Bottom",
"Width, Height, MinWidth, MinHeight, MaxWidth, MaxHeight",
"Margin, Padding, HorizontalAlignment, VerticalAlignment, HorizontalContentAlignment, VerticalContentAlignment, Panel.ZIndex",
"*:*, *",
"PageSource, PageIndex, Offset, Color, TargetName, Property, Value, StartPoint, EndPoint",
"mc:Ignorable, d:IsDataSource, d:LayoutOverrides, d:IsStaticText",
"Storyboard.*, From, To, Duration"
],
"FirstLineAttributes": "",
"OrderAttributesByName": true,
"PutEndingBracketOnNewLine": false,
"RemoveEndingTagOfEmptyElement": true,
"SpaceBeforeClosingSlash": true,
"RootElementLineBreakRule": 0,
"ReorderVSM": 2,
"ReorderGridChildren": false,
"ReorderCanvasChildren": false,
"ReorderSetters": 0,
"FormatMarkupExtension": true,
"NoNewLineMarkupExtensions": "x:Bind, Binding",
"ThicknessSeparator": 2,
"ThicknessAttributes": "Margin, Padding, BorderThickness, ThumbnailClipMargin",
"FormatOnSave": true,
"CommentPadding": 2,
}

View File

@@ -1,34 +0,0 @@
using Microsoft.Toolkit.Uwp.Notifications;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Background;
namespace Wino.BackgroundTasks
{
/// <summary>
/// Creates a toast notification to notify user when the Store update happens.
/// </summary>
public sealed class AppUpdatedTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
var def = taskInstance.GetDeferral();
var builder = new ToastContentBuilder();
builder.SetToastScenario(ToastScenario.Default);
Package package = Package.Current;
PackageId packageId = package.Id;
PackageVersion version = packageId.Version;
var versionText = string.Format("{0}.{1}.{2}.{3}", version.Major, version.Minor, version.Build, version.Revision);
// TODO: Handle with Translator, but it's not initialized here yet.
builder.AddText("Wino Mail is updated!");
builder.AddText(string.Format("New version {0} is ready.", versionText));
builder.Show();
def.Complete();
}
}
}

View File

@@ -1,29 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Wino.BackgroundTasks")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Wino.BackgroundTasks")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: ComVisible(false)]

View File

@@ -1,126 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}</ProjectGuid>
<OutputType>winmdobj</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Wino.BackgroundTasks</RootNamespace>
<AssemblyName>Wino.BackgroundTasks</AssemblyName>
<DefaultLanguage>en-US</DefaultLanguage>
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
<TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.22621.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<AllowCrossPlatformRetargeting>false</AllowCrossPlatformRetargeting>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<PlatformTarget>x86</PlatformTarget>
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM64'">
<PlatformTarget>ARM64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\ARM64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM64'">
<PlatformTarget>ARM64</PlatformTarget>
<OutputPath>bin\ARM64\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<PlatformTarget>x64</PlatformTarget>
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>
<ItemGroup>
<Compile Include="AppUpdatedTask.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform">
<Version>6.2.14</Version>
</PackageReference>
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications">
<Version>7.1.3</Version>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Wino.Core.Domain\Wino.Core.Domain.csproj">
<Project>{CF3312E5-5DA0-4867-9945-49EA7598AF1F}</Project>
<Name>Wino.Core.Domain</Name>
</ProjectReference>
<ProjectReference Include="..\Wino.Core.UWP\Wino.Core.UWP.csproj">
<Project>{395f19ba-1e42-495c-9db5-1a6f537fccb8}</Project>
<Name>Wino.Core.UWP</Name>
</ProjectReference>
<ProjectReference Include="..\Wino.Core\Wino.Core.csproj">
<Project>{e6b1632a-8901-41e8-9ddf-6793c7698b0b}</Project>
<Name>Wino.Core</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<SDKReference Include="WindowsDesktop, Version=10.0.22621.0">
<Name>Windows Desktop Extensions for the UWP</Name>
</SDKReference>
</ItemGroup>
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' ">
<VisualStudioVersion>14.0</VisualStudioVersion>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,7 +0,0 @@
<Application
x:Class="Wino.Calendar.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Wino.Calendar">
</Application>

View File

@@ -1,100 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
namespace Wino.Calendar
{
/// <summary>
/// Provides application-specific behavior to supplement the default Application class.
/// </summary>
sealed partial class App : Application
{
/// <summary>
/// Initializes the singleton application object. This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
/// </summary>
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
}
/// <summary>
/// Invoked when the application is launched normally by the end user. Other entry points
/// will be used such as when the application is launched to open a specific file.
/// </summary>
/// <param name="e">Details about the launch request and process.</param>
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null)
{
// Create a Frame to act as the navigation context and navigate to the first page
rootFrame = new Frame();
rootFrame.NavigationFailed += OnNavigationFailed;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Load state from previously suspended application
}
// Place the frame in the current Window
Window.Current.Content = rootFrame;
}
if (e.PrelaunchActivated == false)
{
if (rootFrame.Content == null)
{
// When the navigation stack isn't restored navigate to the first page,
// configuring the new page by passing required information as a navigation
// parameter
rootFrame.Navigate(typeof(MainPage), e.Arguments);
}
// Ensure the current window is active
Window.Current.Activate();
}
}
/// <summary>
/// Invoked when Navigation to a certain page fails
/// </summary>
/// <param name="sender">The Frame which failed navigation</param>
/// <param name="e">Details about the navigation failure</param>
void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
{
throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
}
/// <summary>
/// Invoked when application execution is being suspended. Application state is saved
/// without knowing whether the application will be terminated or resumed with the contents
/// of memory still intact.
/// </summary>
/// <param name="sender">The source of the suspend request.</param>
/// <param name="e">Details about the suspend request.</param>
private void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
//TODO: Save application state and stop any background activity
deferral.Complete();
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -1,14 +0,0 @@
<Page
x:Class="Wino.Calendar.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Wino.Calendar"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
</Grid>
</Page>

View File

@@ -1,30 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace Wino.Calendar
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
}
}

View File

@@ -1,29 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Wino.Calendar")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Wino.Calendar")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: ComVisible(false)]

View File

@@ -1,31 +0,0 @@
<!--
This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most
developers. However, you can modify these parameters to modify the behavior of the .NET Native
optimizer.
Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919
To fully enable reflection for App1.MyClass and all of its public/private members
<Type Name="App1.MyClass" Dynamic="Required All"/>
To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
<TypeInstantiation Name="App1.AppClass" Arguments="System.Int32" Activate="Required Public" />
Using the Namespace directive to apply reflection policy to all the types in a particular namespace
<Namespace Name="DataClasses.ViewModels" Serialize="All" />
-->
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<!--
An Assembly element with Name="*Application*" applies to all assemblies in
the application package. The asterisks are not wildcards.
-->
<Assembly Name="*Application*" Dynamic="Required All" />
<!-- Add your application specific runtime directives here. -->
</Application>
</Directives>

View File

@@ -1,172 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProjectGuid>{600F4979-DB7E-409D-B7DA-B60BE4C55C35}</ProjectGuid>
<OutputType>AppContainerExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Wino.Calendar</RootNamespace>
<AssemblyName>Wino.Calendar</AssemblyName>
<DefaultLanguage>en-US</DefaultLanguage>
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
<TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.22621.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WindowsXamlEnableOverview>true</WindowsXamlEnableOverview>
<AppxPackageSigningEnabled>True</AppxPackageSigningEnabled>
<PackageCertificateThumbprint>125A5273FCFE8D551C3FED87F67C87A663E98F1B</PackageCertificateThumbprint>
<PackageCertificateKeyFile />
<GenerateTemporaryStoreCertificate>True</GenerateTemporaryStoreCertificate>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\ARM\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>ARM</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
<OutputPath>bin\ARM\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>ARM</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\ARM64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>ARM64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM64'">
<OutputPath>bin\ARM64\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>ARM64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
</PropertyGroup>
<PropertyGroup>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>
<ItemGroup>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
</Compile>
<Compile Include="MainPage.xaml.cs">
<DependentUpon>MainPage.xaml</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<AppxManifest Include="Package.appxmanifest">
<SubType>Designer</SubType>
</AppxManifest>
</ItemGroup>
<ItemGroup>
<None Include="Package.StoreAssociation.xml" />
<Content Include="Properties\Default.rd.xml" />
<Content Include="Assets\LockScreenLogo.scale-200.png" />
<Content Include="Assets\SplashScreen.scale-200.png" />
<Content Include="Assets\Square150x150Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="Assets\StoreLogo.png" />
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Page Include="MainPage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform">
<Version>6.2.14</Version>
</PackageReference>
</ItemGroup>
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' ">
<VisualStudioVersion>14.0</VisualStudioVersion>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,4 +1,6 @@
namespace Wino.Core.Domain using Wino.Domain.Enums;
namespace Wino.Domain
{ {
public static class Constants public static class Constants
{ {
@@ -8,11 +10,35 @@
public const string WinoLocalDraftHeader = "X-Wino-Draft-Id"; public const string WinoLocalDraftHeader = "X-Wino-Draft-Id";
public const string LocalDraftStartPrefix = "localDraft_"; public const string LocalDraftStartPrefix = "localDraft_";
public const string ToastMailUniqueIdKey = nameof(ToastMailUniqueIdKey); // Toast Notification Keys
public const string ToastMailItemIdKey = nameof(ToastMailItemIdKey);
public const string ToastMailItemRemoteFolderIdKey = nameof(ToastMailItemRemoteFolderIdKey);
public const string ToastActionKey = nameof(ToastActionKey); public const string ToastActionKey = nameof(ToastActionKey);
public const string ClientLogFile = "Client_.log"; // App Configuration
public const string ServerLogFile = "Server_.log"; public const AppLanguage DefaultAppLanguage = AppLanguage.English;
public const string LogArchiveFileName = "WinoLogs.zip"; public const string SharedFolderName = "WinoShared";
public static char MailCopyUidSeparator = '_';
// GMail Category Labels
public const string FORUMS_LABEL_ID = "FORUMS";
public const string UPDATES_LABEL_ID = "UPDATES";
public const string PROMOTIONS_LABEL_ID = "PROMOTIONS";
public const string SOCIAL_LABEL_ID = "SOCIAL";
public const string PERSONAL_LABEL_ID = "PERSONAL";
public static string[] SubCategoryFolderLabelIds =
[
FORUMS_LABEL_ID,
UPDATES_LABEL_ID,
PROMOTIONS_LABEL_ID,
SOCIAL_LABEL_ID,
PERSONAL_LABEL_ID
];
// File Names
public const string ProtocolLogFileName = "ImapProtocolLog.log";
public const string WinoLogFileName = "WinoDiagnostics.log";
} }
} }

View File

@@ -1,7 +1,7 @@
using System; using System;
using SQLite; using SQLite;
namespace Wino.Core.Domain.Entities namespace Wino.Domain.Entities
{ {
public class AccountSignature public class AccountSignature
{ {

View File

@@ -1,49 +1,31 @@
using System; using SQLite;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using SQLite;
namespace Wino.Core.Domain.Entities namespace Wino.Domain.Entities
{ {
/// <summary> /// <summary>
/// Back storage for simple name-address book. /// Back storage for simple name-address book.
/// These values will be inserted during MIME fetch. /// These values will be inserted during MIME fetch.
/// </summary> /// </summary>
// TODO: This can easily evolve to Contact store, just like People app in Windows 10/11. // TODO: This can easily evolve to Contact store, just like People app in Windows 10/11.
// Do it. // Do it.
public class AccountContact : IEquatable<AccountContact> public class AddressInformation : IEquatable<AddressInformation>
{ {
/// <summary>
/// E-mail address of the contact.
/// </summary>
[PrimaryKey] [PrimaryKey]
public string Address { get; set; } public string Address { get; set; }
/// <summary>
/// Display name of the contact.
/// </summary>
public string Name { get; set; } public string Name { get; set; }
/// <summary>
/// Base64 encoded profile image of the contact.
/// </summary>
public string Base64ContactPicture { get; set; }
/// <summary>
/// All registered accounts have their contacts registered as root.
/// Root contacts must not be overridden by any configuration.
/// They are created on account creation.
/// </summary>
public bool IsRootContact { get; set; }
public string DisplayName => Address == Name ? Address : $"{Name} <{Address}>"; public string DisplayName => Address == Name ? Address : $"{Name} <{Address}>";
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return Equals(obj as AccountContact); return Equals(obj as AddressInformation);
} }
public bool Equals(AccountContact other) public bool Equals(AddressInformation other)
{ {
return !(other is null) && return !(other is null) &&
Address == other.Address && Address == other.Address &&
@@ -58,12 +40,12 @@ namespace Wino.Core.Domain.Entities
return hashCode; return hashCode;
} }
public static bool operator ==(AccountContact left, AccountContact right) public static bool operator ==(AddressInformation left, AddressInformation right)
{ {
return EqualityComparer<AccountContact>.Default.Equals(left, right); return EqualityComparer<AddressInformation>.Default.Equals(left, right);
} }
public static bool operator !=(AccountContact left, AccountContact right) public static bool operator !=(AddressInformation left, AddressInformation right)
{ {
return !(left == right); return !(left == right);
} }

View File

@@ -1,8 +1,8 @@
using System; using System;
using SQLite; using SQLite;
using Wino.Core.Domain.Enums; using Wino.Domain.Enums;
namespace Wino.Core.Domain.Entities namespace Wino.Domain.Entities
{ {
public class CustomServerInformation public class CustomServerInformation
{ {

View File

@@ -1,8 +1,8 @@
using System; using System;
using SQLite; using SQLite;
using Wino.Core.Domain.Enums; using Wino.Domain.Enums;
namespace Wino.Core.Domain.Entities namespace Wino.Domain.Entities
{ {
public class MailAccount public class MailAccount
{ {
@@ -44,11 +44,6 @@ namespace Wino.Core.Domain.Entities
/// </summary> /// </summary>
public string AccountColorHex { get; set; } public string AccountColorHex { get; set; }
/// <summary>
/// Base64 encoded profile picture of the account.
/// </summary>
public string Base64ProfilePictureData { get; set; }
/// <summary> /// <summary>
/// Gets or sets the listing order of the account in the accounts list. /// Gets or sets the listing order of the account in the accounts list.
/// </summary> /// </summary>
@@ -83,15 +78,5 @@ namespace Wino.Core.Domain.Entities
/// </summary> /// </summary>
[Ignore] [Ignore]
public MailAccountPreferences Preferences { get; set; } public MailAccountPreferences Preferences { get; set; }
/// <summary>
/// Gets whether the account can perform ProfileInformation sync type.
/// </summary>
public bool IsProfileInfoSyncSupported => ProviderType == MailProviderType.Outlook || ProviderType == MailProviderType.Office365 || ProviderType == MailProviderType.Gmail;
/// <summary>
/// Gets whether the account can perform AliasInformation sync type.
/// </summary>
public bool IsAliasSyncSupported => ProviderType == MailProviderType.Gmail;
} }
} }

View File

@@ -1,56 +0,0 @@
using System;
using SQLite;
namespace Wino.Core.Domain.Entities
{
public class RemoteAccountAlias
{
/// <summary>
/// Display address of the alias.
/// </summary>
public string AliasAddress { get; set; }
/// <summary>
/// Address to be included in Reply-To header when alias is used for sending messages.
/// </summary>
public string ReplyToAddress { get; set; }
/// <summary>
/// Whether this alias is the primary alias for the account.
/// </summary>
public bool IsPrimary { get; set; }
/// <summary>
/// Whether the alias is verified by the server.
/// Only Gmail aliases are verified for now.
/// Non-verified alias messages might be rejected by SMTP server.
/// </summary>
public bool IsVerified { get; set; }
/// <summary>
/// Whether this alias is the root alias for the account.
/// Root alias means the first alias that was created for the account.
/// It can't be deleted or changed.
/// </summary>
public bool IsRootAlias { get; set; }
}
public class MailAccountAlias : RemoteAccountAlias
{
/// <summary>
/// Unique Id for the alias.
/// </summary>
[PrimaryKey]
public Guid Id { get; set; }
/// <summary>
/// Account id that this alias is attached to.
/// </summary>
public Guid AccountId { get; set; }
/// <summary>
/// Root aliases can't be deleted.
/// </summary>
public bool CanDelete => !IsRootAlias;
}
}

View File

@@ -1,7 +1,7 @@
using System; using System;
using SQLite; using SQLite;
namespace Wino.Core.Domain.Entities namespace Wino.Domain.Entities
{ {
public class MailAccountPreferences public class MailAccountPreferences
{ {

View File

@@ -1,10 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using SQLite; using SQLite;
using Wino.Core.Domain.Enums; using Wino.Domain.Enums;
using Wino.Core.Domain.Models.MailItem; using Wino.Domain.Models.MailItem;
namespace Wino.Core.Domain.Entities namespace Wino.Domain.Entities
{ {
/// <summary> /// <summary>
/// Summary of the parsed MIME messages. /// Summary of the parsed MIME messages.
@@ -141,16 +141,7 @@ namespace Wino.Core.Domain.Entities
/// </summary> /// </summary>
[Ignore] [Ignore]
public MailAccount AssignedAccount { get; set; } public MailAccount AssignedAccount { get; set; }
public IEnumerable<Guid> GetContainingIds() => new[] { UniqueId };
/// <summary>
/// Contact information of the sender if exists.
/// Warning: This field is not populated by queries.
/// Services or View Models are responsible for populating this field.
/// </summary>
[Ignore]
public AccountContact SenderContact { get; set; }
public IEnumerable<Guid> GetContainingIds() => [UniqueId];
public override string ToString() => $"{Subject} <-> {Id}"; public override string ToString() => $"{Subject} <-> {Id}";
} }
} }

View File

@@ -2,10 +2,11 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using SQLite; using SQLite;
using Wino.Core.Domain.Enums; using Wino.Domain;
using Wino.Core.Domain.Models.Folders; using Wino.Domain.Enums;
using Wino.Domain.Models.Folders;
namespace Wino.Core.Domain.Entities namespace Wino.Domain.Entities
{ {
[DebuggerDisplay("{FolderName} - {SpecialFolderType}")] [DebuggerDisplay("{FolderName} - {SpecialFolderType}")]
public class MailItemFolder : IMailItemFolder public class MailItemFolder : IMailItemFolder

View File

@@ -1,7 +1,7 @@
using System; using System;
using SQLite; using SQLite;
namespace Wino.Core.Domain.Entities namespace Wino.Domain.Entities
{ {
public class MergedInbox public class MergedInbox
{ {

View File

@@ -2,7 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
namespace Wino.Core.Domain.Entities namespace Wino.Domain.Entities
{ {
public record SystemFolderConfiguration(MailItemFolder SentFolder, public record SystemFolderConfiguration(MailItemFolder SentFolder,
MailItemFolder DraftFolder, MailItemFolder DraftFolder,

View File

@@ -1,8 +1,8 @@
using System; using System;
using SQLite; using SQLite;
using Wino.Core.Domain.Models.Authentication; using Wino.Domain.Models.Authentication;
namespace Wino.Core.Domain.Entities namespace Wino.Domain.Entities
{ {
public class TokenInformation : TokenInformationBase public class TokenInformation : TokenInformationBase
{ {
@@ -11,10 +11,6 @@ namespace Wino.Core.Domain.Entities
public Guid AccountId { get; set; } public Guid AccountId { get; set; }
/// <summary>
/// Unique object storage for authenticators if needed.
/// </summary>
public string UniqueId { get; set; }
public string Address { get; set; } public string Address { get; set; }
public void RefreshTokens(TokenInformationBase tokenInformationBase) public void RefreshTokens(TokenInformationBase tokenInformationBase)

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum AccountAttentionReason public enum AccountAttentionReason
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum AccountCreationDialogState public enum AccountCreationDialogState
{ {
@@ -9,7 +9,6 @@
ManuelSetupWaiting, ManuelSetupWaiting,
TestingConnection, TestingConnection,
AutoDiscoverySetup, AutoDiscoverySetup,
AutoDiscoveryInProgress, AutoDiscoveryInProgress
FetchingProfileInformation
} }
} }

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
/// <summary> /// <summary>
/// Indicates the state of synchronizer. /// Indicates the state of synchronizer.

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum AppLanguage public enum AppLanguage
{ {
@@ -15,6 +15,5 @@
Indonesian, Indonesian,
Greek, Greek,
PortugeseBrazil, PortugeseBrazil,
Italian
} }
} }

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum AppThemeType public enum AppThemeType
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum ApplicationElementTheme public enum ApplicationElementTheme
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum BackgroundSynchronizationReason public enum BackgroundSynchronizationReason
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum ChangeRequestType public enum ChangeRequestType
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum CustomIncomingServerType public enum CustomIncomingServerType
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum DraftCreationReason public enum DraftCreationReason
{ {

View File

@@ -0,0 +1,11 @@
namespace Wino.Domain.Enums
{
public enum EditorToolbarSectionType
{
None,
Format,
Insert,
Draw,
Options
}
}

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum FilterOptionType public enum FilterOptionType
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
/// <summary> /// <summary>
/// Defines all possible folder operations that can be done. /// Defines all possible folder operations that can be done.

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum ImapAuthenticationMethod public enum ImapAuthenticationMethod
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum ImapConnectionSecurity public enum ImapConnectionSecurity
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum InfoBarAnimationType public enum InfoBarAnimationType
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum InfoBarMessageType public enum InfoBarMessageType
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum MailAttachmentType public enum MailAttachmentType
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum MailImportance public enum MailImportance
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum MailListDisplayMode public enum MailListDisplayMode
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum MailMarkAsOption public enum MailMarkAsOption
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
// Synchronizer requests. // Synchronizer requests.
public enum MailSynchronizerOperation public enum MailSynchronizerOperation

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum MailProviderType public enum MailProviderType
{ {

View File

@@ -0,0 +1,8 @@
namespace Wino.Domain.Enums
{
public enum MenuPaneMode
{
Visible,
Hidden
}
}

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum NavigationReferenceFrame public enum NavigationReferenceFrame
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
/// <summary> /// <summary>
/// Defines the potential reasons for picking folder in the folder picking dialog. /// Defines the potential reasons for picking folder in the folder picking dialog.

View File

@@ -0,0 +1,15 @@
namespace Wino.Domain.Enums
{
public enum ReaderFont
{
Arial,
TimesNewRoman,
Verdana,
Tahoma,
CourierNew,
Georgia,
TrebuchetMS,
Calibri,
Helvetica
}
}

View File

@@ -1,12 +0,0 @@
namespace Wino.Core.Domain.Enums
{
/// <summary>
/// What should happen to server app when the client is terminated.
/// </summary>
public enum ServerBackgroundMode
{
MinimizedTray, // Still runs, tray icon is visible.
Invisible, // Still runs, tray icon is invisible.
Terminate // Server is terminated as Wino terminates.
}
}

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum SortingOptionType public enum SortingOptionType
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum SpecialFolderType public enum SpecialFolderType
{ {

View File

@@ -1,11 +0,0 @@
namespace Wino.Core.Domain.Enums
{
public enum StartupBehaviorResult
{
Enabled,
Disabled,
DisabledByUser,
DisabledByPolicy,
Fatal
}
}

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
// From the SDK. // From the SDK.
public enum StorePurchaseResult public enum StorePurchaseResult

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum SynchronizationCompletedState public enum SynchronizationCompletedState
{ {

View File

@@ -1,12 +0,0 @@
namespace Wino.Core.Domain.Enums
{
/// <summary>
/// Enumeration for the source of synchronization.
/// Right now it can either be from the client or the server.
/// </summary>
public enum SynchronizationSource
{
Client,
Server
}
}

View File

@@ -1,13 +1,11 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum SynchronizationType public enum SynchronizationType
{ {
FoldersOnly, // Only synchronize folder metadata. FoldersOnly, // Only synchronize folder metadata.
ExecuteRequests, // Run the queued requests, and then synchronize if needed. ExecuteRequests, // Run the queued requests, and then synchronize if needed.
Inbox, // Only Inbox, Sent and Draft folders. Inbox, // Only Inbox
Custom, // Only sync folders that are specified in the options. Custom, // Only sync folders that are specified in the options.
Full, // Synchronize all folders. This won't update profile or alias information. Full, // Synchronize everything
UpdateProfile, // Only update profile information
Alias, // Only update alias information
} }
} }

View File

@@ -1,10 +0,0 @@
namespace Wino.Core.Domain.Enums
{
public enum WinoCustomMessageDialogIcon
{
Information,
Warning,
Error,
Question
}
}

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
/// <summary> /// <summary>
/// All registered views. /// All registered views.
@@ -19,10 +19,8 @@
PersonalizationPage, PersonalizationPage,
MessageListPage, MessageListPage,
MailListPage, MailListPage,
ReadComposePanePage, ReadingPanePage,
LanguageTimePage, LanguageTimePage,
AppPreferencesPage,
SettingOptionsPage, SettingOptionsPage,
AliasManagementPage
} }
} }

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums namespace Wino.Domain.Enums
{ {
public enum WinoServerConnectionStatus public enum WinoServerConnectionStatus
{ {

View File

@@ -1,6 +1,6 @@
namespace Wino.Core.Domain.Exceptions namespace Wino.Domain.Exceptions
{ {
public class AccountSetupCanceledException : System.Exception public class AccountSetupCanceledException : Exception
{ {
} }

View File

@@ -1,7 +1,7 @@
using System; using System;
using Wino.Core.Domain.Entities; using Wino.Domain.Entities;
namespace Wino.Core.Domain.Exceptions namespace Wino.Domain.Exceptions
{ {
/// <summary> /// <summary>
/// Thrown when IAuthenticator requires user interaction to fix authentication issues. /// Thrown when IAuthenticator requires user interaction to fix authentication issues.

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Wino.Core.Domain.Exceptions namespace Wino.Domain.Exceptions
{ {
/// <summary> /// <summary>
/// All exceptions related to authentication. /// All exceptions related to authentication.

View File

@@ -0,0 +1,9 @@
using System;
namespace Wino.Domain.Exceptions
{
/// <summary>
/// An exception thrown when the background task execution policies are denied for some reason.
/// </summary>
public class BackgroundTaskExecutionRequestDeniedException : Exception { }
}

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Wino.Core.Domain.Exceptions namespace Wino.Domain.Exceptions
{ {
/// <summary> /// <summary>
/// An exception thrown when the background task registration is failed. /// An exception thrown when the background task registration is failed.

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Wino.Core.Domain.Exceptions namespace Wino.Domain.Exceptions
{ {
/// <summary> /// <summary>
/// Thrown when composer cant find the mime to load. /// Thrown when composer cant find the mime to load.

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Wino.Core.Domain.Exceptions namespace Wino.Domain.Exceptions
{ {
public class CustomThemeCreationFailedException : Exception public class CustomThemeCreationFailedException : Exception
{ {

View File

@@ -1,6 +1,6 @@
namespace Wino.Core.Domain.Exceptions namespace Wino.Domain.Exceptions
{ {
public class GoogleAuthenticationException : System.Exception public class GoogleAuthenticationException : Exception
{ {
public GoogleAuthenticationException(string message) : base(message) { } public GoogleAuthenticationException(string message) : base(message) { }
} }

View File

@@ -1,6 +1,4 @@
using System; namespace Wino.Domain.Exceptions
namespace Wino.Core.Domain.Exceptions
{ {
public class ImapClientPoolException : Exception public class ImapClientPoolException : Exception
{ {

View File

@@ -1,7 +1,7 @@
using System; using System;
using Wino.Core.Domain.Models.AutoDiscovery; using Wino.Domain.Models.AutoDiscovery;
namespace Wino.Core.Domain.Exceptions namespace Wino.Domain.Exceptions
{ {
public class ImapConnectionFailedPackage public class ImapConnectionFailedPackage
{ {

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Wino.Core.Domain.Exceptions namespace Wino.Domain.Exceptions
{ {
public class InvalidMoveTargetException : Exception { } public class InvalidMoveTargetException : Exception { }
} }

View File

@@ -1,7 +0,0 @@
namespace Wino.Core.Domain.Exceptions
{
public class MissingAliasException : System.Exception
{
public MissingAliasException() : base(Translator.Exception_MissingAlias) { }
}
}

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Wino.Core.Domain.Exceptions namespace Wino.Domain.Exceptions
{ {
public class SynchronizerEntityNotFoundException : Exception public class SynchronizerEntityNotFoundException : Exception
{ {

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Wino.Core.Domain.Exceptions namespace Wino.Domain.Exceptions
{ {
public class SynchronizerException : Exception public class SynchronizerException : Exception
{ {

View File

@@ -1,7 +1,7 @@
namespace Wino.Core.Domain.Exceptions namespace Wino.Domain.Exceptions
{ {
/// <summary> /// <summary>
/// When IMAP account's system folder configuration setup is not done yet. /// When IMAP account's system folder configuration setup is not done yet.
/// </summary> /// </summary>
public class SystemFolderConfigurationMissingException : System.Exception { } public class SystemFolderConfigurationMissingException : Exception { }
} }

View File

@@ -1,7 +1,7 @@
using System; using System;
using Wino.Core.Domain.Enums; using Wino.Domain.Enums;
namespace Wino.Core.Domain.Exceptions namespace Wino.Domain.Exceptions
{ {
/// <summary> /// <summary>
/// Emitted when special folder is needed for an operation but it couldn't be found. /// Emitted when special folder is needed for an operation but it couldn't be found.

View File

@@ -1,12 +0,0 @@
using System;
namespace Wino.Core.Domain.Exceptions
{
/// <summary>
/// All server crash types. Wino Server ideally should not throw anything else than this Exception type.
/// </summary>
public class WinoServerException : Exception
{
public WinoServerException(string message) : base(message) { }
}
}

View File

@@ -1,8 +1,4 @@
using System; namespace Wino.Domain.Extensions
using System.Collections.Generic;
using System.Text;
namespace Wino.Core.Extensions
{ {
public static class LongExtensions public static class LongExtensions
{ {
@@ -11,34 +7,34 @@ namespace Wino.Core.Extensions
public static string GetBytesReadable(this long i) public static string GetBytesReadable(this long i)
{ {
// Get absolute value // Get absolute value
long absolute_i = (i < 0 ? -i : i); long absolute_i = i < 0 ? -i : i;
// Determine the suffix and readable value // Determine the suffix and readable value
string suffix; string suffix;
double readable; double readable;
if (absolute_i >= 0x1000000000000000) // Exabyte if (absolute_i >= 0x1000000000000000) // Exabyte
{ {
suffix = "EB"; suffix = "EB";
readable = (i >> 50); readable = i >> 50;
} }
else if (absolute_i >= 0x4000000000000) // Petabyte else if (absolute_i >= 0x4000000000000) // Petabyte
{ {
suffix = "PB"; suffix = "PB";
readable = (i >> 40); readable = i >> 40;
} }
else if (absolute_i >= 0x10000000000) // Terabyte else if (absolute_i >= 0x10000000000) // Terabyte
{ {
suffix = "TB"; suffix = "TB";
readable = (i >> 30); readable = i >> 30;
} }
else if (absolute_i >= 0x40000000) // Gigabyte else if (absolute_i >= 0x40000000) // Gigabyte
{ {
suffix = "GB"; suffix = "GB";
readable = (i >> 20); readable = i >> 20;
} }
else if (absolute_i >= 0x100000) // Megabyte else if (absolute_i >= 0x100000) // Megabyte
{ {
suffix = "MB"; suffix = "MB";
readable = (i >> 10); readable = i >> 10;
} }
else if (absolute_i >= 0x400) // Kilobyte else if (absolute_i >= 0x400) // Kilobyte
{ {
@@ -50,7 +46,7 @@ namespace Wino.Core.Extensions
return i.ToString("0 B"); // Byte return i.ToString("0 B"); // Byte
} }
// Divide by 1024 to get fractional value // Divide by 1024 to get fractional value
readable = (readable / 1024); readable = readable / 1024;
// Return formatted number with suffix // Return formatted number with suffix
return readable.ToString("0.# ") + suffix; return readable.ToString("0.# ") + suffix;
} }

View File

@@ -0,0 +1,14 @@
namespace Wino.Domain.Extensions
{
public static class MailkitClientExtensions
{
public static uint ResolveUid(string mailCopyId)
{
var splitted = mailCopyId.Split(Constants.MailCopyUidSeparator);
if (splitted.Length > 1 && uint.TryParse(splitted[1], out uint parsedUint)) return parsedUint;
throw new ArgumentOutOfRangeException(nameof(mailCopyId), mailCopyId, "Invalid mailCopyId format.");
}
}
}

View File

@@ -1,20 +1,22 @@
using System; using MimeKit;
using Wino.Domain;
using Wino.Domain.Entities;
namespace Wino.Core.Domain.Extensions namespace Wino.Domain.Extensions
{ {
public static class MimeExtensions public static class MimeExtensions
{ {
public static string GetBase64MimeMessage(this MimeKit.MimeMessage message)
public static AddressInformation ToAddressInformation(this MailboxAddress address)
{ {
using System.IO.MemoryStream memoryStream = new(); if (address == null)
message.WriteTo(MimeKit.FormatOptions.Default, memoryStream); return new AddressInformation() { Name = Translator.UnknownSender, Address = Translator.UnknownAddress };
byte[] buffer = memoryStream.GetBuffer();
int count = (int)memoryStream.Length;
return Convert.ToBase64String(buffer); if (string.IsNullOrEmpty(address.Name))
address.Name = address.Address;
return new AddressInformation() { Name = address.Name, Address = address.Address };
} }
public static MimeKit.MimeMessage GetMimeMessageFromBase64(this string base64)
=> MimeKit.MimeMessage.Load(new System.IO.MemoryStream(Convert.FromBase64String(base64)));
} }
} }

View File

@@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Wino.Core.Domain.Interfaces namespace Wino.Domain.Interfaces
{ {
/// <summary> /// <summary>
/// An interface that should force synchronizer to do synchronization for only given folder ids /// An interface that should force synchronizer to do synchronization for only given folder ids

View File

@@ -1,6 +1,6 @@
using Wino.Core.Domain.Enums; using Wino.Domain.Enums;
namespace Wino.Core.Domain.Interfaces namespace Wino.Domain.Interfaces
{ {
public interface IAccountCreationDialog public interface IAccountCreationDialog
{ {

View File

@@ -1,7 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using Wino.Core.Domain.Entities; using Wino.Domain.Entities;
namespace Wino.Core.Domain.Interfaces namespace Wino.Domain.Interfaces
{ {
public interface IAccountMenuItem : IMenuItem public interface IAccountMenuItem : IMenuItem
{ {

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Interfaces namespace Wino.Domain.Interfaces
{ {
public interface IAccountPickerDialog public interface IAccountPickerDialog
{ {

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Wino.Core.Domain.Interfaces namespace Wino.Domain.Interfaces
{ {
public interface IAccountProviderDetailViewModel public interface IAccountProviderDetailViewModel
{ {

View File

@@ -1,6 +1,6 @@
using Wino.Core.Domain.Entities; using Wino.Domain.Entities;
namespace Wino.Core.Domain.Interfaces namespace Wino.Domain.Interfaces
{ {
public interface IAccountProviderDetails public interface IAccountProviderDetails
{ {

View File

@@ -1,10 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Wino.Core.Domain.Entities; using Wino.Domain.Entities;
using Wino.Core.Domain.Models.Accounts;
namespace Wino.Core.Domain.Interfaces namespace Wino.Domain.Interfaces
{ {
public interface IAccountService public interface IAccountService
{ {
@@ -101,59 +100,5 @@ namespace Wino.Core.Domain.Interfaces
/// </summary> /// </summary>
/// <param name="accountIdOrderPair">AccountId-OrderNumber pair for all accounts.</param> /// <param name="accountIdOrderPair">AccountId-OrderNumber pair for all accounts.</param>
Task UpdateAccountOrdersAsync(Dictionary<Guid, int> accountIdOrderPair); Task UpdateAccountOrdersAsync(Dictionary<Guid, int> accountIdOrderPair);
/// <summary>
/// Returns the account aliases.
/// </summary>
/// <param name="accountId">Account id.</param>
/// <returns>A list of MailAccountAlias that has e-mail aliases.</returns>
Task<List<MailAccountAlias>> GetAccountAliasesAsync(Guid accountId);
/// <summary>
/// Updated account's aliases.
/// </summary>
/// <param name="accountId">Account id to update aliases for.</param>
/// <param name="aliases">Full list of updated aliases.</param>
/// <returns></returns>
Task UpdateAccountAliasesAsync(Guid accountId, List<MailAccountAlias> aliases);
/// <summary>
/// Delete account alias.
/// </summary>
/// <param name="aliasId">Alias to remove.</param>
Task DeleteAccountAliasAsync(Guid aliasId);
/// <summary>
/// Updated profile information of the account.
/// </summary>
/// <param name="accountId">Account id to update info for.</param>
/// <param name="profileInformation">Info data.</param>
/// <returns></returns>
Task UpdateProfileInformationAsync(Guid accountId, ProfileInformation profileInformation);
/// <summary>
/// Creates a root + primary alias for the account.
/// This is only called when the account is created.
/// </summary>
/// <param name="accountId">Account id.</param>
/// <param name="address">Address to create root primary alias from.</param>
Task CreateRootAliasAsync(Guid accountId, string address);
/// <summary>
/// Will compare local-remote aliases and update the local ones or add/delete new ones.
/// </summary>
/// <param name="remoteAccountAliases">Remotely fetched basic alias info from synchronizer.</param>
/// <param name="account">Account to update remote aliases for..</param>
Task UpdateRemoteAliasInformationAsync(MailAccount account, List<RemoteAccountAlias> remoteAccountAliases);
/// <summary>
/// Gets the primary account alias for the given account id.
/// Used when creating draft messages.
/// </summary>
/// <param name="accountId">Account id.</param>
/// <returns>Primary alias for the account.</returns>
Task<MailAccountAlias> GetPrimaryAccountAliasAsync(Guid accountId);
} }
} }

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Interfaces namespace Wino.Domain.Interfaces
{ {
/// <summary> /// <summary>
/// Singleton object that holds the application data folder path and the publisher shared folder path. /// Singleton object that holds the application data folder path and the publisher shared folder path.

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Interfaces namespace Wino.Domain.Interfaces
{ {
public interface IApplicationResourceManager<T> public interface IApplicationResourceManager<T>
{ {
@@ -7,5 +7,6 @@
bool ContainsResourceKey(string resourceKey); bool ContainsResourceKey(string resourceKey);
void ReplaceResource(string resourceKey, object resource); void ReplaceResource(string resourceKey, object resource);
T GetLastResource(); T GetLastResource();
TReturn GetResource<TReturn>(string resourceKey);
} }
} }

View File

@@ -1,6 +1,6 @@
using Wino.Core.Domain.Enums; using Wino.Domain.Enums;
namespace Wino.Core.Domain.Interfaces namespace Wino.Domain.Interfaces
{ {
public interface IAuthenticationProvider public interface IAuthenticationProvider
{ {

Some files were not shown because too many files have changed in this diff Show More