private SourceTrack CreateSourceTrackForFile( Artist artist, Source dbSource, Vendor.ArchiveOrg.Metadata.Metadata meta, Vendor.ArchiveOrg.Metadata.File file, int previousTrackNumber, IDictionary <string, Vendor.ArchiveOrg.Metadata.File> flacFiles, SourceSet set = null ) { int trackNum = previousTrackNumber + 1; var title = !String.IsNullOrEmpty(file.title) ? file.title : file.original; var flac = flacFiles.GetValue(file.original); return(new SourceTrack() { title = title, track_position = trackNum, source_set_id = set == null ? -1 : set.id, source_id = dbSource.id, duration = file.length. Split(':'). Reverse(). Select((v, k) => (int)Math.Round(Math.Max(1, 60 * k) * double.Parse(v, NumberStyles.Any))). Sum(), slug = Slugify(title), mp3_url = $"https://archive.org/download/{meta.identifier}/{file.name}", mp3_md5 = file.md5, flac_url = flac == null ? null : $"https://archive.org/download/{meta.identifier}/{flac.name}", flac_md5 = flac?.md5, updated_at = dbSource.updated_at }); }
private IEnumerable <SourceTrack> CreateSourceTracksForFiles( Artist artist, Source dbSource, Vendor.ArchiveOrg.Metadata.Metadata meta, IEnumerable <Vendor.ArchiveOrg.Metadata.File> mp3Files, IDictionary <string, Vendor.ArchiveOrg.Metadata.File> flacFiles, SourceSet set = null ) { var trackNum = 0; return(mp3Files. Where(file => { return !( (file.title == null && file.original == null && file.name == null) || file.length == null || file.name == null ); }). OrderBy(file => file.name). Select(file => { var r = CreateSourceTrackForFile(artist, dbSource, meta, file, trackNum, flacFiles, set); trackNum = r.track_position; return r; }) ); }