public static ArchiveFileAbstraction Create(string fileName, string entryName, int index) { var fileAbstraction = new ArchiveFileAbstraction(fileName, entryName, index); fileAbstraction.Open(); return(fileAbstraction); }
protected virtual async Task Create(IntPtr archive, string path, List <T> items) { var count = default(int); var metaDataSource = this.MetaDataSourceFactory.Create(); if (Archive.GetEntryCount(archive, out count)) { for (var a = 0; a < count; a++) { var entry = default(Archive.ArchiveEntry); if (Archive.GetEntry(archive, out entry, a)) { if (!this.Output.IsSupported(entry.path)) { continue; } var fileName = ArchiveUtils.CreateUrl(path, entry.path); var item = new T() { //An archive is a virtual directory I suppose? Not sure if this will cause any problems. DirectoryName = path, FileName = fileName }; if (this.MetaData.Value) { try { retry: using (var fileAbstraction = ArchiveFileAbstraction.Create(path, entry.path, a)) { if (fileAbstraction.IsOpen) { item.MetaDatas = ( await metaDataSource.GetMetaData(fileAbstraction).ConfigureAwait(false) ).ToList(); switch (fileAbstraction.Result) { case ArchiveEntry.RESULT_PASSWORD_REQUIRED: Logger.Write(this, LogLevel.Warn, "Invalid password for \"{0}\".", path); if (this.PasswordBehaviour != null && !this.PasswordBehaviour.WasCancelled(path)) { this.PasswordBehaviour.Reset(path); goto retry; } break; } } } } catch (Exception e) { Logger.Write(this, LogLevel.Debug, "Failed to read meta data from file \"{0}\": {1}", path, e.Message); } } this.EnsureMetaData(a, entry, item); items.Add(item); } else { //TODO: Warn. } } } else { //TODO: Warn. } }