예제 #1
0
        public Task AddTrack(PlayableBase track)
        {
            track.Guid = Guid.NewGuid();
            Collection.Add(track.Guid, track);
            Tracks.Add(track);
            _imageProvider.AddImage(track.Cover);

            using (
                var command =
                    new SQLiteCommand(
                        "INSERT INTO `Tracks` (Title, ArtistGuid, AlbumGuid, Guid, LastTimePlayed, MusicBrainzId, Duration, Cover, XmlData) VALUES (@title, @artistGuid, @albumGuid, @guid, @lastTimePlayed, @musicBrainzId, @duration, @cover, @xmlData)",
                        _connection))
            {
                command.Parameters.AddWithValue("@title", track.Title);
                command.Parameters.AddGuid("@artistGuid", track.Artist.Guid);
                command.Parameters.AddGuid("@albumGuid", track.Album?.Guid);
                command.Parameters.AddGuid("@guid", track.Guid);
                command.Parameters.AddWithValue("@lastTimePlayed", track.LastTimePlayed.ToString("yyyy-MM-dd HH:mm:ss"));
                command.Parameters.AddWithValue("@musicBrainzId", track.MusicBrainzId);
                command.Parameters.AddWithValue("@duration", XmlConvert.ToString(track.Duration));
                command.Parameters.AddGuid("@cover", track.Cover?.Guid);
                using (var stringWriter = new StringWriter())
                {
                    _serializer.Serialize(stringWriter, track);
                    command.Parameters.AddWithValue("@xmlData", stringWriter.ToString());
                }

                return command.ExecuteNonQueryAsync();
            }
        }
예제 #2
0
        private async void Playlist_TrackAdded(object sender, PlayableBase e)
        {
            using (
                var command =
                    new SQLiteCommand(
                        "INSERT INTO `PlaylistTracks` (PlaylistId, TrackId) VALUES (@playlistId, @trackId)", _connection)
                )
            {
                command.Parameters.AddGuid("@playlistId", ((UserPlaylist) sender).Id);
                command.Parameters.AddGuid("@trackId", e.Guid);

                await command.ExecuteNonQueryAsync();
            }
        }
예제 #3
0
파일: Queue.cs 프로젝트: caesay/Hurricane
 public void AddTrackToQueue(PlayableBase playableBase)
 {
     AddTrackToQueue(playableBase, playableBase.Duration);
 }
예제 #4
0
        public Task UpdateLastTimePlayed(PlayableBase track, DateTime newLastTimePlayed)
        {
            track.LastTimePlayed = newLastTimePlayed;
            using (var command = new SQLiteCommand("UPDATE `Tracks` SET LastTimePlayed=@newLastTimePlayed WHERE Guid=@guid", _connection))
            {
                command.Parameters.AddWithValue("@newLastTimePlayed", newLastTimePlayed.ToString("yyyy-MM-dd HH:mm:ss"));
                command.Parameters.AddGuid("@guid", track.Guid);

                return command.ExecuteNonQueryAsync();
            }
        }
예제 #5
0
        public Task RemoveTrack(PlayableBase track)
        {
            Collection.Remove(track.Guid);
            Tracks.Remove(track);

            using (var command = new SQLiteCommand("DELETE FROM `Tracks` WHERE Guid=@guid", _connection))
            {
                command.Parameters.AddGuid("@guid", track.Guid);
                return command.ExecuteNonQueryAsync();
            }
        }
예제 #6
0
        private async void Playlist_TrackRemoved(object sender, PlayableBase e)
        {
            using (
                var command =
                    new SQLiteCommand(
                        "DELETE FROM `PlaylistTracks` WHERE PlaylistId=@playlistId AND TrackId=@trackId", _connection)
                )
            {
                command.Parameters.AddGuid("@playlistId", ((UserPlaylist) sender).Id);
                command.Parameters.AddGuid("@trackId", e.Guid);

                await command.ExecuteNonQueryAsync();
            }
        }
예제 #7
0
 public void RemoveTrack(PlayableBase playable)
 {
     Tracks.Remove(playable);
     History.Remove(playable);
     TrackRemoved?.Invoke(this, playable);
 }
예제 #8
0
 public void AddTrack(PlayableBase playable)
 {
     Tracks.Add(playable);
     TrackAdded?.Invoke(this, playable);
 }