Skip to content

Commit

Permalink
Merge pull request #323 from ErBWs/main
Browse files Browse the repository at this point in the history
Add episodeName to hive to display it in history card
  • Loading branch information
Predidit authored Oct 19, 2024
2 parents bf6f208 + 10cb908 commit b52ba49
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 54 deletions.
5 changes: 4 additions & 1 deletion lib/bean/card/bangumi_history_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,10 @@ class _BangumiHistoryCardVState extends State<BangumiHistoryCardV> {
// 测试 因为API问题评分功能搁置
Text('番剧源: ${widget.historyItem.adapterName}',
style: style),
Text('上次看到: 第${widget.historyItem.lastWatchEpisode}话',
Text(
widget.historyItem.lastWatchEpisodeName == ''
? '上次看到: 第${widget.historyItem.lastWatchEpisode}话'
: '上次看到: ${widget.historyItem.lastWatchEpisodeName}',
style: style),
Text('排名: ${widget.historyItem.bangumiItem.rank}',
style: style),
Expand Down
62 changes: 60 additions & 2 deletions lib/modules/history/history_module.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'package:kazumi/modules/bangumi/bangumi_item.dart';

part 'history_module.g.dart';

@HiveType(typeId: 1)
// @HiveType(typeId: 1)
class History {
@HiveField(0)
Map<int, Progress> progresses = {};
Expand All @@ -23,10 +23,13 @@ class History {
@HiveField(5)
String lastSrc;

@HiveField(6)
String lastWatchEpisodeName;

String get key => adapterName + bangumiItem.id.toString();

History(
this.bangumiItem, this.lastWatchEpisode, this.adapterName, this.lastWatchTime, this.lastSrc);
this.bangumiItem, this.lastWatchEpisode, this.adapterName, this.lastWatchTime, this.lastSrc, this.lastWatchEpisodeName);

static String getKey(String n, BangumiItem s) => n + s.id.toString();

Expand All @@ -36,6 +39,61 @@ class History {
}
}

class HistoryAdapter extends TypeAdapter<History> {
@override
final int typeId = 1;

@override
History read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
// 保留对旧版本历史数据兼容
if (fields[6] == null) {
fields[6] = '';
}
return History(
fields[3] as BangumiItem,
fields[1] as int,
fields[2] as String,
fields[4] as DateTime,
fields[5] as String,
fields[6] as String,
)..progresses = (fields[0] as Map).cast<int, Progress>();
}

@override
void write(BinaryWriter writer, History obj) {
writer
..writeByte(7)
..writeByte(0)
..write(obj.progresses)
..writeByte(1)
..write(obj.lastWatchEpisode)
..writeByte(2)
..write(obj.adapterName)
..writeByte(3)
..write(obj.bangumiItem)
..writeByte(4)
..write(obj.lastWatchTime)
..writeByte(5)
..write(obj.lastSrc)
..writeByte(6)
..write(obj.lastWatchEpisodeName);
}

@override
int get hashCode => typeId.hashCode;

@override
bool operator ==(Object other) =>
identical(this, other) ||
other is HistoryAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}

@HiveType(typeId: 2)
class Progress {
@HiveField(0)
Expand Down
48 changes: 0 additions & 48 deletions lib/modules/history/history_module.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 5 additions & 2 deletions lib/pages/history/history_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,21 @@ abstract class _HistoryController with Store {
}

void updateHistory(
int episode, int road, String adapterName, BangumiItem bangumiItem, Duration progress, String lastSrc) {
int episode, int road, String adapterName, BangumiItem bangumiItem, Duration progress, String lastSrc, String lastWatchEpisodeName) {
bool privateMode = setting.get(SettingBoxKey.privateMode, defaultValue: false);
if (privateMode) {
return;
}
var history = storedHistories.get(History.getKey(adapterName, bangumiItem)) ??
History(bangumiItem, episode, adapterName, DateTime.now(), lastSrc);
History(bangumiItem, episode, adapterName, DateTime.now(), lastSrc, lastWatchEpisodeName);
history.lastWatchEpisode = episode;
history.lastWatchTime = DateTime.now();
if (lastSrc != '') {
history.lastSrc = lastSrc;
}
if (lastWatchEpisodeName != '') {
history.lastWatchEpisodeName = lastWatchEpisodeName;
}

var prog = history.progresses[episode];
if (prog == null) {
Expand Down
3 changes: 2 additions & 1 deletion lib/pages/player/player_item.dart
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,8 @@ class _PlayerItemState extends State<PlayerItem>
videoPageController.currentPlugin.name,
infoController.bangumiItem,
playerController.mediaPlayer.value.position,
videoPageController.src);
videoPageController.src,
videoPageController.roadList[videoPageController.currentRoad].identifier[videoPageController.currentEspisode - 1]);
}
// 自动播放下一集
if (playerController.completed &&
Expand Down
5 changes: 5 additions & 0 deletions macos/Runner/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>NSHumanReadableCopyright</key>
<string>$(PRODUCT_COPYRIGHT)</string>
<key>NSMainNibFile</key>
Expand Down

0 comments on commit b52ba49

Please sign in to comment.