Esempio n. 1
0
        public virtual bool Equals(MikuDbAlbum another)
        {
            if (another == null)
                return false;

            if (ReferenceEquals(this, another))
                return true;

            return this.Id == another.Id;
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
		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;

		}
Esempio n. 5
0
		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;

			});

		}
Esempio n. 6
0
		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;

			});

		}
Esempio n. 7
0
		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;

		}
Esempio n. 8
0
		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();

		}
Esempio n. 9
0
        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;
        }