Search in sources :

Example 61 with Feed

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

the class DBWriter method addNewFeed.

static Future<?> addNewFeed(final Context context, final Feed... feeds) {
    return dbExec.submit(() -> {
        final PodDBAdapter adapter = PodDBAdapter.getInstance();
        adapter.open();
        adapter.setCompleteFeed(feeds);
        adapter.close();
        if (ClientConfig.gpodnetCallbacks.gpodnetEnabled()) {
            for (Feed feed : feeds) {
                GpodnetPreferences.addAddedFeed(feed.getDownload_url());
            }
        }
        BackupManager backupManager = new BackupManager(context);
        backupManager.dataChanged();
    });
}
Also used : BackupManager(android.app.backup.BackupManager) Feed(de.danoeh.antennapod.core.feed.Feed)

Example 62 with Feed

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

the class DBWriter method deleteFeed.

/**
     * Deletes a Feed and all downloaded files of its components like images and downloaded episodes.
     *
     * @param context A context that is used for opening a database connection.
     * @param feedId  ID of the Feed that should be deleted.
     */
public static Future<?> deleteFeed(final Context context, final long feedId) {
    return dbExec.submit(() -> {
        DownloadRequester requester = DownloadRequester.getInstance();
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
        final Feed feed = DBReader.getFeed(feedId);
        if (feed != null) {
            if (PlaybackPreferences.getCurrentlyPlayingMedia() == FeedMedia.PLAYABLE_TYPE_FEEDMEDIA && PlaybackPreferences.getLastPlayedFeedId() == feed.getId()) {
                context.sendBroadcast(new Intent(PlaybackService.ACTION_SHUTDOWN_PLAYBACK_SERVICE));
                SharedPreferences.Editor editor = prefs.edit();
                editor.putLong(PlaybackPreferences.PREF_CURRENTLY_PLAYING_FEED_ID, -1);
                editor.commit();
            }
            // delete image file
            if (feed.getImage() != null) {
                if (feed.getImage().isDownloaded() && feed.getImage().getFile_url() != null) {
                    File imageFile = new File(feed.getImage().getFile_url());
                    imageFile.delete();
                } else if (requester.isDownloadingFile(feed.getImage())) {
                    requester.cancelDownload(context, feed.getImage());
                }
            }
            // delete stored media files and mark them as read
            List<FeedItem> queue = DBReader.getQueue();
            List<FeedItem> removed = new ArrayList<>();
            if (feed.getItems() == null) {
                DBReader.getFeedItemList(feed);
            }
            for (FeedItem item : feed.getItems()) {
                if (queue.remove(item)) {
                    removed.add(item);
                }
                if (item.getMedia() != null && item.getMedia().isDownloaded()) {
                    File mediaFile = new File(item.getMedia().getFile_url());
                    mediaFile.delete();
                } else if (item.getMedia() != null && requester.isDownloadingFile(item.getMedia())) {
                    requester.cancelDownload(context, item.getMedia());
                }
                if (item.hasItemImage()) {
                    FeedImage image = item.getImage();
                    if (image.isDownloaded() && image.getFile_url() != null) {
                        File imgFile = new File(image.getFile_url());
                        imgFile.delete();
                    } else if (requester.isDownloadingFile(image)) {
                        requester.cancelDownload(context, item.getImage());
                    }
                }
            }
            PodDBAdapter adapter = PodDBAdapter.getInstance();
            adapter.open();
            if (removed.size() > 0) {
                adapter.setQueue(queue);
                for (FeedItem item : removed) {
                    EventBus.getDefault().post(QueueEvent.irreversibleRemoved(item));
                }
            }
            adapter.removeFeed(feed);
            adapter.close();
            if (ClientConfig.gpodnetCallbacks.gpodnetEnabled()) {
                GpodnetPreferences.addRemovedFeed(feed.getDownload_url());
            }
            EventDistributor.getInstance().sendFeedUpdateBroadcast();
            // we assume we also removed download log entries for the feed or its media files.
            // especially important if download or refresh failed, as the user should not be able
            // to retry these
            EventDistributor.getInstance().sendDownloadLogUpdateBroadcast();
            BackupManager backupManager = new BackupManager(context);
            backupManager.dataChanged();
        }
    });
}
Also used : FeedImage(de.danoeh.antennapod.core.feed.FeedImage) FeedItem(de.danoeh.antennapod.core.feed.FeedItem) SharedPreferences(android.content.SharedPreferences) ArrayList(java.util.ArrayList) Intent(android.content.Intent) File(java.io.File) BackupManager(android.app.backup.BackupManager) Feed(de.danoeh.antennapod.core.feed.Feed)

Example 63 with Feed

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

the class MediaplayerInfoActivity 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 64 with Feed

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

the class NavListAdapter method getFeedView.

private View getFeedView(int position, View convertView, ViewGroup parent) {
    Activity context = activity.get();
    if (context == null) {
        return null;
    }
    int feedPos = position - getSubscriptionOffset();
    Feed feed = itemAccess.getItem(feedPos);
    FeedHolder holder;
    if (convertView == null) {
        holder = new FeedHolder();
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.nav_feedlistitem, parent, false);
        holder.image = (ImageView) convertView.findViewById(R.id.imgvCover);
        holder.title = (TextView) convertView.findViewById(R.id.txtvTitle);
        holder.failure = (IconTextView) convertView.findViewById(R.id.itxtvFailure);
        holder.count = (TextView) convertView.findViewById(R.id.txtvCount);
        convertView.setTag(holder);
    } else {
        holder = (FeedHolder) convertView.getTag();
    }
    Glide.with(context).load(feed.getImageLocation()).placeholder(R.color.light_gray).error(R.color.light_gray).diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY).fitCenter().dontAnimate().into(holder.image);
    holder.title.setText(feed.getTitle());
    if (feed.hasLastUpdateFailed()) {
        RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams) holder.title.getLayoutParams();
        p.addRule(RelativeLayout.LEFT_OF, R.id.itxtvFailure);
        holder.failure.setVisibility(View.VISIBLE);
    } else {
        RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams) holder.title.getLayoutParams();
        p.addRule(RelativeLayout.LEFT_OF, R.id.txtvCount);
        holder.failure.setVisibility(View.GONE);
    }
    int counter = itemAccess.getFeedCounter(feed.getId());
    if (counter > 0) {
        holder.count.setVisibility(View.VISIBLE);
        holder.count.setText(String.valueOf(counter));
        if (itemAccess.getSelectedItemIndex() == position) {
            holder.count.setTypeface(null, Typeface.BOLD);
        } else {
            holder.count.setTypeface(null, Typeface.NORMAL);
        }
    } else {
        holder.count.setVisibility(View.GONE);
    }
    return convertView;
}
Also used : LayoutInflater(android.view.LayoutInflater) RelativeLayout(android.widget.RelativeLayout) MainActivity(de.danoeh.antennapod.activity.MainActivity) Activity(android.app.Activity) Feed(de.danoeh.antennapod.core.feed.Feed)

Example 65 with Feed

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

the class SearchlistAdapter method getView.

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final Holder holder;
    SearchResult result = getItem(position);
    FeedComponent component = result.getComponent();
    // Inflate Layout
    if (convertView == null) {
        holder = new Holder();
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.searchlist_item, parent, false);
        holder.title = (TextView) convertView.findViewById(R.id.txtvTitle);
        if (Build.VERSION.SDK_INT >= 23) {
            holder.title.setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_FULL);
        }
        holder.cover = (ImageView) convertView.findViewById(R.id.imgvFeedimage);
        holder.subtitle = (TextView) convertView.findViewById(R.id.txtvSubtitle);
        convertView.setTag(holder);
    } else {
        holder = (Holder) convertView.getTag();
    }
    if (component.getClass() == Feed.class) {
        final Feed feed = (Feed) component;
        holder.title.setText(feed.getTitle());
        holder.subtitle.setVisibility(View.GONE);
        Glide.with(context).load(feed.getImageLocation()).placeholder(R.color.light_gray).error(R.color.light_gray).diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY).fitCenter().dontAnimate().into(holder.cover);
    } else if (component.getClass() == FeedItem.class) {
        final FeedItem item = (FeedItem) component;
        holder.title.setText(item.getTitle());
        if (result.getSubtitle() != null) {
            holder.subtitle.setVisibility(View.VISIBLE);
            holder.subtitle.setText(result.getSubtitle());
        }
        ViewHelper.setAlpha(convertView, item.isPlayed() ? 0.5f : 1.0f);
        Glide.with(context).load(item.getFeed().getImageLocation()).placeholder(R.color.light_gray).error(R.color.light_gray).diskCacheStrategy(ApGlideSettings.AP_DISK_CACHE_STRATEGY).fitCenter().dontAnimate().into(holder.cover);
    }
    return convertView;
}
Also used : FeedItem(de.danoeh.antennapod.core.feed.FeedItem) LayoutInflater(android.view.LayoutInflater) SearchResult(de.danoeh.antennapod.core.feed.SearchResult) FeedComponent(de.danoeh.antennapod.core.feed.FeedComponent) 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