コード例 #1
0
ファイル: FileMonitor.cs プロジェクト: virajs/feather
        /// <summary>
        /// Removes the non existing files data.
        /// </summary>
        protected virtual void RemoveNonExistingData()
        {
            SystemManager.RunWithElevatedPrivilegeDelegate elevDelegate = (p) =>
            {
                var fileMonitorDataManager = FileMonitorDataManager.GetManager();

                // finds all records containing file paths which no longer exists
                var nonExistingFilesData = fileMonitorDataManager.GetFilesData().Select(fd => fd.FilePath).ToArray()
                                           .Where(f => !File.Exists(f));

                if (nonExistingFilesData != null && nonExistingFilesData.Any())
                {
                    // remove all records in the lists
                    foreach (var filePath in nonExistingFilesData)
                    {
                        var resourceDirectoryTree = VirtualPathUtility.GetDirectory(filePath).Split('/');

                        if (resourceDirectoryTree.Length >= 2)
                        {
                            string       resourceFolder       = resourceDirectoryTree[resourceDirectoryTree.Length - 2];
                            IFileManager resourceFilesManager = this.GetResourceFileManager(resourceFolder);
                            resourceFilesManager.FileDeleted(filePath);
                        }
                    }
                }
            };

            SystemManager.RunWithElevatedPrivilege(elevDelegate);
        }
コード例 #2
0
        /// <summary>
        /// Removes the non existing files data.
        /// </summary>
        protected virtual void RemoveNonExistingData()
        {
            SystemManager.RunWithElevatedPrivilegeDelegate elevDelegate = (p) =>
            {
                var fileMonitorDataManager = FileMonitorDataManager.GetManager();

                // finds all records containing file paths which no longer exists
                var nonExistingFilesData = fileMonitorDataManager.GetFilesData().Select(fd => fd.FilePath).ToArray()
                                           .Where(f => !HostingEnvironment.VirtualPathProvider.FileExists(f));

                if (nonExistingFilesData != null && nonExistingFilesData.Any())
                {
                    // remove all records in the lists
                    foreach (var filePath in nonExistingFilesData)
                    {
                        var resourceDirectoryTree = VirtualPathUtility.GetDirectory(filePath).Split('/');

                        if (resourceDirectoryTree.Length >= 2)
                        {
                            var          packageFolderIdx     = Array.IndexOf(resourceDirectoryTree, PackageManager.PackagesFolder);
                            string       packageName          = packageFolderIdx > 0 && packageFolderIdx + 1 < resourceDirectoryTree.Length ? resourceDirectoryTree[packageFolderIdx + 1] : string.Empty;
                            string       resourceFolder       = resourceDirectoryTree[resourceDirectoryTree.Length - 2];
                            IFileManager resourceFilesManager = this.GetResourceFileManager(resourceFolder, filePath);
                            resourceFilesManager.FileDeleted(filePath, packageName);
                        }
                    }
                }
            };

            SystemManager.RunWithElevatedPrivilege(elevDelegate);
        }
コード例 #3
0
        /// <summary>
        /// Removes the non existing files data.
        /// </summary>
        private void RemoveNonExistingData()
        {
            SystemManager.RunWithElevatedPrivilegeDelegate elevDelegate = (p) =>
            {
                var fileMonitorDataManager = FileMonitorDataManager.GetManager();

                //finds all records containing file paths which no longer exists
                var nonExistingFilesData = fileMonitorDataManager.GetFilesData().Select(fd => fd.FilePath).ToArray()
                                           .Where(f => !File.Exists(f));

                if (nonExistingFilesData != null && nonExistingFilesData.Any())
                {
                    //remove all records in the lists
                    foreach (var filePath in nonExistingFilesData)
                    {
                        //converting the file path to a virtual file path
                        var virtualFilePath = this.ConvertToVirtualPath(filePath);

                        //get the directory tree part from the virtal path
                        var resourceDirectoryTree = VirtualPathUtility.GetDirectory(virtualFilePath).Split('/');

                        //the resource folder is actualy the file parent folder
                        string resourceFolder = resourceDirectoryTree[resourceDirectoryTree.Length - 2];

                        //get the resource file manager depending on its type
                        IFileManager resourceFilesManager = this.GetResourceFileManager(resourceFolder);

                        resourceFilesManager.FileDeleted(filePath);
                    }
                }
            };

            SystemManager.RunWithElevatedPrivilege(elevDelegate);
        }
コード例 #4
0
        /// <summary>
        /// Process the file if such is added to the existing folder.
        /// </summary>
        /// <param name="virtualFilePath">The virtual file path.</param>
        /// <param name="packageName">Name of the package.</param>
        public void FileAdded(string fileName, string filePath, string packageName = "")
        {
            var fileMonitorDataManager = FileMonitorDataManager.GetManager();

            var fileData = fileMonitorDataManager.GetFilesData().Where(file => file.FilePath.Equals(filePath, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();

            this.CreateTemplateAndFileData(fileName, filePath, packageName, fileMonitorDataManager, fileData);
        }
コード例 #5
0
        /// <summary>
        /// Process the file if such is added to the existing folder.
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="filePath"></param>
        /// <param name="packageName">Name of the package.</param>
        public void FileAdded(string fileName, string filePath, string packageName = "")
        {
            var fileMonitorDataManager = FileMonitorDataManager.GetManager();
            var fileData = fileMonitorDataManager.GetFilesData().Where(file => file.FilePath.Equals(filePath, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

            this.AddToToolboxAndFileData(fileMonitorDataManager, fileName, filePath, packageName, fileData);
            fileMonitorDataManager.SaveChanges();
        }
コード例 #6
0
ファイル: LayoutFileManager.cs プロジェクト: arna-09/feather
        /// <summary>
        /// Process the file if such is added to the existing folder.
        /// </summary>
        /// <param name="fileName">The virtual file name.</param>
        /// <param name="filePath">The virtual file path.</param>
        /// <param name="fileData">The file data</param>
        /// <param name="packageName">Name of the package.</param>
        public void FileAdded(string fileName, string filePath, FileData fileData, string packageName = "")
        {
            var fileMonitorDataManager = FileMonitorDataManager.GetManager();

            if (fileData == null && this.CreateTemplateAndFileData(fileName, filePath, packageName, fileMonitorDataManager, ref fileData))
            {
                fileMonitorDataManager.SaveChanges();
            }
        }
コード例 #7
0
        /// <summary>
        /// Process the file if such is added to the existing folder.
        /// </summary>
        /// <param name="fileName">Name of the file.</param>
        /// <param name="filePath">The file path.</param>
        /// <param name="fileData">The file data.</param>
        /// <param name="packageName">Name of the package.</param>
        public void FileAdded(string fileName, string filePath, FileData fileData, string packageName = "")
        {
            var fileMonitorDataManager = FileMonitorDataManager.GetManager();

            if (this.AddToToolboxAndFileData(fileMonitorDataManager, fileName, filePath, packageName, fileData))
            {
                fileMonitorDataManager.SaveChanges();
            }
        }
コード例 #8
0
        /// <summary>
        /// Reacts on file renaming
        /// </summary>
        /// <param name="newFileName">New name of the file.</param>
        /// <param name="oldFileName">Old name of the file.</param>
        /// <param name="newFilePath"></param>
        /// <param name="oldFilePath"></param>
        /// <param name="packageName">Name of the package.</param>
        public void FileRenamed(string newFileName, string oldFileName, string newFilePath, string oldFilePath, string packageName = "")
        {
            var fileMonitorDataManager = FileMonitorDataManager.GetManager();
            var fileData = fileMonitorDataManager.GetFilesData().Where(file => file.FilePath.Equals(oldFilePath, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

            if (this.AddToToolboxAndFileData(fileMonitorDataManager, newFileName, newFilePath, packageName, fileData, oldFileName))
            {
                this.WidgetRegistrator.UpdateControlData(newFileName, oldFileName);
                fileMonitorDataManager.SaveChanges();
            }
        }
コード例 #9
0
        /// <summary>
        /// Called on file deletion
        /// </summary>
        /// <param name="filePath">The file path.</param>
        /// <param name="packageName">Name of the package.</param>
        public void FileDeleted(string filePath, string packageName)
        {
            var fileMonitorDataManager = FileMonitorDataManager.GetManager();

            var fileData = fileMonitorDataManager.GetFilesData().Where(file => file.FilePath.Equals(filePath, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();

            if (fileData != null)
            {
                fileMonitorDataManager.Delete(fileData);
                fileMonitorDataManager.SaveChanges();
            }
        }
コード例 #10
0
        /// <summary>
        /// Called on file deletion
        /// </summary>
        /// <param name="filePath">The file path.</param>
        /// <param name="packageName">Name of the package.</param>
        public void FileDeleted(string filePath, string packageName)
        {
            var fileMonitorDataManager = FileMonitorDataManager.GetManager();
            var fileData = fileMonitorDataManager.GetFilesData().Where(file => file.FilePath.Equals(filePath, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

            if (fileData != null)
            {
                fileMonitorDataManager.Delete(fileData);
                fileMonitorDataManager.SaveChanges();
            }

            this.WidgetRegistrator.UnregisterToolboxItem(this.GetFileName(filePath));
        }
コード例 #11
0
        /// <summary>
        /// Reacts on file renaming
        /// </summary>
        /// <param name="newFileName">New name of the file.</param>
        /// <param name="oldFileName">Old name of the file.</param>
        /// <param name="newFilePath"></param>
        /// <param name="oldFilePath"></param>
        /// <param name="packageName">Name of the package.</param>
        public void FileRenamed(string newFileName, string oldFileName, string newFilePath, string oldFilePath, string packageName = "")
        {
            var fileMonitorDataManager = FileMonitorDataManager.GetManager();

            var fileData = fileMonitorDataManager.GetFilesData().Where(file => file.FilePath.Equals(oldFilePath, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();

            if (fileData != null)
            {
                this.CreateTemplateAndFileData(newFileName, newFilePath, packageName, fileMonitorDataManager, fileData);
            }
            else
            {
                this.FileAdded(newFileName, newFilePath, packageName);
            }
        }
コード例 #12
0
        /// <summary>
        /// Reacts on file renaming
        /// </summary>
        /// <param name="newFileName">New name of the file.</param>
        /// <param name="oldFileName">Old name of the file.</param>
        /// <param name="newFilePath"></param>
        /// <param name="oldFilePath"></param>
        /// <param name="packageName">Name of the package.</param>
        public void FileRenamed(string newFileName, string oldFileName, string newFilePath, string oldFilePath, string packageName = "")
        {
            var fileMonitorDatamanager = FileMonitorDataManager.GetManager();

            var fileData = fileMonitorDatamanager.GetFilesData().Where(file => file.FilePath.Equals(oldFilePath, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();

            if (fileData != null)
            {
                if (this.IsFileInValidFolder(newFilePath, packageName))
                {
                    string templateName = string.Empty;

                    var extension = newFileName.Split('.').LastOrDefault();

                    var fileNameWithoutExtension = newFileName.Substring(0, newFileName.Length - (extension.Length + 1));

                    var viewFileExtensions = this.GetViewExtensions();

                    if (viewFileExtensions.Contains(extension, StringComparer.InvariantCultureIgnoreCase))
                    {
                        if (string.IsNullOrEmpty(packageName))
                        {
                            templateName = fileNameWithoutExtension;
                        }
                        else
                        {
                            templateName = packageName + "." + fileNameWithoutExtension;
                        }

                        fileData.FilePath = newFilePath;
                        fileData.FileName = newFileName;

                        fileMonitorDatamanager.SaveChanges();

                        this.CreateTemplate(templateName);
                    }
                }
            }
            else
            {
                this.FileAdded(newFileName, newFilePath, packageName);
            }
        }
コード例 #13
0
        /// <summary>
        /// Processes all files under a directory, including subfolders.
        /// </summary>
        /// <param name="dirInfo">The directory information.</param>
        private void ProcessDirecotryFiles(DirectoryInfo dirInfo)
        {
            var files = dirInfo.GetFiles("*", SearchOption.AllDirectories);

            var fileManager   = FileMonitorDataManager.GetManager();
            var fileDatasList = fileManager.GetFilesData().ToList();

            foreach (var file in files)
            {
                try
                {
                    var virtualFilePath = this.ConvertToVirtualPath(file.FullName);

                    // Get the file monitoring data for the files that are already monitored. If the file data exist we don't have to create new monitoring for this file.
                    var fileData = fileDatasList.Where(x => x.FilePath.Equals(virtualFilePath, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

                    this.FileChanged(file.FullName, FileChangeType.Created, fileData: fileData);
                }
                catch (IOException ex)
                {
                    Log.Write(string.Format(System.Globalization.CultureInfo.InvariantCulture, "Exception occurred while processing the file named {0}, details: {1}", file.Name, ex));
                }
            }
        }