Initial commit

This commit is contained in:
admin1
2026-07-14 11:11:36 +08:00
commit 656499cf94
604 changed files with 119518 additions and 0 deletions
+97
View File
@@ -0,0 +1,97 @@
library;
enum TimeBucketScheme { watched, added }
class TimeBucket {
final String key;
final String label;
final int order;
const TimeBucket({
required this.key,
required this.label,
required this.order,
});
}
const _bucketToday = TimeBucket(key: 'today', label: '今天', order: 0);
const _bucketYesterday = TimeBucket(key: 'yesterday', label: '昨天', order: 1);
const _bucketThisWeekWatched = TimeBucket(
key: 'this_week',
label: '本周',
order: 2,
);
const _bucketEarlierWatched = TimeBucket(key: 'earlier', label: '更早', order: 3);
const _bucketThisWeekAdded = TimeBucket(
key: 'this_week',
label: '本周',
order: 1,
);
const _bucketThisMonthAdded = TimeBucket(
key: 'this_month',
label: '本月',
order: 2,
);
const _bucketEarlierAdded = TimeBucket(key: 'earlier', label: '更早', order: 3);
DateTime? parseEmbyDate(Object? raw) {
if (raw is DateTime) return raw.toLocal();
if (raw is! String || raw.isEmpty) return null;
final parsed = DateTime.tryParse(raw);
return parsed?.toLocal();
}
DateTime _dateOnly(DateTime d) => DateTime(d.year, d.month, d.day);
DateTime _startOfWeek(DateTime now) {
final today = _dateOnly(now);
return today.subtract(Duration(days: today.weekday - DateTime.monday));
}
TimeBucket bucketFor(DateTime? when, DateTime now, TimeBucketScheme scheme) {
final earlier = scheme == TimeBucketScheme.watched
? _bucketEarlierWatched
: _bucketEarlierAdded;
if (when == null) return earlier;
final whenDay = _dateOnly(when);
final todayDay = _dateOnly(now);
final dayDiff = todayDay.difference(whenDay).inDays;
switch (scheme) {
case TimeBucketScheme.watched:
if (dayDiff <= 0) return _bucketToday;
if (dayDiff == 1) return _bucketYesterday;
if (!whenDay.isBefore(_startOfWeek(now))) return _bucketThisWeekWatched;
return _bucketEarlierWatched;
case TimeBucketScheme.added:
if (dayDiff <= 0) return _bucketToday;
if (!whenDay.isBefore(_startOfWeek(now))) return _bucketThisWeekAdded;
if (whenDay.year == todayDay.year && whenDay.month == todayDay.month) {
return _bucketThisMonthAdded;
}
return _bucketEarlierAdded;
}
}
String? relativeTimeLabel(DateTime? when, DateTime now) {
if (when == null) return null;
final diff = now.difference(when);
if (diff.isNegative) return '刚刚';
if (diff.inMinutes < 1) return '刚刚';
if (diff.inMinutes < 60) return '${diff.inMinutes} 分钟前';
if (diff.inHours < 24) return '${diff.inHours} 小时前';
if (diff.inDays < 7) return '${diff.inDays} 天前';
if (diff.inDays < 35) return '${(diff.inDays / 7).floor()} 周前';
final m = when.month.toString().padLeft(2, '0');
final d = when.day.toString().padLeft(2, '0');
return '${when.year}-$m-$d';
}