Exemple #1
0
 private void Unsubscribe(ISourcePlaylist playlist)
 {
     if (playlist != null)
     {
         playlist.FileMediaSourcesChanged -= Playlist_FileMediaSourcesChanged;
     }
 }
        private object MicOk_Convert(object sender, MultiplesInputsConvert3EventArgs args)
        {
            if (args.Input1 == null)
            {
                return(false);
            }

            ISourcePlaylist selectedPlaylist = (ISourcePlaylist)args.Input0;
            bool            isNewPlaylist    = (bool)args.Input1;
            string          newPlaylistName  = (string)args.Input2;

            return(isNewPlaylist ? !string.IsNullOrWhiteSpace(newPlaylistName) : selectedPlaylist != null);
        }
        public static async Task UpdatePlaylists(IAudioService service)
        {
            IEnumerable <StorageFolder> folders = await GetAllFolders(KnownFolders.MusicLibrary);

            int nextIndex = 0;

            foreach (StorageFolder folder in folders)
            {
                string[] paths;
                if (string.IsNullOrWhiteSpace(folder.Path))
                {
                    IReadOnlyList <StorageFile> files = (await folder.GetFilesAsync()).ToArray();

                    paths = files.Select(f => f.Path).Select(Path.GetDirectoryName).Distinct().ToArray();
                }
                else
                {
                    paths = new string[] { folder.Path }
                };

                if (paths.Length == 0)
                {
                    continue;
                }

                int currentIndex;
                if (service.SourcePlaylists.TryIndexOf(p => HasSameSource(p, paths), out currentIndex))
                {
                    nextIndex = currentIndex + 1;
                    continue;
                }

                ISourcePlaylist playlist = (ISourcePlaylist)service.CreateSourcePlaylist();
                playlist.Name             = folder.DisplayName;
                playlist.FileMediaSources = paths;
                await Task.Run(playlist.Update);

                if (playlist.Songs.Length == 0)
                {
                    continue;
                }

                int index = Math.Max(service.SourcePlaylists.Count, nextIndex++);
                service.SourcePlaylists.Insert(index, playlist);

                if (service.CurrentPlaylist == null)
                {
                    service.CurrentPlaylist = playlist;
                }
            }
        }
        private void BtnOk_Click(object sender, RoutedEventArgs e)
        {
            string[] sources = tbxSources.Text?.Replace("\r\n", "\n").Split('\n').Where(l => l.Length > 0).ToArray();

            if ((bool)micNewPlaylist.Output)
            {
                newPlaylist.FileMediaSources = sources;
                newPlaylist.Update();
                service.SourcePlaylists.Add(newPlaylist);
                service.CurrentPlaylist = newPlaylist;
            }
            else
            {
                ISourcePlaylist selectedPlaylist = (ISourcePlaylist)lbxPlaylists.SelectedItem;
                selectedPlaylist.FileMediaSources = rbnAppend.IsChecked == true?
                                                    selectedPlaylist.FileMediaSources.ToNotNull().Concat(sources).ToArray() : sources;
            }

            Close();
        }
        public AddSourcePlaylistWindow(string[] sources, IAudioService service)
        {
            InitializeComponent();

            this.service     = service;
            newPlaylist      = (ISourcePlaylist)service.CreateSourcePlaylist();
            newPlaylist.Loop = LoopType.CurrentPlaylist;

            try
            {
                newPlaylist.Name = sources.Length == 1 ?
                                   Path.GetFileNameWithoutExtension(sources[0]) :
                                   Path.GetFileName(Path.GetDirectoryName(sources[0]));
            }
            catch { }

            DataContext = service;
            gidNewPlaylist.DataContext = newPlaylist;
            tbxSources.Text            = sources.Join();
        }
 private static bool HasSameSource(ISourcePlaylist playlist, string[] paths)
 {
     return(playlist.FileMediaSources.BothNullOrSequenceEqual(paths));
 }