private CopyItem ParseItem(PatternPathParser parser, string destinationPath, MetaData meta) { string sourcePath = meta.Path; CopyItem item = new CopyItem(); item.sourceInfo = new FileInfo(sourcePath); item.sourcePath = sourcePath; item.destinationPath = CalculateDestinationPath(parser, destinationPath, meta); item.meta = meta.Data; return item; }
private string CalculateDestinationPath(PatternPathParser parser, string destinationPath, MetaData meta) { string destinationPattern = null; switch (meta.Type) { case MetaType.Image: destinationPattern = DestinationPatternImage; break; case MetaType.Video: destinationPattern = DestinationPatternVideo; break; case MetaType.Music: destinationPattern = DestinationPatternAudio; break; default: throw new NotSupportedException(String.Format("Meta media type not supported: {0}", meta.Type)); } return parser.Parse(destinationPattern, destinationPath, meta); }
private async Task<List<CopyItem>> ParseItemsAsync(string sourcePath, string destinationPath, OrganizeSummary summary) { List<string> ignore = new List<string>(); if (IgnorePaths != null) ignore.AddRange(IgnorePaths); if (!sourcePath.DirectoryAreSame(destinationPath)) ignore.Add(destinationPath); IEnumerable<MetaData> data; try { MetaParserConfig config = new MetaParserConfig() { Recursive = Recursive, IgnorePaths = ignore }; data = await MetaParser.ParseAsync(sourcePath, config); } catch (MetaParseException ex) { throw new MediaOrganizerException("Failed to parse meta data", ex); } PatternPathParser parser = new PatternPathParser(Locale); parser.Preload(data); HashSet<string> files = new HashSet<string>(); HashSet<string> directories = new HashSet<string>(); HashSet<string> valid = new HashSet<string>(); HashSet<string> ignored = new HashSet<string>(); List<CopyItem> items = new List<CopyItem>(); foreach (MetaData meta in data) { if (workerAborted) break; string path = meta.Path; switch (meta.Type) { case MetaType.Directory: directories.Add(path); continue; case MetaType.File: files.Add(path); ignored.Add(path); continue; default: files.Add(path); break; } CopyItem item = ParseItem(parser, destinationPath, meta); items.Add(item); valid.Add(path); } summary.totalDirectories = directories.ToArray(); summary.totalFiles = files.ToArray(); summary.parsed = valid.ToArray(); summary.ignored = ignored.ToArray(); return items; }