public ContactDirectory WatchDirecotry(DirectoryMetadata Directory) { ContactDirectory tempDirectory = new ContactDirectory(DirectoriesManager, Directory); tempDirectory.StartWatching(); return(tempDirectory); }
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>(); } }
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; }
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); } }