Exemple #1
0
        public ContactDirectory WatchDirecotry(DirectoryMetadata Directory)
        {
            ContactDirectory tempDirectory = new ContactDirectory(DirectoriesManager, Directory);

            tempDirectory.StartWatching();
            return(tempDirectory);
        }
Exemple #2
0
            public static async Task <DirectoryMetadata> Load(IBinaryDataAccessor data, IvfcLevelHeader header, int offsetOffDirTable)
            {
                var offset   = header.DirectoryMetadataTableOffset + offsetOffDirTable;
                var metadata = new DirectoryMetadata(data, header);

                metadata.ParentDirectoryOffset = await data.ReadInt32Async(offset + 0);

                metadata.SiblingDirectoryOffset = await data.ReadInt32Async(offset + 4);

                metadata.FirstChildDirectoryOffset = await data.ReadInt32Async(offset + 8);

                metadata.FirstFileOffset = await data.ReadInt32Async(offset + 0xC);

                metadata.NextDirectoryOffset = await data.ReadInt32Async(offset + 0x10);

                metadata.NameLength = await data.ReadInt32Async(offset + 0x14);

                if (metadata.NameLength > 0)
                {
                    metadata.Name = Encoding.Unicode.GetString(await data.ReadArrayAsync(offset + 0x18, Math.Min(metadata.NameLength, MaxFilenameLength)));
                }

                await Task.WhenAll(
                    metadata.LoadChildDirectories(),
                    metadata.LoadChildFiles()
                    );

                return(metadata);
            }
        public async Task SaveMetadata(IMetadata file, bool replace = false)
        {
            var task = Task.Run(() =>
            {
                var directoryFile = new DirectoryMetadata()
                {
                    Id         = file.Id,
                    FileName   = file.FileName,
                    MimeType   = file.MimeType,
                    Size       = file.FileSize,
                    UploadedBy = "CurrentUser",
                    DateAdded  = DateTime.Now.Date
                };

                if (replace)
                {
                    context.DirectoryMetadata.ReplaceOneAsync(x => x.Id.Equals(file.Id), directoryFile);
                }
                else
                {
                    context.DirectoryMetadata.InsertOneAsync(directoryFile);
                }
            });

            await task;
        }
        /// <summary>
        /// Метод содержит конструкции, по созданию всех возможных вариаций запросов к сервису справочников (DirectoryService)
        /// </summary>
        public static async Task TestDirectoryServiceApiAsync(UrlSettings urlSettings)
        {
            using (var client = new HttpClient())
            {
                HttpResponseMessage response;

                // Запросим и десериализуем метаданные по справочникам:
                // Для справочника "Объекты Строительства"
                response = await client.GetAsync($"{urlSettings.ConstructionObjectUrl}GetMetadata");

                DirectoryMetadata MetadataDirectoryOfConstructionObjects = await response.Content.ReadAsAsync <DirectoryMetadata>();

                // Для справочника "Версии Данных"
                response = await client.GetAsync($"{urlSettings.DataVersionUrl}GetMetadata");

                DirectoryMetadata MetadataDirectoryOfDataVersions = await response.Content.ReadAsAsync <DirectoryMetadata>();


                // TODO: Полученные метаданные можно сравнивать с метаданными объектов этого сервиса
                // и в случае несовпадения, как-то уведомлять разработчиков о необх. поправки структуры классов.



                // Запрашиваем весь справочник "Объекты Строительства"
                response = await client.GetAsync($"{urlSettings.ConstructionObjectUrl}GetAllDirectory");

                IEnumerable <ConstructionObject> сonstructionObjects = await response.Content.ReadAsAsync <IEnumerable <ConstructionObject> >();

                // Запрашиваем весь справочник "Версии Данных"
                response = await client.GetAsync($"{urlSettings.DataVersionUrl}GetAllDirectory");

                IEnumerable <DataVersion> dataVersions = await response.Content.ReadAsAsync <IEnumerable <DataVersion> >();

                // Запросим Объект Строительства с идом = 2:
                int indexOfConstructionObject = 2;

                response = await client.GetAsync($"{urlSettings.ConstructionObjectUrl}Elements/{indexOfConstructionObject}");

                ConstructionObject сonstructionObject = await response.Content.ReadAsAsync <ConstructionObject>();


                // Запросим Версию Данных с идом = 3:
                int indexOfDataVersion = 3;

                response = await client.GetAsync($"{urlSettings.DataVersionUrl}Elements/{indexOfConstructionObject}");

                DataVersion dataVersion = await response.Content.ReadAsAsync <DataVersion>();


                // Попробуем запросить Версию Данных с идом = 88:
                indexOfDataVersion = 88;

                response = await client.GetAsync($"{urlSettings.DataVersionUrl}Elements/{indexOfDataVersion}");

                // dataVersionEmpty будет = null.
                DataVersion dataVersionEmpty = await response.Content.ReadAsAsync <DataVersion>();
            }
        }
Exemple #5
0
            public async Task LoadChildDirectories()
            {
                ChildDirectories = new List <DirectoryMetadata>();

                if (FirstChildDirectoryOffset > 0)
                {
                    var currentChild = await DirectoryMetadata.Load(LevelData, IvfcLevelHeader, FirstChildDirectoryOffset);

                    ChildDirectories.Add(currentChild);
                    while (currentChild.SiblingDirectoryOffset > 0)
                    {
                        currentChild = await DirectoryMetadata.Load(LevelData, IvfcLevelHeader, currentChild.SiblingDirectoryOffset);

                        ChildDirectories.Add(currentChild);
                    }
                }
            }
        public async Task SaveMetadata(Metadata file)
        {
            var task = Task.Run(() =>
            {
                var directoryFile = new DirectoryMetadata()
                {
                    Id         = file.Id,
                    FileName   = file.FileName,
                    MimeType   = file.MimeType,
                    Size       = file.FileSize,
                    UploadedBy = "CurrentUser",
                    DateAdded  = DateTime.Now.Date
                };
                context.DirectoryMetadata.InsertOneAsync(directoryFile);
            });

            await task;
        }
Exemple #7
0
            public async Task Initialize()
            {
                DirectoryHashKeyTable = await LevelData.ReadArrayAsync(Header.DirectoryHashTableOffset, Header.DirectoryHashTableLength);

                RootDirectoryMetadataTable = await DirectoryMetadata.Load(LevelData, Header, 0);

                FileHashKeyTable = await LevelData.ReadArrayAsync(Header.FileHashTableOffset, Header.FileHashTableLength);

                var rootFiles       = new List <FileMetadata>();
                var currentRootFile = await FileMetadata.Load(LevelData, Header, 0);

                if (currentRootFile.Name.Length > 0)
                {
                    rootFiles.Add(currentRootFile);
                    while (currentRootFile.NextSiblingFileOffset > 0)
                    {
                        currentRootFile = await FileMetadata.Load(LevelData, Header, currentRootFile.NextSiblingFileOffset);

                        rootFiles.Add(currentRootFile);
                    }
                }
                RootFiles = rootFiles.ToArray();
            }
        /// <summary>
        /// получение полного пути к элементу через свойство Tag в дереве
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        private string GetFullPathToDirectory(RoutedEventArgs e)
        {
            //получение выбранного элемента в дереве
            TreeViewItem item = (TreeViewItem)e.Source;

            //если тег выбранного элемента является директорией
            if (item.Tag is DirectoryMetadata)
            {
                //получение директории по указанному тегом
                DirectoryMetadata directoryMetadata = (DirectoryMetadata)item.Tag;

                //и возвращение ее полного имени
                return(directoryMetadata.FullPath);
            }
            //иначе, если же тег является типом string
            else if (item.Tag is string)
            {
                //вернуть полученный тег
                return((string)item.Tag);
            }

            //иначе вернуть пустую строку
            return(string.Empty);
        }
        /// <summary>
        /// отправка полученных директорий и файлов в поток к клиенту
        /// </summary>
        /// <param name="task">запрос на получение директорий</param>
        /// <param name="networkStream">сетевой поток клиента</param>
        private void SendDirectoryDataToClient(GetDirectoryContentTask task, NetworkStream networkStream)
        {
            try
            {
                //получение коллекцию директорий по запросу
                List <DirectoryInfo> directories = this.GetDirectories(task.Directory);

                //создание нового экземпляра для сведений о директории
                DirectoryContent directoryContent = new DirectoryContent();

                //проход по каждой директории в коллекции директорий
                foreach (var dir in directories)
                {
                    //проверка, если файл имеет флаг директории и не является
                    if (dir.Attributes.HasFlag(FileAttributes.Directory) &&
                        !dir.Attributes.HasFlag(FileAttributes.Hidden) &&//скрытым
                        !dir.Attributes.HasFlag(FileAttributes.System) &&//системным
                        !dir.Attributes.HasFlag(FileAttributes.Temporary))   //временным
                    {
                        //создать Data Object Model директории
                        DirectoryMetadata directoryMetadata = new DirectoryMetadata()
                        {
                            FullPath    = dir.FullName,
                            Name        = dir.Name,
                            LastChanged = dir.LastWriteTime,
                        };

                        //добавление в лист сведений о директории
                        directoryContent.Directories.Add(directoryMetadata);
                    }
                }

                //получение коллекции файлов
                List <FileInfo> files = this.GetFiles(task.Directory);

                //прохождение по каждому файлу в коллекции файлов
                foreach (var file in files)
                {
                    //если файл не является
                    if (!file.Attributes.HasFlag(FileAttributes.Hidden) &&//скрытым
                        !file.Attributes.HasFlag(FileAttributes.System) &&//системным
                        !file.Attributes.HasFlag(FileAttributes.Temporary))   //временным
                    {
                        //создать Data Object Model файла
                        DirectoryMetadata fileMetadata = new DirectoryMetadata()
                        {
                            FullPath    = file.FullName,
                            Name        = file.Name,
                            LastChanged = file.LastWriteTime,
                        };

                        //добавление в лист сведений о файле
                        directoryContent.Files.Add(fileMetadata);
                    }
                }

                //отправка клиенту запроса файлов и директорий
                networkStream.Send(directoryContent);
            }
            catch (UnauthorizedAccessException) { }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }