예제 #1
0
        public static IMediaCollection SetDirectory(this IMediaCollection mock,
                                                    DateTime dateTime, params IMediaItem[] mediaItems)
        {
            mock.Items.Returns(mediaItems);

            return(mock);
        }
예제 #2
0
 public AddRemoveFolderVM(IVMLocator vmLocator, IMessengerService messengerService, IMediaCollection collectionManager, IApplicationSettings applicationSettings)
     : base(vmLocator)
 {
     _collectionManager   = collectionManager;
     _messengerService    = messengerService;
     _applicationSettings = applicationSettings;
 }
예제 #3
0
 static void WriteMedia <T>(IMediaCollection <T> collection) where T : IMediaItem
 {
     Console.WriteLine("  Collection: {0}<{1}>", collection.GetType().Name, typeof(T).Name);
     foreach (var item in collection)
     {
         Console.WriteLine(item.ToString());
     }
     Console.WriteLine();
 }
예제 #4
0
        public MainVM(IVMLocator vmLocator, IMediaCollection mediaCollectionManager)
            : base(vmLocator)
        {
            _mediaCollectionManager = mediaCollectionManager;
            AllItems = new ObservableCollection <MediaItem>();
            AllItems.CollectionChanged += AllItems_CollectionChanged;

            OnLoadCommand = new RelayCommand(LoadedCmd);
            PlayCommand   = new RelayCommand <long>(PlayCmd, l => true);
        }
예제 #5
0
 public EnqueuedCollection(MusicService service, IMediaCollection collection)
 {
     Service            = service;
     OriginalCollection = collection;
     Smid = new ServiceMediaId(Service.Info.Name, collection);
     if (collection.Tracks != null)
     {
         Tracks = EnqueuedTrack.FromCollection(service, collection.Tracks).ToList();
     }
 }
예제 #6
0
 public FilterTask(IMediaCollection mediaCollection, IFileService fileService,
                   IConfiguration configuration)
 {
     _fileService     = fileService;
     _configuration   = configuration;
     _mediaCollection = mediaCollection;
     _mediaCollection.IsEnabledChanged += OnIsEnabledChanged;
     TotalSize = mediaCollection.GetFiles()
                 .Where(x => x.IsEnabled == true && configuration.IsSupported(x))
                 .Sum(x => x.SizeInMb);
 }
예제 #7
0
 public static string GetBasicPath(this Track track, string pathFormat, IMediaCollection collection)
 {
     // Hacky method to clean the file path
     var formatStrComponents = pathFormat.Split(Path.DirectorySeparatorChar);
     var newFormat = String.Join("\0", formatStrComponents);
     var vars = Dictify.ObjectToDictionary(track);
     vars["PlaylistName"] = collection.Title;
     vars["CollectionName"] = collection.Title;
     vars["ServiceName"] = collection.Title;
     var finalPath = PathHelpers.CleanPath(Named.Format(newFormat, vars));
     return finalPath;
 }
예제 #8
0
        public EnqueuedCollection Enqueue(MusicService service, IMediaCollection collection, string pathFormat)
        {
            var item = new EnqueuedCollection
            {
                Service         = service,
                PathFormat      = pathFormat,
                MediaCollection = collection
            };

            Add(item);
            return(item);
        }
예제 #9
0
        private void Cleanup()
        {
            Locations.CollectionChanged -= Locations_CollectionChanged;
            Locations.Clear();

            AddLocationCommand    = null;
            RemoveLocationCommand = null;
            Status = null;

            _messengerService  = null;
            _collectionManager = null;
        }
예제 #10
0
        public EnqueuedCollection Enqueue(MusicService service, IMediaCollection collection, string destination, string pathFormat)
        {
            var item = new EnqueuedCollection
            {
                Destination     = destination,
                Service         = service,
                PathFormat      = pathFormat,
                MediaCollection = collection,
                Type            = MediaCollectionAsType(collection)
            };

            Add(item);
            return(item);
        }
예제 #11
0
        private void AddToQueue(MusicService service, IMediaCollection item, string destination, string pathFormat)
        {
            var enqueuedItem = mediaDownloadQueue.Enqueue(service, item, destination, pathFormat);
            var header       = MakeGroupHeader(enqueuedItem);
            var group        = new ListViewGroup(header, HorizontalAlignment.Center);
            var groupIndex   = queueListView.Groups.Add(group);
            var finalTracks  = new List <string>();

            for (var i = 0; i < item.Tracks.Count; i++)
            {
                var t      = item.Tracks[i];
                var lvItem = new ListViewItem
                {
                    Group = group,
                    Tag   = new MediaItemTag
                    {
                        Track             = t,
                        Collection        = enqueuedItem,
                        GroupIndex        = groupIndex,
                        IndexInCollection = i
                    }
                };
                if (!t.IsDownloadable)
                {
                    Log.Warning(Tag, $"Adding non-downloadable track {service.Info.Name}/{t.Id}");
                    lvItem.BackColor = SystemColors.Control;
                    lvItem.ForeColor = SystemColors.GrayText;
                    lvItem.ImageKey  = "not_downloadable";
                    lvItem.Text      = "Unavailable";
                }
                else
                {
                    lvItem.ImageKey = "ready";
                    lvItem.Text     = "Ready to download";
                }
                lvItem.SubItems.Add(t.DiscNumber + " / " + t.TrackNumber);
                lvItem.SubItems.Add(t.Title);
                lvItem.SubItems.Add(t.Artist.Name);
                lvItem.SubItems.Add(t.Album.Title);
                lvItem.SubItems.Add(BuildFlags(t.CustomMetadata));
                lvItem.SubItems.Add(Path.Combine(destination, t.GetBasicPath(enqueuedItem.PathFormat, item)));

                finalTracks.Add(t.Artist.Name + " - " + t.Title);
                group.Items.Add(lvItem);
                queueListView.Items.Add(lvItem);
            }
            group.Header = MakeGroupHeader(enqueuedItem);
        }
예제 #12
0
 private static MediaType MediaCollectionAsType(IMediaCollection collection)
 {
     if (collection is Album)
     {
         return(MediaType.Album);
     }
     if (collection is Playlist)
     {
         return(MediaType.Playlist);
     }
     if (collection is SingleTrackCollection)
     {
         return(MediaType.Track);
     }
     return(MediaType.Unknown);
 }
예제 #13
0
파일: MainForm.cs 프로젝트: tocy777/Athame
        private void AddToQueue(MusicService service, IMediaCollection item, string pathFormat)
        {
            var enqueuedItem = mediaDownloadQueue.Enqueue(service, item, pathFormat);
            var mediaType    = MediaCollectionAsType(item);
            var header       = String.Format(GroupHeaderFormat, mediaType, item.Title, service.Info.Name);
            var group        = new ListViewGroup(header);
            var groupIndex   = queueListView.Groups.Add(group);

            for (var i = 0; i < item.Tracks.Count; i++)
            {
                var t      = item.Tracks[i];
                var lvItem = new ListViewItem
                {
                    Group = group,
                    Tag   = new MediaItemTag
                    {
                        Track             = t,
                        Collection        = enqueuedItem,
                        GroupIndex        = groupIndex,
                        IndexInCollection = i
                    }
                };
                if (!t.IsDownloadable)
                {
                    Log.Warning(Tag, $"Adding non-downloadable track {service.Info.Name}/{t.Id}");
                    lvItem.BackColor = SystemColors.Control;
                    lvItem.ForeColor = SystemColors.GrayText;
                    lvItem.ImageKey  = "not_downloadable";
                    lvItem.Text      = "Unavailable";
                }
                else
                {
                    lvItem.ImageKey = "ready";
                    lvItem.Text     = "Ready to download";
                }
                lvItem.SubItems.Add(t.DiscNumber + " / " + t.TrackNumber);
                lvItem.SubItems.Add(t.Title);
                lvItem.SubItems.Add(t.Artist.Name);
                lvItem.SubItems.Add(t.Album.Title);
                lvItem.SubItems.Add(t.GetBasicPath(enqueuedItem.PathFormat));
                group.Items.Add(lvItem);
                queueListView.Items.Add(lvItem);
            }
        }
예제 #14
0
 public ServiceMediaId(string serviceName, IMediaCollection collection)
 {
     ServiceName = serviceName;
     if (collection is Album)
     {
         MediaType = MediaType.Album;
     }
     else if (collection is Playlist)
     {
         MediaType = MediaType.Playlist;
     }
     else if (collection is SingleTrackCollection)
     {
         MediaType = MediaType.Track;
     }
     else
     {
         MediaType = MediaType.Unknown;
     }
     Id = collection.Id;
 }
예제 #15
0
 public MainViewModel(IConfiguration configuration,
                      IMediaService mediaService,
                      IMediaCollection collection,
                      IFileService fileService,
                      Func <IProgressNotifier> progresssNotifierFactory,
                      IMediaFileManager mediaFileManager)
 {
     this.mediaFileManager     = mediaFileManager;
     this._mediaService        = mediaService;
     Collection                = collection;
     Configuration             = configuration;
     _fileService              = fileService;
     _progresssNotifierFactory = progresssNotifierFactory;
     SelectAllCommand          = new RelayCommand(ExecuteSelectAll);
     SelectNoneCommand         = new RelayCommand(ExecuteSelectNone);
     ExecuteCommand            = new RelayCommand(Execute, CanExecute);
     CancelCommand             = new RelayCommand(ExecuteCancel, CanExecuteCancel);
     BrowseSourceCommand       = new RelayCommand(ExecuteBrowseSourcePath);
     BrowseTargetCommand       = new RelayCommand(ExecuteBrowseTargetPath);
     OpenDirectoryCommand      = new RelayCommand <IMediaFile>(OnOpenFileDirectory);
 }
예제 #16
0
 private void ValidateFormat(IMediaCollection collection, string format, Label label)
 {
     label.ForeColor = Color.Red;
     try
     {
         label.ForeColor = Color.Black;
         label.Text      = collection.Tracks[0].GetBasicPath(format, collection) + ".ext";
     }
     catch (FormatException)
     {
         label.Text = "Improperly formed format string - did you forget a { or }?";
     }
     catch (NullReferenceException)
     {
         label.Text =
             "Undefined variable referenced - click the \"Help with path formats\" button to learn more.";
     }
     catch (Exception ex)
     {
         label.Text =
             $"Unknown error ({ex.GetType().Name})";
     }
 }
예제 #17
0
 public static IMediaCollection SetDirectory(this IMediaCollection mock,
                                             params MediaFile[] mediaFiles)
 {
     return(SetDirectory(mock, new DateTime(2000, 1, 1), mediaFiles));
 }
 public static int GetAvailableTracksCount(this IMediaCollection collection)
 {
     return(collection.Tracks.Sum(track => track.IsDownloadable ? 1 : 0));
 }
예제 #19
0
 public OutputBehavior(IFubuRequestContext context, IMediaCollection<T> media, IResourceNotFoundHandler notFoundHandler) : base(PartialBehavior.Executes)
 {
     _context = context;
     _media = media;
     _notFoundHandler = notFoundHandler;
 }
예제 #20
0
 public static string GetPath(this TrackFile trackFile, string pathFormat, IMediaCollection collection)
 {
     var cleanedFilePath = trackFile.Track.GetBasicPath(pathFormat, collection);
     return trackFile.FileType.Append(cleanedFilePath);
 }
예제 #21
0
 public static ServiceMediaId GetSmid(this IMediaCollection collection, string serviceName)
 {
     return(new ServiceMediaId(serviceName, collection));
 }