Add ability to mark an item as played

This commit is contained in:
Nathan Schulzke 2021-07-26 20:51:41 -06:00
parent 39722a5563
commit 7fd2ebc252
4 changed files with 53 additions and 3 deletions

View file

@ -331,7 +331,8 @@ class FeedFragment : BaseStateFragment<FeedState>() {
StreamDialogEntry.start_here_on_background,
StreamDialogEntry.append_playlist,
StreamDialogEntry.share,
StreamDialogEntry.open_in_browser
StreamDialogEntry.open_in_browser,
StreamDialogEntry.mark_as_played
)
)
} else {
@ -341,7 +342,8 @@ class FeedFragment : BaseStateFragment<FeedState>() {
StreamDialogEntry.start_here_on_popup,
StreamDialogEntry.append_playlist,
StreamDialogEntry.share,
StreamDialogEntry.open_in_browser
StreamDialogEntry.open_in_browser,
StreamDialogEntry.mark_as_played
)
)
}

View file

@ -42,6 +42,7 @@ import org.schabi.newpipe.database.stream.model.StreamEntity;
import org.schabi.newpipe.database.stream.model.StreamStateEntity;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.stream.StreamInfo;
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
import java.time.OffsetDateTime;
@ -81,6 +82,41 @@ public class HistoryRecordManager {
// Watch History
///////////////////////////////////////////////////////
public Maybe<Long> markAsPlayed(final StreamInfoItem info) {
if (!isStreamHistoryEnabled()) {
return Maybe.empty();
}
final OffsetDateTime currentTime = OffsetDateTime.now(ZoneOffset.UTC);
return Maybe.fromCallable(() -> database.runInTransaction(() -> {
final long streamId = streamTable.upsert(new StreamEntity(info));
final List<StreamStateEntity> states = streamStateTable.getState(streamId)
.blockingFirst();
if (!states.isEmpty()) {
final StreamStateEntity entity = states.get(0);
entity.setProgressMillis(info.getDuration() * 1000);
streamStateTable.update(entity);
} else {
final StreamStateEntity entity = new StreamStateEntity(
streamId,
info.getDuration() * 1000
);
streamStateTable.insert(entity);
}
final StreamHistoryEntity latestEntry = streamHistoryTable.getLatestEntry(streamId);
if (latestEntry != null) {
streamHistoryTable.delete(latestEntry);
latestEntry.setAccessDate(currentTime);
latestEntry.setRepeatCount(latestEntry.getRepeatCount() + 1);
return streamHistoryTable.insert(latestEntry);
} else {
return streamHistoryTable.insert(new StreamHistoryEntity(streamId, currentTime));
}
})).subscribeOn(Schedulers.io());
}
public Maybe<Long> onViewed(final StreamInfo info) {
if (!isStreamHistoryEnabled()) {
return Maybe.empty();