using System; using System.Collections.Generic; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using System.IO; using System.Net; namespace Timelapse.Api { public abstract class TimelapseExtension { internal string __id; internal bool _recording; internal bool _onex; protected bool Recording {get {return _recording;}set{if(value){StartRecording();} else{StopRecording();}}} protected bool OneX {get {return _onex;}set{if(value) {EnableOneX();} else {DisableOneX();} }} public abstract void OnInit(); public string Name {get;internal set;} public virtual async Task OnNewFrame(Image frame) { } public virtual void OnLoadProject(TimelapseProject project) { } /// ///URL for in html pages /// public string GET_URL(string href) { return $"/api/Extension/GetExtensionPage?extId={WebUtility.UrlEncode(__id)}&subPage={WebUtility.UrlEncode(href)}"; } protected string GetExtensionProjectData() { if(!Extensions.Callbacks.ProjectLoaded()) { return null; } string p = Path.Combine(Extensions.Callbacks.GetProjectDirectoryLocation(),"ExtensionData",__id); Directory.CreateDirectory(p); return p; } protected string GetExtensionData() { string p = Path.Combine(Extensions.UserData,"ExtensionData",__id); Directory.CreateDirectory(p); return p; } public bool IsProjectLoaded() { return Extensions.Callbacks.ProjectLoaded(); } public virtual void OnStartRecording() { } public virtual void OnStopRecording() { } protected void StartRecording() { Extensions.Callbacks.StartRecording(); } protected void StopRecording() { Extensions.Callbacks.StopRecording(); } protected void EnableOneX() { Extensions.Callbacks.EnableOneX(); } protected void DisableOneX() { Extensions.Callbacks.DisableOneX(); } public virtual void OnEnableOneX() { } public virtual void OnDisableOneX() { } public virtual async Task OnHandleRequest(string path) { return new NotFoundResult(); } } }