예제 #1
0
        public LibraryViewDialog(DACPDatabase database)
        {
            InitializeComponent();

            CurrentDatabase = database;
            Loaded         += LibraryViewDialog_Loaded;
        }
예제 #2
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)));
            }
        }
예제 #3
0
        protected override Playlist GetContainer(DACPDatabase database)
        {
            var playlists = database.Playlists;

            if (playlists == null)
            {
                return(null);
            }

            return(database.Playlists.First(pl => pl.ID == _playlistID));
        }
예제 #4
0
        protected void UpdateCurrentDatabase()
        {
            var server = CurrentServer;

            if (server == null || !server.IsConnected)
            {
                CurrentDatabase = null;
            }
            else
            {
                CurrentDatabase = GetDatabase(server);
            }

            UpdateDBAndTitleVisibilities();
        }
예제 #5
0
        public static DACPContainer GetContainer(DACPDatabase database, DACPNodeDictionary nodes)
        {
            // Base Playlist
            if (nodes.GetBool("abpl"))
            {
                if (database.Server.IsAppleTV)
                {
                    return(new MusicContainer(database, nodes));
                }
                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));
        }
예제 #6
0
 protected override MusicContainer GetContainer(DACPDatabase database)
 {
     return(database.MusicContainer);
 }
예제 #7
0
 public iTunesRadioStation(DACPDatabase database, DACPNodeDictionary nodes)
     : base(database, nodes)
 {
 }
예제 #8
0
 public BooksContainer(DACPDatabase database, DACPNodeDictionary nodes)
     : base(database, nodes)
 {
 }
        protected 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);
                }
            }
            catch (Exception e)
            {
                HandleHTTPException(request, e);
                return(false);
            }

            return(true);
        }
예제 #10
0
 public static void OpenComposersPage(DACPDatabase database)
 {
     Navigate("/Pages/Browse/Music/ComposersPage.xaml?databaseID={0}", database.ID);
 }
예제 #11
0
 public Playlist(DACPDatabase database, DACPNodeDictionary nodes)
     : base(database, nodes)
 {
 }
예제 #12
0
 protected override BooksContainer GetContainer(DACPDatabase database)
 {
     return(database.BooksContainer);
 }
예제 #13
0
 protected override iTunesUContainer GetContainer(DACPDatabase database)
 {
     return(database.iTunesUContainer);
 }
예제 #14
0
 protected override TVShowsContainer GetContainer(DACPDatabase database)
 {
     return(database.TVShowsContainer);
 }
예제 #15
0
 protected override PodcastsContainer GetContainer(DACPDatabase database)
 {
     return(database.PodcastsContainer);
 }
예제 #16
0
 public static void OpenSearchPage(DACPDatabase database)
 {
     Navigate("/Pages/Search/SearchPage.xaml?databaseID={0}", database.ID);
 }
예제 #17
0
 public static void OpenLibraryPage(DACPDatabase database)
 {
     Navigate("/Pages/Library/LibraryPage.xaml?databaseID={0}", database.ID);
 }
예제 #18
0
 public static void OpenGeniusMixesPage(DACPDatabase database)
 {
     Navigate("/Pages/Browse/GeniusMixes/GeniusMixesPage.xaml?databaseID={0}", database.ID);
 }
예제 #19
0
 internal SongsSearchResultSection(DACPDatabase database, string searchString, Func <DACPDatabase, CancellationToken, Task <IEnumerable <Song> > > action)
     : base(database, action)
 {
     _searchString = searchString;
 }
예제 #20
0
 public static void OpenTVShowsPage(DACPDatabase database)
 {
     Navigate("/Pages/Browse/TVShows/TVShowsPage.xaml?databaseID={0}", database.ID);
 }
예제 #21
0
 public DACPContainer(DACPDatabase database, DACPNodeDictionary nodes)
     : base(database.Server, nodes)
 {
     Database = database;
 }
예제 #22
0
 public static void OpenPodcastsPage(DACPDatabase database)
 {
     Navigate("/Pages/Browse/Podcasts/PodcastsPage.xaml?databaseID={0}", database.ID);
 }
예제 #23
0
 public static void OpeniTunesUCoursesPage(DACPDatabase database)
 {
     Navigate("/Pages/Browse/iTunesU/iTunesUCoursesPage.xaml?databaseID={0}", database.ID);
 }
예제 #24
0
 public static void OpenAudiobooksPage(DACPDatabase database)
 {
     Navigate("/Pages/Browse/Audiobooks/AudiobooksPage.xaml?databaseID={0}", database.ID);
 }
예제 #25
0
 public GeniusMix(DACPDatabase database, DACPNodeDictionary nodes)
     : base(database, nodes)
 {
 }
예제 #26
0
 public static void OpenInternetRadioCategoriesPage(DACPDatabase database)
 {
     Navigate("/Pages/Browse/InternetRadio/InternetRadioCategoriesPage.xaml?databaseID={0}", database.ID);
 }
예제 #27
0
 protected override Playlist GetContainer(DACPDatabase database)
 {
     return(database.Playlists.First(pl => pl.ID == _playlistID));
 }
예제 #28
0
 public static void OpeniTunesRadioStationsPage(DACPDatabase database)
 {
     Navigate("/Pages/Browse/iTunesRadio/iTunesRadioStationsPage.xaml?databaseID={0}", database.ID);
 }
예제 #29
0
 internal SearchResultSection(DACPDatabase database, Func <DACPDatabase, CancellationToken, Task <IEnumerable <T> > > action)
 {
     Database = database;
     _action  = action;
 }
예제 #30
0
 protected abstract T GetContainer(DACPDatabase database);