Sync feeds that have their state changed to subscribed

This commit is contained in:
ByteHamster 2024-04-18 21:47:55 +02:00
parent 2037978dd3
commit 2ab4ab9638
5 changed files with 29 additions and 21 deletions

View File

@ -500,11 +500,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem
viewBinding.header.butShowInfo.setOnClickListener(v -> showFeedInfo());
viewBinding.header.imgvCover.setOnClickListener(v -> showFeedInfo());
viewBinding.header.butSubscribe.setOnClickListener(view -> {
feed.getPreferences().setKeepUpdated(true);
DBWriter.setFeedPreferences(feed.getPreferences());
feed.setState(Feed.STATE_SUBSCRIBED);
DBWriter.setFeedState(feed);
FeedUpdateManager.getInstance().runOnceOrAsk(requireContext(), feed);
DBWriter.setFeedState(getContext(), feed, Feed.STATE_SUBSCRIBED);
});
viewBinding.header.butShowSettings.setOnClickListener(v -> {
if (feed != null) {

View File

@ -29,7 +29,6 @@ import com.google.android.material.snackbar.Snackbar;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.net.download.service.feed.remote.Downloader;
import de.danoeh.antennapod.net.download.service.feed.remote.HttpDownloader;
import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
import de.danoeh.antennapod.ui.appstartintent.MainActivityStarter;
import de.danoeh.antennapod.ui.common.ThemeSwitcher;
import de.danoeh.antennapod.net.download.serviceinterface.DownloadRequestCreator;
@ -394,22 +393,18 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
if (feedInSubscriptions != null) {
if (feedInSubscriptions.getState() == Feed.STATE_SUBSCRIBED) {
viewBinding.subscribeButton.setVisibility(View.GONE);
viewBinding.viewEpisodesButton.setVisibility(View.GONE);
viewBinding.previewEpisodesButton.setVisibility(View.GONE);
viewBinding.openPodcastButton.setVisibility(View.VISIBLE);
viewBinding.openPodcastButton.setOnClickListener(view -> openFeed(feedInSubscriptions.getId()));
} else {
viewBinding.openPodcastButton.setVisibility(View.GONE);
viewBinding.subscribeButton.setVisibility(View.VISIBLE);
viewBinding.subscribeButton.setOnClickListener(view -> {
feedInSubscriptions.getPreferences().setKeepUpdated(true);
DBWriter.setFeedPreferences(feedInSubscriptions.getPreferences());
feedInSubscriptions.setState(Feed.STATE_SUBSCRIBED);
DBWriter.setFeedState(feedInSubscriptions);
FeedUpdateManager.getInstance().runOnceOrAsk(this, feedInSubscriptions);
DBWriter.setFeedState(this, feedInSubscriptions, Feed.STATE_SUBSCRIBED);
openFeed(feedInSubscriptions.getId());
});
viewBinding.viewEpisodesButton.setVisibility(View.VISIBLE);
viewBinding.viewEpisodesButton.setOnClickListener(view -> {
viewBinding.previewEpisodesButton.setVisibility(View.VISIBLE);
viewBinding.previewEpisodesButton.setOnClickListener(view -> {
feed.setId(feedInSubscriptions.getId());
FeedDatabaseWriter.updateFeed(this, feed, false);
openFeed(feedInSubscriptions.getId());
@ -418,9 +413,9 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
} else {
viewBinding.openPodcastButton.setVisibility(View.GONE);
viewBinding.subscribeButton.setVisibility(View.VISIBLE);
viewBinding.viewEpisodesButton.setVisibility(View.VISIBLE);
viewBinding.previewEpisodesButton.setVisibility(View.VISIBLE);
viewBinding.viewEpisodesButton.setOnClickListener(v -> {
viewBinding.previewEpisodesButton.setOnClickListener(v -> {
feed.setState(Feed.STATE_NOT_SUBSCRIBED);
FeedDatabaseWriter.updateFeed(this, feed, false);
Feed feedFromDb = DBReader.getFeed(feed.getId(), false, 0, Integer.MAX_VALUE);

View File

@ -151,11 +151,11 @@
android:text="@string/open_podcast" />
<Button
android:id="@+id/viewEpisodesButton"
android:id="@+id/previewEpisodesButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="@string/view_episodes"
android:text="@string/preview_episodes"
style="@style/Widget.Material3.Button.OutlinedButton" />
<CheckBox

View File

@ -14,6 +14,7 @@ import androidx.documentfile.provider.DocumentFile;
import com.google.common.util.concurrent.Futures;
import de.danoeh.antennapod.event.DownloadLogEvent;
import de.danoeh.antennapod.model.feed.FeedItemFilter;
import de.danoeh.antennapod.net.download.serviceinterface.AutoDownloadManager;
import de.danoeh.antennapod.net.download.serviceinterface.DownloadServiceInterface;
import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
@ -929,11 +930,27 @@ public class DBWriter {
});
}
public static Future<?> setFeedState(Feed feed) {
public static Future<?> setFeedState(Context context, Feed feed, int newState) {
int oldState = feed.getState();
return runOnDbThread(() -> {
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
adapter.setFeedState(feed.getId(), feed.getState());
adapter.setFeedState(feed.getId(), newState);
feed.setState(newState);
if (oldState == Feed.STATE_NOT_SUBSCRIBED && newState == Feed.STATE_SUBSCRIBED) {
feed.getPreferences().setKeepUpdated(true);
DBWriter.setFeedPreferences(feed.getPreferences());
FeedUpdateManager.getInstance().runOnceOrAsk(context, feed);
SynchronizationQueueSink.enqueueFeedAddedIfSynchronizationIsActive(context, feed.getDownloadUrl());
DBReader.getFeedItemList(feed, FeedItemFilter.unfiltered(),
SortOrder.DATE_NEW_OLD, 0, Integer.MAX_VALUE);
for (FeedItem item : feed.getItems()) {
if (item.isPlayed()) {
SynchronizationQueueSink.enqueueEpisodePlayedIfSynchronizationIsActive(
context, item.getMedia(), true);
}
}
}
adapter.close();
EventBus.getDefault().post(new FeedListUpdateEvent(feed));
});

View File

@ -681,7 +681,7 @@
<!-- Online feed view -->
<string name="subscribe_label">Subscribe</string>
<string name="view_episodes">View episodes</string>
<string name="preview_episodes">Preview episodes</string>
<!-- Content descriptions for image buttons -->
<string name="toolbar_back_button_content_description">Back</string>