Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions UWP/UWPVideoViewer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
namespace Zebble
{
using System;
using System.IO;
using System.Runtime.InteropServices.WindowsRuntime;
using Olive;
using controls = Windows.UI.Xaml.Controls;

class UWPVideoViewer
{
internal controls.MediaElement Result;
VideoPlayer View;

public UWPVideoViewer(VideoPlayer view)
{
View = view;
View.PathChanged.HandleOn(Thread.UI, Load);
View.PathNullified.HandleOn(Thread.UI, OnPathNullified);
View.Started.HandleOn(Thread.UI, () => Result?.Play());
View.Paused.HandleOn(Thread.UI, () => Result?.Pause());
View.Resumed.HandleOn(Thread.UI, () => Result?.Play());
View.Stopped.HandleOn(Thread.UI, () => Result?.Stop());
View.Seeked.HandleOn(Thread.UI, (position) => Result.Position = position);
View.SoughtBeginning.HandleOn(Thread.UI, () => Result.Position = 0.Milliseconds());
view.Muted.HandleOn(Thread.UI, () => Result.IsMuted = view.IsMuted);
View.GetCurrentTime = () => Result.Position;
View.InitializeTimer();

Result = new controls.MediaElement { Stretch = view.BackgroundImageStretch.Render(), AutoPlay = View.AutoPlay, IsLooping = View.Loop };
Result.MediaEnded += MediaEnded;
Result.MediaOpened += MediaOpened;

Load();
}

void MediaEnded(object sender, Windows.UI.Xaml.RoutedEventArgs e) => View.FinishedPlaying.RaiseOn(Thread.Pool);

void OnPathNullified() => Result.Source = null;

void Load()
{
var url = View.Path;
if (url.IsEmpty()) return;

if (url.IsUrl())
{
Result.Source = url.AsUri();
View.LoadedPath = url;
}
else
{
try
{
var file = Device.IO.File(url);
var data = file.ReadAllBytes();
var source = data.AsBuffer().AsStream().AsRandomAccessStream();
Result.SetSource(source, string.Empty);
}
catch (Exception ex)
{
Dialogs.Current.Toast("Failed to show video: " + ex.Message);
}
View.LoadedPath = url;
}
}

void MediaOpened(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
View.IsReady = true;
View.Duration = Result.NaturalDuration.TimeSpan;
View.VideoSize = new Size(Result.NaturalVideoWidth, Result.NaturalVideoHeight);
View.LoadCompleted.Raise();
View.OnLoaded();
}

internal void Dispose()
{
if (Result is null) return;
Result.MediaEnded -= MediaEnded;
Result.MediaOpened -= MediaOpened;
Result = null;

GC.SuppressFinalize(this);
}
}
}
6 changes: 3 additions & 3 deletions WinUI/VideoPlayerRenderer.cs → UWP/VideoPlayerRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ namespace Zebble
{
using System;
using System.Threading.Tasks;
using Microsoft.UI.Xaml;
using Windows.UI.Xaml;

class VideoPlayerRenderer : INativeRenderer
{
WinUIVideoViewer Result;
UWPVideoViewer Result;

public Task<FrameworkElement> Render(Renderer renderer)
{
Result = new WinUIVideoViewer((VideoPlayer)renderer.View);
Result = new UWPVideoViewer((VideoPlayer)renderer.View);
return Task.FromResult((FrameworkElement)Result.Result);
}

Expand Down
23 changes: 13 additions & 10 deletions VideoPlayer.csproj
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<Project Sdk="MSBuild.Sdk.Extras/3.0.44">
<PropertyGroup>
<TargetFrameworks>net8.0-android;net8.0-ios</TargetFrameworks>
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">$(TargetFrameworks);net8.0-windows10.0.19041</TargetFrameworks>
<TargetFrameworks>net9.0-android;net9.0-ios</TargetFrameworks>
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">$(TargetFrameworks);net9.0-windows10.0.26100</TargetFrameworks>
<AssemblyName>Zebble.VideoPlayer</AssemblyName>
<RootNamespace>Zebble</RootNamespace>
<PackageId>Zebble.VideoPlayer</PackageId>
<Product>$(AssemblyName) ($(TargetFramework))</Product>
<Version>5.1.0.0</Version>
<Version>5.1.1.0</Version>
<PackOnBuild>true</PackOnBuild>
<NeutralLanguage>en</NeutralLanguage>
<DefineConstants>$(DefineConstants)</DefineConstants>
Expand Down Expand Up @@ -37,9 +37,10 @@
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
<PropertyGroup Condition=" $(TargetFramework.Contains('windows')) ">
<PropertyGroup Condition=" $(TargetFramework.StartsWith('net9.0-windows')) ">
<RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
<DefineConstants>$(DefineConstants);WINUI</DefineConstants>
<DefineConstants>$(DefineConstants);UWP</DefineConstants>
<UseUwp>true</UseUwp>
</PropertyGroup>
<PropertyGroup Condition=" $(TargetFramework.Contains('android')) ">
<DefineConstants>$(DefineConstants);ANDROID</DefineConstants>
Expand All @@ -51,8 +52,10 @@
<ItemGroup>
<Compile Include="Shared\**\*.cs" />
</ItemGroup>
<ItemGroup Condition=" $(DefineConstants.Contains('WINUI')) ">
<Compile Include="WinUI\**\*.cs" />
<ItemGroup Condition=" $(DefineConstants.Contains('UWP')) ">
<Compile Include="UWP\**\*.cs" />
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.6.250108002" IncludeAssets="build" PrivateAssets="all" />
<PackageReference Include="Microsoft.Windows.CsWinRT" Version="2.2.0" />
</ItemGroup>
<ItemGroup Condition=" $(DefineConstants.Contains('ANDROID')) ">
<Compile Include="Android\**\*.cs" />
Expand All @@ -67,9 +70,9 @@
<None Remove="Zebble-LicenseAgreement.txt" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="System.Text.Encoding.CodePages" Version="8.0.0" />
<PackageReference Include="Zebble" Version="5.1.2" />
<PackageReference Include="Zebble.Audio" Version="3.1.1" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.1" />
<PackageReference Include="Zebble" Version="5.1.7" />
<PackageReference Include="Zebble.Audio" Version="3.1.2" />
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Running)'=='local'">
<Exec Command="update-local-nuget-cache" />
Expand Down
94 changes: 0 additions & 94 deletions WinUI/WinUIVideoViewer.cs

This file was deleted.