Пример #1
0
        public DacpSearchResults(DacpDatabase database, string searchString)
            : base(true)
        {
            Database     = database;
            SearchString = searchString;

            // Add search result sections
            string wildcardSearch = "*" + searchString + "*";

            Add(new SearchResultSection <Album>(database, async(db, token) => await db.MusicContainer.SearchAlbumsAsync(wildcardSearch, token)));
            Add(new SearchResultSection <Artist>(database, async(db, token) => await db.MusicContainer.SearchArtistsAsync(wildcardSearch, token)));
            Add(new SongsSearchResultSection(database, wildcardSearch, async(db, token) => await db.MusicContainer.SearchSongsAsync(wildcardSearch, token)));
            if (database.MoviesContainer != null)
            {
                Add(new SearchResultSection <Movie>(database, async(db, token) => await db.MoviesContainer.SearchMoviesAsync(wildcardSearch, token)));
            }
            if (database.PodcastsContainer != null)
            {
                Add(new SearchResultSection <Podcast>(database, async(db, token) => await db.PodcastsContainer.SearchShowsAsync(wildcardSearch, token)));
            }
            if (database.TVShowsContainer != null)
            {
                Add(new SearchResultSection <TVShow>(database, async(db, token) => await db.TVShowsContainer.SearchShowsAsync(wildcardSearch, token)));
                Add(new SearchResultSection <TVShowEpisode>(database, async(db, token) => await db.TVShowsContainer.SearchEpisodesAsync(wildcardSearch, token)));
            }
            if (database.iTunesUContainer != null)
            {
                Add(new SearchResultSection <iTunesUCourse>(database, async(db, token) => await(db.iTunesUContainer.SearchCoursesAsync(wildcardSearch, token))));
            }
            if (database.BooksContainer != null)
            {
                Add(new SearchResultSection <Audiobook>(database, async(db, token) => await db.BooksContainer.SearchAudiobooksAsync(wildcardSearch, token)));
            }
        }
Пример #2
0
        public static DacpContainer GetContainer(DacpDatabase database, DacpNodeDictionary nodes)
        {
            // Base Playlist
            if (nodes.GetBool("abpl"))
            {
                return(new DacpContainer(database, nodes));
            }

            // Special playlist type
            ContainerType type = (ContainerType)nodes.GetByte("aePS");

            switch (type)
            {
            case ContainerType.Playlist:
                return(new Playlist(database, nodes));

            case ContainerType.Podcasts:
                return(new PodcastsContainer(database, nodes));

            case ContainerType.Movies:
                return(new MoviesContainer(database, nodes));

            case ContainerType.TVShows:
                return(new TVShowsContainer(database, nodes));

            case ContainerType.Music:
                return(new MusicContainer(database, nodes));

            case ContainerType.iTunesU:
                return(new iTunesUContainer(database, nodes));

            case ContainerType.Books:
                return(new BooksContainer(database, nodes));

            case ContainerType.GeniusMix:
                return(new GeniusMix(database, nodes));

            case ContainerType.iTunesRadio:
                return(new iTunesRadioStation(database, nodes));
            }

            return(new DacpContainer(database, nodes));
        }
Пример #3
0
 public Playlist(DacpDatabase database, DacpNodeDictionary nodes)
     : base(database, nodes)
 {
 }
Пример #4
0
 public BooksContainer(DacpDatabase database, DacpNodeDictionary nodes)
     : base(database, nodes)
 {
 }
        private async Task <bool> GetDatabasesAsync()
        {
            DacpRequest request = new DacpRequest("/databases");

            try
            {
                var databases = await GetListAsync(request, n => DacpDatabase.GetDatabase(this, n)).ConfigureAwait(false);

                if (databases == null || databases.Count == 0)
                {
                    return(false);
                }

                List <DacpDatabase> newSharedDatabases = new List <DacpDatabase>();

                for (int i = 0; i < databases.Count; i++)
                {
                    var db = databases[i];

                    // The main database will be first in the list
                    if (i == 0)
                    {
                        if (MainDatabase != null && MainDatabase.ID == db.ID)
                        {
                            continue;
                        }

                        bool success = await db.RequestContainersAsync().ConfigureAwait(false);

                        if (!success)
                        {
                            return(false);
                        }
                        MainDatabase = db;
                        continue;
                    }

                    // Shared database
                    if (db.Type == DatabaseType.Shared)
                    {
                        newSharedDatabases.Add(db);
                        continue;
                    }

                    // Internet Radio
                    if (db.Type == DatabaseType.InternetRadio)
                    {
                        if (InternetRadioDatabase != null && InternetRadioDatabase.ID == db.ID)
                        {
                            continue;
                        }

                        InternetRadioDatabase = db;
                        continue;
                    }

                    // iTunes Radio
                    if (db.Type == DatabaseType.iTunesRadio)
                    {
                        if (iTunesRadioDatabase != null && iTunesRadioDatabase.ID == db.ID)
                        {
                            continue;
                        }

                        iTunesRadioDatabase = (iTunesRadioDatabase)db;
                        // Attempt to load the stations asynchronously to determine whether iTunes Radio is enabled.
                        var task = iTunesRadioDatabase.RequestStationsAsync();
                        continue;
                    }
                }

                // Update shared databases
                Dictionary <int, DacpDatabase> removedSharedDBs = SharedDatabases.ToDictionary(db => db.ID);
                foreach (var sharedDB in newSharedDatabases)
                {
                    removedSharedDBs.Remove(sharedDB.ID);
                    if (SharedDatabases.Any(db => db.ID == sharedDB.ID))
                    {
                        continue;
                    }
                    SharedDatabases.Add(sharedDB);
                }
                foreach (DacpDatabase db in removedSharedDBs.Values)
                {
                    SharedDatabases.Remove(db);
                }

                Databases.Clear();
                Databases.AddRange(databases);
            }
            catch { return(false); }
            return(true);
        }
Пример #6
0
 public DacpContainer(DacpDatabase database, DacpNodeDictionary nodes)
     : base(database.Client, nodes)
 {
     Database = database;
 }
Пример #7
0
 public iTunesRadioStation(DacpDatabase database, DacpNodeDictionary nodes)
     : base(database, nodes)
 {
 }
Пример #8
0
 internal SearchResultSection(DacpDatabase database, Func <DacpDatabase, CancellationToken, Task <IEnumerable <T> > > action)
 {
     Database = database;
     _action  = action;
 }
 internal SongsSearchResultSection(DacpDatabase database, string searchString, Func <DacpDatabase, CancellationToken, Task <IEnumerable <Song> > > action)
     : base(database, action)
 {
     _searchString = searchString;
 }
Пример #10
0
 public iTunesUContainer(DacpDatabase database, DacpNodeDictionary nodes)
     : base(database, nodes)
 {
 }
Пример #11
0
 public GeniusMix(DacpDatabase database, DacpNodeDictionary nodes)
     : base(database, nodes)
 {
 }