Added blank screen when project isn't loaded

This commit is contained in:
Mike Nolan 2022-05-20 22:38:13 -05:00
parent 0e618b9909
commit 37c676f734
8 changed files with 76 additions and 14 deletions

View File

@ -82,12 +82,12 @@ public class TimelapsePack
{ {
//build the library //build the library
Process p = new Process(); Process p = new Process();
p.StartInfo = new ProcessStartInfo("dotnet","build --configuration Release"); p.StartInfo = new ProcessStartInfo("dotnet","publish --configuration Release");
p.StartInfo.UseShellExecute=false; p.StartInfo.UseShellExecute=false;
if(p.Start()) if(p.Start())
{ {
p.WaitForExit(); p.WaitForExit();
return Path.Combine(Environment.CurrentDirectory,"bin","Release","net6.0",$"{curDirName}.dll"); return Path.Combine(Environment.CurrentDirectory,"bin","Release","net6.0","publish",$"{curDirName}.dll");
}else{ }else{
Console.ForegroundColor = ConsoleColor.Red; Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("ERROR: process not started"); Console.WriteLine("ERROR: process not started");

View File

@ -17,9 +17,9 @@
<PackageId>Tesses.TimelapsePack</PackageId> <PackageId>Tesses.TimelapsePack</PackageId>
<Authors>Mike Nolan</Authors> <Authors>Mike Nolan</Authors>
<Company>Tesses</Company> <Company>Tesses</Company>
<Version>1.0.2</Version> <Version>1.0.3</Version>
<AssemblyVersion>1.0.2</AssemblyVersion> <AssemblyVersion>1.0.3</AssemblyVersion>
<FileVersion>1.0.2</FileVersion> <FileVersion>1.0.3</FileVersion>
<Description>Extension Packaging tool for TimelapseNow</Description> <Description>Extension Packaging tool for TimelapseNow</Description>
<PackageLicenseExpression>GPL-3.0-only</PackageLicenseExpression> <PackageLicenseExpression>GPL-3.0-only</PackageLicenseExpression>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance> <PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>

View File

@ -324,10 +324,20 @@ public class MainForm : Form
svr.Listen(); svr.Listen();
}); });
t.Start(); t.Start();
Instance.HasCamera=c !=null;
if(c == null) if(c == null)
{ {
MessageBox.Show("You will need to restart app to record");
Thread t2=new Thread(async()=>{
while(true)
{
Image<Rgb24> rgb=new Image<Rgb24>(Instance.Model.blankCameraWidth,Instance.Model.blankCameraHeight,new Rgb24(0,0,0));
await FrameChanged(rgb);
Thread.Sleep(50);
}
});
t2.Start();
return; return;
} }

View File

@ -27,7 +27,9 @@ public class GuiData
Instance.Extensions.Add(ext); Instance.Extensions.Add(ext);
await ext._Create(); await ext._Create();
} }
Instance.SetPriority();
} }
public void FSChanged() public void FSChanged()
{ {
if(Instance != null) if(Instance != null)
@ -52,8 +54,22 @@ public class GuiData
public IEnumerable<(Func<Window,string,Task> ShareActionAsync,string Text,TimelapseExtension extension)>? Share {get {if(Instance==null) return null;return Instance._share;}} public IEnumerable<(Func<Window,string,Task> ShareActionAsync,string Text,TimelapseExtension extension)>? Share {get {if(Instance==null) return null;return Instance._share;}}
public int CurrentFSIndex {get;set;} public int CurrentFSIndex {get;set;}
} }
internal class PriorityCompare : IComparer<(Func<Image<Rgb24>, Task<bool>> Handler, string HandlerName, TimelapseExtension Extension, int Priority)>
{
public int Compare((Func<Image<Rgb24>, Task<bool>> Handler, string HandlerName, TimelapseExtension Extension, int Priority) x, (Func<Image<Rgb24>, Task<bool>> Handler, string HandlerName, TimelapseExtension Extension, int Priority) y)
{
return y.Priority.CompareTo(x.Priority);
}
}
public class Api public class Api
{ {
internal void SetPriority()
{
_frameHandlers.Sort(new PriorityCompare());
}
public bool HasCamera {get;set;}
public TimelapseSettingsModel Model = LoadModel(); public TimelapseSettingsModel Model = LoadModel();
internal static string ModelLocation = GetInternalFile("config.json"); internal static string ModelLocation = GetInternalFile("config.json");
private static TimelapseSettingsModel LoadModel() private static TimelapseSettingsModel LoadModel()
@ -193,7 +209,7 @@ public class Api
return fs; return fs;
} }
internal List<(Func<Image<Rgb24>,Task<bool>> Handler,string HandlerName, TimelapseExtension Extension)> _frameHandlers=new List<(Func<Image<Rgb24>, Task<bool>> Handler,string HandlerName, TimelapseExtension Extension)>(); internal List<(Func<Image<Rgb24>,Task<bool>> Handler,string HandlerName, TimelapseExtension Extension,int Priority)> _frameHandlers=new List<(Func<Image<Rgb24>, Task<bool>> Handler,string HandlerName, TimelapseExtension Extension,int Priority)>();
internal List<(Func<Dialog> Dialog,string Text,TimelapseExtension Extension)> _extSettings= new List<(Func<Dialog> Dialog,string Text,TimelapseExtension Extension)>(); internal List<(Func<Dialog> Dialog,string Text,TimelapseExtension Extension)> _extSettings= new List<(Func<Dialog> Dialog,string Text,TimelapseExtension Extension)>();

View File

@ -22,9 +22,7 @@ public sealed class ExtensionFeatures
} }
public ExtensionFeatures RegisterAsyncFrameHandler(Func<Image<Rgb24>,Task<bool>> handler,string handlerName) public ExtensionFeatures RegisterAsyncFrameHandler(Func<Image<Rgb24>,Task<bool>> handler,string handlerName)
{ {
if(!Valid || Instance == null) return this; return RegisterAsyncFrameHandler(handler,handlerName,10000);
Instance._frameHandlers.Add((handler,handlerName,Extension));
return this;
} }
public ExtensionFeatures RegisterFileSystem(TimelapseFileSystem fs,string name) public ExtensionFeatures RegisterFileSystem(TimelapseFileSystem fs,string name)
{ {
@ -32,6 +30,12 @@ public sealed class ExtensionFeatures
Instance._fs.Add((fs,name,Extension)); Instance._fs.Add((fs,name,Extension));
return this; return this;
} }
public ExtensionFeatures RegisterAsyncFrameHandler(Func<Image<Rgb24>,Task<bool>> handler,string handlerName,int priority)
{
if(!Valid || Instance == null) return this;
Instance._frameHandlers.Add((handler,handlerName,Extension,priority));
return this;
}
public ExtensionFeatures RegisterFrameHandler(Func<Image<Rgb24>,bool> handler,string handlerName) public ExtensionFeatures RegisterFrameHandler(Func<Image<Rgb24>,bool> handler,string handlerName)
{ {
if(!Valid) return this; if(!Valid) return this;
@ -46,6 +50,20 @@ public sealed class ExtensionFeatures
},handlerName); },handlerName);
return this; return this;
} }
public ExtensionFeatures RegisterFrameHandler(Func<Image<Rgb24>,bool> handler,string handlerName,int priority)
{
if(!Valid) return this;
RegisterAsyncFrameHandler(async(e)=>{
if(handler !=null)
{
return await Task.Run<bool>(()=>{
return handler(e);
});
}
return true;
},handlerName,priority);
return this;
}
public ExtensionFeatures RegisterExport(Func<IEnumerable<Image<Rgb24>>,string,CancellationToken,Task> export,FileFilter[] filter,string text) public ExtensionFeatures RegisterExport(Func<IEnumerable<Image<Rgb24>>,string,CancellationToken,Task> export,FileFilter[] filter,string text)
{ {
if(!Valid || Instance == null) return this; if(!Valid || Instance == null) return this;

View File

@ -56,6 +56,7 @@ public class ExtensionLoader
ext2.Instance=instance; ext2.Instance=instance;
instance.Extensions.Add(ext2); instance.Extensions.Add(ext2);
await ext2._Create(); await ext2._Create();
instance.SetPriority();
} }
} }
} }

View File

@ -187,7 +187,18 @@ internal class TimelapseSettings : Dialog
}; };
DynamicLayout lyt1=new DynamicLayout(); DynamicLayout lyt1=new DynamicLayout();
Scrollable scrollable=new Scrollable(); Scrollable scrollable=new Scrollable();
GroupBox szRow=new GroupBox {Text="Blank camera size"};
NumericStepper blankWidth=new NumericStepper{Value=api.Model.blankCameraWidth,MinValue=120,MaxValue=65535};
NumericStepper blankHeight =new NumericStepper{Value=api.Model.blankCameraHeight,MinValue=90,MaxValue=65535};
DynamicLayout lyt3=new DynamicLayout();
lyt3.BeginVertical();
lyt3.BeginHorizontal();
lyt3.Add(blankWidth,true);
lyt3.Add(blankHeight,true);
lyt3.EndHorizontal();
lyt3.EndVertical();
szRow.Content=lyt3;
DynamicLayout lyt2=new DynamicLayout(); DynamicLayout lyt2=new DynamicLayout();
scrollable.Content=lyt2; scrollable.Content=lyt2;
lyt2.BeginVertical(); lyt2.BeginVertical();
@ -206,6 +217,7 @@ internal class TimelapseSettings : Dialog
lyt2.AddRow(installExtension); lyt2.AddRow(installExtension);
lyt2.AddRow(enableExt); lyt2.AddRow(enableExt);
lyt2.AddRow(useCustomFilePickerForNativeFS); lyt2.AddRow(useCustomFilePickerForNativeFS);
lyt2.AddRow(szRow);
lyt2.AddRow(null); lyt2.AddRow(null);
lyt2.EndVertical(); lyt2.EndVertical();
@ -218,7 +230,8 @@ internal class TimelapseSettings : Dialog
saveBtn.Click += (sender,e)=>{ saveBtn.Click += (sender,e)=>{
api.Model.canBlockFrames=blockBoxState; api.Model.canBlockFrames=blockBoxState;
api.Model.canOverlayVideo=overLayBoxState; api.Model.canOverlayVideo=overLayBoxState;
api.Model.blankCameraWidth=(int)blankWidth.Value;
api.Model.blankCameraHeight=(int)blankHeight.Value;
api.Model.deniedBlockExtensions.Clear(); api.Model.deniedBlockExtensions.Clear();
api.Model.deniedOverlayExtensions.Clear(); api.Model.deniedOverlayExtensions.Clear();
api.Model.enableWebServer=enableServer.Checked.GetValueOrDefault(); api.Model.enableWebServer=enableServer.Checked.GetValueOrDefault();

View File

@ -11,8 +11,12 @@ public class TimelapseSettingsModel
timelapsePort=49290; timelapsePort=49290;
canBlockFrames=true; canBlockFrames=true;
addExtensionOnInstall=true; addExtensionOnInstall=true;
blankCameraHeight=720;
blankCameraWidth=1280;
} }
public int blankCameraWidth {get;set;}
public int blankCameraHeight {get;set;}
public bool useCustomFilePickerForNativeFS {get;set;} public bool useCustomFilePickerForNativeFS {get;set;}
public bool addExtensionOnInstall {get;set;} public bool addExtensionOnInstall {get;set;}
public bool canOverlayVideo {get;set;} public bool canOverlayVideo {get;set;}