public virtual bool Equals(MikuDbAlbum another) { if (another == null) return false; if (ReferenceEquals(this, another)) return true; return this.Id == another.Id; }
public MikuDbAlbumContract(MikuDbAlbum album) : this() { ParamIs.NotNull(() => album); Created = album.Created; Data = XmlHelper.DeserializeFromXml<ImportedAlbumDataContract>(album.Data); Id = album.Id; SourceUrl = album.SourceUrl; Status = album.Status; Title = album.Title; Selected = (Status == AlbumStatus.New); }
public virtual bool Equals(MikuDbAlbum another) { if (another == null) { return(false); } if (ReferenceEquals(this, another)) { return(true); } if (Id == 0) { return(false); } return(this.Id == another.Id); }
public AlbumImportResult ImportOne(string url) { PermissionContext.VerifyPermission(PermissionToken.MikuDbImport); var existing = HandleQuery(session => session.Query<MikuDbAlbum>().FirstOrDefault(a => a.SourceUrl == url)); if (existing != null) return new AlbumImportResult {Message = "Album with that URL has already been imported"}; var imported = new AlbumImporters(new WebPictureDownloader()).ImportOne(url); if (imported.AlbumContract == null) return imported; HandleTransaction(session => { SysLog(string.Format("importing album with URL '{0}'", url)); var newAlbum = new MikuDbAlbum(imported.AlbumContract); session.Save(newAlbum); imported.AlbumContract.Id = newAlbum.Id; }); return imported; }
public int ImportFromFile(Stream stream) { PermissionContext.VerifyPermission(PermissionToken.MikuDbImport); var parser = new AlbumFileParser(); var imported = parser.Parse(stream); return HandleTransaction(session => { SysLog(string.Format("importing album from file with name '{0}'", imported.Title)); var newAlbum = new MikuDbAlbum(imported); session.Save(newAlbum); return newAlbum.Id; }); }
public int ImportNew() { PermissionContext.VerifyPermission(PermissionToken.MikuDbImport); MikuDbAlbumContract[] existing = HandleQuery(session => session.Query<MikuDbAlbum>().Select(a => new MikuDbAlbumContract(a)).ToArray()); var importer = new MikuDbAlbumImporter(existing); var imported = importer.ImportNew(); return HandleTransaction(session => { AuditLog("importing new albums from MikuDB", session); //var all = session.Query<MikuDbAlbum>(); //foreach (var album in all) // session.Delete(album); var newAlbums = new List<MikuDbAlbum>(); foreach (var contract in imported) { var newAlbum = new MikuDbAlbum(contract.AlbumContract); session.Save(newAlbum); newAlbums.Add(newAlbum); } return newAlbums.Count; }); }
private InspectedAlbum Inspect(ISession session, MikuDbAlbum imported, ImportedAlbumOptions options) { Album albumMatch; var foundAlbums = FindAlbums(session, imported); switch (options.MergedAlbumId) { case null: albumMatch = foundAlbums.FirstOrDefault(); break; case 0: albumMatch = null; break; default: albumMatch = session.Load<Album>(options.MergedAlbumId); if (!foundAlbums.Contains(albumMatch)) foundAlbums.Add(albumMatch); break; } var importedContract = new MikuDbAlbumContract(imported); var data = importedContract.Data; var artists = data.ArtistNames.Concat(data.VocalistNames).Concat(!string.IsNullOrEmpty(data.CircleName) ? new[] { data.CircleName } : new string[] {}) .Select(a => InspectArtist(session, a)) .ToArray(); var matchedArtists = artists.Where(a => a.ExistingArtist != null).Select(a => a.ExistingArtist).ToArray(); var tracks = data.Tracks.Select(t => InspectTrack(session, t, matchedArtists, albumMatch)).ToArray(); var result = new InspectedAlbum(importedContract); result.MergeTracks = options.MergeTracks ?? true; if (albumMatch != null) { result.MergedAlbum = new AlbumContract(albumMatch, PermissionContext.LanguagePreference); result.MergedAlbumId = albumMatch.Id; } result.ExistingAlbums = foundAlbums.Select(a => new AlbumContract(a, PermissionContext.LanguagePreference)) .Concat(new[] { new AlbumContract { Name = "Nothing" } }).ToArray(); result.Artists = artists.Select(a => a.InspectedArtist).ToArray(); result.Tracks = tracks; return result; }
private List<Album> FindAlbums(ISession session, MikuDbAlbum imported) { var webLinkMatches = session.Query<AlbumWebLink>() .Where(w => w.Url == imported.SourceUrl) .Select(w => w.Album) .ToArray(); var nameMatchDirect = session.Query<Album>() .Where(s => !s.Deleted && ((s.Names.SortNames.English == imported.Title) || (s.Names.SortNames.Romaji == imported.Title) || (s.Names.SortNames.Japanese == imported.Title))) .ToArray(); var nameMatchAdditional = session.Query<AlbumName>() .Where(m => !m.Album.Deleted && m.Value == imported.Title) .Select(a => a.Album) .ToArray(); return webLinkMatches.Union(nameMatchDirect).Union(nameMatchAdditional).ToList(); }
public AlbumImportResult ImportOne(string url) { PermissionContext.VerifyPermission(PermissionToken.MikuDbImport); MikuDbAlbumContract[] existing = HandleQuery(session => session.Query<MikuDbAlbum>().Select(a => new MikuDbAlbumContract(a)).ToArray()); var importer = new AlbumImporter(existing); var imported = importer.ImportOne(url); if (imported.AlbumContract == null) return imported; HandleTransaction(session => { SysLog(string.Format("importing album from MikuDB with URL '{0}'", url)); var newAlbum = new MikuDbAlbum(imported.AlbumContract); session.Save(newAlbum); }); return imported; }