예제 #1
0
        private async void PickPlayListFolderButton_Click(object sender, RoutedEventArgs e)
        {
            var folderPicker = new Windows.Storage.Pickers.FolderPicker();

            folderPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.Desktop;
            folderPicker.FileTypeFilter.Add("*");

            Windows.Storage.StorageFolder folder = await folderPicker.PickSingleFolderAsync();

            if (folder != null)
            {
                // Application now has read/write access to all contents in the picked folder
                // (including other sub-folder contents)
                Windows.Storage.AccessCache.StorageApplicationPermissions.
                FutureAccessList.AddOrReplace("PlaylistFolder", folder);
                ChosenFolderText.Text        = "Picked folder: " + folder.Name;
                SongListStorage.PlaylistDict = new ConcurrentDictionary <long, Playlist>();
                SongListStorage.LoadFlavours();
                SongListStorage.PlayListFolder = folder;
            }
            else
            {
                ChosenFolderText.Text = "No Folder Found.";
            }
        }
예제 #2
0
        public static async Task LoadMusicFromJSON()
        {
            try
            {
                try
                {
                    App.GetForCurrentView().DisplayLoading(0, 0, 0, false);
                }
                catch { }
                StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

                //StorageFile albumdictfile = await storageFolder.CreateFileAsync("albumdict.txt", Windows.Storage.CreationCollisionOption.OpenIfExists);
                StorageFile albumdictfile = await storageFolder.GetFileAsync("albumdict.txt");

                string albumdictjson = await FileIO.ReadTextAsync(albumdictfile);

                var albumdict = JsonConvert.DeserializeObject <ConcurrentDictionary <String, Album> >(albumdictjson);
                SongListStorage.AlbumDict = albumdict;

                StorageFile songdictfile = await storageFolder.GetFileAsync("songdict.txt");

                string songdictjson = await FileIO.ReadTextAsync(songdictfile);

                var songdict = JsonConvert.DeserializeObject <ConcurrentDictionary <String, Song> >(songdictjson);
                SongListStorage.SongDict = songdict;

                StorageFile artistdictfile = await storageFolder.GetFileAsync("artistdict.txt");

                string artistdictjson = await FileIO.ReadTextAsync(artistdictfile);

                var artistdict = JsonConvert.DeserializeObject <ConcurrentDictionary <string, Artist> >(artistdictjson);
                SongListStorage.ArtistDict = artistdict;

                Debug.WriteLine("Loaded music from JSON.");
                try
                {
                    App.GetForCurrentView().DisplayLoading(SongListStorage.SongDict.Count, 0, 0, true);
                }
                catch
                {
                }
            }
            catch (FileNotFoundException E)
            {
                Debug.WriteLine("Couldn't load music.");
                Debug.WriteLine(E.Message);
                await GetSongs(true);
            }
            catch (Newtonsoft.Json.JsonSerializationException E)
            {
                Debug.WriteLine("Couldn't load music.");
                Debug.WriteLine(E.Message);
                await GetSongs(true);
            }
            catch (Exception E)
            {
                Debug.WriteLine("Couldn't load music.");
                Debug.WriteLine(E.Message);
                await GetSongs(true);
            }
            if (!Windows.Storage.ApplicationData.Current.LocalSettings.Values.ContainsKey("ShowUnpinnedFlavours"))
            {
                Windows.Storage.ApplicationData.Current.LocalSettings.Values["ShowUnpinnedFlavours"] = true;
            }
            await SongListStorage.GetNowPlaying();

            await SongListStorage.GetPlaylistFolder();

            await SongListStorage.LoadFlavours();

            SongListStorage.LoadVolume();
            Media.Instance.VolChanged();
            await SongListStorage.UpdateAndOrderMusic();

            await Windows.System.Threading.ThreadPool.RunAsync(SongListStorage.PeriodicallySave, Windows.System.Threading.WorkItemPriority.High);


            //SongListStorage.GetSongList();
        }
예제 #3
0
        //Gets a collection of song files.
        public static async Task GetSongs(bool FirstTime)
        {
            try
            {
                App.GetForCurrentView().DisplayLoading(0, 0, 0, false);
            }
            catch (Exception E)
            {
                Debug.WriteLine("Couldn't display loading bar yet.");
                Debug.WriteLine(E.Message);
            }
            var files = await GetSongList();

            ConcurrentDictionary <String, Song>   SongDict;
            ConcurrentDictionary <String, Artist> ArtistDict;
            ConcurrentDictionary <String, Album>  AlbumDict;

            int songsloaded = 0;

            if (FirstTime)
            {
                SongDict   = SongListStorage.SongDict;
                AlbumDict  = SongListStorage.AlbumDict;
                ArtistDict = SongListStorage.ArtistDict;
            }
            else
            {
                SongDict   = new ConcurrentDictionary <String, Song>();
                ArtistDict = new ConcurrentDictionary <String, Artist>();
                AlbumDict  = new ConcurrentDictionary <String, Album>();
            }

            try
            {
                App.GetForCurrentView().DisplayLoading(0, 0, 0, false);
            }
            catch (Exception E)
            {
                Debug.WriteLine("Couldn't display loading bar yet.");
                Debug.WriteLine(E.Message);
            }


            Regex songreg      = new Regex(@"^audio/");
            int   filesscanned = 0;
            int   songsfound   = 0;

            //foreach (var file in files)
            for (int i = 0; i < files.Count; i++)
            {
                var file = files[i];
                filesscanned++;
                //Checks if it's an audio file
                if (songreg.IsMatch(file.ContentType))
                {
                    songsfound++;
                    if (songsfound % 10 == 0 || songsfound <= 1)
                    {
                        try
                        {
                            App.GetForCurrentView().DisplayLoading(songsfound, files.Count, filesscanned, false);
                        }
                        catch { }
                    }
                    if (songsfound % 50 == 0)
                    {
                        if (FirstTime)
                        {
                            await SongListStorage.UpdateAndOrderMusic();
                        }
                    }
                    MusicProperties musicProperties = await(file as StorageFile).Properties.GetMusicPropertiesAsync();

                    IDictionary <string, object> returnedProps = await file.Properties.RetrievePropertiesAsync(new string[] { "System.Music.PartOfSet" });

                    string discnumber = (string)returnedProps["System.Music.PartOfSet"];
                    if (discnumber == null)
                    {
                        discnumber = "1";
                    }

                    Song song = new Song()
                    {
                        ID          = "",
                        Title       = musicProperties.Title,
                        Album       = musicProperties.Album,
                        AlbumArtist = musicProperties.AlbumArtist,
                        Artist      = musicProperties.Artist,
                        Year        = musicProperties.Year,
                        Duration    = musicProperties.Duration,
                        TrackNumber = (int)musicProperties.TrackNumber,
                        IsFlavour   = false, //MAY NEED TO REMOVE
                        Path        = ((StorageFile)file).Path,
                        DiscNumber  = discnumber
                    };


                    string id    = "";
                    String props = song.Title + song.Album + song.AlbumArtist + song.Artist;
                    id      = props.Replace(",", "");
                    song.ID = id;

                    if (SongDict.TryAdd(id, song))
                    {
                        songsloaded++;
                    }
                    else
                    {
                        Debug.WriteLine("Couldn't add " + song.Title + " by " + song.Artist + " from " + song.Album + ".");
                    }

                    AddAlbum(id, song, SongDict, ArtistDict, AlbumDict);
                }
            }
            if (!FirstTime)
            {
                SongListStorage.SongDict   = SongDict;
                SongListStorage.AlbumDict  = AlbumDict;
                SongListStorage.ArtistDict = ArtistDict;
            }
            else
            {
                await SongListStorage.LoadFlavours();
            }
            await App.GetForCurrentView().ResetFlavours();

            //Should also display a message saying that all files have been loaded.
            Debug.WriteLine("Loaded " + songsloaded + " songs.");
            try
            {
                App.GetForCurrentView().DisplayLoading(songsfound, files.Count, filesscanned, true);
            }
            catch { }
            await SongListStorage.UpdateAndOrderMusic();

            await MusicToJSON();
        }