fix: resume history from the recording account progress (#2458)

This commit is contained in:
Esing
2026-07-24 12:33:33 +08:00
committed by GitHub
parent 0ca091ac48
commit fa75f5c542
3 changed files with 21 additions and 1 deletions

View File

@@ -21,6 +21,18 @@ class HistoryItemModel with MultiSelectData {
String? tagName;
int? liveStatus;
/// The history API uses seconds as the progress unit
/// while the player expects milliseconds.
///
/// The history API uses `-1` to indicate that the video has been fully watched.
/// When reopened, playback should start from the beginning to avoid resuming from
/// the last playback position associated with the video streaming account.
int? get playbackProgress {
final progress = this.progress;
if (progress == null) return null;
return progress == -1 ? 0 : progress * Duration.millisecondsPerSecond;
}
HistoryItemModel({
this.title,
this.cover,

View File

@@ -69,13 +69,17 @@ class HistoryItem extends StatelessWidget {
SmartDialog.showToast('直播未开播');
}
} else if (business == 'pgc') {
PageUtils.viewPgc(epId: item.history.epid);
PageUtils.viewPgc(
epId: item.history.epid,
progress: item.playbackProgress,
);
} else if (business == 'cheese') {
if (item.uri?.isNotEmpty == true) {
PageUtils.viewPgcFromUri(
item.uri!,
isPgc: false,
aid: item.history.oid,
progress: item.playbackProgress,
);
}
} else {
@@ -101,6 +105,7 @@ class HistoryItem extends StatelessWidget {
cover: item.cover,
title: item.title,
dimension: dimension,
progress: item.playbackProgress,
);
}
}

View File

@@ -624,6 +624,7 @@ abstract final class PageUtils {
seasonId: isSeason ? id : null,
epId: isSeason ? null : id,
aid: aid,
progress: progress,
off: off,
);
}
@@ -752,6 +753,7 @@ abstract final class PageUtils {
dynamic seasonId,
dynamic epId,
int? aid,
int? progress, // milliseconds
bool off = false,
}) async {
try {
@@ -777,6 +779,7 @@ abstract final class PageUtils {
seasonId: response.seasonId,
epId: episode.id,
cover: episode.cover,
progress: progress,
extraArguments: {
'pgcItem': response,
},