Search in sources :

Example 41 with Feed

use of de.danoeh.antennapod.core.feed.Feed in project AntennaPod by AntennaPod.

the class OnlineFeedViewActivity method parseFeed.

private void parseFeed() {
    if (feed == null || feed.getFile_url() == null && feed.isDownloaded()) {
        throw new IllegalStateException("feed must be non-null and downloaded when parseFeed is called");
    }
    Log.d(TAG, "Parsing feed");
    parser = Observable.create(new Observable.OnSubscribe<FeedHandlerResult>() {

        @Override
        public void call(Subscriber<? super FeedHandlerResult> subscriber) {
            FeedHandler handler = new FeedHandler();
            try {
                FeedHandlerResult result = handler.parseFeed(feed);
                subscriber.onNext(result);
            } catch (UnsupportedFeedtypeException e) {
                Log.d(TAG, "Unsupported feed type detected");
                if (TextUtils.equals("html", e.getRootElement().toLowerCase())) {
                    showFeedDiscoveryDialog(new File(feed.getFile_url()), feed.getDownload_url());
                } else {
                    subscriber.onError(e);
                }
            } catch (Exception e) {
                Log.e(TAG, Log.getStackTraceString(e));
                subscriber.onError(e);
            } finally {
                boolean rc = new File(feed.getFile_url()).delete();
                Log.d(TAG, "Deleted feed source file. Result: " + rc);
                subscriber.onCompleted();
            }
        }
    }).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(result -> {
        beforeShowFeedInformation(result.feed);
        showFeedInformation(result.feed, result.alternateFeedUrls);
    }, error -> {
        String errorMsg = DownloadError.ERROR_PARSER_EXCEPTION.getErrorString(OnlineFeedViewActivity.this) + " (" + error.getMessage() + ")";
        showErrorDialog(errorMsg);
    });
}
Also used : LinearLayout(android.widget.LinearLayout) Bundle(android.os.Bundle) ProgressBar(android.widget.ProgressBar) DownloadRequestException(de.danoeh.antennapod.core.storage.DownloadRequestException) ImageView(android.widget.ImageView) AndroidSchedulers(rx.android.schedulers.AndroidSchedulers) StringUtils(org.apache.commons.lang3.StringUtils) DownloadRequestErrorDialogCreator(de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator) NavUtils(android.support.v4.app.NavUtils) UserPreferences(de.danoeh.antennapod.core.preferences.UserPreferences) FeedItemlistDescriptionAdapter(de.danoeh.antennapod.adapter.FeedItemlistDescriptionAdapter) Looper(android.os.Looper) Map(java.util.Map) HtmlToPlainText(de.danoeh.antennapod.core.util.syndication.HtmlToPlainText) Schedulers(rx.schedulers.Schedulers) View(android.view.View) Button(android.widget.Button) AdapterView(android.widget.AdapterView) DownloadStatus(de.danoeh.antennapod.core.service.download.DownloadStatus) Log(android.util.Log) DownloadError(de.danoeh.antennapod.core.util.DownloadError) FileNameGenerator(de.danoeh.antennapod.core.util.FileNameGenerator) FeedDiscoverer(de.danoeh.antennapod.core.util.syndication.FeedDiscoverer) AppCompatActivity(android.support.v7.app.AppCompatActivity) FeedPreferences(de.danoeh.antennapod.core.feed.FeedPreferences) List(java.util.List) TextView(android.widget.TextView) DownloadEvent(de.danoeh.antennapod.core.event.DownloadEvent) Document(org.jsoup.nodes.Document) UnsupportedFeedtypeException(de.danoeh.antennapod.core.syndication.handler.UnsupportedFeedtypeException) RelativeLayout(android.widget.RelativeLayout) ListView(android.widget.ListView) Jsoup(org.jsoup.Jsoup) Subscription(rx.Subscription) FeedHandlerResult(de.danoeh.antennapod.core.syndication.handler.FeedHandlerResult) Context(android.content.Context) EventBus(de.greenrobot.event.EventBus) AuthenticationDialog(de.danoeh.antennapod.dialog.AuthenticationDialog) Dialog(android.app.Dialog) Intent(android.content.Intent) ApGlideSettings(de.danoeh.antennapod.core.glide.ApGlideSettings) MenuItem(android.view.MenuItem) ArrayList(java.util.ArrayList) Observable(rx.Observable) HttpDownloader(de.danoeh.antennapod.core.service.download.HttpDownloader) FeedHandler(de.danoeh.antennapod.core.syndication.handler.FeedHandler) DownloadRequest(de.danoeh.antennapod.core.service.download.DownloadRequest) Feed(de.danoeh.antennapod.core.feed.Feed) StorageUtils(de.danoeh.antennapod.core.util.StorageUtils) DialogInterface(android.content.DialogInterface) Downloader(de.danoeh.antennapod.core.service.download.Downloader) Subscriber(rx.Subscriber) LayoutInflater(android.view.LayoutInflater) R(de.danoeh.antennapod.R) TextUtils(android.text.TextUtils) IOException(java.io.IOException) EventDistributor(de.danoeh.antennapod.core.feed.EventDistributor) File(java.io.File) Spinner(android.widget.Spinner) FeedItem(de.danoeh.antennapod.core.feed.FeedItem) ArrayAdapter(android.widget.ArrayAdapter) AlertDialog(android.support.v7.app.AlertDialog) Glide(com.bumptech.glide.Glide) URLChecker(de.danoeh.antennapod.core.util.URLChecker) DBReader(de.danoeh.antennapod.core.storage.DBReader) DownloadRequester(de.danoeh.antennapod.core.storage.DownloadRequester) UnsupportedFeedtypeException(de.danoeh.antennapod.core.syndication.handler.UnsupportedFeedtypeException) FeedHandler(de.danoeh.antennapod.core.syndication.handler.FeedHandler) FeedHandlerResult(de.danoeh.antennapod.core.syndication.handler.FeedHandlerResult) File(java.io.File) Observable(rx.Observable) DownloadRequestException(de.danoeh.antennapod.core.storage.DownloadRequestException) UnsupportedFeedtypeException(de.danoeh.antennapod.core.syndication.handler.UnsupportedFeedtypeException) IOException(java.io.IOException)

Example 42 with Feed

use of de.danoeh.antennapod.core.feed.Feed in project AntennaPod by AntennaPod.

the class OnlineFeedViewActivity method startFeedDownload.

private void startFeedDownload(String url, String username, String password) {
    Log.d(TAG, "Starting feed download");
    url = URLChecker.prepareURL(url);
    feed = new Feed(url, null);
    if (username != null && password != null) {
        feed.setPreferences(new FeedPreferences(0, false, FeedPreferences.AutoDeleteAction.GLOBAL, username, password));
    }
    String fileUrl = new File(getExternalCacheDir(), FileNameGenerator.generateFileName(feed.getDownload_url())).toString();
    feed.setFile_url(fileUrl);
    final DownloadRequest request = new DownloadRequest(feed.getFile_url(), feed.getDownload_url(), "OnlineFeed", 0, Feed.FEEDFILETYPE_FEED, username, password, true, null);
    download = Observable.create(new Observable.OnSubscribe<DownloadStatus>() {

        @Override
        public void call(Subscriber<? super DownloadStatus> subscriber) {
            feeds = DBReader.getFeedList();
            downloader = new HttpDownloader(request);
            downloader.call();
            Log.d(TAG, "Download was completed");
            subscriber.onNext(downloader.getResult());
            subscriber.onCompleted();
        }
    }).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(this::checkDownloadResult, error -> Log.e(TAG, Log.getStackTraceString(error)));
}
Also used : FeedPreferences(de.danoeh.antennapod.core.feed.FeedPreferences) LinearLayout(android.widget.LinearLayout) Bundle(android.os.Bundle) ProgressBar(android.widget.ProgressBar) DownloadRequestException(de.danoeh.antennapod.core.storage.DownloadRequestException) ImageView(android.widget.ImageView) AndroidSchedulers(rx.android.schedulers.AndroidSchedulers) StringUtils(org.apache.commons.lang3.StringUtils) DownloadRequestErrorDialogCreator(de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator) NavUtils(android.support.v4.app.NavUtils) UserPreferences(de.danoeh.antennapod.core.preferences.UserPreferences) FeedItemlistDescriptionAdapter(de.danoeh.antennapod.adapter.FeedItemlistDescriptionAdapter) Looper(android.os.Looper) Map(java.util.Map) HtmlToPlainText(de.danoeh.antennapod.core.util.syndication.HtmlToPlainText) Schedulers(rx.schedulers.Schedulers) View(android.view.View) Button(android.widget.Button) AdapterView(android.widget.AdapterView) DownloadStatus(de.danoeh.antennapod.core.service.download.DownloadStatus) Log(android.util.Log) DownloadError(de.danoeh.antennapod.core.util.DownloadError) FileNameGenerator(de.danoeh.antennapod.core.util.FileNameGenerator) FeedDiscoverer(de.danoeh.antennapod.core.util.syndication.FeedDiscoverer) AppCompatActivity(android.support.v7.app.AppCompatActivity) FeedPreferences(de.danoeh.antennapod.core.feed.FeedPreferences) List(java.util.List) TextView(android.widget.TextView) DownloadEvent(de.danoeh.antennapod.core.event.DownloadEvent) Document(org.jsoup.nodes.Document) UnsupportedFeedtypeException(de.danoeh.antennapod.core.syndication.handler.UnsupportedFeedtypeException) RelativeLayout(android.widget.RelativeLayout) ListView(android.widget.ListView) Jsoup(org.jsoup.Jsoup) Subscription(rx.Subscription) FeedHandlerResult(de.danoeh.antennapod.core.syndication.handler.FeedHandlerResult) Context(android.content.Context) EventBus(de.greenrobot.event.EventBus) AuthenticationDialog(de.danoeh.antennapod.dialog.AuthenticationDialog) Dialog(android.app.Dialog) Intent(android.content.Intent) ApGlideSettings(de.danoeh.antennapod.core.glide.ApGlideSettings) MenuItem(android.view.MenuItem) ArrayList(java.util.ArrayList) Observable(rx.Observable) HttpDownloader(de.danoeh.antennapod.core.service.download.HttpDownloader) FeedHandler(de.danoeh.antennapod.core.syndication.handler.FeedHandler) DownloadRequest(de.danoeh.antennapod.core.service.download.DownloadRequest) Feed(de.danoeh.antennapod.core.feed.Feed) StorageUtils(de.danoeh.antennapod.core.util.StorageUtils) DialogInterface(android.content.DialogInterface) Downloader(de.danoeh.antennapod.core.service.download.Downloader) Subscriber(rx.Subscriber) LayoutInflater(android.view.LayoutInflater) R(de.danoeh.antennapod.R) TextUtils(android.text.TextUtils) IOException(java.io.IOException) EventDistributor(de.danoeh.antennapod.core.feed.EventDistributor) File(java.io.File) Spinner(android.widget.Spinner) FeedItem(de.danoeh.antennapod.core.feed.FeedItem) ArrayAdapter(android.widget.ArrayAdapter) AlertDialog(android.support.v7.app.AlertDialog) Glide(com.bumptech.glide.Glide) URLChecker(de.danoeh.antennapod.core.util.URLChecker) DBReader(de.danoeh.antennapod.core.storage.DBReader) DownloadRequester(de.danoeh.antennapod.core.storage.DownloadRequester) HttpDownloader(de.danoeh.antennapod.core.service.download.HttpDownloader) DownloadStatus(de.danoeh.antennapod.core.service.download.DownloadStatus) DownloadRequest(de.danoeh.antennapod.core.service.download.DownloadRequest) File(java.io.File) Observable(rx.Observable) Feed(de.danoeh.antennapod.core.feed.Feed)

Example 43 with Feed

use of de.danoeh.antennapod.core.feed.Feed in project AntennaPod by AntennaPod.

the class MainActivity method onContextItemSelected.

@Override
public boolean onContextItemSelected(MenuItem item) {
    final int position = mPosition;
    // reset
    mPosition = -1;
    if (position < 0) {
        return false;
    }
    Feed feed = navDrawerData.feeds.get(position - navAdapter.getSubscriptionOffset());
    switch(item.getItemId()) {
        case R.id.mark_all_seen_item:
            DBWriter.markFeedSeen(feed.getId());
            return true;
        case R.id.mark_all_read_item:
            DBWriter.markFeedRead(feed.getId());
            return true;
        case R.id.rename_item:
            new RenameFeedDialog(this, feed).show();
            return true;
        case R.id.remove_item:
            final FeedRemover remover = new FeedRemover(this, feed) {

                @Override
                protected void onPostExecute(Void result) {
                    super.onPostExecute(result);
                    if (getSelectedNavListIndex() == position) {
                        loadFragment(EpisodesFragment.TAG, null);
                    }
                }
            };
            ConfirmationDialog conDialog = new ConfirmationDialog(this, R.string.remove_feed_label, R.string.feed_delete_confirmation_msg) {

                @Override
                public void onConfirmButtonPressed(DialogInterface dialog) {
                    dialog.dismiss();
                    long mediaId = PlaybackPreferences.getCurrentlyPlayingFeedMediaId();
                    if (mediaId > 0 && FeedItemUtil.indexOfItemWithMediaId(feed.getItems(), mediaId) >= 0) {
                        Log.d(TAG, "Currently playing episode is about to be deleted, skipping");
                        remover.skipOnCompletion = true;
                        int playerStatus = PlaybackPreferences.getCurrentPlayerStatus();
                        if (playerStatus == PlaybackPreferences.PLAYER_STATUS_PLAYING) {
                            sendBroadcast(new Intent(PlaybackService.ACTION_PAUSE_PLAY_CURRENT_EPISODE));
                        }
                    }
                    remover.executeAsync();
                }
            };
            conDialog.createNewDialog().show();
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}
Also used : FeedRemover(de.danoeh.antennapod.core.asynctask.FeedRemover) DialogInterface(android.content.DialogInterface) RenameFeedDialog(de.danoeh.antennapod.dialog.RenameFeedDialog) Intent(android.content.Intent) Feed(de.danoeh.antennapod.core.feed.Feed) ConfirmationDialog(de.danoeh.antennapod.core.dialog.ConfirmationDialog)

Example 44 with Feed

use of de.danoeh.antennapod.core.feed.Feed in project AntennaPod by AntennaPod.

the class MainActivity method onCreateContextMenu.

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    if (v.getId() != R.id.nav_list) {
        return;
    }
    AdapterView.AdapterContextMenuInfo adapterInfo = (AdapterView.AdapterContextMenuInfo) menuInfo;
    int position = adapterInfo.position;
    if (position < navAdapter.getSubscriptionOffset()) {
        return;
    }
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.nav_feed_context, menu);
    Feed feed = navDrawerData.feeds.get(position - navAdapter.getSubscriptionOffset());
    menu.setHeaderTitle(feed.getTitle());
// episodes are not loaded, so we cannot check if the podcast has new or unplayed ones!
}
Also used : MenuInflater(android.view.MenuInflater) AdapterView(android.widget.AdapterView) Feed(de.danoeh.antennapod.core.feed.Feed)

Example 45 with Feed

use of de.danoeh.antennapod.core.feed.Feed in project AntennaPod by AntennaPod.

the class MainActivity method loadFeedFragmentByPosition.

private void loadFeedFragmentByPosition(int relPos, Bundle args) {
    if (relPos < 0) {
        return;
    }
    Feed feed = itemAccess.getItem(relPos);
    loadFeedFragmentById(feed.getId(), args);
}
Also used : Feed(de.danoeh.antennapod.core.feed.Feed)

Aggregations

Feed (de.danoeh.antennapod.core.feed.Feed)95 FeedItem (de.danoeh.antennapod.core.feed.FeedItem)55 PodDBAdapter (de.danoeh.antennapod.core.storage.PodDBAdapter)32 ArrayList (java.util.ArrayList)30 Date (java.util.Date)30 FeedMedia (de.danoeh.antennapod.core.feed.FeedMedia)21 File (java.io.File)20 Cursor (android.database.Cursor)16 FeedImage (de.danoeh.antennapod.core.feed.FeedImage)14 Context (android.content.Context)13 FlakyTest (android.test.FlakyTest)9 DialogInterface (android.content.DialogInterface)8 Intent (android.content.Intent)8 LayoutInflater (android.view.LayoutInflater)7 AdapterView (android.widget.AdapterView)7 ConfirmationDialog (de.danoeh.antennapod.core.dialog.ConfirmationDialog)6 FeedPreferences (de.danoeh.antennapod.core.feed.FeedPreferences)6 DownloadRequestException (de.danoeh.antennapod.core.storage.DownloadRequestException)6 Log (android.util.Log)4 View (android.view.View)4