Пример #1
0
 public async Task <IEnumerable <Playlist> > GetPlaylistsAsync(PlaylistSortOrder sortOrder = PlaylistSortOrder.Default)
 {
     return(await LoadPlaylistsAsync(
                selection : null,
                selectionArgs : null,
                sortOrder : sortOrder
                ));
 }
        public async Task <IEnumerable <Playlist> > GetPlaylistsAsync(PlaylistSortOrder sortOrder = PlaylistSortOrder.Default)
        {
            return(await Task.Run(() =>
            {
                var mediaQuery = PrepareMediQuery();

                return mediaQuery.ToPlaylists(sortOrder);
            }));
        }
Пример #3
0
        /// <summary>
        /// Gibt einen String aufgrund der übergebenen PlaylistSortOrder zurück
        /// </summary>
        /// <param name="plso"></param>
        /// <returns></returns>
        private string GetSortOrderString(PlaylistSortOrder plso)
        {
            switch (plso)
            {
            case PlaylistSortOrder.Random:
                return("Zufall");

            case PlaylistSortOrder.Title:
                return("Titel");

            case PlaylistSortOrder.Artist:
                return("Interpret");

            case PlaylistSortOrder.Rating:
                return("Bewertung");

            case PlaylistSortOrder.RatingMine:
                return("Bewertung Mine");

            default:
                return("Keine");
            }
        }
 internal static IEnumerable <Playlist> ToPlaylists(this MPMediaQuery mediaQuery, PlaylistSortOrder sortOrder)
 {
     foreach (var mediaItem in mediaQuery.Items)
     {
         if (mediaItem != null && mediaItem.AssetURL != null)
         {
             yield return(mediaItem.ToPlaylist());
         }
     }
 }
Пример #5
0
        /// <summary>
        /// Ermittelt für die Playlist die entsprechenden Songs und schreibt die M3U
        /// </summary>
        /// <param name="music">Alle Songs</param>
        /// <param name="savepath">Speicherpfad für die M3U</param>
        /// <param name="bw">Wenn mit einem Backourndworker gearbeitet werden soll, dann dieser</param>
        /// <param name="BWStartvalue">Start Wert des Backgroundworkers</param>
        /// <param name="ChangeMusicPath">Wenn ein anderer Pfad für den Song in einer Playlist genommen werden soll
        /// Folgender Aufbau: OldValue|NewValue </param>
        /// <param name="clearPlaylistPath">Soll der Playlistordner gelerrt werden?</param>
        public Playlistwriter(List <String> music, string savepath, BackgroundWorker bw = null, int BWStartvalue = 0, String ChangeMusicPath = null, Boolean clearPlaylistPath = false)
        {
            if (BWStartvalue > 80)
            {
                return;
            }

            int reportvalue = 0;

            if (bw != null)
            {
                bw.ReportProgress(BWStartvalue, "Wiedergabelisten werden in den Speicher geladen");
            }

            //Liste für die MP3Files pro liste vorbereiten
            List <List <MP3File.MP3File> > plnames = new List <List <MP3File.MP3File> >();

            plnames.Clear();
            for (int i = 0; i < Playlists.GetPlaylistNames.Count; i++)
            {
                plnames.Add(new List <MP3File.MP3File>());
            }
            int counter = 0;

            //Wenn der Song existiert wird er ausgelesen und geprüft
            foreach (string path in music)
            {
                if (bw != null)
                {
                    reportvalue = BWStartvalue + ((counter * (100 - BWStartvalue - 10)) / music.Count);
                    bw.ReportProgress(reportvalue, path + " wird geprüft");
                    counter++;
                }
                if (File.Exists(path))
                {
                    var file = MP3ReadWrite.ReadMetaData(path);
                    if (file.VerarbeitungsFehler && bw != null)
                    {
                        bw.ReportProgress(100, "Fehler beim Song:" + path);
                        return;
                    }
                    int playlistcounter = 0;
                    foreach (PlaylistClass playlist in Playlists.GetPlaylists)
                    {
                        bool   resval           = true;
                        bool[] groupconditioner = new bool[playlist.PlaylistConditionGroups.Count];
                        int    gcc = 0;
                        foreach (ConditionObjectGroup playlistConditionGroup in playlist.PlaylistConditionGroups)
                        {
                            //Wenn resval einmal auf false ist, dann wurde bei einer Gruppe False gesetzt und dann wird weiter gemacht
                            //Gruppen sind mit AND verbunden.
                            if (resval == false)
                            {
                                continue;
                            }
                            resval = ConditionCecker.Ceck(playlistConditionGroup, file);
                            groupconditioner[gcc] = resval;
                            gcc++;
                        }
                        bool resvalgc = true;
                        foreach (var b in groupconditioner)
                        {
                            if (b == false)
                            {
                                resvalgc = false;
                                break;
                            }
                        }
                        //song der Liste zufügen, weil er passt.
                        if (resvalgc)
                        {
                            plnames[playlistcounter].Add(file);
                        }
                        playlistcounter++;
                    }//Ende der GetPlaylists schleife
                }
            }
            if (clearPlaylistPath)
            {
                var files = Directory.GetFiles(savepath);
                foreach (var pltoKill in files)
                {
                    try
                    {
                        if (File.Exists(pltoKill))
                        {
                            File.Delete(pltoKill);
                        }
                    }
                    catch
                    {
                        // ignored
                    }
                }
            }
            //hier die Playlist schreiben lassen.
            if (plnames.Count > 0)
            {
                if (bw != null)
                {
                    reportvalue = 90;
                    bw.ReportProgress(reportvalue, "Wiedergabelisten fertig ermittelt und werden nun geschrieben.");
                }
                for (int i = 0; i < plnames.Count; i++)
                {
                    if (bw != null)
                    {
                        if (plnames.Count > 1)
                        {
                            reportvalue = reportvalue + ((i * (10)) / plnames.Count);
                        }
                        else
                        {
                            reportvalue = 100;
                        }
                        bw.ReportProgress(reportvalue, "Wiedergabeliste " + Playlists.GetPlaylistNames[i] + " wird geschrieben.");
                    }

                    if (plnames[i].Count > 0)
                    {
                        PlaylistSortOrder sortorder = Playlists.GetPlaylists[i].Sort;
                        if (sortorder != PlaylistSortOrder.NotSet)
                        {
                            if (sortorder == PlaylistSortOrder.Title)
                            {
                                plnames[i] = plnames[i].OrderBy(x => x.Titel).ToList();
                            }
                            if (sortorder == PlaylistSortOrder.Artist)
                            {
                                plnames[i] = plnames[i].OrderBy(x => x.Artist).ToList();
                            }
                            if (sortorder == PlaylistSortOrder.Random)
                            {
                                Random rng = new Random();
                                List <MP3File.MP3File> list = plnames[i];
                                int n = list.Count;
                                while (n > 1)
                                {
                                    n--;
                                    int             k     = rng.Next(n + 1);
                                    MP3File.MP3File value = list[k];
                                    list[k] = list[n];
                                    list[n] = value;
                                }
                            }
                            if (sortorder == PlaylistSortOrder.Rating)
                            {
                                plnames[i] = plnames[i].OrderBy(x => x.Bewertung).ToList();//todo: Prüfen warum nicht in reihenfolge....
                            }
                            if (sortorder == PlaylistSortOrder.RatingMine)
                            {
                                plnames[i] = plnames[i].OrderBy(x => x.BewertungMine).ToList();
                            }
                        }

                        if (!MP3ReadWrite.WritePlaylist(plnames[i], Playlists.GetPlaylistNames[i], savepath, ChangeMusicPath))
                        {
                            //Fehler
                        }
                    }
                    else
                    {
                        //Prüfen, ob Datei schon vorhanden obwohl null, dann löschen
                        var    dir     = Directory.CreateDirectory(savepath);
                        string m3uname = Playlists.GetPlaylistNames[i] + ".m3u";
                        string file    = dir.FullName + "\\" + m3uname;
                        if (File.Exists(file))
                        {
                            File.Delete(file);
                        }
                    }
                }
            }
        }
        public async Task <IEnumerable <Playlist> > SearchPlaylistsAsync(string searchTerm, PlaylistSortOrder sortOrder = PlaylistSortOrder.Default)
        {
            if (string.IsNullOrWhiteSpace(searchTerm))
            {
                throw new ArgumentNullException(nameof(searchTerm));
            }

            return(await Task.Run(() =>
            {
                var mediaQuery = PrepareMediQuery();
                var value = NSObject.FromObject(searchTerm);
                var searchTermPredicate = MPMediaPropertyPredicate.PredicateWithValue(value, MPMediaItem.TitleProperty, MPMediaPredicateComparison.Contains);
                mediaQuery.AddFilterPredicate(searchTermPredicate);

                return mediaQuery.ToPlaylists(sortOrder);
            }));
        }
Пример #7
0
 private async Task <IEnumerable <Playlist> > LoadPlaylistsAsync(string selection, string[] selectionArgs, PlaylistSortOrder sortOrder)
 {
     return(await Task.Run(() =>
     {
         var cursor = Android.App.Application.Context.ContentResolver.Query(
             uri: MediaStore.Audio.Playlists.ExternalContentUri,
             projection: _projections,
             selection: selection,
             selectionArgs: selectionArgs,
             sortOrder: sortOrder.ToStringSortOrder()
             );
         return cursor.ToPlaylists();
     }));
 }
Пример #8
0
        public async Task <IEnumerable <Playlist> > SearchPlaylistsAsync(string searchTerm, PlaylistSortOrder sortOrder = PlaylistSortOrder.Default)
        {
            if (string.IsNullOrWhiteSpace(searchTerm))
            {
                throw new ArgumentNullException(nameof(searchTerm));
            }

            return(await LoadPlaylistsAsync(
                       selection : MediaStore.Audio.PlaylistsColumns.Name + " like ?",
                       selectionArgs : new[] { searchTerm + "%" },
                       sortOrder : sortOrder
                       ));
        }