Ejemplo n.º 1
0
        public void Add(uint id, Artist artist)
        {
            if (id == 0)
                throw new ArgumentException("id cannot be zero");

            if (artistsById.ContainsKey(id))
                return;

            artistsById.Add(id, artist);
            artists.Add(artist);
        }
Ejemplo n.º 2
0
        private void SaveArtistTags(Artist artist, uint id)
        {
            foreach (var existingTag in cache.GetTagsByArtist(id))
            {
                var existingId = cache.GetArtistTagId(existingTag);
                if (existingId > 0 && !artist.Tags.Contains(existingTag))
                {
                    database.DeleteArtistTag(connection, existingId);
                    cache.Remove(artist, existingTag);
                }
            }

            foreach (var tag in artist.Tags)
            {
                SaveArtistTag(artist, tag);
            }
        }
Ejemplo n.º 3
0
        private void SaveArtistLinks(Artist artist, uint id)
        {
            foreach (var existingLink in cache.GetLinksByArtist(id))
            {
                var existingId = cache.GetArtistLinkId(existingLink);
                if (existingId > 0 && !artist.Links.Contains(existingLink))
                {
                    database.DeleteArtistLink(connection, existingId);
                    cache.Remove(artist, existingLink);
                }
            }

            foreach (var link in artist.Links)
            {
                SaveArtistLink(artist, link);
            }
        }
Ejemplo n.º 4
0
        private static void AddAlbum()
        {
            artist = new Artist { Type = ArtistType.Group, Name = "Tool", Year = 1991 };
            album = new Work { Type = WorkType.Album, Artist = artist, Name = "Aenima", Year = 1996 };
            track1 = new Work { Type = WorkType.Track, Artist = artist, Parent = album, Name = "Stinkfist", Number = 1 };
            track2 = new Work { Type = WorkType.Track, Artist = artist, Parent = album, Name = "Eulogy", Number = 2 };
            track2.AddLink(new Link("Album Cover", Relationship.Thumbnail, Source.User_Input, "http://example.com/images/Tool/Aenima.jpg"));
            track2.AddTag(new Tag("Progressive Rock", Category.Genre, Source.Embedded_Metadata));
            track3 = new Work { Type = WorkType.Track, Artist = artist, Parent = album, Name = "H.", Number = 3 };
            artist.AddWork(album);
            album.AddChild(track1);
            album.AddChild(track2);
            album.AddChild(track3);

            repository.Save(new List<Entity> { artist });
            repository.Save(artist.Works);
        }
Ejemplo n.º 5
0
        private void SaveArtistTag(Artist artist, Tag tag)
        {
            if (artist == null || tag == null)
                return;

            var artistId = cache.GetArtistId(artist);
            if (artistId == 0)
                return;

            var id = cache.GetArtistTagId(tag);

            if (id > 0)
            {
                database.UpdateArtistTag(connection, tag, id, artistId);
            }
            else
            {
                id = database.InsertArtistTag(connection, tag, artistId);
                cache.Add(id, artist, tag);
            }
        }
Ejemplo n.º 6
0
        private void SaveArtistLink(Artist artist, Link link)
        {
            if (artist == null || link == null)
                return;

            var artistId = cache.GetArtistId(artist);
            if (artistId == 0)
                return;

            var id = cache.GetArtistLinkId(link);

            if (id > 0)
            {
                database.UpdateArtistLink(connection, link, id, artistId);
            }
            else
            {
                id = database.InsertArtistLink(connection, link, artistId);
                cache.Add(id, artist, link);
            }
        }
Ejemplo n.º 7
0
        public void Add(uint id, Artist artist, Tag tag)
        {
            if (artistTagsById.ContainsKey(id))
                return;

            var artistId = GetArtistId(artist);
            if (artistId == 0)
                return;

            artistTagsById.Add(id, tag);

            if (tagsByArtistId.ContainsKey(artistId))
            {
                if (tagsByArtistId[artistId].Contains(tag))
                    return;

                tagsByArtistId[artistId].Add(tag);
            }
            else
                tagsByArtistId[artistId] = new List<Tag> { tag };
        }
Ejemplo n.º 8
0
        public void Add(uint id, Artist artist, Link link)
        {
            if (artistLinksById.ContainsKey(id))
                return;

            var artistId = GetArtistId(artist);
            if (artistId == 0)
                return;

            artistLinksById.Add(id, link);

            if (linksByArtistId.ContainsKey(artistId))
            {
                if (linksByArtistId[artistId].Contains(link))
                    return;

                linksByArtistId[artistId].Add(link);
            }
            else
                linksByArtistId[artistId] = new List<Link> { link };
        }
Ejemplo n.º 9
0
        public void SaveArtist(Artist artist)
        {
            if (artist == null)
                return;

            var id = cache.GetArtistId(artist);

            if (id > 0)
            {
                database.UpdateArtist(connection, artist, id);
            }
            else
            {
                id = database.InsertArtist(connection, artist);
                cache.Add(id, artist);
            }

            SaveArtistLinks(artist, id);

            SaveArtistTags(artist, id);

            foreach (var work in artist.Works)
            {
                SaveWork(work);
            }
        }
Ejemplo n.º 10
0
        public void DeleteArtist(Artist artist)
        {
            if (artist == null)
                return;

            var id = cache.GetArtistId(artist);
            if (id == 0)
                return;

            database.DeleteArtist(connection, id);

            cache.Remove(artist);
        }
Ejemplo n.º 11
0
        public uint GetArtistId(Artist artist)
        {
            if (artist == null)
                return 0;

            return artistsById.Where(x => x.Value == artist).FirstOrDefault().Key;
        }
Ejemplo n.º 12
0
        public void Remove(Artist artist, Tag tag)
        {
            var id = GetArtistTagId(tag);
            if (id == 0)
                return;

            if (!artistTagsById.ContainsKey(id))
                return;

            var artistId = GetArtistId(artist);
            if (tagsByArtistId.ContainsKey(artistId))
            {
                if (tagsByArtistId[artistId].Contains(tag))
                    tagsByArtistId[artistId].Remove(tag);
            }

            artistTagsById.Remove(id);
        }
Ejemplo n.º 13
0
        public void Remove(Artist artist, Link link)
        {
            var id = GetArtistLinkId(link);
            if (id == 0)
                return;

            if (!artistLinksById.ContainsKey(id))
                return;

            var artistId = GetArtistId(artist);
            if (linksByArtistId.ContainsKey(artistId))
            {
                if (linksByArtistId[artistId].Contains(link))
                    linksByArtistId[artistId].Remove(link);
            }

            artistLinksById.Remove(id);
        }
Ejemplo n.º 14
0
        public void Remove(Artist artist)
        {
            var id = GetArtistId(artist);
            if (id == 0)
                return;

            foreach (var link in artist.Links)
            {
                Remove(artist, link);
            }

            foreach (var tag in artist.Tags)
            {
                Remove(artist, tag);
            }

            if (!artistsById.ContainsKey(id))
                return;

            if (artists.Contains(artist))
                artists.Remove(artist);

            artistsById.Remove(id);
        }
Ejemplo n.º 15
0
        public void UpdateArtist(IDbConnection connection, Artist artist, uint id)
        {
            if (!artist.IsChanged)
                return;

            var command = connection.CreateCommand();
            AddParameter(command, "@Type", (ushort)artist.Type);
            AddParameter(command, "@Name", artist.Name);
            AddParameter(command, "@Year", artist.Year);
            AddParameter(command, "@Id", id);

            command.CommandText = "update Artist set Type = @Type, Name = @Name, Year = @Year where Id = @Id;";
            command.ExecuteNonQuery();
        }
Ejemplo n.º 16
0
        public uint InsertArtist(IDbConnection connection, Artist artist)
        {
            var command = connection.CreateCommand();
            AddParameter(command, "@Type", (ushort)artist.Type);
            AddParameter(command, "@Name", artist.Name);
            AddParameter(command, "@Year", artist.Year);

            command.CommandText = "insert into Artist (Type, Name, Year) values (@Type, @Name, @Year); select last_insert_rowid();";
            var result = command.ExecuteScalar();
            
            uint id = 0;
            return (result != null && uint.TryParse(result.ToString(), out id)) ? id : 0;
        }