Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
137 commits
Select commit Hold shift + click to select a range
8efc98c
Align asset naming
d2dyno1 Oct 9, 2024
a7a347f
Remove redundant packages
d2dyno1 Oct 9, 2024
fefdca7
Update Package.appxmanifest
d2dyno1 Oct 9, 2024
f8bd903
Merge branch 'master' into f_qa
d2dyno1 Oct 11, 2024
f89dac0
Re-add some package versions
d2dyno1 Oct 11, 2024
68088e8
Update App.xaml.cs
d2dyno1 Oct 12, 2024
d2129ba
Change icon names
d2dyno1 Oct 12, 2024
64121d0
plist changes
d2dyno1 Oct 12, 2024
eb9c9bc
Fix maui build
d2dyno1 Oct 12, 2024
a17543a
Minor iOS changes
d2dyno1 Oct 12, 2024
6e2bb0b
Try with edited Entitlements
d2dyno1 Oct 12, 2024
36eeae6
Give up on Entitlements
d2dyno1 Oct 12, 2024
058a1bc
Added simple debugging window
d2dyno1 Oct 14, 2024
1e0cc1b
Platform specific code
d2dyno1 Oct 14, 2024
fd01f4b
More platform specific
d2dyno1 Oct 14, 2024
e09acd0
Added login debug
d2dyno1 Oct 14, 2024
1b85461
Added simple tray icon
d2dyno1 Oct 14, 2024
4efa982
Update SecureFolderFS.Uno.csproj
d2dyno1 Oct 14, 2024
68a67a1
Add check for adding duplicate vaults
d2dyno1 Oct 14, 2024
ca62d0c
Create empty files
d2dyno1 Oct 16, 2024
c45fdc7
Begin work on ISystemService
d2dyno1 Oct 17, 2024
c829956
Added NSNotification on Catalyst
d2dyno1 Oct 17, 2024
5580d26
Fixed SecureFolderFS.Uno.csproj
d2dyno1 Oct 17, 2024
fb39982
Added ISystemMonitorModel
d2dyno1 Oct 17, 2024
31d66b2
Update WindowsApplicationService
d2dyno1 Oct 17, 2024
990cebb
Merge branch 'master' into f_qa
d2dyno1 Oct 25, 2024
6f80446
Bump version to 0.7.0.0
d2dyno1 Oct 25, 2024
ad0abd4
Change name to revert
d2dyno1 Oct 25, 2024
54a0a2c
Revert
d2dyno1 Oct 25, 2024
1f7ccaf
Upgrade to Uno 5.4
d2dyno1 Oct 25, 2024
7333184
Removed some warnings
d2dyno1 Oct 25, 2024
747f253
Fix build on non-Windows platforms
d2dyno1 Oct 26, 2024
0c22fda
Make file system mounting independent
d2dyno1 Oct 26, 2024
39ebda2
Fix build on catalyst
d2dyno1 Oct 26, 2024
b6f4a77
Update BackButtonTitleControl.xaml
d2dyno1 Oct 26, 2024
4cd4c13
Set CFBundleName
d2dyno1 Oct 26, 2024
8636ca0
Basic health widget
d2dyno1 Oct 27, 2024
9fa156f
Optimization improvements
d2dyno1 Oct 27, 2024
db6f4fa
Added IVaultHealthService
d2dyno1 Oct 27, 2024
9192d32
Replaced the service with IAsyncValidator
d2dyno1 Oct 27, 2024
c3b3f7d
UX improvements
d2dyno1 Oct 28, 2024
ea598c9
Fixed mounting on Catalyst
d2dyno1 Oct 28, 2024
e85f121
Fix viewing vault on Catalyst
d2dyno1 Oct 28, 2024
051143c
Implement FolderValidator
d2dyno1 Oct 28, 2024
a187ef1
Update RegisterViewModel.cs
d2dyno1 Oct 28, 2024
b474753
Some work on reporting issues
d2dyno1 Oct 29, 2024
d16309a
Removed IVaultHealthService once again
d2dyno1 Oct 30, 2024
c37c8be
Use severity in more places
d2dyno1 Oct 31, 2024
d221836
Merge branch 'master' into f_qa
d2dyno1 Oct 31, 2024
7f0e2a5
Added shield assets
d2dyno1 Nov 1, 2024
29f8940
Added ErrorControl
d2dyno1 Nov 1, 2024
c1fb594
Added the option to move vaults up and down
d2dyno1 Nov 1, 2024
573313e
Added read-only file system mode
d2dyno1 Nov 2, 2024
1c39605
Rename Name to Rid in ResourceString
d2dyno1 Nov 3, 2024
f745c81
Reference SkiaSharp 2.88.9-preview.2.2
d2dyno1 Nov 3, 2024
76f108a
Update NSec to preview
d2dyno1 Nov 3, 2024
a04a1c9
Update ResourceString.cs
d2dyno1 Nov 4, 2024
978e58c
Fix build on MAUI and rollback NSec
d2dyno1 Nov 13, 2024
9a79f7f
SAF changes
d2dyno1 Nov 19, 2024
8ce69fe
Update OpenDocument()
d2dyno1 Nov 20, 2024
4aad466
Update min Android version
d2dyno1 Nov 21, 2024
bf23514
Added StorageManagerCompat
d2dyno1 Nov 23, 2024
c0dcd80
Upgrade to net-9.0
d2dyno1 Nov 23, 2024
597b7b0
Fixed DocumentsProvider write
d2dyno1 Nov 23, 2024
3021674
Implement basic browser listing
d2dyno1 Nov 25, 2024
c1bbfa4
Added browser navigation animation
d2dyno1 Nov 26, 2024
9026ffe
Added elements count in TitleView
d2dyno1 Nov 26, 2024
326da9b
Implemented working Breadcrumb
d2dyno1 Nov 27, 2024
6639257
Added deletion and file/folder creation
d2dyno1 Nov 28, 2024
c525df8
Added an option to import files/folders
d2dyno1 Nov 30, 2024
2c5501f
Some work on file preview
d2dyno1 Nov 30, 2024
6c53a03
Update submodule
d2dyno1 Dec 1, 2024
3ff841b
Update nwebdav
d2dyno1 Dec 1, 2024
a1af68e
Fixed Uno build
d2dyno1 Dec 1, 2024
89b0d45
Fixed plaintext naming
d2dyno1 Dec 1, 2024
589aaa5
Added file system tests
d2dyno1 Dec 1, 2024
8d16d2b
Change to NUnit
d2dyno1 Dec 2, 2024
fc1fbb1
Use OrderedDictionary
d2dyno1 Dec 2, 2024
0c71069
Added video preview
d2dyno1 Dec 2, 2024
110e8f3
Added DataStructureTests
d2dyno1 Dec 3, 2024
5ce7ff9
Set vault icon
d2dyno1 Dec 4, 2024
e93bedc
Sanitize volume name
d2dyno1 Dec 4, 2024
9916271
Don't crash when there is no content folder
d2dyno1 Dec 4, 2024
6a653e1
Use built-in Base64Url
d2dyno1 Dec 4, 2024
e41dd40
Improve file preview
d2dyno1 Dec 7, 2024
19b3beb
Update image pinch and pan UX
d2dyno1 Dec 7, 2024
1272ef8
Fixed total read and write widget
d2dyno1 Dec 7, 2024
3075d31
Separate basic properties
d2dyno1 Dec 7, 2024
cb0239c
Added size to DocumentsProvider
d2dyno1 Dec 7, 2024
13035f8
Implemented move and copy to DocumentsProvider
d2dyno1 Dec 7, 2024
6974e16
Add basic TransferVM
d2dyno1 Dec 9, 2024
539b243
Added design for transfer control
d2dyno1 Dec 11, 2024
c639238
Added architecture for Base4K encoding
d2dyno1 Dec 12, 2024
c816df7
Added migration architecture
d2dyno1 Dec 12, 2024
eb3680f
Added more options to tray menu
d2dyno1 Dec 15, 2024
b6d19dd
Minor work on HealthDialog
d2dyno1 Dec 15, 2024
1021da7
Implemented CredentialsPopup
d2dyno1 Dec 18, 2024
2c82779
Use Title instead of DisplayName
d2dyno1 Dec 19, 2024
d81d95e
Obsolete OverlayViewModel
d2dyno1 Dec 19, 2024
d78797a
Move health report to a separate view
d2dyno1 Dec 21, 2024
d4cf818
Fixed build on Maui
d2dyno1 Dec 22, 2024
40be813
Categorize widget view models
d2dyno1 Dec 22, 2024
65446d9
Removed IHealthResult
d2dyno1 Dec 23, 2024
f14f9b8
More work on validators
d2dyno1 Dec 24, 2024
5945a8b
Fix health scanning lags
d2dyno1 Dec 24, 2024
04e4b58
Make IFolderScanner non-generic
d2dyno1 Dec 25, 2024
780456d
StructureValidator
d2dyno1 Dec 26, 2024
4013cdb
Check if name is reserved
d2dyno1 Dec 26, 2024
8da54a5
Added UI for different issue types
d2dyno1 Dec 27, 2024
a993a4d
Fix tests
d2dyno1 Dec 27, 2024
1735389
Begin work on the Resolve button
d2dyno1 Dec 29, 2024
497595e
Use preview LangVersion in Storage project
d2dyno1 Dec 30, 2024
00eb99a
Fixed MAUI build
d2dyno1 Jan 6, 2025
6cd03f5
WIP
d2dyno1 Jan 7, 2025
2da2526
Implemented Transfer view
d2dyno1 Jan 8, 2025
eecd809
Added context option to rename vaults
d2dyno1 Jan 9, 2025
77db863
Fix window not remembering size and position
d2dyno1 Jan 11, 2025
c5381af
Implement correct issue sorting
d2dyno1 Jan 12, 2025
f3f8130
Reconcile some TODOs
d2dyno1 Jan 12, 2025
b3e42a7
Partially implemented repairing health issues
d2dyno1 Jan 13, 2025
b9a07cc
Added support for renaming items on Android
d2dyno1 Jan 14, 2025
c64eb86
Added RefreshView to file list
d2dyno1 Jan 15, 2025
590d2e9
Initial work on file selection logic
d2dyno1 Jan 15, 2025
8de1fe4
Update FileSystemProvider.Main.cs
d2dyno1 Jan 15, 2025
7b46e54
Added selection operations
d2dyno1 Jan 15, 2025
79ff502
Begin work on migrating NWebDav 2 (#80)
d2dyno1 Jan 15, 2025
e4ea49f
Update nwebdav
d2dyno1 Jan 15, 2025
78ba362
Merge branch 'f_qa' of https://github.com/securefolderfs-community/Se…
d2dyno1 Jan 15, 2025
3779b96
Lock FluentAssertions
d2dyno1 Jan 15, 2025
cf1c291
Show WebDav port on hover in vault properties
d2dyno1 Jan 19, 2025
88c19d9
Persist last scan date
d2dyno1 Jan 19, 2025
6b47b91
Disable or enable "Lock all vaults" menu option
d2dyno1 Jan 19, 2025
b9e8e9e
Update system version text
d2dyno1 Jan 19, 2025
00f0609
Fixed IsReadOnly bypass
d2dyno1 Jan 20, 2025
887f18a
Fixed Skia build
d2dyno1 Jan 20, 2025
f12d24d
Begin work on Recycle bin
d2dyno1 Jan 21, 2025
7f2895b
Update WindowsVaultCredentialsService.cs
d2dyno1 Jan 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .run/SecureFolderFS.run.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="SecureFolderFS (Desktop)" type="LaunchSettings" factoryName=".NET Launch Settings Profile">
<option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/src/Platforms/SecureFolderFS.Uno/SecureFolderFS.Uno.csproj" />
<option name="LAUNCH_PROFILE_TFM" value="net8.0-desktop" />
<option name="LAUNCH_PROFILE_TFM" value="net9.0-desktop" />
<option name="LAUNCH_PROFILE_NAME" value="SecureFolderFS (Desktop)" />
<option name="USE_EXTERNAL_CONSOLE" value="0" />
<option name="USE_MONO" value="0" />
Expand All @@ -16,7 +16,7 @@
</configuration>
<configuration default="false" name="SecureFolderFS (WinAppSDK Unpackaged)" type="LaunchSettings" factoryName=".NET Launch Settings Profile">
<option name="LAUNCH_PROFILE_PROJECT_FILE_PATH" value="$PROJECT_DIR$/src/Platforms/SecureFolderFS.Uno/SecureFolderFS.Uno.csproj" />
<option name="LAUNCH_PROFILE_TFM" value="net8.0-windows10.0.19041.0" />
<option name="LAUNCH_PROFILE_TFM" value="net9.0-windows10.0.19041.0" />
<option name="LAUNCH_PROFILE_NAME" value="SecureFolderFS (WinAppSDK Unpackaged)" />
<option name="USE_EXTERNAL_CONSOLE" value="0" />
<option name="USE_MONO" value="0" />
Expand Down
5 changes: 2 additions & 3 deletions global.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
{
// To update the version of Uno please update the version of the Uno.Sdk here. See https://aka.platform.uno/upgrade-uno-packages for more information.
"msbuild-sdks": {
"Uno.Sdk": "5.3.112"
"Uno.Sdk": "5.4.10"
}
}
}
2 changes: 1 addition & 1 deletion lib/Tmds.Fuse
2 changes: 1 addition & 1 deletion lib/nwebdav
Submodule nwebdav updated 54 files
+1 −1 NWebDav.Server.HttpListener/NWebDav.Server.HttpListener.csproj
+4 −4 NWebDav.Server/Dispatching/BaseDispatcher.cs
+2 −2 NWebDav.Server/Dispatching/IRequestDispatcher.cs
+4 −7 NWebDav.Server/Dispatching/WebDavDispatcher.cs
+28 −0 NWebDav.Server/Extensions/DavStorageExtensions.Folder.cs
+28 −0 NWebDav.Server/Extensions/HttpListenerResponseExtensions.cs
+24 −0 NWebDav.Server/Extensions/StoreExtensions.cs
+21 −0 NWebDav.Server/Extensions/UriExtensions.cs
+9 −10 NWebDav.Server/Handlers/CopyHandler.cs
+22 −19 NWebDav.Server/Handlers/DeleteHandler.cs
+11 −6 NWebDav.Server/Handlers/GetAndHeadHandler.cs
+5 −6 NWebDav.Server/Handlers/LockHandler.cs
+4 −4 NWebDav.Server/Handlers/MkcolHandler.cs
+26 −21 NWebDav.Server/Handlers/MoveHandler.cs
+2 −3 NWebDav.Server/Handlers/OptionsHandler.cs
+9 −12 NWebDav.Server/Handlers/PropFindHandler.cs
+2 −2 NWebDav.Server/Handlers/PropPatchHandler.cs
+15 −8 NWebDav.Server/Handlers/PutHandler.cs
+3 −3 NWebDav.Server/Handlers/UnlockHandler.cs
+52 −0 NWebDav.Server/Helpers/HttpStatusCodeHelper.cs
+1 −1 NWebDav.Server/Helpers/IOExceptionHelper.cs
+67 −49 NWebDav.Server/Helpers/RequestHelpers.cs
+6 −11 NWebDav.Server/Helpers/ResponseHelpers.cs
+1 −0 NWebDav.Server/Helpers/UriHelper.cs
+14 −6 NWebDav.Server/Helpers/XmlHelper.cs
+1 −2 NWebDav.Server/IRequestHandler.cs
+5 −27 NWebDav.Server/Locking/ActiveLock.cs
+80 −0 NWebDav.Server/Locking/BaseLockingManager.cs
+13 −19 NWebDav.Server/Locking/ILockingManager.cs
+96 −80 NWebDav.Server/Locking/InMemoryLockingManager.cs
+3 −14 NWebDav.Server/Locking/LockEntry.cs
+6 −0 NWebDav.Server/Locking/LockResult.cs
+14 −0 NWebDav.Server/Models/IXmlReaderWriter.cs
+1 −1 NWebDav.Server/Models/Namespace.cs
+122 −0 NWebDav.Server/Models/XmlReaderWriter.cs
+3 −2 NWebDav.Server/NWebDav.Server.csproj
+2 −2 NWebDav.Server/Props/DavProperty.cs
+29 −29 NWebDav.Server/Props/DavTypedProperties.cs
+2 −2 NWebDav.Server/Props/DefaultLockingProperties.cs
+2 −2 NWebDav.Server/Props/IPropertyManager.cs
+2 −2 NWebDav.Server/Props/OverridePropertyManager.cs
+2 −2 NWebDav.Server/Props/PropertyManager.cs
+3 −2 NWebDav.Server/Props/Win32Properties.cs
+5 −3 NWebDav.Server/Stores/DiskStore.cs
+227 −194 NWebDav.Server/Stores/DiskStoreCollection.cs
+36 −29 NWebDav.Server/Stores/DiskStoreFile.cs
+0 −8 NWebDav.Server/Stores/IDiskStoreCollection.cs
+0 −8 NWebDav.Server/Stores/IDiskStoreItem.cs
+4 −117 NWebDav.Server/Stores/IStore.cs
+34 −0 NWebDav.Server/Stores/IStoreCollection.cs
+15 −0 NWebDav.Server/Stores/IStoreFile.cs
+20 −0 NWebDav.Server/Stores/IStoreItem.cs
+6 −4 NWebDav.Server/Stores/RootDiskStore.cs
+7 −0 NWebDav.Server/Stores/StoreResult.cs
4 changes: 2 additions & 2 deletions src/Platforms/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<DotNetVersion>net8.0</DotNetVersion>
<DotNetVersion>net9.0</DotNetVersion>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

Expand Down Expand Up @@ -62,7 +62,7 @@
<When Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">
<PropertyGroup>
<IsMacCatalyst>true</IsMacCatalyst>
<SupportedOSPlatformVersion>14.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion>15.0</SupportedOSPlatformVersion>
</PropertyGroup>
</When>
<When Condition="$(TargetFramework.Contains('windows10'))">
Expand Down
36 changes: 15 additions & 21 deletions src/Platforms/Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
<Project ToolsVersion="15.0">
<ItemGroup>
<PackageVersion Include="AathifMahir.Maui.MauiIcons.Cupertino" Version="3.0.0" />
<PackageVersion Include="AathifMahir.Maui.MauiIcons.Material" Version="3.0.0" />
<PackageVersion Include="CommunityToolkit.Maui" Version="9.0.2" />
<PackageVersion Include="AathifMahir.Maui.MauiIcons.Cupertino" Version="4.0.0" />
<PackageVersion Include="AathifMahir.Maui.MauiIcons.Material" Version="4.0.0" />
<PackageVersion Include="CommunityToolkit.Maui" Version="9.1.1" />
<PackageVersion Include="CommunityToolkit.Maui.MediaElement" Version="4.1.2" />
<PackageVersion Include="CommunityToolkit.WinUI.UI.Animations" Version="7.1.2" />
<PackageVersion Include="CommunityToolkit.WinUI.UI.Controls.Markdown" Version="7.1.2" />
<PackageVersion Include="IconPacks.Material" Version="1.0.8765.1-build" />
<PackageVersion Include="LiveChartsCore.SkiaSharpView.Uno.WinUI" Version="2.0.0-rc3.3" />
<PackageVersion Include="Material.Components.Maui" Version="0.2.1-preview" />
<PackageVersion Include="ContextMenuContainer" Version="1.2.3" />
<PackageVersion Include="H.NotifyIcon.Uno.WinUI" Version="2.1.4" />
<PackageVersion Include="IconPacks.Material" Version="1.0.8940.2-build" />
<PackageVersion Include="LiveChartsCore.SkiaSharpView.Uno.WinUI" Version="2.0.0-rc4.5" />
<PackageVersion Include="Material.Components.Maui" Version="0.2.2-preview" />
<PackageVersion Include="Microsoft.AppCenter.Analytics" Version="5.0.3" />
<PackageVersion Include="Microsoft.AppCenter.Crashes" Version="5.0.3" />
<PackageVersion Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
<PackageVersion Include="Microsoft.Maui.Controls" Version="8.0.70" />
<PackageVersion Include="Microsoft.Maui.Controls.Compatibility" Version="8.0.70" />
<PackageVersion Include="Microsoft.Maui.Core" Version="8.0.70" />
<PackageVersion Include="Microsoft.Maui.Essentials" Version="8.0.70" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageVersion Include="Microsoft.Maui.Controls" Version="9.0.10" />
<PackageVersion Include="Microsoft.Maui.Controls.Compatibility" Version="9.0.10" />
<PackageVersion Include="Microsoft.Maui.Core" Version="9.0.10" />
<PackageVersion Include="Microsoft.Maui.Essentials" Version="9.0.10" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
<PackageVersion Include="Microsoft.NET.ILLink.Analyzers" Version="7.0.100-1.23401.1" />
<PackageVersion Include="Microsoft.Windows.Compatibility" Version="8.0.0" />
<PackageVersion Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.756" />
<PackageVersion Include="Microsoft.WindowsAppSDK" Version="1.4.231008000" />
<PackageVersion Include="Octokit" Version="13.0.1" />
<PackageVersion Include="SkiaSharp.Views.Uno.WinUI" Version="2.88.9-preview.2.2" />
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="8.0.0" />
<PackageVersion Include="The49.Maui.BottomSheet" Version="8.0.3" />
<PackageVersion Include="Uno.CommunityToolkit.WinUI" Version="7.1.200" />
Expand All @@ -33,14 +33,8 @@
<PackageVersion Include="Uno.Resizetizer" Version="1.6.0" />
<PackageVersion Include="Uno.UI.Adapter.Microsoft.Extensions.Logging" Version="5.3.90" />
<PackageVersion Include="Uno.UniversalImageLoader" Version="1.9.37" />
<PackageVersion Include="Uno.Wasm.Bootstrap" Version="8.0.20" />
<PackageVersion Include="Uno.Wasm.Bootstrap.DevServer" Version="8.0.20" />
<PackageVersion Include="Uno.Wasm.Bootstrap.Server" Version="8.0.20" />
<PackageVersion Include="Uno.WinUI" Version="5.3.90" />
<PackageVersion Include="Uno.WinUI.Lottie" Version="5.3.90" />
<PackageVersion Include="Uno.WinUI.DevServer" Version="5.3.90" />
<PackageVersion Include="Uno.WinUI.Skia.Gtk" Version="5.3.90" />
<PackageVersion Include="Uno.WinUI.WebAssembly" Version="5.3.90" />
<PackageVersion Include="Vanara.PInvoke.ComCtl32" Version="4.0.2" />
<PackageVersion Include="Vanara.PInvoke.ComCtl32" Version="4.0.4" />
</ItemGroup>
</Project>
2 changes: 2 additions & 0 deletions src/Platforms/SecureFolderFS.Maui/App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ public App()

protected override Window CreateWindow(IActivationState? activationState)
{
APES.UI.XF.ContextMenuContainer.Init();

var appShell = Task.Run(GetAppShellAsync).ConfigureAwait(false).GetAwaiter().GetResult();
return new Window(appShell);
}
Expand Down
25 changes: 25 additions & 0 deletions src/Platforms/SecureFolderFS.Maui/AppModels/ImageStream.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using IImage = SecureFolderFS.Shared.ComponentModel.IImage;

namespace SecureFolderFS.Maui.AppModels
{
/// <inheritdoc cref="IImage"/>
internal sealed class ImageStream : IImage
{
private readonly Stream _stream;

public StreamImageSource Source { get; }

public ImageStream(Stream stream)
{
_stream = stream;
Source = new();
Source.Stream = (cancellationToken) => Task.FromResult(stream);
}

/// <inheritdoc/>
public void Dispose()
{
_stream.Dispose();
}
}
}
87 changes: 87 additions & 0 deletions src/Platforms/SecureFolderFS.Maui/AppModels/VideoStreamServer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
using System.Net;
using System.Net.Sockets;
using SecureFolderFS.Shared.ComponentModel;

namespace SecureFolderFS.Maui.AppModels
{
internal sealed class VideoStreamServer : IAsyncInitialize, IDisposable
{
private readonly HttpListener _httpListener;
private readonly Stream _videoStream;
private readonly string _mimeType;
private readonly int _port;
private bool _disposed;

public string BaseAddress => $"http://localhost:{_port}/video";

public VideoStreamServer(Stream videoStream, string mimeType)
{
_videoStream = videoStream;
_mimeType = mimeType;

// Automatically find a free port
_port = GetAvailablePort();

// Initialize the HttpListener with the free port
_httpListener = new HttpListener();
_httpListener.Prefixes.Add($"http://localhost:{_port}/");
}

/// <inheritdoc/>
public Task InitAsync(CancellationToken cancellationToken = default)
{
_httpListener.Start();
_ = BeginListeningAsync();

return Task.CompletedTask;

async Task BeginListeningAsync()
{
while (!_disposed && _httpListener.IsListening && await _httpListener.GetContextAsync() is var context)
{
try
{
if (context.Request.RawUrl != "/video")
{
context.Response.StatusCode = (int)HttpStatusCode.NotFound;
context.Response.Close();
continue;
}

context.Response.StatusCode = (int)HttpStatusCode.OK;
context.Response.ContentType = _mimeType;
context.Response.ContentLength64 = _videoStream.Length;
context.Response.Headers["Accept-Ranges"] = "bytes";

await _videoStream.CopyToAsync(context.Response.OutputStream, 64 * 1024, cancellationToken);
_videoStream.Position = 0L;
break;
}
catch (Exception)
{
break;
}
}
}
}

/// <inheritdoc/>
public void Dispose()
{
_disposed = true;
_videoStream.Dispose();
_httpListener.Abort();
}

private static int GetAvailablePort()
{
using var listener = new TcpListener(IPAddress.Loopback, 0);
listener.Start();

var port = ((IPEndPoint)listener.LocalEndpoint).Port;
listener.Stop();

return port;
}
}
}
1 change: 1 addition & 0 deletions src/Platforms/SecureFolderFS.Maui/AppShell.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public AppShell()
// Register routes
Routing.RegisterRoute("LoginPage", typeof(LoginPage));
Routing.RegisterRoute("OverviewPage", typeof(OverviewPage));
Routing.RegisterRoute("BrowserPage", typeof(BrowserPage));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public static IServiceCollection WithMauiServices(this IServiceCollection servic
{
return serviceCollection
.AddSingleton<ISettingsService, SettingsService>(_ => new(new MauiAppSettings(settingsFolder), new UserSettings(settingsFolder)))
.AddSingleton<IMediaService, MauiMediaService>()
.AddSingleton<IOverlayService, MauiOverlayService>()
.AddTransient<INavigationService, MauiNavigationService>()
.AddSingleton<IClipboardService, MauiClipboardService>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,16 @@ internal sealed class ResourceString : IMarkupExtension
/// <summary>
/// Gets or sets the name identifier that is associated with a resource.
/// </summary>
public string? Name { get; set; }
public string? Rid { get; set; }

/// <inheritdoc/>
public object ProvideValue(IServiceProvider serviceProvider)
{
LocalizationService ??= DI.OptionalService<ILocalizationService>();
if (LocalizationService is null)
return $"{{{Name}}}";
return $"{{{Rid}}}";

return LocalizationService.TryGetString(Name ?? string.Empty) ?? $"{{{Name}}}";
return LocalizationService.TryGetString(Rid ?? string.Empty) ?? $"{{{Rid}}}";
}
}
}
18 changes: 9 additions & 9 deletions src/Platforms/SecureFolderFS.Maui/MauiProgram.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using APES.UI.XF;
using CommunityToolkit.Maui;
using Microsoft.Extensions.Logging;
using The49.Maui.BottomSheet;
Expand Down Expand Up @@ -25,12 +26,14 @@ public static MauiApp CreateMauiApp()
})

// Plugins
.UseMauiCommunityToolkit() // https://github.com/CommunityToolkit/Maui
.UseBottomSheet() // https://github.com/the49ltd/The49.Maui.BottomSheet
.UseMauiCommunityToolkitMediaElement() // https://github.com/CommunityToolkit/Maui
.UseMauiCommunityToolkit() // https://github.com/CommunityToolkit/Maui
.UseBottomSheet() // https://github.com/the49ltd/The49.Maui.BottomSheet
.ConfigureContextMenuContainer() // https://github.com/anpin/ContextMenuContainer

#if ANDROID
.UseMaterialMauiIcons() // https://github.com/AathifMahir/MauiIcons
.UseMaterialComponents() // https://github.com/mdc-maui/mdc-maui
.UseMaterialMauiIcons() // https://github.com/AathifMahir/MauiIcons
.UseMaterialComponents() // https://github.com/mdc-maui/mdc-maui
#elif IOS
.UseCupertinoMauiIcons()
#endif
Expand All @@ -42,11 +45,8 @@ public static MauiApp CreateMauiApp()
handlers.AddHandler<ContentPageExtended, Handlers.ContentPageExHandler>();
#endif
})
;

#if DEBUG
builder.Logging.AddDebug();
#endif

; // Finish initialization

return builder.Build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application android:allowBackup="true" android:icon="@mipmap/appicon" android:supportsRtl="true"></application>
<application android:usesCleartextTraffic="true" android:allowBackup="true" android:icon="@mipmap/appicon" android:supportsRtl="true">
<service android:name="communityToolkit.maui.media.services" android:exported="false" android:enabled="true" android:foregroundServiceType="mediaPlayback">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
<intent-filter>
<action android:name="androidx.media3.session.MediaSessionService"/>
</intent-filter>
</service>
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
<uses-sdk />
</manifest>
</manifest>

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,14 @@ internal sealed class AndroidLifecycleHelper : BaseLifecycleHelper
protected override string AppDirectory { get; } = Microsoft.Maui.Storage.FileSystem.Current.AppDataDirectory;

/// <inheritdoc/>
public override async Task InitAsync(CancellationToken cancellationToken = default)
public override Task InitAsync(CancellationToken cancellationToken = default)
{
// Request permissions
//await RequestPermissionsAsync<Permissions.StorageWrite>();

// Initialize settings
var settingsFolderPath = Path.Combine(AppDirectory, SecureFolderFS.UI.Constants.FileNames.SETTINGS_FOLDER_NAME);
var settingsFolder = new SystemFolder(Directory.CreateDirectory(settingsFolderPath));
ConfigureServices(settingsFolder);

return Task.CompletedTask;
}

/// <inheritdoc/>
Expand All @@ -40,8 +39,9 @@ protected override IServiceCollection ConfigureServices(IModifiableFolder settin
return base.ConfigureServices(settingsFolder)
//.AddSingleton<IPrinterService, WindowsPrinterService>()
.AddSingleton<IApplicationService, AndroidApplicationService>()
.AddSingleton<IVaultService, AndroidVaultService>()
.AddSingleton<IVaultManagerService, AndroidVaultManagerService>()
.AddSingleton<ISystemService, AndroidSystemService>()
.AddSingleton<IVaultCredentialsService, AndroidVaultCredentialsService>()
.AddSingleton<IVaultFileSystemService, AndroidVaultFileSystemService>()
.AddSingleton<IStorageService, AndroidStorageService>()
.AddSingleton<IFileExplorerService, AndroidFileExplorerService>()
.AddSingleton<ITelemetryService, DebugTelemetryService>()
Expand Down
Loading