コード例 #1
0
        private void TrackItem_MouseMove(object sender, MouseEventArgs e)
        {
            try
            {
                var position = e.GetPosition(null);
                var offset   = trackItemDragStartPoint - position;

                if (e.LeftButton == MouseButtonState.Pressed &&
                    Math.Abs(offset.X) > SystemParameters.MinimumHorizontalDragDistance &&
                    Math.Abs(offset.Y) > SystemParameters.MinimumVerticalDragDistance)
                {
                    var track = SelectedTrack;
                    if (track != null && track != trackToDrag)
                    {
                        trackToDrag = track;
                        var data = new DataObject("Track", track);
                        DragDrop.DoDragDrop(mediaList, data, DragDropEffects.Copy);
                        log.Debug("TrackItem_MouseMove: DoDragDrop");
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error("TrackItem_MouseMove", ex);
            }
        }
コード例 #2
0
        public void CacheTrack(IOldTrack track)
        {
            try
            {
                var fileName = System.IO.Path.Combine(cachePath, track.Id.ToString().Replace("-", string.Empty));

                //TODO: Get mime type from feed
                //      We should not assume the file will always be an MP3 - e.g video podcasts
                if (track.Path.EndsWith(extensionMp3))
                {
                    var index = track.Path.LastIndexOf(extensionMp3);
                    var extension = track.Path.Substring(index, track.Path.Length - index);
                    fileName += extension;
                }
                else
                {
                    fileName += extensionMp3;
                }

                var request = System.Net.HttpWebRequest.Create(track.Path);
                using (var stream = request.GetResponse().GetResponseStream())
                {
                    stream.SaveToFile(fileName);

                    cachedFiles.Add(track.Id, fileName);
                    track.CachePath = fileName;
                }
            }
            catch (Exception ex)
            {
                log.Error("TrackController.CacheTrack", ex);
            }
        }
コード例 #3
0
        public void SaveTag(IOldTrack track)
        {
            var path = !string.IsNullOrEmpty(track.CachePath) ? track.CachePath : track.Path;
            if (new Uri(path).IsFile)
            {
                var file = GetFile(path);
                if (file.Tag != null)
                {
                    if (!string.IsNullOrEmpty(track.Title))
                        file.Tag.Title = track.Title;

                    if (!string.IsNullOrEmpty(track.Album))
                        file.Tag.Album = track.Album;

                    file.Tag.Track = track.TrackNumber;
                    file.Tag.Disc = track.DiscNumber;

                    if (!string.IsNullOrEmpty(track.Artist))
                        file.Tag.Performers = track.Artist.Split(',', ';');

                    if (!string.IsNullOrEmpty(track.Genre))
                        file.Tag.Genres = track.Genre.Split(',', ';');

                    file.Tag.Year = Convert.ToUInt32(track.ReleaseYear);

                    file.Save();
                }
            }
        }
コード例 #4
0
        public void AddPicture(IOldTrack track, IPicture picture)
        {
            var file             = GetFile(track.Path);
            var existingPictures = file.Tag.Pictures;

            if (existingPictures == null || existingPictures.Length == 0)
            {
                file.Tag.Pictures = new IPicture[1] {
                    picture
                };
                file.Save();
                track.ImageData = picture.Data;
            }
            else
            {
                var pictures = new IPicture[existingPictures.Length + 1];
                pictures[0] = picture;
                for (var i = 1; i < pictures.Length; i++)
                {
                    pictures[i] = existingPictures[i];
                }

                file.Tag.Pictures = pictures;
                file.Save();
                track.ImageData = picture.Data;
            }
        }
コード例 #5
0
        public void CacheTrack(IOldTrack track)
        {
            try
            {
                var fileName = System.IO.Path.Combine(cachePath, track.Id.ToString().Replace("-", string.Empty));

                //TODO: Get mime type from feed
                //      We should not assume the file will always be an MP3 - e.g video podcasts
                if (track.Path.EndsWith(extensionMp3))
                {
                    var index     = track.Path.LastIndexOf(extensionMp3);
                    var extension = track.Path.Substring(index, track.Path.Length - index);
                    fileName += extension;
                }
                else
                {
                    fileName += extensionMp3;
                }

                var request = System.Net.HttpWebRequest.Create(track.Path);
                using (var stream = request.GetResponse().GetResponseStream())
                {
                    stream.SaveToFile(fileName);

                    cachedFiles.Add(track.Id, fileName);
                    track.CachePath = fileName;
                }
            }
            catch (Exception ex)
            {
                log.Error("TrackController.CacheTrack", ex);
            }
        }
コード例 #6
0
        private void AddPlaylistItem(ISource source, IOldTrack track)
        {
            var item = sourceController.GetPlaylistItem(source, track);

            sourceController.Save(item);

            source.AddChild(item);
            source.IsExpanded = true;
            item.IsSelected = true;
        }
コード例 #7
0
        public void SetNowPlaying(IOldTrack track)
        {
            playbackController.Load(track);

            NowPlayingMarquee.Dispatcher.Invoke((Action) delegate()
            {
                NowPlayingMarquee.DataContext = playbackController.CurrentTrack;
                NowPlayingMarquee.Visibility  = playbackController.CurrentTrack != null ? Visibility.Visible : Visibility.Collapsed;
            });
        }
コード例 #8
0
        public void Reset()
        {
            if (currentTrack != null)
            {
                currentTrack.PlaybackStatus = null;
            }

            Stop();
            currentTrack = null;
        }
コード例 #9
0
        private void AddPlaylistItem(ISource source, IOldTrack track)
        {
            var item = sourceController.GetPlaylistItem(source, track);

            sourceController.Save(item);

            source.AddChild(item);
            source.IsExpanded = true;
            item.IsSelected   = true;
        }
コード例 #10
0
 public void LoadPicture(IOldTrack track)
 {
     var path = !string.IsNullOrEmpty(track.CachePath) ? track.CachePath : track.Path;
     if (!string.IsNullOrEmpty(path) && System.IO.File.Exists(path))
     {
         var file = GetFile(path);
         if (file != null && file.Tag != null && file.Tag.Pictures.Length > 0)
         {
             track.ImageData = file.Tag.Pictures[0].Data;
         }
     }
 }
コード例 #11
0
 public ISource GetPlaylistItem(ISource parent, IOldTrack track)
 {
     return(new PlaylistItemSource()
     {
         Parent = parent,
         Path = track.Path,
         ImagePath = track.ImagePath,
         ImageData = track.ImageData,
         Name = string.Format("{0} by {1}", track.Title ?? "Untitled", track.Artist ?? "Unknown Artist"),
         Number = parent.Children.Count() + 1
     });
 }
コード例 #12
0
        public void LoadPicture(IOldTrack track)
        {
            var path = !string.IsNullOrEmpty(track.CachePath) ? track.CachePath : track.Path;

            if (!string.IsNullOrEmpty(path) && System.IO.File.Exists(path))
            {
                var file = GetFile(path);
                if (file != null && file.Tag != null && file.Tag.Pictures.Length > 0)
                {
                    track.ImageData = file.Tag.Pictures[0].Data;
                }
            }
        }
コード例 #13
0
        public void Load(IOldTrack track)
        {
            if (track == null)
            {
                throw new ArgumentNullException("track");
            }

            if (currentTrack != null)
            {
                currentTrack.PlaybackStatus = null;
            }

            currentTrack = track;
            hasSeek      = false;

            currentTrack.PlaybackStatus = "Now Playing";
        }
コード例 #14
0
        public void AddPicture(IOldTrack track, IPicture picture)
        {
            var file = GetFile(track.Path);
            var existingPictures = file.Tag.Pictures;
            if (existingPictures == null || existingPictures.Length == 0)
            {
                file.Tag.Pictures = new IPicture[1] { picture };
                file.Save();
                track.ImageData = picture.Data;
            }
            else
            {
                var pictures = new IPicture[existingPictures.Length + 1];
                pictures[0] = picture;
                for (var i = 1; i < pictures.Length; i++)
                    pictures[i] = existingPictures[i];

                file.Tag.Pictures = pictures;
                file.Save();
                track.ImageData = picture.Data;
            }
        }
コード例 #15
0
        public void SaveTag(IOldTrack track)
        {
            var path = !string.IsNullOrEmpty(track.CachePath) ? track.CachePath : track.Path;

            if (new Uri(path).IsFile)
            {
                var file = GetFile(path);
                if (file.Tag != null)
                {
                    if (!string.IsNullOrEmpty(track.Title))
                    {
                        file.Tag.Title = track.Title;
                    }

                    if (!string.IsNullOrEmpty(track.Album))
                    {
                        file.Tag.Album = track.Album;
                    }

                    file.Tag.Track = track.TrackNumber;
                    file.Tag.Disc  = track.DiscNumber;

                    if (!string.IsNullOrEmpty(track.Artist))
                    {
                        file.Tag.Performers = track.Artist.Split(',', ';');
                    }

                    if (!string.IsNullOrEmpty(track.Genre))
                    {
                        file.Tag.Genres = track.Genre.Split(',', ';');
                    }

                    file.Tag.Year = Convert.ToUInt32(track.ReleaseYear);

                    file.Save();
                }
            }
        }
コード例 #16
0
        public void AddPicture(IOldTrack track, string path)
        {
            var picture = new TagLib.Picture(path);

            AddPicture(track, picture);
        }
コード例 #17
0
 public void AddTrack(IOldTrack track)
 {
     boundTracks.Add(track);
 }
コード例 #18
0
 public int IndexOf(IOldTrack track)
 {
     return boundTracks.IndexOf(track);
 }
コード例 #19
0
 public void Save(IOldTrack record)
 {
     repository.Save(record);
 }
コード例 #20
0
        private void TrackItem_MouseMove(object sender, MouseEventArgs e)
        {
            try
            {
                var position = e.GetPosition(null);
                var offset = trackItemDragStartPoint - position;

                if (e.LeftButton == MouseButtonState.Pressed
                    && Math.Abs(offset.X) > SystemParameters.MinimumHorizontalDragDistance
                    && Math.Abs(offset.Y) > SystemParameters.MinimumVerticalDragDistance)
                {
                    var track = SelectedTrack;
                    if (track != null && track != trackToDrag)
                    {
                        trackToDrag = track;
                        var data = new DataObject("Track", track);
                        DragDrop.DoDragDrop(mediaList, data, DragDropEffects.Copy);
                        log.Debug("TrackItem_MouseMove: DoDragDrop");
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error("TrackItem_MouseMove", ex);
            }
        }
コード例 #21
0
 public void AddTrack(IOldTrack track)
 {
     boundTracks.Add(track);
 }
コード例 #22
0
 public int IndexOf(IOldTrack track)
 {
     return(boundTracks.IndexOf(track));
 }
コード例 #23
0
 public void Save(IOldTrack record)
 {
     repository.Save(record);
 }
コード例 #24
0
 public void AddPicture(IOldTrack track, string path)
 {
     var picture = new TagLib.Picture(path);
     AddPicture(track, picture);
 }
コード例 #25
0
        public void SetNowPlaying(IOldTrack track)
        {
            playbackController.Load(track);

            NowPlayingMarquee.Dispatcher.Invoke((Action)delegate()
            {
                NowPlayingMarquee.DataContext = playbackController.CurrentTrack;
                NowPlayingMarquee.Visibility = playbackController.CurrentTrack != null ? Visibility.Visible : Visibility.Collapsed;
            });
        }
コード例 #26
0
        public void Reset()
        {
            if (currentTrack != null)
            {
                currentTrack.PlaybackStatus = null;
            }

            Stop();
            currentTrack = null;
        }
コード例 #27
0
        public void Load(IOldTrack track)
        {
            if (track == null)
                throw new ArgumentNullException("track");

            if (currentTrack != null)
            {
                currentTrack.PlaybackStatus = null;
            }

            currentTrack = track;
            hasSeek = false;

            currentTrack.PlaybackStatus = "Now Playing";
        }