95 lines
3.0 KiB
C#
95 lines
3.0 KiB
C#
|
using System;
|
||
|
using System.Linq;
|
||
|
using System.Threading.Tasks;
|
||
|
using ElectronNET.API;
|
||
|
using SixLabors.ImageSharp;
|
||
|
using SixLabors.ImageSharp.PixelFormats;
|
||
|
using System.IO;
|
||
|
using Timelapse.Api;
|
||
|
using Microsoft.AspNetCore.Components;
|
||
|
using SixLabors.ImageSharp.Processing;
|
||
|
namespace Timelapse.Data
|
||
|
{
|
||
|
public class ExtensionProjectService
|
||
|
{
|
||
|
|
||
|
public static RecentFileService RecentFile {get;set;}
|
||
|
public async Task SendImageAsync(Image<Rgb24> imageFrame)
|
||
|
{
|
||
|
imageFrame.Mutate(x=> x.Resize(new Size(Project.Width,Project.Height)));
|
||
|
await Extensions.OnNewFrame(imageFrame);
|
||
|
await imageFrame.SaveAsPngAsync(Path.Combine(ProjectDirectory,"Sections",Project.CurrentSection,$"{FrameIndex++}.png"));
|
||
|
}
|
||
|
public string ProjectFileName {get; internal set;}
|
||
|
public string ProjectDirectory { get {return Path.Combine(Path.GetDirectoryName(ProjectFileName),Path.GetFileNameWithoutExtension(ProjectFileName));} }
|
||
|
public int FrameIndex {get;internal set;}
|
||
|
public bool IsProjectLoaded {get {return Project!=null;}}
|
||
|
|
||
|
public TimelapseProject Project {get;set;}
|
||
|
|
||
|
public void StartRecording()
|
||
|
{
|
||
|
//start recording
|
||
|
|
||
|
//tell extensions
|
||
|
Extensions.OnStartRecording();
|
||
|
}
|
||
|
public void EnableOneX()
|
||
|
{
|
||
|
//enable oneX
|
||
|
|
||
|
//tell extensions
|
||
|
Extensions.OnEnableOneX();
|
||
|
}
|
||
|
public void DisableOneX()
|
||
|
{
|
||
|
//disable oneX
|
||
|
|
||
|
//tell extensions
|
||
|
Extensions.OnDisableOneX();
|
||
|
}
|
||
|
public void StopRecording()
|
||
|
{
|
||
|
//stop recording
|
||
|
|
||
|
//tell extensions
|
||
|
Extensions.OnStopRecording();
|
||
|
}
|
||
|
public void LoadProject(string path)
|
||
|
{
|
||
|
RecentFile.Add(path);
|
||
|
|
||
|
SaveProject();
|
||
|
|
||
|
ProjectFileName = path;
|
||
|
TimelapseProject project= Newtonsoft.Json.JsonConvert.DeserializeObject<TimelapseProject>(File.ReadAllText(path));
|
||
|
if(string.IsNullOrWhiteSpace(project.CurrentSection))
|
||
|
{
|
||
|
project.CurrentSection="Default";
|
||
|
}
|
||
|
string sectionPath = Path.Combine(ProjectDirectory,"Sections",project.CurrentSection);
|
||
|
if(!Directory.Exists(sectionPath))
|
||
|
{
|
||
|
Directory.CreateDirectory(sectionPath);
|
||
|
}
|
||
|
int count = Directory.GetFiles(sectionPath,"*.png").Length+1;
|
||
|
FrameIndex=count;
|
||
|
Project=project;
|
||
|
Extensions.OnLoadProject(project);
|
||
|
|
||
|
}
|
||
|
public void SaveProject()
|
||
|
{
|
||
|
if(IsProjectLoaded)
|
||
|
{
|
||
|
SaveProject(ProjectFileName,Project);
|
||
|
}
|
||
|
}
|
||
|
public void SaveProject(string fileloc,TimelapseProject prj)
|
||
|
{
|
||
|
string json= Newtonsoft.Json.JsonConvert.SerializeObject(prj);
|
||
|
File.WriteAllText(fileloc,json);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|