worldhopper/lib/models/downloaded_series.g.dart
Felipe M. 30df288552
All checks were successful
ci/woodpecker/tag/release Pipeline was successful
feat: add offline series download with local reading support
Enable downloading entire series for offline reading. Includes database
tables and migration for downloaded series/chapters, download orchestration
with progress tracking, per-chapter EPUB and image stream downloading,
a Downloaded section in the library, and offline-first reader support.

Key changes:
- DB migration v11 with downloaded_series and downloaded_chapters tables
- Series download service with pagination, cancellation, and progress stream
- Feed screen download button with status indicators and completion feedback
- Library screen Downloaded section with series cards and detail screen
- Reader pre-caching using local files (including two-page spread mode)
- Next-in-series navigation resolves from downloaded chapters when offline
- Skip image downloads and progress sync when device is offline
- Settings screen shows download storage usage with clear option

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 23:40:15 +01:00

55 lines
2.1 KiB
Dart

// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'downloaded_series.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
_$DownloadedSeriesImpl _$$DownloadedSeriesImplFromJson(
Map<String, dynamic> json) =>
_$DownloadedSeriesImpl(
id: json['id'] as String,
serverId: json['serverId'] as String,
seriesFeedUrl: json['seriesFeedUrl'] as String,
title: json['title'] as String,
coverUrl: json['coverUrl'] as String?,
coverPath: json['coverPath'] as String?,
thumbnailUrl: json['thumbnailUrl'] as String?,
thumbnailPath: json['thumbnailPath'] as String?,
status: $enumDecodeNullable(_$DownloadStatusEnumMap, json['status']) ??
DownloadStatus.pending,
totalChapters: (json['totalChapters'] as num?)?.toInt() ?? 0,
downloadedChaptersCount:
(json['downloadedChaptersCount'] as num?)?.toInt() ?? 0,
downloadedAt: json['downloadedAt'] == null
? null
: DateTime.parse(json['downloadedAt'] as String),
updatedAt: DateTime.parse(json['updatedAt'] as String),
);
Map<String, dynamic> _$$DownloadedSeriesImplToJson(
_$DownloadedSeriesImpl instance) =>
<String, dynamic>{
'id': instance.id,
'serverId': instance.serverId,
'seriesFeedUrl': instance.seriesFeedUrl,
'title': instance.title,
'coverUrl': instance.coverUrl,
'coverPath': instance.coverPath,
'thumbnailUrl': instance.thumbnailUrl,
'thumbnailPath': instance.thumbnailPath,
'status': _$DownloadStatusEnumMap[instance.status]!,
'totalChapters': instance.totalChapters,
'downloadedChaptersCount': instance.downloadedChaptersCount,
'downloadedAt': instance.downloadedAt?.toIso8601String(),
'updatedAt': instance.updatedAt.toIso8601String(),
};
const _$DownloadStatusEnumMap = {
DownloadStatus.pending: 'pending',
DownloadStatus.downloading: 'downloading',
DownloadStatus.complete: 'complete',
DownloadStatus.partial: 'partial',
DownloadStatus.failed: 'failed',
};