330 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
Burak Kaan Köse
76375c9471 Remove calendar project from UWP sln. 2024-07-16 13:24:36 +02:00
Burak Kaan Köse
0894c56c19 Fix for prune non single draft items. 2024-07-15 00:58:20 +02:00
Aleh Khantsevich
2e0dd24cdd Fix title bar caption buttons theme 2024-07-15 00:20:22 +02:00
Burak Kaan Köse
7de89ffe57 Fixing an issue with thread creation and selected items notifications. 2024-07-15 00:00:38 +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
Burak Kaan Köse
e0c01343a8 Fix unread badge icon for taskbar after re-calculating unread items. 2024-07-11 15:50:37 +02:00
Burak Kaan Köse
48ed4f971c Merge branch 'main' of https://github.com/bkaankose/Wino-Mail 2024-07-09 19:17:28 +02:00
Burak Kaan Köse
9e8c8a019e Remove old patch note. 2024-07-09 19:17:25 +02:00
Burak Kaan Köse
96f4ca2cc9 1.7.6 Release 2024-07-09 19:17:14 +02:00
Burak Kaan Köse
fad59604f9 New Crowdin updates (#274)
* New translations resources.json (French)

* New translations resources.json (Spanish)

* New translations resources.json (Catalan)

* New translations resources.json (Czech)

* New translations resources.json (Danish)

* New translations resources.json (German)

* New translations resources.json (Greek)

* New translations resources.json (Italian)

* New translations resources.json (Japanese)

* New translations resources.json (Dutch)

* New translations resources.json (Polish)

* New translations resources.json (Russian)

* New translations resources.json (Turkish)

* New translations resources.json (Ukrainian)

* New translations resources.json (Chinese Simplified)

* New translations resources.json (Galician)

* New translations resources.json (Portuguese, Brazilian)

* New translations resources.json (Indonesian)
2024-07-09 19:08:21 +02:00
Burak Kaan Köse
ac0e8da0ba Fix crash on signature dialog. 2024-07-09 19:01:22 +02:00
Burak Kaan Köse
fc5c3fd73e Fix recursive issue with merged account folder menu items. 2024-07-09 01:29:58 +02:00
Burak Kaan Köse
536fbb23a1 Folder operations, Gmail folder sync improvements and rework of menu items. (#273)
* New rename folder dialog keys.

* Insfra work for folder operations and rename folder code.

* RenameFolder for Gmail.

* Fixed input dialog to take custom take for primary button.

* Missing rename for DS call.

* Outlook to throw exception in case of error.

* Implemented rename folder functionality for Outlook.

* Remove default primary text from input dialog.

* Fixed an issue where outlook folder rename does not work.

* Disable vertical scroll for composing page editor items.

* Fixing some issues with imap folder sync.

* fix copy pasta

* TODO folder update/removed overrides for shell.

* New rename folder dialog keys.

* Insfra work for folder operations and rename folder code.

* RenameFolder for Gmail.

* Fixed input dialog to take custom take for primary button.

* Missing rename for DS call.

* Outlook to throw exception in case of error.

* Implemented rename folder functionality for Outlook.

* Remove default primary text from input dialog.

* Fixed an issue where outlook folder rename does not work.

* Disable vertical scroll for composing page editor items.

* Fixing some issues with imap folder sync.

* fix copy pasta

* TODO folder update/removed overrides for shell.

* New rename folder dialog keys.

* Insfra work for folder operations and rename folder code.

* RenameFolder for Gmail.

* Fixed input dialog to take custom take for primary button.

* Missing rename for DS call.

* Outlook to throw exception in case of error.

* Implemented rename folder functionality for Outlook.

* Remove default primary text from input dialog.

* Fixed an issue where outlook folder rename does not work.

* Disable vertical scroll for composing page editor items.

* Fixing some issues with imap folder sync.

* fix copy pasta

* TODO folder update/removed overrides for shell.

* New rename folder dialog keys.

* Fixed an issue where redundant older updates causing pivots to be re-created.

* New empty folder request

* New rename folder dialog keys.

* Insfra work for folder operations and rename folder code.

* RenameFolder for Gmail.

* Fixed input dialog to take custom take for primary button.

* Missing rename for DS call.

* Outlook to throw exception in case of error.

* Implemented rename folder functionality for Outlook.

* Remove default primary text from input dialog.

* Fixed an issue where outlook folder rename does not work.

* Fixing some issues with imap folder sync.

* fix copy pasta

* TODO folder update/removed overrides for shell.

* New rename folder dialog keys.

* New rename folder dialog keys.

* New rename folder dialog keys.

* Fixed an issue where redundant older updates causing pivots to be re-created.

* New empty folder request

* Enable empty folder on base sync.

* Move updates on event listeners.

* Remove folder UI messages.

* Reworked folder synchronization for gmail.

* Loading folders on the fly as the selected account changed instead of relying on cached menu items.

* Merged account folder items, re-navigating to existing rendering page.

* - Reworked merged account menu system.
- Reworked unread item count loadings.
- Fixed back button visibility.
- Instant rendering of mails if renderer is active.
- Animation fixes.
- Menu item re-load crash/hang fixes.

* Handle folder renaming on the UI.

* Empty folder for all synchronizers.

* New execution delay mechanism and handling folder mark as read for all synchronizers.

* Revert UI changes on failure for IMAP.

* Remove duplicate translation keys.

* Cleanup.
2024-07-09 01:05:16 +02:00
Burak Kaan Köse
ac01006398 Handle BAD respose on first try for ID command for IMAP. 2024-07-07 20:16:41 +02:00
Burak Kaan Köse
ade8654cc4 Change default font to Arial for composer. 2024-07-07 19:57:15 +02:00
Burak Kaan Köse
8e03f26fb5 Replace web view editor icon and tooltip. 2024-07-07 19:57:07 +02:00
Burak Kaan Köse
dab51bef7b NRE on invoke script. 2024-07-07 18:09:13 +02:00
Burak Kaan Köse
bea7fb5fe5 Merge branch 'main' of https://github.com/bkaankose/Wino-Mail 2024-07-07 18:08:19 +02:00
Tiktack
d6b3240506 Migrate from Quill to Jodit (#264)
* Refactored JS folder.
Removed useless files

* Add border to signature webview ( Fix for light theme)

* migrated quill to jodit(links not working)

* Removed quill subfolder

* removed table styles and fixed trigger color

* disable addaptive toolbar

* Remove direction button

* MinHeight, Toolbar toggle, style for combobox

* Added reference mail to replies and forward

* Command bar in compose page
Fixed align behaviour with Jodit

* Fix theme toggle in composer

* switch cc and to in mail chain

* default selected value for aligment

* make CC/To/From to be mailto links

* Added drag and drop for images
Fixed dropzones visual states
Corrected border radius
Fixed null reference exception when event dispatched when chromium still not initialized
2024-07-07 18:04:53 +02:00
Burak Kaan Köse
19e53d8bc8 Merge branch 'features/code-quality-js' of https://github.com/Tiktack/Wino-Mail 2024-07-07 17:56:56 +02:00
Aleh Khantsevich
5923d72803 Added drag and drop for images
Fixed dropzones visual states
Corrected border radius
Fixed null reference exception when event dispatched when chromium still not initialized
2024-07-07 01:42:12 +02:00
Aleh Khantsevich
8cde976358 make CC/To/From to be mailto links 2024-07-06 22:54:54 +02:00
Aleh Khantsevich
256a5b50ac default selected value for aligment 2024-07-06 19:34:46 +02:00
Aleh Khantsevich
8b236f68f4 switch cc and to in mail chain 2024-07-06 19:16:04 +02:00
Aleh Khantsevich
c18f6d3978 Fix theme toggle in composer 2024-07-06 18:23:44 +02:00
Aleh Khantsevich
e65733754c Command bar in compose page
Fixed align behaviour with Jodit
2024-07-06 00:52:19 +02:00
Aleh Khantsevich
4505630896 Added reference mail to replies and forward 2024-07-03 23:54:19 +02:00
Aleh Khantsevich
044804143f MinHeight, Toolbar toggle, style for combobox 2024-07-03 02:10:28 +02:00
Aleh Khantsevich
1e9d7c9b93 Remove direction button 2024-07-02 02:52:56 +02:00
Aleh Khantsevich
573fe3cad3 disable addaptive toolbar 2024-07-02 02:26:07 +02:00
Aleh Khantsevich
cd3880c85c removed table styles and fixed trigger color 2024-07-02 02:14:59 +02:00
Burak Kaan Köse
02cd8ed7ae Updated Reaadme 2024-07-01 22:48:45 +02:00
Aleh Khantsevich
3d69f96b96 Removed quill subfolder 2024-07-01 01:28:18 +02:00
Aleh Khantsevich
963a15abe7 migrated quill to jodit(links not working) 2024-07-01 00:57:07 +02:00
Burak Kaan Köse
40542f0461 Introducing new app icon. 2024-06-28 01:39:43 +02:00
Aleh Khantsevich
bfc2af71a4 Add border to signature webview ( Fix for light theme) 2024-06-27 17:03:07 +02:00
Aleh Khantsevich
35142bb61d Refactored JS folder.
Removed useless files
2024-06-27 14:17:05 +02:00
Burak Kaan Köse
39626e0df9 Couple UI Fixes (#255)
- Disabled UI navigation cache for all pages.
- Restore the renderer<>composer page animation back.
- IdlePage functionality into mail list page.
- Couple bugfixes.
2024-06-26 20:00:10 +02:00
Burak Kaan Köse
ca40730600 Merge branch 'Tiktack-features/UI-refresh' 2024-06-25 22:50:06 +02:00
Burak Kaan Köse
4158e196d6 Add visual state for moving To,CC and BCC to vertical line when the page is small enough. 2024-06-25 22:39:35 +02:00
Burak Kaan Köse
1516e800dd Merge branch 'features/UI-refresh' of https://github.com/Tiktack/Wino-Mail into Tiktack-features/UI-refresh 2024-06-25 22:20:38 +02:00
Aleh Khantsevich
0b96f69a1d Fix backgrounds 2024-06-25 00:37:09 +02:00
Aleh Khantsevich
bb418e51d4 fix compose page spacing 2024-06-24 01:38:50 +02:00
Aleh Khantsevich
5fb23ab8bf simplify xaml spacing 2024-06-24 01:36:53 +02:00
Burak Kaan Köse
117b01c48b Fix for IMAP missing Inbox folder type. 2024-06-24 01:32:07 +02:00
Aleh Khantsevich
18719815a3 Merge main 2024-06-24 01:30:20 +02:00
Aleh Khantsevich
f795595107 Fix narrowed view bug 2024-06-24 00:57:23 +02:00
Burak Kaan Köse
be3f9465eb Fix sharing wino logs. 2024-06-24 00:36:21 +02:00
Aleh Khantsevich
c598daab9b Fixed command bar open state 2024-06-24 00:20:54 +02:00
Burak Kaan Köse
438b25672f Release 1.7.4. 2024-06-23 23:32:04 +02:00
Aleh Khantsevich
1e12ddd8e2 Fix custom themes and drag/drop 2024-06-23 23:04:42 +02:00
Aleh Khantsevich
dccf55d57a Added separated zones 2024-06-23 13:32:06 +02:00
Burak Kaan Köse
3397845ccc Fixed an issue where empty listview drags focus to search bar automatically. 2024-06-22 00:43:48 +02:00
Burak Kaan Köse
82ae13ba3e Fixed Archive implementation for Gmail. 2024-06-21 23:48:03 +02:00
Burak Kaan Köse
8c830761f3 Fixed a rare issue with move function fails to re-synchronize the item properly to target folder. 2024-06-21 23:44:59 +02:00
Burak Kaan Köse
ad5c134887 Revert "Get rid of additional progress bar loading in list page under the command bar."
This reverts commit cfdd32708a.
2024-06-21 22:39:44 +02:00
Burak Kaan Köse
150bf124a9 Imap client pool improvements and implementation of MaxConcurrentClients. 2024-06-21 04:27:44 +02:00
Burak Kaan Köse
1c96c0ccbf Reworked IMAP folder synchronization logic. Gained 4x and fixed bunch of bugs around it. 2024-06-21 04:27:17 +02:00
Burak Kaan Köse
cf8ad3d697 Disable synchronization for default imap folders. 2024-06-21 04:25:32 +02:00
Burak Kaan Köse
5b723ec954 MaxConcurrentClients for IMAP model. 2024-06-21 04:25:07 +02:00
Burak Kaan Köse
633c708c33 Translation issue on save config text for missing system folder setup dialog. 2024-06-21 04:24:46 +02:00
Burak Kaan Köse
e4784108f7 Default client size for imap client pool. 2024-06-21 04:24:31 +02:00
Burak Kaan Köse
b4103a4edb Fixed an issue where setting archive folder as special folder does not update the configuration. 2024-06-21 04:24:04 +02:00
Burak Kaan Köse
cfdd32708a Get rid of additional progress bar loading in list page under the command bar. 2024-06-21 04:10:55 +02:00
Burak Kaan Köse
8e97c1e9e8 Removed old code from imap setup dialogs pages. 2024-06-21 02:58:12 +02:00
Burak Kaan Köse
e009bebfaf Fixed an issue where local draft is deleted via hover over action or delete button instead of discard button. Disabled discarding local drafts in compose page. 2024-06-21 02:11:18 +02:00
Burak Kaan Köse
d3d190989d Enabled portuguese-brazil language. 2024-06-21 01:22:03 +02:00
Burak Kaan Köse
1b36b52019 New Crowdin updates (#244)
* New translations resources.json (French)

* New translations resources.json (Spanish)

* New translations resources.json (Catalan)

* New translations resources.json (Czech)

* New translations resources.json (Danish)

* New translations resources.json (German)

* New translations resources.json (Italian)

* New translations resources.json (Japanese)

* New translations resources.json (Dutch)

* New translations resources.json (Polish)

* New translations resources.json (Russian)

* New translations resources.json (Turkish)

* New translations resources.json (Ukrainian)

* New translations resources.json (Chinese Simplified)

* New translations resources.json (Greek)

* New translations resources.json (Indonesian)

* New translations resources.json (Galician)

* New translations resources.json (Portuguese, Brazilian)
2024-06-21 01:15:26 +02:00
Burak Kaan Köse
e526e96e2d Fixed an issue where specifying imap auth method is ignored during authentication other than Auto. 2024-06-21 01:13:25 +02:00
Burak Kaan Köse
1659d74938 Release imap client only when the pool fails to provide one. 2024-06-21 00:32:45 +02:00
Burak Kaan Köse
f7161dc39b Pre-post authentication ID extension for IMAP. Some servers require it pre-auth looks like. 2024-06-18 02:22:55 +02:00
Burak Kaan Köse
d8ea41e4dd Version bump. 2024-06-18 00:33:28 +02:00
Burak Kaan Köse
fe0a03db2f Fix crash on stream flush. 2024-06-17 10:16:38 +02:00
Burak Kaan Köse
49afed7751 Reworked IMAP setup flow. Implemented easy way to share protocol log on failure if possible. 2024-06-17 02:16:06 +02:00
Burak Kaan Köse
a788b1706b Remove 'Rate' button from the shell menu. 2024-06-17 02:03:45 +02:00
Burak Kaan Köse
d57fd20ca2 Fixed a crash for IMAP when there are no sent and draft folder set. 2024-06-16 23:18:21 +02:00
Burak Kaan Köse
5ecc1b09c8 Merge pull request #223 from Tiktack/Fix/Scrollbaroverlay-signature-webview-size
Fix overlay scrollbars and signature webview size
2024-06-16 22:22:18 +02:00
Burak Kaan Köse
f1dfc9666b Merge pull request #219 from Tiktack/Bugs/AddLinkFix
Make HyperLink focusable in Signature Editor
2024-06-16 22:22:07 +02:00
Aleh Khantsevich
b503584431 Fix overlay scrollbars and signature webview size 2024-06-15 16:19:06 +02:00
Aleh Khantsevich
0dfe1c8e3a Remove semicolon 2024-06-14 01:40:05 +02:00
Aleh Khantsevich
c5630d90ec Made HyperLink focusable 2024-06-14 01:37:56 +02:00
Burak Kaan Köse
f8973a3cf7 Updated 1.7.2 patch notes. 2024-06-14 01:08:10 +02:00
Burak Kaan Köse
228be8376f Rename database to match the version. 2024-06-14 01:08:00 +02:00
Burak Kaan Köse
3fee3b0224 Fix draft and junk folder's incorrect unread badge. 2024-06-14 00:52:36 +02:00
Burak Kaan Köse
b4e705b347 Merge pull request #218 from bkaankose/l10n_main
New Crowdin updates
2024-06-14 00:40:54 +02:00
Burak Kaan Köse
51e59bebfc New translations resources.json (Indonesian) 2024-06-14 00:40:08 +02:00
Burak Kaan Köse
a56ac31f4b New translations resources.json (Greek) 2024-06-14 00:40:07 +02:00
Burak Kaan Köse
af05f081d2 New translations resources.json (Chinese Simplified) 2024-06-14 00:40:06 +02:00
Burak Kaan Köse
b97d79d261 New translations resources.json (Ukrainian) 2024-06-14 00:40:05 +02:00
Burak Kaan Köse
d227e6339f New translations resources.json (Turkish) 2024-06-14 00:40:04 +02:00
Burak Kaan Köse
74c503fea0 New translations resources.json (Russian) 2024-06-14 00:40:03 +02:00
Burak Kaan Köse
ed8b0c4d3c New translations resources.json (Polish) 2024-06-14 00:40:02 +02:00
Burak Kaan Köse
cbb17e92f0 New translations resources.json (Dutch) 2024-06-14 00:40:01 +02:00
Burak Kaan Köse
f9d64cf777 New translations resources.json (Japanese) 2024-06-14 00:40:00 +02:00
Burak Kaan Köse
7fdd6d19cf New translations resources.json (Italian) 2024-06-14 00:39:59 +02:00
Burak Kaan Köse
60ca252b63 New translations resources.json (German) 2024-06-14 00:39:58 +02:00
Burak Kaan Köse
2027837c18 New translations resources.json (Danish) 2024-06-14 00:39:57 +02:00
Burak Kaan Köse
67904568b1 New translations resources.json (Czech) 2024-06-14 00:39:56 +02:00
Burak Kaan Köse
afbc559a47 New translations resources.json (Catalan) 2024-06-14 00:39:55 +02:00
Burak Kaan Köse
67c312642c New translations resources.json (Spanish) 2024-06-14 00:39:54 +02:00
Burak Kaan Köse
89eb007e43 New translations resources.json (French) 2024-06-14 00:39:52 +02:00
Burak Kaan Köse
88c3f3204b Fix chinese translations. 2024-06-14 00:39:24 +02:00
Burak Kaan Köse
052ab98cd3 Fixing Gmail replies... 2024-06-14 00:39:18 +02:00
Burak Kaan Köse
cd01c0e31b Release 1.7.2 2024-06-14 00:23:17 +02:00
Burak Kaan Köse
c3d3228f65 Fixing signature dialog sizing issues and light theme switch. 2024-06-14 00:07:51 +02:00
Burak Kaan Köse
f04647192f Merge pull request #217 from Tiktack/features/SignaturesImprovements
Re-implemented signature page to support multiple signatures
2024-06-13 23:41:08 +02:00
Burak Kaan Köse
c00f0c9f52 Fixed an issue where notification payloads don't carry remote folder id with them. 2024-06-13 23:38:02 +02:00
Burak Kaan Köse
690e04c377 Fixed an issue where merged accounts are counting as 1 account for premium limit. 2024-06-13 22:51:29 +02:00
Burak Kaan Köse
545880dcce Fixing notification actions. 2024-06-13 22:48:33 +02:00
Aleh Khantsevich
fedf5d2203 Fixed tooltips 2024-06-13 03:13:53 +02:00
Aleh Khantsevich
5242e55826 fixed some app bar buttons 2024-06-13 02:49:54 +02:00
Aleh Khantsevich
1bf86e73a7 Fix merge conflicts 2024-06-13 01:42:19 +02:00
Aleh Khantsevich
c3fe72f561 Added scrollviewer to signatures settings 2024-06-13 01:32:32 +02:00
Aleh Khantsevich
b54555a4f7 Re-implemented signature page to support different signatures for different actions 2024-06-13 00:51:59 +02:00
Burak Kaan Köse
4c080360a7 Delay after-execution-sync for Outlook only. 2024-06-12 02:12:39 +02:00
Burak Kaan Köse
fdea15eef4 Fix gmail sending. 2024-06-12 02:12:23 +02:00
Burak Kaan Köse
5a4dd97abe Fix gmail single mime download error. 2024-06-12 00:32:04 +02:00
Burak Kaan Köse
e47e3d936b Fixing Outlook sending issue. 2024-06-11 22:48:18 +02:00
Burak Kaan Köse
0e9fd4373e Create SendDraftRequest implementation and handle missing SentFolder synchronization. 2024-06-11 14:19:08 +02:00
Burak Kaan Köse
69a10c754a Implement sending functionality for Outlook synchronizer. 2024-06-11 14:16:57 +02:00
Burak Kaan Köse
a8ba965c0d 1.7.2 release version update for manifest. 2024-06-11 14:16:30 +02:00
Burak Kaan Köse
847aed3519 Fix missing translation error on app updated background task message. 2024-06-11 14:16:16 +02:00
Burak Kaan Köse
fed9345bea Fix requiring sender name in the initial account setup dialog for IMAP. 2024-06-10 16:22:35 +02:00
Burak Kaan Köse
d71b6d0ab0 Fix #164 2024-06-09 02:59:07 +02:00
Burak Kaan Köse
40e5521fbf Merge pull request #212 from bkaankose/feature/AccountOrdering
[Feature] Account re-ordering.
2024-06-09 02:41:15 +02:00
Burak Kaan Köse
c7781d2e75 Implemented a new dialog for account re-ordering and required apis. 2024-06-09 02:37:30 +02:00
Burak Kaan Köse
0ccf67000c Merge pull request #210 from bkaankose/l10n_main
New Crowdin updates
2024-06-08 00:00:36 +02:00
Burak Kaan Köse
f4e81aca9d rebased 2024-06-08 00:00:05 +02:00
Burak Kaan Köse
2d654cf759 New translations resources.json (Indonesian) 2024-06-07 23:59:58 +02:00
Burak Kaan Köse
0b728162ae New translations resources.json (Greek) 2024-06-07 23:59:57 +02:00
Burak Kaan Köse
f52b426652 New translations resources.json (Chinese Simplified) 2024-06-07 23:59:56 +02:00
Burak Kaan Köse
ad0528d763 New translations resources.json (Ukrainian) 2024-06-07 23:59:56 +02:00
Burak Kaan Köse
263adcf2b5 New translations resources.json (Turkish) 2024-06-07 23:59:55 +02:00
Burak Kaan Köse
b201e274f1 New translations resources.json (Russian) 2024-06-07 23:59:54 +02:00
Burak Kaan Köse
c1a6a73b7d New translations resources.json (Polish) 2024-06-07 23:59:53 +02:00
Burak Kaan Köse
ed4764cc70 New translations resources.json (Dutch) 2024-06-07 23:59:52 +02:00
Burak Kaan Köse
8d84b3adbc New translations resources.json (Japanese) 2024-06-07 23:59:51 +02:00
Burak Kaan Köse
35db674c88 New translations resources.json (Italian) 2024-06-07 23:59:50 +02:00
Burak Kaan Köse
3e1850a713 New translations resources.json (German) 2024-06-07 23:59:49 +02:00
Burak Kaan Köse
8c625c0ecd New translations resources.json (Danish) 2024-06-07 23:59:48 +02:00
Burak Kaan Köse
bf1de8e7a4 Initial setup for account ordering. 2024-06-07 23:59:47 +02:00
Burak Kaan Köse
8c2dca3770 New translations resources.json (Czech) 2024-06-07 23:59:47 +02:00
Burak Kaan Köse
23adbddfb7 New translations resources.json (Catalan) 2024-06-07 23:59:46 +02:00
Burak Kaan Köse
b1b6b64e68 New translations resources.json (Spanish) 2024-06-07 23:59:45 +02:00
Burak Kaan Köse
0c7909df09 New translations resources.json (French) 2024-06-07 23:59:44 +02:00
Burak Kaan Köse
641bfd8c06 Sender name implementation. 2024-06-07 23:58:51 +02:00
Burak Kaan Köse
52140c3208 Enable ARM configuration. 2024-06-07 02:30:42 +02:00
Burak Kaan Köse
1baa9173cb Fixing the build issue that prevents Release. 2024-06-07 02:01:30 +02:00
Burak Kaan Köse
26749c2116 Update ms graph library to latest in core library. 2024-06-07 01:56:28 +02:00
Burak Kaan Köse
a1ecb9ad39 Remove redundant shell loading event. 2024-06-07 01:11:21 +02:00
Burak Kaan Köse
b398fde24e Separation of change processors. 2024-06-02 21:35:03 +02:00
Burak Kaan Köse
a5767b60fb AppCenter update and reverting back ms graph update to make app compile in Release. 2024-06-02 14:49:34 +02:00
Burak Kaan Köse
ef196c384c Initial setup for account ordering. 2024-05-30 02:34:54 +02:00
Burak Kaan Köse
920def7446 Fix #192 2024-05-30 01:41:43 +02:00
Burak Kaan Köse
bec98dcaa2 Remove unused build configurations 2024-05-30 01:14:23 +02:00
Burak Kaan Köse
747be07322 Added Indonesian and Greek languages. 2024-05-30 01:03:03 +02:00
Burak Kaan Köse
c1fc6f0bce Merge pull request #204 from bkaankose/l10n_main
New Crowdin updates
2024-05-30 00:22:19 +02:00
Burak Kaan Köse
851c42e630 New translations resources.json (Indonesian) 2024-05-30 00:21:10 +02:00
Burak Kaan Köse
4e5a4a9c17 New translations resources.json (Greek) 2024-05-30 00:21:09 +02:00
Burak Kaan Köse
df19d500de New translations resources.json (Polish) 2024-05-30 00:21:05 +02:00
Burak Kaan Köse
4fd4c9802e New translations resources.json (Italian) 2024-05-30 00:21:03 +02:00
Burak Kaan Köse
23d0eeab16 Prevent downloading existing messages for Outlook. 2024-05-25 17:00:52 +02:00
Burak Kaan Köse
b66557f3be Merge branch 'main' of https://github.com/bkaankose/Wino-Mail 2024-05-25 16:59:36 +02:00
Burak Kaan Köse
580586cab3 Upgrade core packages to latest version. 2024-05-25 16:59:32 +02:00
Burak Kaan Köse
9a97ef1dad Merge pull request #197 from bkaankose/l10n_main
New Crowdin updates
2024-05-25 12:04:33 +02:00
Burak Kaan Köse
b4f7503d85 New translations resources.json (Greek) 2024-05-25 12:03:56 +02:00
Burak Kaan Köse
b89406a89a New translations resources.json (Chinese Simplified) 2024-05-25 12:03:55 +02:00
Burak Kaan Köse
932cdae22e New translations resources.json (Ukrainian) 2024-05-25 12:03:54 +02:00
Burak Kaan Köse
34ef86cfff New translations resources.json (Turkish) 2024-05-25 12:03:53 +02:00
Burak Kaan Köse
023bace2a9 New translations resources.json (Russian) 2024-05-25 12:03:52 +02:00
Burak Kaan Köse
467b63cffb New translations resources.json (Polish) 2024-05-25 12:03:51 +02:00
Burak Kaan Köse
49ffb0fa68 New translations resources.json (Dutch) 2024-05-25 12:03:50 +02:00
Burak Kaan Köse
04984dea98 New translations resources.json (Japanese) 2024-05-25 12:03:49 +02:00
Burak Kaan Köse
78e9a768b4 New translations resources.json (Italian) 2024-05-25 12:03:48 +02:00
Burak Kaan Köse
401f877388 New translations resources.json (German) 2024-05-25 12:03:47 +02:00
Burak Kaan Köse
b3ba1aa3b9 New translations resources.json (Danish) 2024-05-25 12:03:46 +02:00
Burak Kaan Köse
ae76aebe24 New translations resources.json (Czech) 2024-05-25 12:03:45 +02:00
Burak Kaan Köse
b5e1bf2867 New translations resources.json (Catalan) 2024-05-25 12:03:44 +02:00
Burak Kaan Köse
fb3a0da54f New translations resources.json (Spanish) 2024-05-25 12:03:43 +02:00
Burak Kaan Köse
7d197f405d New translations resources.json (French) 2024-05-25 12:03:42 +02:00
Burak Kaan Köse
bc7af3a68b Merge pull request #191 from Tiktack/features/dropzone
Added attachments drag & drop support
2024-05-22 23:35:37 +02:00
Burak Kaan Köse
120e79229a New updated release notes. 2024-05-22 23:06:37 +02:00
Burak Kaan Köse
f0e4bbcda9 Update db name for new release. 2024-05-22 23:04:54 +02:00
Aleh Khantsevich
57e31c1dfb Added attachments drag & drop support 2024-05-22 02:10:14 +02:00
Burak Kaan Köse
8f2f414f5e Fixed an issue where draft unique id tracking prevents reply draft to be removed from thread until the list is refreshed. 2024-05-21 23:48:44 +02:00
Burak Kaan Köse
879f91693e Remove commented debug code. 2024-05-21 23:48:06 +02:00
Burak Kaan Köse
0c504b52e4 Hide vertical scroll in composer page 2024-05-21 23:24:06 +02:00
Burak Kaan Köse
bbaa5f9fa8 Fix invisible signature page content. 2024-05-21 23:07:15 +02:00
Burak Kaan Köse
2a9f7fde28 Added Chinese language. 2024-05-21 22:58:33 +02:00
Burak Kaan Köse
0ec7c87851 Merge pull request #187 from bkaankose/l10n_main
New Crowdin updates
2024-05-12 02:04:33 +02:00
Burak Kaan Köse
cf515abc4c New translations resources.json (Greek) 2024-05-12 02:04:22 +02:00
Burak Kaan Köse
99cab08ab7 New translations resources.json (Chinese Simplified) 2024-05-12 02:04:21 +02:00
Burak Kaan Köse
e60d40ee9c New translations resources.json (Ukrainian) 2024-05-12 02:04:21 +02:00
Burak Kaan Köse
c90fa68f16 New translations resources.json (Turkish) 2024-05-12 02:04:20 +02:00
Burak Kaan Köse
61ae86e927 New translations resources.json (Russian) 2024-05-12 02:04:19 +02:00
Burak Kaan Köse
86c995906c New translations resources.json (Polish) 2024-05-12 02:04:18 +02:00
Burak Kaan Köse
a77b88aaf6 New translations resources.json (Dutch) 2024-05-12 02:04:17 +02:00
Burak Kaan Köse
0d288f3206 New translations resources.json (Japanese) 2024-05-12 02:04:16 +02:00
Burak Kaan Köse
d9d6244931 New translations resources.json (Italian) 2024-05-12 02:04:15 +02:00
Burak Kaan Köse
4d984f0524 New translations resources.json (German) 2024-05-12 02:04:14 +02:00
Burak Kaan Köse
b456b0143b New translations resources.json (Danish) 2024-05-12 02:04:13 +02:00
Burak Kaan Köse
3ebcfd5598 New translations resources.json (Czech) 2024-05-12 02:04:12 +02:00
Burak Kaan Köse
745ea3509e New translations resources.json (Catalan) 2024-05-12 02:04:11 +02:00
Burak Kaan Köse
8f5d4e5bc2 New translations resources.json (Spanish) 2024-05-12 02:04:10 +02:00
Burak Kaan Köse
acd7d3bbac New translations resources.json (French) 2024-05-12 02:04:09 +02:00
Burak Kaan Köse
f3bd6598e7 Merge pull request #181 from Tiktack/visual-adjustments
Improved attachments UI and added filter option "Has files"
2024-05-11 01:07:00 +02:00
Burak Kaan Köse
ce48fdc445 Merge pull request #185 from Tiktack/183-ui-improvements
Search improvements
2024-05-09 03:58:50 +02:00
Burak Kaan Köse
5aea223c14 Fixed double init issue when performing search. 2024-05-09 03:40:19 +02:00
Aleh Khantsevich
1f59d3179c Added SearchPivotName trnslation resource 2024-05-09 01:11:02 +02:00
Aleh Khantsevich
1f6e1db695 Fyx typo and formating 2024-05-09 00:51:16 +02:00
Aleh Khantsevich
5b46c372ab Added search pivot 2024-05-08 23:59:50 +02:00
Aleh Khantsevich
f143d3e1c2 Changed placegolders to start from capital latter 2024-05-08 20:01:55 +02:00
Aleh Khantsevich
c7639309ef Fixed progress ring, width of empty results and message for empty results with filters 2024-05-08 19:26:47 +02:00
Aleh Khantsevich
b788531e47 Reset all filters after navigation and clear button re-initializing mail list 2024-05-08 02:05:42 +02:00
Aleh Khantsevich
00fa2ca804 Fix formating issues and styles 2024-05-05 17:41:49 +02:00
Aleh Khantsevich
74cdf09ebc Added filter option has files 2024-05-05 17:01:40 +02:00
Aleh Khantsevich
80ec12740a Fixed scrollbar 2024-05-05 02:38:51 +02:00
Aleh Khantsevich
a0002ff97b fixed attachments layout and size and added progressbar 2024-05-05 02:15:29 +02:00
Aleh Khantsevich
2cb0db02e3 Fixed crash for adding files 2024-05-04 12:33:27 +02:00
Burak Kaan Köse
bed8d71f7e Merge pull request #177 from Tiktack/fix-dark-scrollbar-webview
Fixed scrollbars in a dark theme to be accessible
2024-05-03 16:55:05 +02:00
Aleh Khantsevich
668b385a10 And fluent overlay scrollbars 2024-05-03 12:36:58 +02:00
Aleh Khantsevich
d96df469a4 Fixed scrollbars in a dark theme to be accessible 2024-05-02 20:38:00 +02:00
Burak Kaan Köse
8edbe1aa2c Merge pull request #176 from bkaankose/l10n_main
New Crowdin updates
2024-05-02 00:27:08 +02:00
Burak Kaan Köse
99ece9a61a New translations resources.json (Chinese Simplified) 2024-05-02 00:26:26 +02:00
Burak Kaan Köse
4b5253dd6b New translations resources.json (Ukrainian) 2024-05-02 00:26:25 +02:00
Burak Kaan Köse
5e10294a16 New translations resources.json (Turkish) 2024-05-02 00:26:24 +02:00
Burak Kaan Köse
226d2069d9 New translations resources.json (Russian) 2024-05-02 00:26:23 +02:00
Burak Kaan Köse
8d1365b712 New translations resources.json (Polish) 2024-05-02 00:26:22 +02:00
Burak Kaan Köse
45624d905e New translations resources.json (Dutch) 2024-05-02 00:26:21 +02:00
Burak Kaan Köse
a5d9c931ca New translations resources.json (Japanese) 2024-05-02 00:26:20 +02:00
Burak Kaan Köse
f0db2b2f6e New translations resources.json (Italian) 2024-05-02 00:26:19 +02:00
Burak Kaan Köse
cde5913ace New translations resources.json (German) 2024-05-02 00:26:18 +02:00
Burak Kaan Köse
ceea9fc501 New translations resources.json (Danish) 2024-05-02 00:26:17 +02:00
Burak Kaan Köse
eb678b4533 New translations resources.json (Czech) 2024-05-02 00:26:16 +02:00
Burak Kaan Köse
dcbe8bb3dc New translations resources.json (Catalan) 2024-05-02 00:26:15 +02:00
Burak Kaan Köse
555310a4ca New translations resources.json (Spanish) 2024-05-02 00:26:14 +02:00
Burak Kaan Köse
3a57358f58 New translations resources.json (French) 2024-05-02 00:26:13 +02:00
Burak Kaan Köse
9982ba2fec Merge pull request #175 from Tiktack/improve-unsubscribe-with-oneclick
Added support for one click unsubscribe with confirmation dialog.
2024-05-02 00:24:11 +02:00
Burak Kaan Köse
11b652f851 Introduced IUnsubscriptionService and replaced the usage in rendering page view model. 2024-05-02 00:21:29 +02:00
Burak Kaan Köse
380950a615 Merge pull request #173 from Tiktack/threading-performance
Improve performance of API Threading strategy.
2024-05-02 00:14:04 +02:00
Burak Kaan Köse
e8b07738a5 Replaced WinoMail to Wino in EN resources. 2024-05-01 23:46:56 +02:00
Aleh Khantsevich
9d1163e73e Changed mailto link to redirect to compose page. 2024-05-01 15:26:34 +02:00
Aleh Khantsevich
e2f0c73bab Added support for one click unsubscribe with confirmation dialog. 2024-05-01 14:23:23 +02:00
Aleh Khantsevich
183873afff Small fixes 2024-04-30 00:56:00 +02:00
Aleh Khantsevich
b356475741 Replace one query per one email with just one queyr for all mails 2024-04-30 00:04:59 +02:00
Burak Kaan Köse
279bae115a Merge pull request #170 from chenseanxy/main 2024-04-29 01:20:05 +02:00
Chen Xinyang
82bb5a96ad Fix message on autoconfig failure 2024-04-29 01:22:34 +03:00
Burak Kaan Köse
a4e9ffcc99 Merge pull request #169 from bkaankose/l10n_main
New Crowdin updates
2024-04-29 00:18:28 +02:00
Burak Kaan Köse
1c25427c5c New translations resources.json (Chinese Simplified) 2024-04-29 00:17:55 +02:00
Burak Kaan Köse
2ec22eb6cd New translations resources.json (Ukrainian) 2024-04-29 00:17:54 +02:00
Burak Kaan Köse
2ff508607d New translations resources.json (Turkish) 2024-04-29 00:17:53 +02:00
Burak Kaan Köse
69a34c65f7 New translations resources.json (Russian) 2024-04-29 00:17:52 +02:00
Burak Kaan Köse
f34c1520a4 New translations resources.json (Polish) 2024-04-29 00:17:51 +02:00
Burak Kaan Köse
f3fa8eec50 New translations resources.json (Dutch) 2024-04-29 00:17:50 +02:00
Burak Kaan Köse
9baa9b1dd6 New translations resources.json (Japanese) 2024-04-29 00:17:49 +02:00
Burak Kaan Köse
c1c1af1ded New translations resources.json (Italian) 2024-04-29 00:17:48 +02:00
Burak Kaan Köse
4a8c1b7de4 New translations resources.json (German) 2024-04-29 00:17:47 +02:00
Burak Kaan Köse
1f35165919 New translations resources.json (Danish) 2024-04-29 00:17:46 +02:00
Burak Kaan Köse
2e85508426 New translations resources.json (Czech) 2024-04-29 00:17:45 +02:00
Burak Kaan Köse
631b218057 New translations resources.json (Catalan) 2024-04-29 00:17:44 +02:00
Burak Kaan Köse
e8cfc88d83 New translations resources.json (Spanish) 2024-04-29 00:17:44 +02:00
Burak Kaan Köse
78502a0cd0 New translations resources.json (French) 2024-04-29 00:17:43 +02:00
Burak Kaan Köse
2bcb6a146b Merge pull request #163 from Tiktack/unread-folder-should-not-read-email-automatically
Prevent Unread folder to read All emails automatically
2024-04-28 20:42:50 +02:00
Burak Kaan Köse
ae474b5e5b Fixed 'Delete' action not deleting the item after it's been marked as read. 2024-04-28 20:38:22 +02:00
Burak Kaan Köse
babed18af0 Added hashset uniqueid mail check to prevent gmail unread folder items to be removed on next item selection. 2024-04-28 20:20:29 +02:00
Burak Kaan Köse
3fa7e3e36d Merge pull request #168 from Tiktack/language-time-page
Language & Time page
2024-04-28 18:08:39 +02:00
Burak Kaan Köse
45587d5f15 Merge pull request #161 from Tiktack/titlebar-should-be-draggable
Fixed dead zone in title bar in settings to be draggable
2024-04-28 17:52:55 +02:00
Burak Kaan Köse
e98f6997ca Merge pull request #167 from Tiktack/wino165-commandbar-issues
Fix commend bar issues
2024-04-28 17:50:02 +02:00
Aleh Khantsevich
21d1b71653 Remove seconds from reading page 2024-04-28 00:31:25 +02:00
Aleh Khantsevich
afd7b5650f Removed useless command paramter and duplicate registration 2024-04-27 16:29:26 +02:00
Aleh Khantsevich
a0687d555a Added translations. Strongly typed paramter for setting navigation.
Titles now uses translation for breadcrumb
2024-04-27 15:27:02 +02:00
Aleh Khantsevich
f543953389 Added language & time page 2024-04-27 13:50:18 +02:00
Aleh Khantsevich
2c4c7586b7 Change visible to condition for SecondaryItems 2024-04-26 14:30:00 +02:00
Aleh Khantsevich
e92921a6cc Fix commend bar issues #165 2024-04-26 01:47:46 +02:00
Aleh Khantsevich
0322bcd047 Added filter to do not update UI when unread folder changed. 2024-04-25 00:26:58 +02:00
Aleh Khantsevich
26c914be96 Fix dead zone in title bar to be draggable 2024-04-23 11:03:40 +02:00
Burak Kaan Köse
75863faf58 Merge pull request #158 from Tiktack/settings-appearance
Hide Scrollbars and add glyphs to external links
2024-04-22 12:44:22 +02:00
Aleh Khantsevich
99b3ec4ce3 Resolved suggestions 2024-04-22 01:45:44 +02:00
Aleh Khantsevich
d97ffd863b Scrollbars and glyphs
Updated ScrollViewer and added action icons in XAML files
2024-04-21 19:04:18 +02:00
758 changed files with 22155 additions and 34434 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

@@ -25,6 +25,7 @@ I'm a big fan of Windows Mail & Calendars due to its simplicity. Personally, I f
- API integration for Outlook and Gmail
- IMAP/SMTP support for custom mail servers
- Send, receive, mark as (read,important,spam etc), move mails.
- Linked/Merged Accounts
- Toast notifications with background sync.
- Instant startup performance
- Offline use / search.
@@ -43,7 +44,7 @@ Download latest version of Wino Mail from Microsoft Store for free.
## Beta Releases
Stable releases will always be distributed on Microsoft Store. However, beta releases will be distributed in [GitHub Releases](https://github.com/bkaankose/Wino-Mail/releases). Please keep in mind that beta releases might not be for daily use, only for testing purposes and recommended for experienced users or developers.
Stable releases will always be distributed on Microsoft Store. However, beta releases will be distributed in [GitHub Releases](https://github.com/bkaankose/Wino-Mail/releases). Please keep in mind that beta releases might not be for daily use, only for testing purposes and recommended for experienced users or developers. Beta releases are also managed manually. Therefore, code in the repository might be ahead of the released Beta version at the moment. Make sure to compare versions before tryout out the Beta version.
These releases are distributed as side-loaded packages. To install them, download the **.msixbundle** file in GitHub releases and [follow the steps explained here.](https://learn.microsoft.com/en-us/windows/application-management/sideload-apps-in-windows)
@@ -52,10 +53,6 @@ These releases are distributed as side-loaded packages. To install them, downloa
Check out the [contribution guidelines](/CONTRIBUTING.md) before diving into the source code or opening an issue. There are multiple ways to contribute and all of them are explained in detail there.
#### Attention
Sources here **does not belong to the Store version of Wino Mail. It belongs to beta release as of April 17 2024.** I've been working on a big patch for couple months already and the code here includes those changes, but these changes are not yet released to Microsoft Store. Therefore, if you'd like to contribute, please validate the bug before in beta version and start working on it. I will delete this text from here once this big patch goes alive in the Store, so everything will be aligned then.
## Donate
Your donations will motivate me more to work on Wino in my spare time and cover the expenses to keep [project's website](https://www.winomail.app/) alive.

View File

@@ -1,34 +0,0 @@
using Microsoft.Toolkit.Uwp.Notifications;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Background;
using Wino.Core.Domain;
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);
builder.AddText(Translator.Notifications_WinoUpdatedTitle);
builder.AddText(string.Format(Translator.Notifications_WinoUpdatedMessage, 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,48 +0,0 @@
using System;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
using Windows.ApplicationModel.Background;
using Windows.Storage;
using Wino.Core;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Services;
using Wino.Core.UWP;
using Wino.Services;
namespace Wino.BackgroundTasks
{
public sealed class SessionConnectedTask : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
var def = taskInstance.GetDeferral();
try
{
var services = new ServiceCollection();
services.RegisterCoreServices();
services.RegisterCoreUWPServices();
var providere = services.BuildServiceProvider();
var backgroundTaskService = providere.GetService<IBackgroundSynchronizer>();
var dbService = providere.GetService<IDatabaseService>();
var logInitializer = providere.GetService<ILogInitializer>();
logInitializer.SetupLogger(ApplicationData.Current.LocalFolder.Path);
await dbService.InitializeAsync();
await backgroundTaskService.RunBackgroundSynchronizationAsync(Core.Domain.Enums.BackgroundSynchronizationReason.SessionConnected);
}
catch (Exception ex)
{
Log.Error(ex, "Background synchronization failed from background task.");
}
finally
{
def.Complete();
}
}
}
}

View File

@@ -1,166 +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|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</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|ARM'">
<PlatformTarget>ARM</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\ARM\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|ARM'">
<PlatformTarget>ARM</PlatformTarget>
<OutputPath>bin\ARM\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" />
<Compile Include="SessionConnectedTask.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();
}
}
}

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
{
@@ -8,7 +10,35 @@
public const string WinoLocalDraftHeader = "X-Wino-Draft-Id";
public const string LocalDraftStartPrefix = "localDraft_";
// Toast Notification Keys
public const string ToastMailItemIdKey = nameof(ToastMailItemIdKey);
public const string ToastMailItemRemoteFolderIdKey = nameof(ToastMailItemRemoteFolderIdKey);
public const string ToastActionKey = nameof(ToastActionKey);
// App Configuration
public const AppLanguage DefaultAppLanguage = AppLanguage.English;
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,13 +1,17 @@
using System;
using SQLite;
namespace Wino.Core.Domain.Entities
namespace Wino.Domain.Entities
{
public class AccountSignature
{
[PrimaryKey]
public Guid Id { get; set; }
public string Name { get; set; }
public string HtmlBody { get; set; }
public Guid MailAccountId { get; set; }
}
}

View File

@@ -2,7 +2,7 @@
using System;
using System.Collections.Generic;
namespace Wino.Core.Domain.Entities
namespace Wino.Domain.Entities
{
/// <summary>
/// Back storage for simple name-address book.

View File

@@ -1,8 +1,8 @@
using System;
using SQLite;
using Wino.Core.Domain.Enums;
using Wino.Domain.Enums;
namespace Wino.Core.Domain.Entities
namespace Wino.Domain.Entities
{
public class CustomServerInformation
{
@@ -11,6 +11,10 @@ namespace Wino.Core.Domain.Entities
public Guid AccountId { get; set; }
/// <summary>
/// This field is ignored. DisplayName is stored in MailAccount as SenderName from now.
/// </summary>
[Ignore]
public string DisplayName { get; set; }
public string Address { get; set; }
public string IncomingServer { get; set; }
@@ -39,11 +43,11 @@ namespace Wino.Core.Domain.Entities
public string ProxyServer { get; set; }
public string ProxyServerPort { get; set; }
[Obsolete("As 1.7.0")]
public bool IncomingRequiresSSL { get; set; }
[Obsolete("As 1.7.0")]
public bool OutgoingRequresSSL { get; set; }
/// <summary>
/// Number of concurrent clients that can connect to the server.
/// Default is 5.
/// </summary>
public int MaxConcurrentClients { get; set; }
}
}

View File

@@ -1,8 +1,8 @@
using System;
using SQLite;
using Wino.Core.Domain.Enums;
using Wino.Domain.Enums;
namespace Wino.Core.Domain.Entities
namespace Wino.Domain.Entities
{
public class MailAccount
{
@@ -20,7 +20,7 @@ namespace Wino.Core.Domain.Entities
/// IMAP is populated by user on setup dialog.
/// </summary>
public string ProfileName { get; set; }
public string SenderName { get; set; }
/// <summary>
/// Account e-mail address.
@@ -40,10 +40,14 @@ namespace Wino.Core.Domain.Entities
public string SynchronizationDeltaIdentifier { get; set; }
/// <summary>
/// Gets or sets the signature to be used for this account.
/// Null if no signature should be used.
/// TODO: Gets or sets the custom account identifier color in hex.
/// </summary>
public Guid? SignatureId { get; set; }
public string AccountColorHex { get; set; }
/// <summary>
/// Gets or sets the listing order of the account in the accounts list.
/// </summary>
public int Order { get; set; }
/// <summary>
/// Gets or sets whether the account has any reason for an interactive user action to fix continue operating.

View File

@@ -1,7 +1,7 @@
using System;
using SQLite;
namespace Wino.Core.Domain.Entities
namespace Wino.Domain.Entities
{
public class MailAccountPreferences
{
@@ -25,15 +25,25 @@ namespace Wino.Core.Domain.Entities
/// </summary>
public bool IsNotificationsEnabled { get; set; }
/// <summary>
/// Gets or sets the custom account identifier color in hex.
/// </summary>
public string AccountColorHex { get; set; }
/// <summary>
/// Gets or sets whether the account has Focused inbox support.
/// Null if the account provider type doesn't support Focused inbox.
/// </summary>
public bool? IsFocusedInboxEnabled { get; set; }
/// <summary>
/// Gets or sets whether signature should be appended automatically.
/// </summary>
public bool IsSignatureEnabled { get; set; }
/// <summary>
/// Gets or sets signature for new messages. Null if signature is not needed.
/// </summary>
public Guid? SignatureIdForNewMessages { get; set; }
/// <summary>
/// Gets or sets signature for following messages. Null if signature is not needed.
/// </summary>
public Guid? SignatureIdForFollowingMessages { get; set; }
}
}

View File

@@ -1,9 +1,10 @@
using System;
using System.Collections.Generic;
using SQLite;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.MailItem;
using Wino.Domain.Enums;
using Wino.Domain.Models.MailItem;
namespace Wino.Core.Domain.Entities
namespace Wino.Domain.Entities
{
/// <summary>
/// Summary of the parsed MIME messages.
@@ -107,6 +108,12 @@ namespace Wino.Core.Domain.Entities
/// </summary>
public string DraftId { get; set; }
/// <summary>
/// Whether this mail is only created locally.
/// </summary>
[Ignore]
public bool IsLocalDraft => !string.IsNullOrEmpty(DraftId) && DraftId.StartsWith(Constants.LocalDraftStartPrefix);
/// <summary>
/// Whether this copy is draft or not.
/// </summary>
@@ -134,7 +141,7 @@ namespace Wino.Core.Domain.Entities
/// </summary>
[Ignore]
public MailAccount AssignedAccount { get; set; }
public IEnumerable<Guid> GetContainingIds() => new[] { UniqueId };
public override string ToString() => $"{Subject} <-> {Id}";
}
}

View File

@@ -2,10 +2,11 @@
using System.Collections.Generic;
using System.Diagnostics;
using SQLite;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.Folders;
using Wino.Domain;
using Wino.Domain.Enums;
using Wino.Domain.Models.Folders;
namespace Wino.Core.Domain.Entities
namespace Wino.Domain.Entities
{
[DebuggerDisplay("{FolderName} - {SpecialFolderType}")]
public class MailItemFolder : IMailItemFolder
@@ -67,6 +68,9 @@ namespace Wino.Core.Domain.Entities
return false;
}
public static MailItemFolder CreateMoreFolder() => new MailItemFolder() { IsSticky = true, SpecialFolderType = SpecialFolderType.More, FolderName = Translator.MoreFolderNameOverride };
public static MailItemFolder CreateCategoriesFolder() => new MailItemFolder() { IsSticky = true, SpecialFolderType = SpecialFolderType.Category, FolderName = Translator.CategoriesFolderNameOverride };
public override string ToString() => FolderName;
}
}

View File

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

View File

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

View File

@@ -1,8 +1,8 @@
using System;
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
{

View File

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

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums
namespace Wino.Domain.Enums
{
public enum AppLanguage
{
@@ -11,6 +11,9 @@
Czech,
Chinese,
Spanish,
French
French,
Indonesian,
Greek,
PortugeseBrazil,
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,10 +1,11 @@
namespace Wino.Core.Domain.Enums
namespace Wino.Domain.Enums
{
public enum FilterOptionType
{
All,
Unread,
Flagged,
Mentions
Mentions,
Files
}
}

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums
namespace Wino.Domain.Enums
{
/// <summary>
/// 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
{

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums
namespace Wino.Domain.Enums
{
// Synchronizer requests.
public enum MailSynchronizerOperation
@@ -11,7 +11,10 @@
ChangeFlag,
AlwaysMoveTo,
MoveToFocused,
RenameFolder
Archive,
RenameFolder,
EmptyFolder,
MarkFolderRead,
}
// UI requests
@@ -44,6 +47,7 @@
DarkEditor,
LightEditor,
Print,
DiscardLocalDraft,
Navigate // For toast activation
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Enums
namespace Wino.Domain.Enums
{
/// <summary>
/// All registered views.
@@ -20,6 +20,7 @@
MessageListPage,
MailListPage,
ReadingPanePage,
SettingOptionsPage
LanguageTimePage,
SettingOptionsPage,
}
}

View File

@@ -0,0 +1,11 @@
namespace Wino.Domain.Enums
{
public enum WinoServerConnectionStatus
{
None,
Connecting,
Connected,
Disconnected,
Failed
}
}

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 Wino.Core.Domain.Entities;
using Wino.Domain.Entities;
namespace Wino.Core.Domain.Exceptions
namespace Wino.Domain.Exceptions
{
/// <summary>
/// Thrown when IAuthenticator requires user interaction to fix authentication issues.

View File

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

View File

@@ -1,6 +1,6 @@
using System;
namespace Wino.Core.Domain.Exceptions
namespace Wino.Domain.Exceptions
{
/// <summary>
/// An exception thrown when the background task execution policies are denied for some reason.

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
using System;
namespace Wino.Core.Domain.Exceptions
namespace Wino.Domain.Exceptions
{
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) { }
}

View File

@@ -1,11 +1,12 @@
using System;
namespace Wino.Core.Domain.Exceptions
namespace Wino.Domain.Exceptions
{
public class ImapClientPoolException : Exception
{
public ImapClientPoolException(Exception innerException) : base(Translator.Exception_ImapClientPoolFailed, innerException)
public ImapClientPoolException(Exception innerException, string protocolLog) : base(Translator.Exception_ImapClientPoolFailed, innerException)
{
ProtocolLog = protocolLog;
}
public string ProtocolLog { get; }
}
}

View File

@@ -0,0 +1,21 @@
using System;
using Wino.Domain.Models.AutoDiscovery;
namespace Wino.Domain.Exceptions
{
public class ImapConnectionFailedPackage
{
public ImapConnectionFailedPackage(Exception error, string protocolLog, AutoDiscoverySettings settings)
{
Error = error;
ProtocolLog = protocolLog;
Settings = settings;
}
public AutoDiscoverySettings Settings { get; }
public Exception Error { get; }
public string ProtocolLog { get; }
public string GetErrorMessage() => Error.InnerException == null ? Error.Message : Error.InnerException.Message;
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

@@ -0,0 +1,22 @@
using MimeKit;
using Wino.Domain;
using Wino.Domain.Entities;
namespace Wino.Domain.Extensions
{
public static class MimeExtensions
{
public static AddressInformation ToAddressInformation(this MailboxAddress address)
{
if (address == null)
return new AddressInformation() { Name = Translator.UnknownSender, Address = Translator.UnknownAddress };
if (string.IsNullOrEmpty(address.Name))
address.Name = address.Address;
return new AddressInformation() { Name = address.Name, Address = address.Address };
}
}
}

View File

@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
namespace Wino.Core.Domain.Interfaces
namespace Wino.Domain.Interfaces
{
/// <summary>
/// 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
{

View File

@@ -1,13 +1,21 @@
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
{
bool IsEnabled { get; set; }
double SynchronizationProgress { get; set; }
int UnreadItemCount { get; set; }
IEnumerable<MailAccount> HoldingAccounts { get; }
void UpdateAccount(MailAccount account);
}
public interface IMergedAccountMenuItem : IAccountMenuItem
{
int MergedAccountCount { get; }
MergedInbox Parameter { get; }
}
}

View File

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

View File

@@ -1,6 +1,6 @@
using System;
namespace Wino.Core.Domain.Interfaces
namespace Wino.Domain.Interfaces
{
public interface IAccountProviderDetailViewModel
{
@@ -13,5 +13,26 @@ namespace Wino.Core.Domain.Interfaces
/// Name representation of the view model that will be used to identify the startup entity on launch.
/// </summary>
string StartupEntityTitle { get; }
/// <summary>
/// E-mail addresses that this account holds.
/// </summary>
string StartupEntityAddresses { get; }
/// <summary>
/// Represents the account order in the accounts list.
/// </summary>
int Order { get; }
/// <summary>
/// Provider details of the account.
/// </summary>
IProviderDetail ProviderDetail { get; set; }
/// <summary>
/// How many accounts this provider has.
/// </summary>
int HoldingAccountCount { get; }
}
}

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
{

View File

@@ -1,9 +1,9 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Wino.Core.Domain.Entities;
using Wino.Domain.Entities;
namespace Wino.Core.Domain.Interfaces
namespace Wino.Domain.Interfaces
{
public interface IAccountService
{
@@ -68,12 +68,37 @@ namespace Wino.Core.Domain.Interfaces
/// <returns>Current account synchronization modifier.</returns>
Task<string> UpdateSynchronizationIdentifierAsync(Guid accountId, string newIdentifier);
/// <summary>
/// Renames the merged inbox with the given id.
/// </summary>
/// <param name="mergedInboxId">Merged Inbox id</param>
/// <param name="newName">New name for the merged/linked inbox.</param>
Task RenameMergedAccountAsync(Guid mergedInboxId, string newName);
/// <summary>
/// Creates a new merged inbox with the given accounts.
/// </summary>
/// <param name="mergedInbox">Merged inbox properties.</param>
/// <param name="accountsToMerge">List of accounts to merge together.</param>
Task CreateMergeAccountsAsync(MergedInbox mergedInbox, IEnumerable<MailAccount> accountsToMerge);
/// <summary>
/// Updates the merged inbox with the given id with the new linked accounts.
/// </summary>
/// <param name="mergedInboxId">Updating merged inbox id.</param>
/// <param name="linkedAccountIds">List of linked account ids.</param>
Task UpdateMergedInboxAsync(Guid mergedInboxId, IEnumerable<Guid> linkedAccountIds);
/// <summary>
/// Destroys the merged inbox with the given id.
/// </summary>
/// <param name="mergedInboxId">Merged inbox id to destroy.</param>
Task UnlinkMergedInboxAsync(Guid mergedInboxId);
/// <summary>
/// Updates the account listing orders.
/// </summary>
/// <param name="accountIdOrderPair">AccountId-OrderNumber pair for all accounts.</param>
Task UpdateAccountOrdersAsync(Dictionary<Guid, int> accountIdOrderPair);
}
}

View File

@@ -1,11 +0,0 @@
using System.Threading.Tasks;
namespace Wino.Core.Domain.Interfaces
{
public interface IAppInitializerService
{
string GetApplicationDataFolder();
Task MigrateAsync();
}
}

View File

@@ -0,0 +1,21 @@
namespace Wino.Domain.Interfaces
{
/// <summary>
/// Singleton object that holds the application data folder path and the publisher shared folder path.
/// Load the values before calling any service.
/// App data folder is used for storing files.
/// Pubhlisher cache folder is only used for database file so other apps can access it in the same package by same publisher.
/// </summary>
public interface IApplicationConfiguration
{
/// <summary>
/// Application data folder.
/// </summary>
string ApplicationDataFolderPath { get; set; }
/// <summary>
/// Publisher shared folder path.
/// </summary>
string PublisherSharedFolderPath { get; set; }
}
}

View File

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

View File

@@ -1,9 +1,9 @@
using System;
using System.Threading.Tasks;
using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Enums;
using Wino.Domain.Entities;
using Wino.Domain.Enums;
namespace Wino.Core.Domain.Interfaces
namespace Wino.Domain.Interfaces
{
public interface IAuthenticator
{

View File

@@ -1,7 +1,7 @@
using System.Threading.Tasks;
using Wino.Core.Domain.Models.AutoDiscovery;
using Wino.Domain.Models.AutoDiscovery;
namespace Wino.Core.Domain.Interfaces
namespace Wino.Domain.Interfaces
{
/// <summary>
/// Searches for Auto Discovery settings for custom mail accounts.

View File

@@ -1,19 +0,0 @@
using System.Threading.Tasks;
namespace Wino.Core.Domain.Interfaces
{
public interface IBackgroundTaskService
{
/// <summary>
/// Manages background task registrations, requests access if needed, checks the statusses of them etc.
/// </summary>
/// <exception cref="BackgroundTaskExecutionRequestDeniedException">If the access request is denied for some reason.</exception>
/// <exception cref="BackgroundTaskRegistrationFailedException">If one of the requires background tasks are failed during registration.</exception>
Task HandleBackgroundTaskRegistrations();
/// <summary>
/// Unregisters all existing background tasks. Useful for migrations.
/// </summary>
void UnregisterAllBackgroundTask();
}
}

View File

@@ -0,0 +1,54 @@
using System.Threading;
using System.Threading.Tasks;
using MailKit;
using Wino.Domain.Entities;
using Wino.Domain.Enums;
using Wino.Domain.Models.MailItem;
using Wino.Domain.Models.Synchronization;
namespace Wino.Domain.Interfaces
{
public interface IBaseSynchronizer
{
/// <summary>
/// Account that is assigned for this synchronizer.
/// </summary>
MailAccount Account { get; }
/// <summary>
/// Synchronizer state.
/// </summary>
AccountSynchronizerState State { get; }
/// <summary>
/// Queues a single request to be executed in the next synchronization.
/// </summary>
/// <param name="request">Request to queue.</param>
void QueueRequest(IRequestBase request);
/// <summary>
/// TODO
/// </summary>
/// <returns>Whether active synchronization is stopped or not.</returns>
bool CancelActiveSynchronization();
/// <summary>
/// Performs a full synchronization with the server with given options.
/// This will also prepares batch requests for execution.
/// Requests are executed in the order they are queued and happens before the synchronization.
/// Result of the execution queue is processed during the synchronization.
/// </summary>
/// <param name="options">Options for synchronization.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>Result summary of synchronization.</returns>
Task<SynchronizationResult> SynchronizeAsync(SynchronizationOptions options, CancellationToken cancellationToken = default);
/// <summary>
/// Downloads a single MIME message from the server and saves it to disk.
/// </summary>
/// <param name="mailItem">Mail item to download from server.</param>
/// <param name="transferProgress">Optional progress reporting for download operation.</param>
/// <param name="cancellationToken">Cancellation token.</param>
Task DownloadMissingMimeMessageAsync(IMailItem mailItem, ITransferProgress transferProgress, CancellationToken cancellationToken = default);
}
}

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,12 @@
using MimeKit;
using Wino.Domain.Entities;
namespace Wino.Domain.Interfaces
{
public interface IContactService
{
Task<List<AddressInformation>> GetAddressInformationAsync(string queryText);
Task<AddressInformation> GetAddressInformationByAddressAsync(string address);
Task SaveAddressInformationAsync(MimeMessage message);
}
}

View File

@@ -1,9 +1,9 @@
using System.Collections.Generic;
using Wino.Core.Domain.Models.Folders;
using Wino.Core.Domain.Models.MailItem;
using Wino.Core.Domain.Models.Menus;
using Wino.Domain.Models.Folders;
using Wino.Domain.Models.MailItem;
using Wino.Domain.Models.Menus;
namespace Wino.Core.Domain.Interfaces
namespace Wino.Domain.Interfaces
{
public interface IContextMenuItemService
{

View File

@@ -1,9 +1,9 @@
using System.Collections.Generic;
using Wino.Core.Domain.Models.Folders;
using Wino.Core.Domain.Models.MailItem;
using Wino.Core.Domain.Models.Menus;
using Wino.Domain.Models.Folders;
using Wino.Domain.Models.MailItem;
using Wino.Domain.Models.Menus;
namespace Wino.Core.Domain.Interfaces
namespace Wino.Domain.Interfaces
{
public interface IContextMenuProvider
{

View File

@@ -1,7 +1,7 @@
using System.Threading.Tasks;
using Wino.Core.Domain.Entities;
using Wino.Domain.Entities;
namespace Wino.Core.Domain.Interfaces
namespace Wino.Domain.Interfaces
{
public interface ICustomServerAccountCreationDialog : IAccountCreationDialog
{
@@ -15,5 +15,11 @@ namespace Wino.Core.Domain.Interfaces
/// Displays preparing folders page.
/// </summary>
void ShowPreparingFolders();
/// <summary>
/// Updates account properties for the welcome imap setup dialog and starts the setup.
/// </summary>
/// <param name="account">Account properties.</param>
void StartImapConnectionSetup(MailAccount account);
}
}

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