public WorkspaceScanner(string pNewPath, string pPojectDir, string pFinalDir, VideoInfoProvider pVideoInfoProvider) { NewPath = pNewPath; ProjectDir = pPojectDir; FinalDir = pFinalDir; VideoInfoProvider = pVideoInfoProvider; }
private static void Update(WorkspaceContainer pContainer, VideoInfoProvider pVideoInfoProvider, WorkspaceType pType, FSEventInfo pEvent) { var objWSItem = WorkspaceItemMatcher.FindMatch(pContainer.GetAll(), pType, pEvent.Args.FullPath); if (objWSItem != null) { switch (pType) { case WorkspaceType.Final: var path = pEvent.Args.FullPath; if (pEvent.Args.ChangeType != WatcherChangeTypes.Deleted) { if (File.GetAttributes(path).HasFlag(FileAttributes.Directory)) { if (objWSItem.Project != null) { if (File.Exists(objWSItem.Project.TargetPath)) { path = objWSItem.Project.TargetPath; } } } } _ = objWSItem.UpdateFinal( File.Exists(path) ? pVideoInfoProvider.Get(path) : null ); break; case WorkspaceType.New: _ = objWSItem.UpdateNew(pVideoInfoProvider.Get(pEvent.Args.FullPath)); break; case WorkspaceType.Project: _ = objWSItem.UpdateProject(new MLT.MLTProject(pEvent.Args.FullPath, pVideoInfoProvider)); break; } } else { switch (pType) { case WorkspaceType.Final: pContainer.Add(new WorkspaceItem(null, null, pVideoInfoProvider.Get(pEvent.Args.FullPath))); break; case WorkspaceType.New: pContainer.Add(new WorkspaceItem(null, pVideoInfoProvider.Get(pEvent.Args.FullPath), null)); break; case WorkspaceType.Project: pContainer.Add(new WorkspaceItem(new MLT.MLTProject(pEvent.Args.FullPath, pVideoInfoProvider), null, null)); break; } } }
public Workspace(string pNewDirectory, string pFinalDirectory, string pProjectDirectory, string pTempDir, VideoInfoProvider pVideoInfoProvider) { VideoInfoProvider = pVideoInfoProvider; NewDirectory = pNewDirectory; FinalDirectory = pFinalDirectory; ProjectDirectory = pProjectDirectory; TempDirectory = pTempDir; Init(); }
internal MeltConfig(MLTProject pProject, VideoInfoProvider pVideoInfoProvider) { VideoInfoProvider = pVideoInfoProvider; Project = pProject; try { var ProjectTempDir = Path.Combine(Settings.TempDirectory, Project.ID.ToString()); if (!Directory.Exists(ProjectTempDir)) { _ = Directory.CreateDirectory(ProjectTempDir); } LoadConfig(); DetectSource(); } catch (Exception ex) { //log and ignore? Log.Error(ex); } }
public MLTProject(string pFullPath, VideoInfoProvider pVideoInfoCache) { VideoInfoProvider = pVideoInfoCache; ID = Guid.NewGuid(); Directory.CreateDirectory(Path.Combine(Settings.TempDirectory, ID.ToString())); _objProjectFile = new FileInfo(pFullPath); Config = new MeltConfig(this, VideoInfoProvider); if (TargetExists) { _objTargetInfo = VideoInfoProvider.Get(TargetPath); } if (SourceExists) { _objSourceInfo = VideoInfoProvider.Get(SourcePath); } Job = new MeltJob(this); // -- ToDo: pass null or the config for the job, not the project itself Job.ProgressChanged += (object sender, System.EventArgs e) => { ProjectChanged?.Invoke(sender, this); }; Job.StatusChanged += (object sender, JobStatus e) => { Log.Info("Project was changed - notify everyone"); switch (e) { case JobStatus.Failed: case JobStatus.Success: Reload(); break; case JobStatus.Paused: case JobStatus.Running: case JobStatus.Scheduled: case JobStatus.UnScheduled: break; } ProjectChanged?.Invoke(sender, this); }; }
public WorkspaceUpdateCollector(WorkspaceContainer pContainer, WorkspaceMonitor pMonitor, VideoInfoProvider pVideoInfoProvider) { Container = pContainer; Monitor = pMonitor; VideoInfoProvider = pVideoInfoProvider; Updates = new List <WorkspaceUpdatedEventArgs>(); _objWaitTimer = new Timer(2000); _objWaitTimer.Elapsed += (sender, e) => { _objWaitTimer.Stop(); lock (Updates) { if (Updates.Count > 0) { var lstCopy = new List <WorkspaceUpdatedEventArgs>(Updates); Updates.Clear(); Updated?.Invoke(this, lstCopy); } } }; _objWaitTimer.AutoReset = false; }
/// <summary> /// ToDo: Pass videoinfoprovider /// </summary> /// <param name="pContainer"></param> /// <param name="pUpdateType"></param> /// <param name="pEvents"></param> public static void Apply(WorkspaceContainer pContainer, VideoInfoProvider pVideoInfoProvider, WorkspaceType pUpdateType, List <FSEventInfo> pEvents) { pEvents.ForEach(e => { switch (e.Args.ChangeType) { case WatcherChangeTypes.Changed: case WatcherChangeTypes.Created: Update(pContainer, pVideoInfoProvider, pUpdateType, e); break; case WatcherChangeTypes.Deleted: Delete(pContainer, pUpdateType, e); break; case WatcherChangeTypes.Renamed: throw new NotImplementedException(); //Delete(pContainer, pUpdateType, e); //Update(pContainer, pVideoInfoProvider, pUpdateType, e); //break; } }); }