@Override public void onCreateContextMenu( Menu menu, MenuInflater menuInflater, UpdateView<Serializable> updateView, Serializable item) { if (item instanceof PodcastChannel) { PodcastChannel channel = (PodcastChannel) item; if (!Util.isOffline(context) && UserUtil.canPodcast()) { menuInflater.inflate(R.menu.select_podcasts_context, menu); if (SyncUtil.isSyncedPodcast(context, channel.getId())) { menu.removeItem(R.id.podcast_menu_sync); } else { menu.removeItem(R.id.podcast_menu_stop_sync); } } else { menuInflater.inflate(R.menu.select_podcasts_context_offline, menu); } } else { onCreateContextMenuSupport(menu, menuInflater, updateView, item); } recreateContextMenu(menu); }
@Override public List<Serializable> getObjects( MusicService musicService, boolean refresh, ProgressListener listener) throws Exception { List<PodcastChannel> channels = musicService.getPodcastChannels(refresh, context, listener); if (!Util.isOffline(context) && ServerInfo.hasNewestPodcastEpisodes(context)) { try { newestEpisodes = musicService.getNewestPodcastEpisodes(10, context, listener); for (MusicDirectory.Entry entry : newestEpisodes.getChildren()) { for (PodcastChannel channel : channels) { if (channel.getId().equals(entry.getParent())) { PodcastEpisode episode = (PodcastEpisode) entry; // Update with information normally done in PodcastEntryParser episode.setArtist(channel.getName()); episode.setCoverArt(channel.getCoverArt()); episode.setPath(FileUtil.getPodcastPath(context, episode)); break; } } } } catch (Exception e) { Log.e(TAG, "Failed to download newest episodes", e); newestEpisodes = null; } } else { newestEpisodes = null; } List<Serializable> serializableList = new ArrayList<>(); serializableList.addAll(channels); return serializableList; }
private void displayPodcastInfo(final PodcastChannel channel) { List<Integer> headers = new ArrayList<>(); List<String> details = new ArrayList<>(); if (channel.getName() != null) { headers.add(R.string.details_title); details.add(channel.getName()); } headers.add(R.string.details_url); details.add(channel.getUrl()); headers.add(R.string.details_status); details.add(channel.getStatus()); if (channel.getErrorMessage() != null) { headers.add(R.string.details_error); details.add(channel.getErrorMessage()); } if (channel.getDescription() != null) { headers.add(R.string.details_description); details.add(channel.getDescription()); } Util.showDetailsDialog(context, R.string.details_title_podcast, headers, details); }
private void deletePodcast(final PodcastChannel channel) { Util.confirmDialog( context, R.string.common_delete, channel.getName(), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { new LoadingTask<Void>(context, false) { @Override protected Void doInBackground() throws Throwable { MusicService musicService = MusicServiceFactory.getMusicService(context); musicService.deletePodcastChannel(channel.getId(), context, null); stopSyncPodcast(channel); return null; } @Override protected void done(Void result) { adapter.removeItem(channel); Util.toast( context, context .getResources() .getString(R.string.select_podcasts_deleted, channel.getName())); } @Override protected void error(Throwable error) { String msg; if (error instanceof OfflineException || error instanceof ServerTooOldException) { msg = getErrorMessage(error); } else { msg = context .getResources() .getString(R.string.select_podcasts_deleted_error, channel.getName()) + " " + getErrorMessage(error); } Util.toast(context, msg, false); } }.execute(); } }); }
@Override public void onItemClicked(UpdateView<Serializable> updateView, Serializable item) { if (item instanceof PodcastChannel) { PodcastChannel channel = (PodcastChannel) item; if ("error".equals(channel.getStatus())) { Util.toast( context, context .getResources() .getString( R.string.select_podcasts_invalid_podcast_channel, channel.getErrorMessage() == null ? "error" : channel.getErrorMessage())); } else if ("downloading".equals(channel.getStatus())) { Util.toast(context, R.string.select_podcasts_initializing); } else { SubsonicFragment fragment = new SelectDirectoryFragment(); Bundle args = new Bundle(); args.putString(Constants.INTENT_EXTRA_NAME_PODCAST_ID, channel.getId()); args.putString(Constants.INTENT_EXTRA_NAME_PODCAST_NAME, channel.getName()); args.putString(Constants.INTENT_EXTRA_NAME_PODCAST_DESCRIPTION, channel.getDescription()); fragment.setArguments(args); replaceFragment(fragment); } } else { PodcastEpisode episode = (PodcastEpisode) item; String status = episode.getStatus(); if ("error".equals(status)) { Util.toast(context, R.string.select_podcasts_error); return; } else if (!"completed".equals(status)) { Util.toast(context, R.string.select_podcasts_skipped); return; } playNow(Arrays.asList((MusicDirectory.Entry) episode)); } }
private void stopSyncPodcast(PodcastChannel podcast) { SyncUtil.removeSyncedPodcast(context, podcast.getId()); }