public WorkspaceScanner(string pNewPath, string pPojectDir, string pFinalDir, VideoInfoProvider pVideoInfoProvider)
 {
     NewPath           = pNewPath;
     ProjectDir        = pPojectDir;
     FinalDir          = pFinalDir;
     VideoInfoProvider = pVideoInfoProvider;
 }
Example #2
0
        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();
        }
Example #4
0
 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);
     }
 }
Example #5
0
        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);
            };
        }
Example #6
0
        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;
        }
Example #7
0
        /// <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;
                }
            });
        }