added mihon backup support

This commit is contained in:
Schnitzel5 2025-03-14 00:41:45 +01:00
parent cc80ee3608
commit 5f33769bc1
51 changed files with 2585 additions and 60 deletions

View file

@ -0,0 +1,243 @@
//
// Generated code. Do not modify.
// source: BackupAnime.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
import 'BackupEpisode.pb.dart' as $0;
import 'BackupHistory.pb.dart' as $1;
class BackupAnime extends $pb.GeneratedMessage {
factory BackupAnime({
$core.int? source,
$core.String? url,
$core.String? title,
$core.String? artist,
$core.String? author,
$core.String? description,
$core.Iterable<$core.String>? genre,
$core.int? status,
$core.String? thumbnailUrl,
$core.int? dateAdded,
$core.Iterable<$0.BackupEpisode>? episodes,
$core.Iterable<$core.int>? categories,
$core.int? viewerFlags,
$core.Iterable<$1.BackupHistory>? history,
$core.int? lastModifiedAt,
}) {
final $result = create();
if (source != null) {
$result.source = source;
}
if (url != null) {
$result.url = url;
}
if (title != null) {
$result.title = title;
}
if (artist != null) {
$result.artist = artist;
}
if (author != null) {
$result.author = author;
}
if (description != null) {
$result.description = description;
}
if (genre != null) {
$result.genre.addAll(genre);
}
if (status != null) {
$result.status = status;
}
if (thumbnailUrl != null) {
$result.thumbnailUrl = thumbnailUrl;
}
if (dateAdded != null) {
$result.dateAdded = dateAdded;
}
if (episodes != null) {
$result.episodes.addAll(episodes);
}
if (categories != null) {
$result.categories.addAll(categories);
}
if (viewerFlags != null) {
$result.viewerFlags = viewerFlags;
}
if (history != null) {
$result.history.addAll(history);
}
if (lastModifiedAt != null) {
$result.lastModifiedAt = lastModifiedAt;
}
return $result;
}
BackupAnime._() : super();
factory BackupAnime.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory BackupAnime.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'BackupAnime', createEmptyInstance: create)
..a<$core.int>(1, _omitFieldNames ? '' : 'source', $pb.PbFieldType.O3)
..aOS(2, _omitFieldNames ? '' : 'url')
..aOS(3, _omitFieldNames ? '' : 'title')
..aOS(4, _omitFieldNames ? '' : 'artist')
..aOS(5, _omitFieldNames ? '' : 'author')
..aOS(6, _omitFieldNames ? '' : 'description')
..pPS(7, _omitFieldNames ? '' : 'genre')
..a<$core.int>(8, _omitFieldNames ? '' : 'status', $pb.PbFieldType.O3)
..aOS(9, _omitFieldNames ? '' : 'thumbnailUrl', protoName: 'thumbnailUrl')
..a<$core.int>(13, _omitFieldNames ? '' : 'dateAdded', $pb.PbFieldType.O3, protoName: 'dateAdded')
..pc<$0.BackupEpisode>(16, _omitFieldNames ? '' : 'episodes', $pb.PbFieldType.PM, subBuilder: $0.BackupEpisode.create)
..p<$core.int>(17, _omitFieldNames ? '' : 'categories', $pb.PbFieldType.K3)
..a<$core.int>(103, _omitFieldNames ? '' : 'viewerFlags', $pb.PbFieldType.O3)
..pc<$1.BackupHistory>(104, _omitFieldNames ? '' : 'history', $pb.PbFieldType.PM, subBuilder: $1.BackupHistory.create)
..a<$core.int>(106, _omitFieldNames ? '' : 'lastModifiedAt', $pb.PbFieldType.O3, protoName: 'lastModifiedAt')
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
BackupAnime clone() => BackupAnime()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
BackupAnime copyWith(void Function(BackupAnime) updates) => super.copyWith((message) => updates(message as BackupAnime)) as BackupAnime;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static BackupAnime create() => BackupAnime._();
BackupAnime createEmptyInstance() => create();
static $pb.PbList<BackupAnime> createRepeated() => $pb.PbList<BackupAnime>();
@$core.pragma('dart2js:noInline')
static BackupAnime getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BackupAnime>(create);
static BackupAnime? _defaultInstance;
@$pb.TagNumber(1)
$core.int get source => $_getIZ(0);
@$pb.TagNumber(1)
set source($core.int v) { $_setSignedInt32(0, v); }
@$pb.TagNumber(1)
$core.bool hasSource() => $_has(0);
@$pb.TagNumber(1)
void clearSource() => clearField(1);
@$pb.TagNumber(2)
$core.String get url => $_getSZ(1);
@$pb.TagNumber(2)
set url($core.String v) { $_setString(1, v); }
@$pb.TagNumber(2)
$core.bool hasUrl() => $_has(1);
@$pb.TagNumber(2)
void clearUrl() => clearField(2);
@$pb.TagNumber(3)
$core.String get title => $_getSZ(2);
@$pb.TagNumber(3)
set title($core.String v) { $_setString(2, v); }
@$pb.TagNumber(3)
$core.bool hasTitle() => $_has(2);
@$pb.TagNumber(3)
void clearTitle() => clearField(3);
@$pb.TagNumber(4)
$core.String get artist => $_getSZ(3);
@$pb.TagNumber(4)
set artist($core.String v) { $_setString(3, v); }
@$pb.TagNumber(4)
$core.bool hasArtist() => $_has(3);
@$pb.TagNumber(4)
void clearArtist() => clearField(4);
@$pb.TagNumber(5)
$core.String get author => $_getSZ(4);
@$pb.TagNumber(5)
set author($core.String v) { $_setString(4, v); }
@$pb.TagNumber(5)
$core.bool hasAuthor() => $_has(4);
@$pb.TagNumber(5)
void clearAuthor() => clearField(5);
@$pb.TagNumber(6)
$core.String get description => $_getSZ(5);
@$pb.TagNumber(6)
set description($core.String v) { $_setString(5, v); }
@$pb.TagNumber(6)
$core.bool hasDescription() => $_has(5);
@$pb.TagNumber(6)
void clearDescription() => clearField(6);
@$pb.TagNumber(7)
$core.List<$core.String> get genre => $_getList(6);
@$pb.TagNumber(8)
$core.int get status => $_getIZ(7);
@$pb.TagNumber(8)
set status($core.int v) { $_setSignedInt32(7, v); }
@$pb.TagNumber(8)
$core.bool hasStatus() => $_has(7);
@$pb.TagNumber(8)
void clearStatus() => clearField(8);
@$pb.TagNumber(9)
$core.String get thumbnailUrl => $_getSZ(8);
@$pb.TagNumber(9)
set thumbnailUrl($core.String v) { $_setString(8, v); }
@$pb.TagNumber(9)
$core.bool hasThumbnailUrl() => $_has(8);
@$pb.TagNumber(9)
void clearThumbnailUrl() => clearField(9);
@$pb.TagNumber(13)
$core.int get dateAdded => $_getIZ(9);
@$pb.TagNumber(13)
set dateAdded($core.int v) { $_setSignedInt32(9, v); }
@$pb.TagNumber(13)
$core.bool hasDateAdded() => $_has(9);
@$pb.TagNumber(13)
void clearDateAdded() => clearField(13);
@$pb.TagNumber(16)
$core.List<$0.BackupEpisode> get episodes => $_getList(10);
@$pb.TagNumber(17)
$core.List<$core.int> get categories => $_getList(11);
@$pb.TagNumber(103)
$core.int get viewerFlags => $_getIZ(12);
@$pb.TagNumber(103)
set viewerFlags($core.int v) { $_setSignedInt32(12, v); }
@$pb.TagNumber(103)
$core.bool hasViewerFlags() => $_has(12);
@$pb.TagNumber(103)
void clearViewerFlags() => clearField(103);
@$pb.TagNumber(104)
$core.List<$1.BackupHistory> get history => $_getList(13);
@$pb.TagNumber(106)
$core.int get lastModifiedAt => $_getIZ(14);
@$pb.TagNumber(106)
set lastModifiedAt($core.int v) { $_setSignedInt32(14, v); }
@$pb.TagNumber(106)
$core.bool hasLastModifiedAt() => $_has(14);
@$pb.TagNumber(106)
void clearLastModifiedAt() => clearField(106);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,11 @@
//
// Generated code. Do not modify.
// source: BackupAnime.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import

View file

@ -0,0 +1,59 @@
//
// Generated code. Do not modify.
// source: BackupAnime.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use backupAnimeDescriptor instead')
const BackupAnime$json = {
'1': 'BackupAnime',
'2': [
{'1': 'source', '3': 1, '4': 1, '5': 5, '10': 'source'},
{'1': 'url', '3': 2, '4': 1, '5': 9, '10': 'url'},
{'1': 'title', '3': 3, '4': 1, '5': 9, '10': 'title'},
{'1': 'artist', '3': 4, '4': 1, '5': 9, '9': 0, '10': 'artist', '17': true},
{'1': 'author', '3': 5, '4': 1, '5': 9, '9': 1, '10': 'author', '17': true},
{'1': 'description', '3': 6, '4': 1, '5': 9, '9': 2, '10': 'description', '17': true},
{'1': 'genre', '3': 7, '4': 3, '5': 9, '10': 'genre'},
{'1': 'status', '3': 8, '4': 1, '5': 5, '10': 'status'},
{'1': 'thumbnailUrl', '3': 9, '4': 1, '5': 9, '9': 3, '10': 'thumbnailUrl', '17': true},
{'1': 'dateAdded', '3': 13, '4': 1, '5': 5, '10': 'dateAdded'},
{'1': 'episodes', '3': 16, '4': 3, '5': 11, '6': '.BackupEpisode', '10': 'episodes'},
{'1': 'categories', '3': 17, '4': 3, '5': 5, '10': 'categories'},
{'1': 'viewer_flags', '3': 103, '4': 1, '5': 5, '9': 4, '10': 'viewerFlags', '17': true},
{'1': 'history', '3': 104, '4': 3, '5': 11, '6': '.BackupHistory', '10': 'history'},
{'1': 'lastModifiedAt', '3': 106, '4': 1, '5': 5, '9': 5, '10': 'lastModifiedAt', '17': true},
],
'8': [
{'1': '_artist'},
{'1': '_author'},
{'1': '_description'},
{'1': '_thumbnailUrl'},
{'1': '_viewer_flags'},
{'1': '_lastModifiedAt'},
],
};
/// Descriptor for `BackupAnime`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List backupAnimeDescriptor = $convert.base64Decode(
'CgtCYWNrdXBBbmltZRIWCgZzb3VyY2UYASABKAVSBnNvdXJjZRIQCgN1cmwYAiABKAlSA3VybB'
'IUCgV0aXRsZRgDIAEoCVIFdGl0bGUSGwoGYXJ0aXN0GAQgASgJSABSBmFydGlzdIgBARIbCgZh'
'dXRob3IYBSABKAlIAVIGYXV0aG9yiAEBEiUKC2Rlc2NyaXB0aW9uGAYgASgJSAJSC2Rlc2NyaX'
'B0aW9uiAEBEhQKBWdlbnJlGAcgAygJUgVnZW5yZRIWCgZzdGF0dXMYCCABKAVSBnN0YXR1cxIn'
'Cgx0aHVtYm5haWxVcmwYCSABKAlIA1IMdGh1bWJuYWlsVXJsiAEBEhwKCWRhdGVBZGRlZBgNIA'
'EoBVIJZGF0ZUFkZGVkEioKCGVwaXNvZGVzGBAgAygLMg4uQmFja3VwRXBpc29kZVIIZXBpc29k'
'ZXMSHgoKY2F0ZWdvcmllcxgRIAMoBVIKY2F0ZWdvcmllcxImCgx2aWV3ZXJfZmxhZ3MYZyABKA'
'VIBFILdmlld2VyRmxhZ3OIAQESKAoHaGlzdG9yeRhoIAMoCzIOLkJhY2t1cEhpc3RvcnlSB2hp'
'c3RvcnkSKwoObGFzdE1vZGlmaWVkQXQYaiABKAVIBVIObGFzdE1vZGlmaWVkQXSIAQFCCQoHX2'
'FydGlzdEIJCgdfYXV0aG9yQg4KDF9kZXNjcmlwdGlvbkIPCg1fdGh1bWJuYWlsVXJsQg8KDV92'
'aWV3ZXJfZmxhZ3NCEQoPX2xhc3RNb2RpZmllZEF0');

View file

@ -0,0 +1,14 @@
//
// Generated code. Do not modify.
// source: BackupAnime.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'BackupAnime.pb.dart';

View file

@ -0,0 +1,107 @@
//
// Generated code. Do not modify.
// source: BackupAniyomi.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
import 'BackupAnime.pb.dart' as $2;
import 'BackupCategory.pb.dart' as $1;
import 'BackupManga.pb.dart' as $0;
import 'BackupSource.pb.dart' as $3;
class BackupAniyomi extends $pb.GeneratedMessage {
factory BackupAniyomi({
$core.Iterable<$0.BackupManga>? backupManga,
$core.Iterable<$1.BackupCategory>? backupCategories,
$core.Iterable<$2.BackupAnime>? backupAnime,
$core.Iterable<$1.BackupCategory>? backupAnimeCategories,
$core.Iterable<$3.BackupSource>? backupSources,
$core.Iterable<$3.BackupSource>? backupAnimeSources,
}) {
final $result = create();
if (backupManga != null) {
$result.backupManga.addAll(backupManga);
}
if (backupCategories != null) {
$result.backupCategories.addAll(backupCategories);
}
if (backupAnime != null) {
$result.backupAnime.addAll(backupAnime);
}
if (backupAnimeCategories != null) {
$result.backupAnimeCategories.addAll(backupAnimeCategories);
}
if (backupSources != null) {
$result.backupSources.addAll(backupSources);
}
if (backupAnimeSources != null) {
$result.backupAnimeSources.addAll(backupAnimeSources);
}
return $result;
}
BackupAniyomi._() : super();
factory BackupAniyomi.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory BackupAniyomi.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'BackupAniyomi', createEmptyInstance: create)
..pc<$0.BackupManga>(1, _omitFieldNames ? '' : 'backupManga', $pb.PbFieldType.PM, protoName: 'backupManga', subBuilder: $0.BackupManga.create)
..pc<$1.BackupCategory>(2, _omitFieldNames ? '' : 'backupCategories', $pb.PbFieldType.PM, protoName: 'backupCategories', subBuilder: $1.BackupCategory.create)
..pc<$2.BackupAnime>(3, _omitFieldNames ? '' : 'backupAnime', $pb.PbFieldType.PM, protoName: 'backupAnime', subBuilder: $2.BackupAnime.create)
..pc<$1.BackupCategory>(4, _omitFieldNames ? '' : 'backupAnimeCategories', $pb.PbFieldType.PM, protoName: 'backupAnimeCategories', subBuilder: $1.BackupCategory.create)
..pc<$3.BackupSource>(101, _omitFieldNames ? '' : 'backupSources', $pb.PbFieldType.PM, protoName: 'backupSources', subBuilder: $3.BackupSource.create)
..pc<$3.BackupSource>(103, _omitFieldNames ? '' : 'backupAnimeSources', $pb.PbFieldType.PM, protoName: 'backupAnimeSources', subBuilder: $3.BackupSource.create)
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
BackupAniyomi clone() => BackupAniyomi()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
BackupAniyomi copyWith(void Function(BackupAniyomi) updates) => super.copyWith((message) => updates(message as BackupAniyomi)) as BackupAniyomi;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static BackupAniyomi create() => BackupAniyomi._();
BackupAniyomi createEmptyInstance() => create();
static $pb.PbList<BackupAniyomi> createRepeated() => $pb.PbList<BackupAniyomi>();
@$core.pragma('dart2js:noInline')
static BackupAniyomi getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BackupAniyomi>(create);
static BackupAniyomi? _defaultInstance;
@$pb.TagNumber(1)
$core.List<$0.BackupManga> get backupManga => $_getList(0);
@$pb.TagNumber(2)
$core.List<$1.BackupCategory> get backupCategories => $_getList(1);
@$pb.TagNumber(3)
$core.List<$2.BackupAnime> get backupAnime => $_getList(2);
@$pb.TagNumber(4)
$core.List<$1.BackupCategory> get backupAnimeCategories => $_getList(3);
@$pb.TagNumber(101)
$core.List<$3.BackupSource> get backupSources => $_getList(4);
@$pb.TagNumber(103)
$core.List<$3.BackupSource> get backupAnimeSources => $_getList(5);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,11 @@
//
// Generated code. Do not modify.
// source: BackupAniyomi.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import

View file

@ -0,0 +1,38 @@
//
// Generated code. Do not modify.
// source: BackupAniyomi.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use backupAniyomiDescriptor instead')
const BackupAniyomi$json = {
'1': 'BackupAniyomi',
'2': [
{'1': 'backupManga', '3': 1, '4': 3, '5': 11, '6': '.BackupManga', '10': 'backupManga'},
{'1': 'backupCategories', '3': 2, '4': 3, '5': 11, '6': '.BackupCategory', '10': 'backupCategories'},
{'1': 'backupAnime', '3': 3, '4': 3, '5': 11, '6': '.BackupAnime', '10': 'backupAnime'},
{'1': 'backupAnimeCategories', '3': 4, '4': 3, '5': 11, '6': '.BackupCategory', '10': 'backupAnimeCategories'},
{'1': 'backupSources', '3': 101, '4': 3, '5': 11, '6': '.BackupSource', '10': 'backupSources'},
{'1': 'backupAnimeSources', '3': 103, '4': 3, '5': 11, '6': '.BackupSource', '10': 'backupAnimeSources'},
],
};
/// Descriptor for `BackupAniyomi`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List backupAniyomiDescriptor = $convert.base64Decode(
'Cg1CYWNrdXBBbml5b21pEi4KC2JhY2t1cE1hbmdhGAEgAygLMgwuQmFja3VwTWFuZ2FSC2JhY2'
't1cE1hbmdhEjsKEGJhY2t1cENhdGVnb3JpZXMYAiADKAsyDy5CYWNrdXBDYXRlZ29yeVIQYmFj'
'a3VwQ2F0ZWdvcmllcxIuCgtiYWNrdXBBbmltZRgDIAMoCzIMLkJhY2t1cEFuaW1lUgtiYWNrdX'
'BBbmltZRJFChViYWNrdXBBbmltZUNhdGVnb3JpZXMYBCADKAsyDy5CYWNrdXBDYXRlZ29yeVIV'
'YmFja3VwQW5pbWVDYXRlZ29yaWVzEjMKDWJhY2t1cFNvdXJjZXMYZSADKAsyDS5CYWNrdXBTb3'
'VyY2VSDWJhY2t1cFNvdXJjZXMSPQoSYmFja3VwQW5pbWVTb3VyY2VzGGcgAygLMg0uQmFja3Vw'
'U291cmNlUhJiYWNrdXBBbmltZVNvdXJjZXM=');

View file

@ -0,0 +1,14 @@
//
// Generated code. Do not modify.
// source: BackupAniyomi.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'BackupAniyomi.pb.dart';

View file

@ -0,0 +1,96 @@
//
// Generated code. Do not modify.
// source: BackupCategory.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class BackupCategory extends $pb.GeneratedMessage {
factory BackupCategory({
$core.String? name,
$core.int? order,
$core.int? flags,
}) {
final $result = create();
if (name != null) {
$result.name = name;
}
if (order != null) {
$result.order = order;
}
if (flags != null) {
$result.flags = flags;
}
return $result;
}
BackupCategory._() : super();
factory BackupCategory.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory BackupCategory.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'BackupCategory', createEmptyInstance: create)
..aOS(1, _omitFieldNames ? '' : 'name')
..a<$core.int>(2, _omitFieldNames ? '' : 'order', $pb.PbFieldType.O3)
..a<$core.int>(100, _omitFieldNames ? '' : 'flags', $pb.PbFieldType.O3)
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
BackupCategory clone() => BackupCategory()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
BackupCategory copyWith(void Function(BackupCategory) updates) => super.copyWith((message) => updates(message as BackupCategory)) as BackupCategory;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static BackupCategory create() => BackupCategory._();
BackupCategory createEmptyInstance() => create();
static $pb.PbList<BackupCategory> createRepeated() => $pb.PbList<BackupCategory>();
@$core.pragma('dart2js:noInline')
static BackupCategory getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BackupCategory>(create);
static BackupCategory? _defaultInstance;
@$pb.TagNumber(1)
$core.String get name => $_getSZ(0);
@$pb.TagNumber(1)
set name($core.String v) { $_setString(0, v); }
@$pb.TagNumber(1)
$core.bool hasName() => $_has(0);
@$pb.TagNumber(1)
void clearName() => clearField(1);
@$pb.TagNumber(2)
$core.int get order => $_getIZ(1);
@$pb.TagNumber(2)
set order($core.int v) { $_setSignedInt32(1, v); }
@$pb.TagNumber(2)
$core.bool hasOrder() => $_has(1);
@$pb.TagNumber(2)
void clearOrder() => clearField(2);
@$pb.TagNumber(100)
$core.int get flags => $_getIZ(2);
@$pb.TagNumber(100)
set flags($core.int v) { $_setSignedInt32(2, v); }
@$pb.TagNumber(100)
$core.bool hasFlags() => $_has(2);
@$pb.TagNumber(100)
void clearFlags() => clearField(100);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,11 @@
//
// Generated code. Do not modify.
// source: BackupCategory.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import

View file

@ -0,0 +1,30 @@
//
// Generated code. Do not modify.
// source: BackupCategory.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use backupCategoryDescriptor instead')
const BackupCategory$json = {
'1': 'BackupCategory',
'2': [
{'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
{'1': 'order', '3': 2, '4': 1, '5': 5, '10': 'order'},
{'1': 'flags', '3': 100, '4': 1, '5': 5, '10': 'flags'},
],
};
/// Descriptor for `BackupCategory`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List backupCategoryDescriptor = $convert.base64Decode(
'Cg5CYWNrdXBDYXRlZ29yeRISCgRuYW1lGAEgASgJUgRuYW1lEhQKBW9yZGVyGAIgASgFUgVvcm'
'RlchIUCgVmbGFncxhkIAEoBVIFZmxhZ3M=');

View file

@ -0,0 +1,14 @@
//
// Generated code. Do not modify.
// source: BackupCategory.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'BackupCategory.pb.dart';

View file

@ -0,0 +1,222 @@
//
// Generated code. Do not modify.
// source: BackupChapter.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class BackupChapter extends $pb.GeneratedMessage {
factory BackupChapter({
$core.String? url,
$core.String? name,
$core.String? scanlator,
$core.bool? read,
$core.bool? bookmark,
$core.int? lastPageRead,
$core.int? dateFetch,
$core.int? dateUpload,
$core.double? chapterNumber,
$core.int? sourceOrder,
$core.int? lastModifiedAt,
$core.int? version,
}) {
final $result = create();
if (url != null) {
$result.url = url;
}
if (name != null) {
$result.name = name;
}
if (scanlator != null) {
$result.scanlator = scanlator;
}
if (read != null) {
$result.read = read;
}
if (bookmark != null) {
$result.bookmark = bookmark;
}
if (lastPageRead != null) {
$result.lastPageRead = lastPageRead;
}
if (dateFetch != null) {
$result.dateFetch = dateFetch;
}
if (dateUpload != null) {
$result.dateUpload = dateUpload;
}
if (chapterNumber != null) {
$result.chapterNumber = chapterNumber;
}
if (sourceOrder != null) {
$result.sourceOrder = sourceOrder;
}
if (lastModifiedAt != null) {
$result.lastModifiedAt = lastModifiedAt;
}
if (version != null) {
$result.version = version;
}
return $result;
}
BackupChapter._() : super();
factory BackupChapter.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory BackupChapter.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'BackupChapter', createEmptyInstance: create)
..aOS(1, _omitFieldNames ? '' : 'url')
..aOS(2, _omitFieldNames ? '' : 'name')
..aOS(3, _omitFieldNames ? '' : 'scanlator')
..aOB(4, _omitFieldNames ? '' : 'read')
..aOB(5, _omitFieldNames ? '' : 'bookmark')
..a<$core.int>(6, _omitFieldNames ? '' : 'lastPageRead', $pb.PbFieldType.O3, protoName: 'lastPageRead')
..a<$core.int>(7, _omitFieldNames ? '' : 'dateFetch', $pb.PbFieldType.O3, protoName: 'dateFetch')
..a<$core.int>(8, _omitFieldNames ? '' : 'dateUpload', $pb.PbFieldType.O3, protoName: 'dateUpload')
..a<$core.double>(9, _omitFieldNames ? '' : 'chapterNumber', $pb.PbFieldType.OF, protoName: 'chapterNumber')
..a<$core.int>(10, _omitFieldNames ? '' : 'sourceOrder', $pb.PbFieldType.O3, protoName: 'sourceOrder')
..a<$core.int>(11, _omitFieldNames ? '' : 'lastModifiedAt', $pb.PbFieldType.O3, protoName: 'lastModifiedAt')
..a<$core.int>(12, _omitFieldNames ? '' : 'version', $pb.PbFieldType.O3)
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
BackupChapter clone() => BackupChapter()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
BackupChapter copyWith(void Function(BackupChapter) updates) => super.copyWith((message) => updates(message as BackupChapter)) as BackupChapter;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static BackupChapter create() => BackupChapter._();
BackupChapter createEmptyInstance() => create();
static $pb.PbList<BackupChapter> createRepeated() => $pb.PbList<BackupChapter>();
@$core.pragma('dart2js:noInline')
static BackupChapter getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BackupChapter>(create);
static BackupChapter? _defaultInstance;
@$pb.TagNumber(1)
$core.String get url => $_getSZ(0);
@$pb.TagNumber(1)
set url($core.String v) { $_setString(0, v); }
@$pb.TagNumber(1)
$core.bool hasUrl() => $_has(0);
@$pb.TagNumber(1)
void clearUrl() => clearField(1);
@$pb.TagNumber(2)
$core.String get name => $_getSZ(1);
@$pb.TagNumber(2)
set name($core.String v) { $_setString(1, v); }
@$pb.TagNumber(2)
$core.bool hasName() => $_has(1);
@$pb.TagNumber(2)
void clearName() => clearField(2);
@$pb.TagNumber(3)
$core.String get scanlator => $_getSZ(2);
@$pb.TagNumber(3)
set scanlator($core.String v) { $_setString(2, v); }
@$pb.TagNumber(3)
$core.bool hasScanlator() => $_has(2);
@$pb.TagNumber(3)
void clearScanlator() => clearField(3);
@$pb.TagNumber(4)
$core.bool get read => $_getBF(3);
@$pb.TagNumber(4)
set read($core.bool v) { $_setBool(3, v); }
@$pb.TagNumber(4)
$core.bool hasRead() => $_has(3);
@$pb.TagNumber(4)
void clearRead() => clearField(4);
@$pb.TagNumber(5)
$core.bool get bookmark => $_getBF(4);
@$pb.TagNumber(5)
set bookmark($core.bool v) { $_setBool(4, v); }
@$pb.TagNumber(5)
$core.bool hasBookmark() => $_has(4);
@$pb.TagNumber(5)
void clearBookmark() => clearField(5);
@$pb.TagNumber(6)
$core.int get lastPageRead => $_getIZ(5);
@$pb.TagNumber(6)
set lastPageRead($core.int v) { $_setSignedInt32(5, v); }
@$pb.TagNumber(6)
$core.bool hasLastPageRead() => $_has(5);
@$pb.TagNumber(6)
void clearLastPageRead() => clearField(6);
@$pb.TagNumber(7)
$core.int get dateFetch => $_getIZ(6);
@$pb.TagNumber(7)
set dateFetch($core.int v) { $_setSignedInt32(6, v); }
@$pb.TagNumber(7)
$core.bool hasDateFetch() => $_has(6);
@$pb.TagNumber(7)
void clearDateFetch() => clearField(7);
@$pb.TagNumber(8)
$core.int get dateUpload => $_getIZ(7);
@$pb.TagNumber(8)
set dateUpload($core.int v) { $_setSignedInt32(7, v); }
@$pb.TagNumber(8)
$core.bool hasDateUpload() => $_has(7);
@$pb.TagNumber(8)
void clearDateUpload() => clearField(8);
@$pb.TagNumber(9)
$core.double get chapterNumber => $_getN(8);
@$pb.TagNumber(9)
set chapterNumber($core.double v) { $_setFloat(8, v); }
@$pb.TagNumber(9)
$core.bool hasChapterNumber() => $_has(8);
@$pb.TagNumber(9)
void clearChapterNumber() => clearField(9);
@$pb.TagNumber(10)
$core.int get sourceOrder => $_getIZ(9);
@$pb.TagNumber(10)
set sourceOrder($core.int v) { $_setSignedInt32(9, v); }
@$pb.TagNumber(10)
$core.bool hasSourceOrder() => $_has(9);
@$pb.TagNumber(10)
void clearSourceOrder() => clearField(10);
@$pb.TagNumber(11)
$core.int get lastModifiedAt => $_getIZ(10);
@$pb.TagNumber(11)
set lastModifiedAt($core.int v) { $_setSignedInt32(10, v); }
@$pb.TagNumber(11)
$core.bool hasLastModifiedAt() => $_has(10);
@$pb.TagNumber(11)
void clearLastModifiedAt() => clearField(11);
@$pb.TagNumber(12)
$core.int get version => $_getIZ(11);
@$pb.TagNumber(12)
set version($core.int v) { $_setSignedInt32(11, v); }
@$pb.TagNumber(12)
$core.bool hasVersion() => $_has(11);
@$pb.TagNumber(12)
void clearVersion() => clearField(12);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,11 @@
//
// Generated code. Do not modify.
// source: BackupChapter.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import

View file

@ -0,0 +1,47 @@
//
// Generated code. Do not modify.
// source: BackupChapter.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use backupChapterDescriptor instead')
const BackupChapter$json = {
'1': 'BackupChapter',
'2': [
{'1': 'url', '3': 1, '4': 1, '5': 9, '10': 'url'},
{'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'},
{'1': 'scanlator', '3': 3, '4': 1, '5': 9, '9': 0, '10': 'scanlator', '17': true},
{'1': 'read', '3': 4, '4': 1, '5': 8, '10': 'read'},
{'1': 'bookmark', '3': 5, '4': 1, '5': 8, '10': 'bookmark'},
{'1': 'lastPageRead', '3': 6, '4': 1, '5': 5, '10': 'lastPageRead'},
{'1': 'dateFetch', '3': 7, '4': 1, '5': 5, '10': 'dateFetch'},
{'1': 'dateUpload', '3': 8, '4': 1, '5': 5, '10': 'dateUpload'},
{'1': 'chapterNumber', '3': 9, '4': 1, '5': 2, '10': 'chapterNumber'},
{'1': 'sourceOrder', '3': 10, '4': 1, '5': 5, '10': 'sourceOrder'},
{'1': 'lastModifiedAt', '3': 11, '4': 1, '5': 5, '10': 'lastModifiedAt'},
{'1': 'version', '3': 12, '4': 1, '5': 5, '10': 'version'},
],
'8': [
{'1': '_scanlator'},
],
};
/// Descriptor for `BackupChapter`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List backupChapterDescriptor = $convert.base64Decode(
'Cg1CYWNrdXBDaGFwdGVyEhAKA3VybBgBIAEoCVIDdXJsEhIKBG5hbWUYAiABKAlSBG5hbWUSIQ'
'oJc2NhbmxhdG9yGAMgASgJSABSCXNjYW5sYXRvcogBARISCgRyZWFkGAQgASgIUgRyZWFkEhoK'
'CGJvb2ttYXJrGAUgASgIUghib29rbWFyaxIiCgxsYXN0UGFnZVJlYWQYBiABKAVSDGxhc3RQYW'
'dlUmVhZBIcCglkYXRlRmV0Y2gYByABKAVSCWRhdGVGZXRjaBIeCgpkYXRlVXBsb2FkGAggASgF'
'UgpkYXRlVXBsb2FkEiQKDWNoYXB0ZXJOdW1iZXIYCSABKAJSDWNoYXB0ZXJOdW1iZXISIAoLc2'
'91cmNlT3JkZXIYCiABKAVSC3NvdXJjZU9yZGVyEiYKDmxhc3RNb2RpZmllZEF0GAsgASgFUg5s'
'YXN0TW9kaWZpZWRBdBIYCgd2ZXJzaW9uGAwgASgFUgd2ZXJzaW9uQgwKCl9zY2FubGF0b3I=');

View file

@ -0,0 +1,14 @@
//
// Generated code. Do not modify.
// source: BackupChapter.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'BackupChapter.pb.dart';

View file

@ -0,0 +1,236 @@
//
// Generated code. Do not modify.
// source: BackupEpisode.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class BackupEpisode extends $pb.GeneratedMessage {
factory BackupEpisode({
$core.String? url,
$core.String? name,
$core.String? scanlator,
$core.bool? seen,
$core.bool? bookmark,
$core.int? lastSecondSeen,
$core.int? dateFetch,
$core.int? dateUpload,
$core.double? episodeNumber,
$core.int? sourceOrder,
$core.int? lastModifiedAt,
$core.int? version,
$core.int? totalSeconds,
}) {
final $result = create();
if (url != null) {
$result.url = url;
}
if (name != null) {
$result.name = name;
}
if (scanlator != null) {
$result.scanlator = scanlator;
}
if (seen != null) {
$result.seen = seen;
}
if (bookmark != null) {
$result.bookmark = bookmark;
}
if (lastSecondSeen != null) {
$result.lastSecondSeen = lastSecondSeen;
}
if (dateFetch != null) {
$result.dateFetch = dateFetch;
}
if (dateUpload != null) {
$result.dateUpload = dateUpload;
}
if (episodeNumber != null) {
$result.episodeNumber = episodeNumber;
}
if (sourceOrder != null) {
$result.sourceOrder = sourceOrder;
}
if (lastModifiedAt != null) {
$result.lastModifiedAt = lastModifiedAt;
}
if (version != null) {
$result.version = version;
}
if (totalSeconds != null) {
$result.totalSeconds = totalSeconds;
}
return $result;
}
BackupEpisode._() : super();
factory BackupEpisode.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory BackupEpisode.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'BackupEpisode', createEmptyInstance: create)
..aOS(1, _omitFieldNames ? '' : 'url')
..aOS(2, _omitFieldNames ? '' : 'name')
..aOS(3, _omitFieldNames ? '' : 'scanlator')
..aOB(4, _omitFieldNames ? '' : 'seen')
..aOB(5, _omitFieldNames ? '' : 'bookmark')
..a<$core.int>(6, _omitFieldNames ? '' : 'lastSecondSeen', $pb.PbFieldType.O3, protoName: 'lastSecondSeen')
..a<$core.int>(7, _omitFieldNames ? '' : 'dateFetch', $pb.PbFieldType.O3, protoName: 'dateFetch')
..a<$core.int>(8, _omitFieldNames ? '' : 'dateUpload', $pb.PbFieldType.O3, protoName: 'dateUpload')
..a<$core.double>(9, _omitFieldNames ? '' : 'episodeNumber', $pb.PbFieldType.OF, protoName: 'episodeNumber')
..a<$core.int>(10, _omitFieldNames ? '' : 'sourceOrder', $pb.PbFieldType.O3, protoName: 'sourceOrder')
..a<$core.int>(11, _omitFieldNames ? '' : 'lastModifiedAt', $pb.PbFieldType.O3, protoName: 'lastModifiedAt')
..a<$core.int>(12, _omitFieldNames ? '' : 'version', $pb.PbFieldType.O3)
..a<$core.int>(16, _omitFieldNames ? '' : 'totalSeconds', $pb.PbFieldType.O3, protoName: 'totalSeconds')
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
BackupEpisode clone() => BackupEpisode()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
BackupEpisode copyWith(void Function(BackupEpisode) updates) => super.copyWith((message) => updates(message as BackupEpisode)) as BackupEpisode;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static BackupEpisode create() => BackupEpisode._();
BackupEpisode createEmptyInstance() => create();
static $pb.PbList<BackupEpisode> createRepeated() => $pb.PbList<BackupEpisode>();
@$core.pragma('dart2js:noInline')
static BackupEpisode getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BackupEpisode>(create);
static BackupEpisode? _defaultInstance;
@$pb.TagNumber(1)
$core.String get url => $_getSZ(0);
@$pb.TagNumber(1)
set url($core.String v) { $_setString(0, v); }
@$pb.TagNumber(1)
$core.bool hasUrl() => $_has(0);
@$pb.TagNumber(1)
void clearUrl() => clearField(1);
@$pb.TagNumber(2)
$core.String get name => $_getSZ(1);
@$pb.TagNumber(2)
set name($core.String v) { $_setString(1, v); }
@$pb.TagNumber(2)
$core.bool hasName() => $_has(1);
@$pb.TagNumber(2)
void clearName() => clearField(2);
@$pb.TagNumber(3)
$core.String get scanlator => $_getSZ(2);
@$pb.TagNumber(3)
set scanlator($core.String v) { $_setString(2, v); }
@$pb.TagNumber(3)
$core.bool hasScanlator() => $_has(2);
@$pb.TagNumber(3)
void clearScanlator() => clearField(3);
@$pb.TagNumber(4)
$core.bool get seen => $_getBF(3);
@$pb.TagNumber(4)
set seen($core.bool v) { $_setBool(3, v); }
@$pb.TagNumber(4)
$core.bool hasSeen() => $_has(3);
@$pb.TagNumber(4)
void clearSeen() => clearField(4);
@$pb.TagNumber(5)
$core.bool get bookmark => $_getBF(4);
@$pb.TagNumber(5)
set bookmark($core.bool v) { $_setBool(4, v); }
@$pb.TagNumber(5)
$core.bool hasBookmark() => $_has(4);
@$pb.TagNumber(5)
void clearBookmark() => clearField(5);
@$pb.TagNumber(6)
$core.int get lastSecondSeen => $_getIZ(5);
@$pb.TagNumber(6)
set lastSecondSeen($core.int v) { $_setSignedInt32(5, v); }
@$pb.TagNumber(6)
$core.bool hasLastSecondSeen() => $_has(5);
@$pb.TagNumber(6)
void clearLastSecondSeen() => clearField(6);
@$pb.TagNumber(7)
$core.int get dateFetch => $_getIZ(6);
@$pb.TagNumber(7)
set dateFetch($core.int v) { $_setSignedInt32(6, v); }
@$pb.TagNumber(7)
$core.bool hasDateFetch() => $_has(6);
@$pb.TagNumber(7)
void clearDateFetch() => clearField(7);
@$pb.TagNumber(8)
$core.int get dateUpload => $_getIZ(7);
@$pb.TagNumber(8)
set dateUpload($core.int v) { $_setSignedInt32(7, v); }
@$pb.TagNumber(8)
$core.bool hasDateUpload() => $_has(7);
@$pb.TagNumber(8)
void clearDateUpload() => clearField(8);
@$pb.TagNumber(9)
$core.double get episodeNumber => $_getN(8);
@$pb.TagNumber(9)
set episodeNumber($core.double v) { $_setFloat(8, v); }
@$pb.TagNumber(9)
$core.bool hasEpisodeNumber() => $_has(8);
@$pb.TagNumber(9)
void clearEpisodeNumber() => clearField(9);
@$pb.TagNumber(10)
$core.int get sourceOrder => $_getIZ(9);
@$pb.TagNumber(10)
set sourceOrder($core.int v) { $_setSignedInt32(9, v); }
@$pb.TagNumber(10)
$core.bool hasSourceOrder() => $_has(9);
@$pb.TagNumber(10)
void clearSourceOrder() => clearField(10);
@$pb.TagNumber(11)
$core.int get lastModifiedAt => $_getIZ(10);
@$pb.TagNumber(11)
set lastModifiedAt($core.int v) { $_setSignedInt32(10, v); }
@$pb.TagNumber(11)
$core.bool hasLastModifiedAt() => $_has(10);
@$pb.TagNumber(11)
void clearLastModifiedAt() => clearField(11);
@$pb.TagNumber(12)
$core.int get version => $_getIZ(11);
@$pb.TagNumber(12)
set version($core.int v) { $_setSignedInt32(11, v); }
@$pb.TagNumber(12)
$core.bool hasVersion() => $_has(11);
@$pb.TagNumber(12)
void clearVersion() => clearField(12);
@$pb.TagNumber(16)
$core.int get totalSeconds => $_getIZ(12);
@$pb.TagNumber(16)
set totalSeconds($core.int v) { $_setSignedInt32(12, v); }
@$pb.TagNumber(16)
$core.bool hasTotalSeconds() => $_has(12);
@$pb.TagNumber(16)
void clearTotalSeconds() => clearField(16);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,11 @@
//
// Generated code. Do not modify.
// source: BackupEpisode.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import

View file

@ -0,0 +1,49 @@
//
// Generated code. Do not modify.
// source: BackupEpisode.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use backupEpisodeDescriptor instead')
const BackupEpisode$json = {
'1': 'BackupEpisode',
'2': [
{'1': 'url', '3': 1, '4': 1, '5': 9, '10': 'url'},
{'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'},
{'1': 'scanlator', '3': 3, '4': 1, '5': 9, '9': 0, '10': 'scanlator', '17': true},
{'1': 'seen', '3': 4, '4': 1, '5': 8, '10': 'seen'},
{'1': 'bookmark', '3': 5, '4': 1, '5': 8, '10': 'bookmark'},
{'1': 'lastSecondSeen', '3': 6, '4': 1, '5': 5, '10': 'lastSecondSeen'},
{'1': 'dateFetch', '3': 7, '4': 1, '5': 5, '10': 'dateFetch'},
{'1': 'dateUpload', '3': 8, '4': 1, '5': 5, '10': 'dateUpload'},
{'1': 'episodeNumber', '3': 9, '4': 1, '5': 2, '10': 'episodeNumber'},
{'1': 'sourceOrder', '3': 10, '4': 1, '5': 5, '10': 'sourceOrder'},
{'1': 'lastModifiedAt', '3': 11, '4': 1, '5': 5, '10': 'lastModifiedAt'},
{'1': 'version', '3': 12, '4': 1, '5': 5, '10': 'version'},
{'1': 'totalSeconds', '3': 16, '4': 1, '5': 5, '10': 'totalSeconds'},
],
'8': [
{'1': '_scanlator'},
],
};
/// Descriptor for `BackupEpisode`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List backupEpisodeDescriptor = $convert.base64Decode(
'Cg1CYWNrdXBFcGlzb2RlEhAKA3VybBgBIAEoCVIDdXJsEhIKBG5hbWUYAiABKAlSBG5hbWUSIQ'
'oJc2NhbmxhdG9yGAMgASgJSABSCXNjYW5sYXRvcogBARISCgRzZWVuGAQgASgIUgRzZWVuEhoK'
'CGJvb2ttYXJrGAUgASgIUghib29rbWFyaxImCg5sYXN0U2Vjb25kU2VlbhgGIAEoBVIObGFzdF'
'NlY29uZFNlZW4SHAoJZGF0ZUZldGNoGAcgASgFUglkYXRlRmV0Y2gSHgoKZGF0ZVVwbG9hZBgI'
'IAEoBVIKZGF0ZVVwbG9hZBIkCg1lcGlzb2RlTnVtYmVyGAkgASgCUg1lcGlzb2RlTnVtYmVyEi'
'AKC3NvdXJjZU9yZGVyGAogASgFUgtzb3VyY2VPcmRlchImCg5sYXN0TW9kaWZpZWRBdBgLIAEo'
'BVIObGFzdE1vZGlmaWVkQXQSGAoHdmVyc2lvbhgMIAEoBVIHdmVyc2lvbhIiCgx0b3RhbFNlY2'
'9uZHMYECABKAVSDHRvdGFsU2Vjb25kc0IMCgpfc2NhbmxhdG9y');

View file

@ -0,0 +1,14 @@
//
// Generated code. Do not modify.
// source: BackupEpisode.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'BackupEpisode.pb.dart';

View file

@ -0,0 +1,96 @@
//
// Generated code. Do not modify.
// source: BackupHistory.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class BackupHistory extends $pb.GeneratedMessage {
factory BackupHistory({
$core.String? url,
$core.int? lastRead,
$core.int? readDuration,
}) {
final $result = create();
if (url != null) {
$result.url = url;
}
if (lastRead != null) {
$result.lastRead = lastRead;
}
if (readDuration != null) {
$result.readDuration = readDuration;
}
return $result;
}
BackupHistory._() : super();
factory BackupHistory.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory BackupHistory.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'BackupHistory', createEmptyInstance: create)
..aOS(1, _omitFieldNames ? '' : 'url')
..a<$core.int>(2, _omitFieldNames ? '' : 'lastRead', $pb.PbFieldType.O3, protoName: 'lastRead')
..a<$core.int>(3, _omitFieldNames ? '' : 'readDuration', $pb.PbFieldType.O3, protoName: 'readDuration')
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
BackupHistory clone() => BackupHistory()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
BackupHistory copyWith(void Function(BackupHistory) updates) => super.copyWith((message) => updates(message as BackupHistory)) as BackupHistory;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static BackupHistory create() => BackupHistory._();
BackupHistory createEmptyInstance() => create();
static $pb.PbList<BackupHistory> createRepeated() => $pb.PbList<BackupHistory>();
@$core.pragma('dart2js:noInline')
static BackupHistory getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BackupHistory>(create);
static BackupHistory? _defaultInstance;
@$pb.TagNumber(1)
$core.String get url => $_getSZ(0);
@$pb.TagNumber(1)
set url($core.String v) { $_setString(0, v); }
@$pb.TagNumber(1)
$core.bool hasUrl() => $_has(0);
@$pb.TagNumber(1)
void clearUrl() => clearField(1);
@$pb.TagNumber(2)
$core.int get lastRead => $_getIZ(1);
@$pb.TagNumber(2)
set lastRead($core.int v) { $_setSignedInt32(1, v); }
@$pb.TagNumber(2)
$core.bool hasLastRead() => $_has(1);
@$pb.TagNumber(2)
void clearLastRead() => clearField(2);
@$pb.TagNumber(3)
$core.int get readDuration => $_getIZ(2);
@$pb.TagNumber(3)
set readDuration($core.int v) { $_setSignedInt32(2, v); }
@$pb.TagNumber(3)
$core.bool hasReadDuration() => $_has(2);
@$pb.TagNumber(3)
void clearReadDuration() => clearField(3);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,11 @@
//
// Generated code. Do not modify.
// source: BackupHistory.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import

View file

@ -0,0 +1,30 @@
//
// Generated code. Do not modify.
// source: BackupHistory.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use backupHistoryDescriptor instead')
const BackupHistory$json = {
'1': 'BackupHistory',
'2': [
{'1': 'url', '3': 1, '4': 1, '5': 9, '10': 'url'},
{'1': 'lastRead', '3': 2, '4': 1, '5': 5, '10': 'lastRead'},
{'1': 'readDuration', '3': 3, '4': 1, '5': 5, '10': 'readDuration'},
],
};
/// Descriptor for `BackupHistory`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List backupHistoryDescriptor = $convert.base64Decode(
'Cg1CYWNrdXBIaXN0b3J5EhAKA3VybBgBIAEoCVIDdXJsEhoKCGxhc3RSZWFkGAIgASgFUghsYX'
'N0UmVhZBIiCgxyZWFkRHVyYXRpb24YAyABKAVSDHJlYWREdXJhdGlvbg==');

View file

@ -0,0 +1,14 @@
//
// Generated code. Do not modify.
// source: BackupHistory.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'BackupHistory.pb.dart';

View file

@ -0,0 +1,257 @@
//
// Generated code. Do not modify.
// source: BackupManga.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
import 'BackupChapter.pb.dart' as $0;
import 'BackupHistory.pb.dart' as $1;
class BackupManga extends $pb.GeneratedMessage {
factory BackupManga({
$core.int? source,
$core.String? url,
$core.String? title,
$core.String? artist,
$core.String? author,
$core.String? description,
$core.Iterable<$core.String>? genre,
$core.int? status,
$core.String? thumbnailUrl,
$core.int? dateAdded,
$core.int? viewer,
$core.Iterable<$0.BackupChapter>? chapters,
$core.Iterable<$core.int>? categories,
$core.int? viewerFlags,
$core.Iterable<$1.BackupHistory>? history,
$core.int? lastModifiedAt,
}) {
final $result = create();
if (source != null) {
$result.source = source;
}
if (url != null) {
$result.url = url;
}
if (title != null) {
$result.title = title;
}
if (artist != null) {
$result.artist = artist;
}
if (author != null) {
$result.author = author;
}
if (description != null) {
$result.description = description;
}
if (genre != null) {
$result.genre.addAll(genre);
}
if (status != null) {
$result.status = status;
}
if (thumbnailUrl != null) {
$result.thumbnailUrl = thumbnailUrl;
}
if (dateAdded != null) {
$result.dateAdded = dateAdded;
}
if (viewer != null) {
$result.viewer = viewer;
}
if (chapters != null) {
$result.chapters.addAll(chapters);
}
if (categories != null) {
$result.categories.addAll(categories);
}
if (viewerFlags != null) {
$result.viewerFlags = viewerFlags;
}
if (history != null) {
$result.history.addAll(history);
}
if (lastModifiedAt != null) {
$result.lastModifiedAt = lastModifiedAt;
}
return $result;
}
BackupManga._() : super();
factory BackupManga.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory BackupManga.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'BackupManga', createEmptyInstance: create)
..a<$core.int>(1, _omitFieldNames ? '' : 'source', $pb.PbFieldType.O3)
..aOS(2, _omitFieldNames ? '' : 'url')
..aOS(3, _omitFieldNames ? '' : 'title')
..aOS(4, _omitFieldNames ? '' : 'artist')
..aOS(5, _omitFieldNames ? '' : 'author')
..aOS(6, _omitFieldNames ? '' : 'description')
..pPS(7, _omitFieldNames ? '' : 'genre')
..a<$core.int>(8, _omitFieldNames ? '' : 'status', $pb.PbFieldType.O3)
..aOS(9, _omitFieldNames ? '' : 'thumbnailUrl', protoName: 'thumbnailUrl')
..a<$core.int>(13, _omitFieldNames ? '' : 'dateAdded', $pb.PbFieldType.O3, protoName: 'dateAdded')
..a<$core.int>(14, _omitFieldNames ? '' : 'viewer', $pb.PbFieldType.O3)
..pc<$0.BackupChapter>(16, _omitFieldNames ? '' : 'chapters', $pb.PbFieldType.PM, subBuilder: $0.BackupChapter.create)
..p<$core.int>(17, _omitFieldNames ? '' : 'categories', $pb.PbFieldType.K3)
..a<$core.int>(103, _omitFieldNames ? '' : 'viewerFlags', $pb.PbFieldType.O3)
..pc<$1.BackupHistory>(104, _omitFieldNames ? '' : 'history', $pb.PbFieldType.PM, subBuilder: $1.BackupHistory.create)
..a<$core.int>(106, _omitFieldNames ? '' : 'lastModifiedAt', $pb.PbFieldType.O3, protoName: 'lastModifiedAt')
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
BackupManga clone() => BackupManga()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
BackupManga copyWith(void Function(BackupManga) updates) => super.copyWith((message) => updates(message as BackupManga)) as BackupManga;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static BackupManga create() => BackupManga._();
BackupManga createEmptyInstance() => create();
static $pb.PbList<BackupManga> createRepeated() => $pb.PbList<BackupManga>();
@$core.pragma('dart2js:noInline')
static BackupManga getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BackupManga>(create);
static BackupManga? _defaultInstance;
@$pb.TagNumber(1)
$core.int get source => $_getIZ(0);
@$pb.TagNumber(1)
set source($core.int v) { $_setSignedInt32(0, v); }
@$pb.TagNumber(1)
$core.bool hasSource() => $_has(0);
@$pb.TagNumber(1)
void clearSource() => clearField(1);
@$pb.TagNumber(2)
$core.String get url => $_getSZ(1);
@$pb.TagNumber(2)
set url($core.String v) { $_setString(1, v); }
@$pb.TagNumber(2)
$core.bool hasUrl() => $_has(1);
@$pb.TagNumber(2)
void clearUrl() => clearField(2);
@$pb.TagNumber(3)
$core.String get title => $_getSZ(2);
@$pb.TagNumber(3)
set title($core.String v) { $_setString(2, v); }
@$pb.TagNumber(3)
$core.bool hasTitle() => $_has(2);
@$pb.TagNumber(3)
void clearTitle() => clearField(3);
@$pb.TagNumber(4)
$core.String get artist => $_getSZ(3);
@$pb.TagNumber(4)
set artist($core.String v) { $_setString(3, v); }
@$pb.TagNumber(4)
$core.bool hasArtist() => $_has(3);
@$pb.TagNumber(4)
void clearArtist() => clearField(4);
@$pb.TagNumber(5)
$core.String get author => $_getSZ(4);
@$pb.TagNumber(5)
set author($core.String v) { $_setString(4, v); }
@$pb.TagNumber(5)
$core.bool hasAuthor() => $_has(4);
@$pb.TagNumber(5)
void clearAuthor() => clearField(5);
@$pb.TagNumber(6)
$core.String get description => $_getSZ(5);
@$pb.TagNumber(6)
set description($core.String v) { $_setString(5, v); }
@$pb.TagNumber(6)
$core.bool hasDescription() => $_has(5);
@$pb.TagNumber(6)
void clearDescription() => clearField(6);
@$pb.TagNumber(7)
$core.List<$core.String> get genre => $_getList(6);
@$pb.TagNumber(8)
$core.int get status => $_getIZ(7);
@$pb.TagNumber(8)
set status($core.int v) { $_setSignedInt32(7, v); }
@$pb.TagNumber(8)
$core.bool hasStatus() => $_has(7);
@$pb.TagNumber(8)
void clearStatus() => clearField(8);
@$pb.TagNumber(9)
$core.String get thumbnailUrl => $_getSZ(8);
@$pb.TagNumber(9)
set thumbnailUrl($core.String v) { $_setString(8, v); }
@$pb.TagNumber(9)
$core.bool hasThumbnailUrl() => $_has(8);
@$pb.TagNumber(9)
void clearThumbnailUrl() => clearField(9);
@$pb.TagNumber(13)
$core.int get dateAdded => $_getIZ(9);
@$pb.TagNumber(13)
set dateAdded($core.int v) { $_setSignedInt32(9, v); }
@$pb.TagNumber(13)
$core.bool hasDateAdded() => $_has(9);
@$pb.TagNumber(13)
void clearDateAdded() => clearField(13);
@$pb.TagNumber(14)
$core.int get viewer => $_getIZ(10);
@$pb.TagNumber(14)
set viewer($core.int v) { $_setSignedInt32(10, v); }
@$pb.TagNumber(14)
$core.bool hasViewer() => $_has(10);
@$pb.TagNumber(14)
void clearViewer() => clearField(14);
@$pb.TagNumber(16)
$core.List<$0.BackupChapter> get chapters => $_getList(11);
@$pb.TagNumber(17)
$core.List<$core.int> get categories => $_getList(12);
@$pb.TagNumber(103)
$core.int get viewerFlags => $_getIZ(13);
@$pb.TagNumber(103)
set viewerFlags($core.int v) { $_setSignedInt32(13, v); }
@$pb.TagNumber(103)
$core.bool hasViewerFlags() => $_has(13);
@$pb.TagNumber(103)
void clearViewerFlags() => clearField(103);
@$pb.TagNumber(104)
$core.List<$1.BackupHistory> get history => $_getList(14);
@$pb.TagNumber(106)
$core.int get lastModifiedAt => $_getIZ(15);
@$pb.TagNumber(106)
set lastModifiedAt($core.int v) { $_setSignedInt32(15, v); }
@$pb.TagNumber(106)
$core.bool hasLastModifiedAt() => $_has(15);
@$pb.TagNumber(106)
void clearLastModifiedAt() => clearField(106);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,11 @@
//
// Generated code. Do not modify.
// source: BackupManga.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import

View file

@ -0,0 +1,60 @@
//
// Generated code. Do not modify.
// source: BackupManga.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use backupMangaDescriptor instead')
const BackupManga$json = {
'1': 'BackupManga',
'2': [
{'1': 'source', '3': 1, '4': 1, '5': 5, '10': 'source'},
{'1': 'url', '3': 2, '4': 1, '5': 9, '10': 'url'},
{'1': 'title', '3': 3, '4': 1, '5': 9, '10': 'title'},
{'1': 'artist', '3': 4, '4': 1, '5': 9, '9': 0, '10': 'artist', '17': true},
{'1': 'author', '3': 5, '4': 1, '5': 9, '9': 1, '10': 'author', '17': true},
{'1': 'description', '3': 6, '4': 1, '5': 9, '9': 2, '10': 'description', '17': true},
{'1': 'genre', '3': 7, '4': 3, '5': 9, '10': 'genre'},
{'1': 'status', '3': 8, '4': 1, '5': 5, '10': 'status'},
{'1': 'thumbnailUrl', '3': 9, '4': 1, '5': 9, '9': 3, '10': 'thumbnailUrl', '17': true},
{'1': 'dateAdded', '3': 13, '4': 1, '5': 5, '10': 'dateAdded'},
{'1': 'viewer', '3': 14, '4': 1, '5': 5, '10': 'viewer'},
{'1': 'chapters', '3': 16, '4': 3, '5': 11, '6': '.BackupChapter', '10': 'chapters'},
{'1': 'categories', '3': 17, '4': 3, '5': 5, '10': 'categories'},
{'1': 'viewer_flags', '3': 103, '4': 1, '5': 5, '9': 4, '10': 'viewerFlags', '17': true},
{'1': 'history', '3': 104, '4': 3, '5': 11, '6': '.BackupHistory', '10': 'history'},
{'1': 'lastModifiedAt', '3': 106, '4': 1, '5': 5, '9': 5, '10': 'lastModifiedAt', '17': true},
],
'8': [
{'1': '_artist'},
{'1': '_author'},
{'1': '_description'},
{'1': '_thumbnailUrl'},
{'1': '_viewer_flags'},
{'1': '_lastModifiedAt'},
],
};
/// Descriptor for `BackupManga`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List backupMangaDescriptor = $convert.base64Decode(
'CgtCYWNrdXBNYW5nYRIWCgZzb3VyY2UYASABKAVSBnNvdXJjZRIQCgN1cmwYAiABKAlSA3VybB'
'IUCgV0aXRsZRgDIAEoCVIFdGl0bGUSGwoGYXJ0aXN0GAQgASgJSABSBmFydGlzdIgBARIbCgZh'
'dXRob3IYBSABKAlIAVIGYXV0aG9yiAEBEiUKC2Rlc2NyaXB0aW9uGAYgASgJSAJSC2Rlc2NyaX'
'B0aW9uiAEBEhQKBWdlbnJlGAcgAygJUgVnZW5yZRIWCgZzdGF0dXMYCCABKAVSBnN0YXR1cxIn'
'Cgx0aHVtYm5haWxVcmwYCSABKAlIA1IMdGh1bWJuYWlsVXJsiAEBEhwKCWRhdGVBZGRlZBgNIA'
'EoBVIJZGF0ZUFkZGVkEhYKBnZpZXdlchgOIAEoBVIGdmlld2VyEioKCGNoYXB0ZXJzGBAgAygL'
'Mg4uQmFja3VwQ2hhcHRlclIIY2hhcHRlcnMSHgoKY2F0ZWdvcmllcxgRIAMoBVIKY2F0ZWdvcm'
'llcxImCgx2aWV3ZXJfZmxhZ3MYZyABKAVIBFILdmlld2VyRmxhZ3OIAQESKAoHaGlzdG9yeRho'
'IAMoCzIOLkJhY2t1cEhpc3RvcnlSB2hpc3RvcnkSKwoObGFzdE1vZGlmaWVkQXQYaiABKAVIBV'
'IObGFzdE1vZGlmaWVkQXSIAQFCCQoHX2FydGlzdEIJCgdfYXV0aG9yQg4KDF9kZXNjcmlwdGlv'
'bkIPCg1fdGh1bWJuYWlsVXJsQg8KDV92aWV3ZXJfZmxhZ3NCEQoPX2xhc3RNb2RpZmllZEF0');

View file

@ -0,0 +1,14 @@
//
// Generated code. Do not modify.
// source: BackupManga.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'BackupManga.pb.dart';

View file

@ -0,0 +1,82 @@
//
// Generated code. Do not modify.
// source: BackupMihon.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
import 'BackupCategory.pb.dart' as $1;
import 'BackupManga.pb.dart' as $0;
import 'BackupSource.pb.dart' as $2;
class BackupMihon extends $pb.GeneratedMessage {
factory BackupMihon({
$core.Iterable<$0.BackupManga>? backupManga,
$core.Iterable<$1.BackupCategory>? backupCategories,
$core.Iterable<$2.BackupSource>? backupSources,
}) {
final $result = create();
if (backupManga != null) {
$result.backupManga.addAll(backupManga);
}
if (backupCategories != null) {
$result.backupCategories.addAll(backupCategories);
}
if (backupSources != null) {
$result.backupSources.addAll(backupSources);
}
return $result;
}
BackupMihon._() : super();
factory BackupMihon.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory BackupMihon.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'BackupMihon', createEmptyInstance: create)
..pc<$0.BackupManga>(1, _omitFieldNames ? '' : 'backupManga', $pb.PbFieldType.PM, protoName: 'backupManga', subBuilder: $0.BackupManga.create)
..pc<$1.BackupCategory>(2, _omitFieldNames ? '' : 'backupCategories', $pb.PbFieldType.PM, protoName: 'backupCategories', subBuilder: $1.BackupCategory.create)
..pc<$2.BackupSource>(101, _omitFieldNames ? '' : 'backupSources', $pb.PbFieldType.PM, protoName: 'backupSources', subBuilder: $2.BackupSource.create)
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
BackupMihon clone() => BackupMihon()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
BackupMihon copyWith(void Function(BackupMihon) updates) => super.copyWith((message) => updates(message as BackupMihon)) as BackupMihon;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static BackupMihon create() => BackupMihon._();
BackupMihon createEmptyInstance() => create();
static $pb.PbList<BackupMihon> createRepeated() => $pb.PbList<BackupMihon>();
@$core.pragma('dart2js:noInline')
static BackupMihon getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BackupMihon>(create);
static BackupMihon? _defaultInstance;
@$pb.TagNumber(1)
$core.List<$0.BackupManga> get backupManga => $_getList(0);
@$pb.TagNumber(2)
$core.List<$1.BackupCategory> get backupCategories => $_getList(1);
@$pb.TagNumber(101)
$core.List<$2.BackupSource> get backupSources => $_getList(2);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,11 @@
//
// Generated code. Do not modify.
// source: BackupMihon.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import

View file

@ -0,0 +1,32 @@
//
// Generated code. Do not modify.
// source: BackupMihon.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use backupMihonDescriptor instead')
const BackupMihon$json = {
'1': 'BackupMihon',
'2': [
{'1': 'backupManga', '3': 1, '4': 3, '5': 11, '6': '.BackupManga', '10': 'backupManga'},
{'1': 'backupCategories', '3': 2, '4': 3, '5': 11, '6': '.BackupCategory', '10': 'backupCategories'},
{'1': 'backupSources', '3': 101, '4': 3, '5': 11, '6': '.BackupSource', '10': 'backupSources'},
],
};
/// Descriptor for `BackupMihon`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List backupMihonDescriptor = $convert.base64Decode(
'CgtCYWNrdXBNaWhvbhIuCgtiYWNrdXBNYW5nYRgBIAMoCzIMLkJhY2t1cE1hbmdhUgtiYWNrdX'
'BNYW5nYRI7ChBiYWNrdXBDYXRlZ29yaWVzGAIgAygLMg8uQmFja3VwQ2F0ZWdvcnlSEGJhY2t1'
'cENhdGVnb3JpZXMSMwoNYmFja3VwU291cmNlcxhlIAMoCzINLkJhY2t1cFNvdXJjZVINYmFja3'
'VwU291cmNlcw==');

View file

@ -0,0 +1,14 @@
//
// Generated code. Do not modify.
// source: BackupMihon.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'BackupMihon.pb.dart';

View file

@ -0,0 +1,82 @@
//
// Generated code. Do not modify.
// source: BackupSource.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class BackupSource extends $pb.GeneratedMessage {
factory BackupSource({
$core.String? name,
$core.int? sourceId,
}) {
final $result = create();
if (name != null) {
$result.name = name;
}
if (sourceId != null) {
$result.sourceId = sourceId;
}
return $result;
}
BackupSource._() : super();
factory BackupSource.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory BackupSource.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'BackupSource', createEmptyInstance: create)
..aOS(1, _omitFieldNames ? '' : 'name')
..a<$core.int>(2, _omitFieldNames ? '' : 'sourceId', $pb.PbFieldType.O3, protoName: 'sourceId')
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
BackupSource clone() => BackupSource()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
BackupSource copyWith(void Function(BackupSource) updates) => super.copyWith((message) => updates(message as BackupSource)) as BackupSource;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static BackupSource create() => BackupSource._();
BackupSource createEmptyInstance() => create();
static $pb.PbList<BackupSource> createRepeated() => $pb.PbList<BackupSource>();
@$core.pragma('dart2js:noInline')
static BackupSource getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BackupSource>(create);
static BackupSource? _defaultInstance;
@$pb.TagNumber(1)
$core.String get name => $_getSZ(0);
@$pb.TagNumber(1)
set name($core.String v) { $_setString(0, v); }
@$pb.TagNumber(1)
$core.bool hasName() => $_has(0);
@$pb.TagNumber(1)
void clearName() => clearField(1);
@$pb.TagNumber(2)
$core.int get sourceId => $_getIZ(1);
@$pb.TagNumber(2)
set sourceId($core.int v) { $_setSignedInt32(1, v); }
@$pb.TagNumber(2)
$core.bool hasSourceId() => $_has(1);
@$pb.TagNumber(2)
void clearSourceId() => clearField(2);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,11 @@
//
// Generated code. Do not modify.
// source: BackupSource.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import

View file

@ -0,0 +1,29 @@
//
// Generated code. Do not modify.
// source: BackupSource.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use backupSourceDescriptor instead')
const BackupSource$json = {
'1': 'BackupSource',
'2': [
{'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
{'1': 'sourceId', '3': 2, '4': 1, '5': 5, '10': 'sourceId'},
],
};
/// Descriptor for `BackupSource`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List backupSourceDescriptor = $convert.base64Decode(
'CgxCYWNrdXBTb3VyY2USEgoEbmFtZRgBIAEoCVIEbmFtZRIaCghzb3VyY2VJZBgCIAEoBVIIc2'
'91cmNlSWQ=');

View file

@ -0,0 +1,14 @@
//
// Generated code. Do not modify.
// source: BackupSource.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'BackupSource.pb.dart';

View file

@ -2,6 +2,7 @@ import 'dart:convert';
import 'package:archive/archive_io.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter/material.dart';
import 'package:flutter_qjs/quickjs/ffi.dart';
import 'package:isar/isar.dart';
import 'package:mangayomi/eval/model/m_bridge.dart';
import 'package:mangayomi/eval/model/source_preference.dart';
@ -16,6 +17,8 @@ import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/models/source.dart';
import 'package:mangayomi/models/track.dart';
import 'package:mangayomi/models/track_preference.dart';
import 'package:mangayomi/modules/more/data_and_storage/providers/proto/BackupAniyomi.pb.dart';
import 'package:mangayomi/modules/more/data_and_storage/providers/proto/BackupMihon.pb.dart';
import 'package:mangayomi/modules/more/settings/appearance/providers/blend_level_state_provider.dart';
import 'package:mangayomi/modules/more/settings/appearance/providers/flex_scheme_color_state_provider.dart';
import 'package:mangayomi/modules/more/settings/appearance/providers/pure_black_dark_mode_state_provider.dart';
@ -31,8 +34,8 @@ part 'restore.g.dart';
@riverpod
void doRestore(Ref ref, {required String path, required BuildContext context}) {
final inputStream = InputFileStream(path);
final archive = ZipDecoder().decodeStream(inputStream);
try {
final archive = ZipDecoder().decodeStream(inputStream);
final backupType = checkBackupType(path, archive);
switch (backupType) {
case BackupType.mangayomi:
@ -44,6 +47,10 @@ void doRestore(Ref ref, {required String path, required BuildContext context}) {
case BackupType.kotatsu:
ref.read(restoreKotatsuBackupProvider(archive));
break;
case BackupType.mihon:
case BackupType.aniyomi:
ref.read(restoreTachiBkBackupProvider(path, backupType));
break;
default:
}
if (backupType != BackupType.unknown) {
@ -70,7 +77,7 @@ void showBotToast(String text) {
);
}
enum BackupType { unknown, mangayomi, tachibk, kotatsu }
enum BackupType { unknown, mangayomi, mihon, aniyomi, kotatsu }
BackupType checkBackupType(String path, Archive archive) {
if (path.toLowerCase().contains("mangayomi") &&
@ -88,6 +95,13 @@ BackupType checkBackupType(String path, Archive archive) {
}).length ==
2) {
return BackupType.kotatsu;
} else if (path.toLowerCase().endsWith(".tachibk") ||
path.toLowerCase().endsWith(".proto.gz")) {
return path.contains("tachiyomi") || path.contains("mihon")
? BackupType.mihon
: path.contains("xyz.jmir.tachiyomi.mi")
? BackupType.aniyomi
: BackupType.unknown;
}
return BackupType.unknown;
}
@ -284,65 +298,242 @@ ItemType _convertToItemTypeCategory(Map<String, dynamic> backup) {
@riverpod
void restoreKotatsuBackup(Ref ref, Archive archive) {
for (var f in archive.files) {
List<Category> cats = [];
switch (f.name) {
case "categories":
final categories = jsonDecode(utf8.decode(f.content)) as List? ?? [];
isar.writeTxnSync(() {
isar.categorys.clearSync();
for (var category in categories) {
final cat = Category(
id: category["id"],
name: category["title"],
forItemType: ItemType.manga,
hide: !(category["show_in_lib"] ?? true)
);
isar.categorys.putSync(cat);
cats.add(cat);
}
});
case "favourites":
final favourites = jsonDecode(utf8.decode(f.content)) as List? ?? [];
isar.writeTxnSync(() {
isar.mangas.clearSync();
for (var favourite in favourites) {
final tempManga = favourite["manga"];
final manga = Manga(
source: tempManga["source"],
author: tempManga["author"],
artist: null,
genre:
(tempManga["tags"] as List?)
?.map((t) => t["title"] as String)
.toList() ??
[],
imageUrl: tempManga["large_cover_url"],
lang: 'en',
link: tempManga["url"],
name: tempManga["title"],
status: Status.values.firstWhere(
(s) =>
s.name.toLowerCase() ==
(tempManga["state"] as String?)?.toLowerCase(),
orElse: () => Status.unknown,
),
description: null,
categories: [favourite["category_id"]],
itemType: ItemType.manga,
favorite: true
);
isar.mangas.putSync(manga);
}
});
default:
continue;
try {
for (var f in archive.files) {
List<Category> cats = [];
switch (f.name) {
case "categories":
final categories = jsonDecode(utf8.decode(f.content)) as List? ?? [];
isar.writeTxnSync(() {
isar.categorys.clearSync();
for (var category in categories) {
final cat = Category(
id: category["id"],
name: category["title"],
forItemType: ItemType.manga,
hide: !(category["show_in_lib"] ?? true),
);
isar.categorys.putSync(cat);
cats.add(cat);
}
});
case "favourites":
final favourites = jsonDecode(utf8.decode(f.content)) as List? ?? [];
isar.writeTxnSync(() {
isar.mangas.clearSync();
for (var favourite in favourites) {
final tempManga = favourite["manga"];
final manga = Manga(
source: tempManga["source"],
author: tempManga["author"],
artist: null,
genre:
(tempManga["tags"] as List?)
?.map((t) => t["title"] as String)
.toList() ??
[],
imageUrl: tempManga["large_cover_url"],
lang: 'en',
link: tempManga["url"],
name: tempManga["title"],
status: Status.values.firstWhere(
(s) =>
s.name.toLowerCase() ==
(tempManga["state"] as String?)?.toLowerCase(),
orElse: () => Status.unknown,
),
description: null,
categories: [favourite["category_id"]],
itemType: ItemType.manga,
favorite: true,
);
isar.mangas.putSync(manga);
}
});
default:
continue;
}
}
isar.writeTxnSync(() {
isar.chapters.clearSync();
isar.downloads.clearSync();
isar.historys.clearSync();
isar.updates.clearSync();
isar.tracks.clearSync();
isar.trackPreferences.clearSync();
ref
.read(synchingProvider(syncId: 1).notifier)
.clearAllChangedParts(false);
ref.invalidate(themeModeStateProvider);
ref.invalidate(blendLevelStateProvider);
ref.invalidate(flexSchemeColorStateProvider);
ref.invalidate(pureBlackDarkModeStateProvider);
ref.invalidate(l10nLocaleStateProvider);
ref.invalidate(navigationOrderStateProvider);
ref.invalidate(hideItemsStateProvider);
ref.invalidate(extensionsRepoStateProvider(ItemType.manga));
ref.invalidate(extensionsRepoStateProvider(ItemType.anime));
ref.invalidate(extensionsRepoStateProvider(ItemType.novel));
});
} catch (e) {
rethrow;
}
}
@riverpod
void restoreTachiBkBackup(Ref ref, String path, BackupType bkType) {
final content = GZipDecoder().decodeBytes(
InputFileStream(path).toUint8List(),
);
final backup = BackupMihon.fromBuffer(content);
List<Category> cats = [];
isar.writeTxnSync(() {
isar.categorys.clearSync();
isar.mangas.clearSync();
isar.chapters.clearSync();
isar.historys.clearSync();
for (var category in backup.backupCategories) {
final cat = Category(
name: category.name,
forItemType: ItemType.manga,
pos: category.order,
);
isar.categorys.putSync(cat);
cats.add(cat);
}
for (var tempManga in backup.backupManga) {
final manga = Manga(
source:
backup.backupSources
.firstWhereOrNull((src) => src.sourceId == tempManga.source)
?.name ??
"Unknown",
author: tempManga.author,
artist: tempManga.artist,
genre: tempManga.genre,
imageUrl: tempManga.thumbnailUrl,
lang: 'en',
link: tempManga.url,
name: tempManga.title,
status: _convertStatusFromTachiBk(tempManga.status),
description: tempManga.description,
categories:
cats
.where((cat) => tempManga.categories.contains(cat.pos!))
.map((cat) => cat.id!)
.toList(),
itemType: ItemType.manga,
favorite: true,
dateAdded: tempManga.dateAdded,
lastUpdate: tempManga.lastModifiedAt,
);
isar.mangas.putSync(manga);
History? history;
for (var tempChapter in tempManga.chapters) {
final chapter = Chapter(
mangaId: manga.id!,
name: tempChapter.name,
dateUpload: "${tempChapter.dateUpload}",
isBookmarked: tempChapter.bookmark,
isRead: tempChapter.read,
lastPageRead: "${tempChapter.lastPageRead}",
scanlator: tempChapter.scanlator,
url: tempChapter.url,
);
isar.chapters.putSync(chapter..manga.value = manga);
chapter.manga.saveSync();
if ((chapter.isRead ?? false) &&
(history == null ||
int.parse(history.date ?? "0") < tempChapter.lastModifiedAt)) {
history = History(
mangaId: manga.id,
date: "${tempChapter.lastModifiedAt}",
itemType: ItemType.manga,
chapterId: chapter.id,
)..chapter.value = chapter;
}
}
if (history != null) {
isar.historys.putSync(history);
history.chapter.saveSync();
}
}
});
if (bkType == BackupType.aniyomi) {
final backupAnime = BackupAniyomi.fromBuffer(content);
List<Category> cats = [];
isar.writeTxnSync(() {
for (var category in backupAnime.backupAnimeCategories) {
final cat = Category(
name: category.name,
forItemType: ItemType.anime,
pos: category.order,
);
isar.categorys.putSync(cat);
cats.add(cat);
}
for (var tempAnime in backupAnime.backupAnime) {
final anime = Manga(
source:
backupAnime.backupAnimeSources
.firstWhereOrNull((src) => src.sourceId == tempAnime.source)
?.name ??
"Unknown",
author: tempAnime.author,
artist: tempAnime.artist,
genre: tempAnime.genre,
imageUrl: tempAnime.thumbnailUrl,
lang: 'en',
link: tempAnime.url,
name: tempAnime.title,
status: _convertStatusFromTachiBk(tempAnime.status),
description: tempAnime.description,
categories:
cats
.where((cat) => tempAnime.categories.contains(cat.pos!))
.map((cat) => cat.id!)
.toList(),
itemType: ItemType.anime,
favorite: true,
dateAdded: tempAnime.dateAdded,
lastUpdate: tempAnime.lastModifiedAt,
);
isar.mangas.putSync(anime);
History? history;
for (var tempEpisode in tempAnime.episodes) {
final episode = Chapter(
mangaId: anime.id!,
name: tempEpisode.name,
dateUpload: "${tempEpisode.dateUpload}",
isBookmarked: tempEpisode.bookmark,
isRead: tempEpisode.seen,
lastPageRead: "${tempEpisode.lastSecondSeen}",
scanlator: tempEpisode.scanlator,
url: tempEpisode.url,
);
isar.chapters.putSync(episode..manga.value = anime);
episode.manga.saveSync();
if ((episode.isRead ?? false) &&
(history == null ||
int.parse(history.date ?? "0") <
tempEpisode.lastModifiedAt)) {
history = History(
mangaId: anime.id,
date: "${tempEpisode.lastModifiedAt}",
itemType: ItemType.anime,
chapterId: episode.id,
)..chapter.value = episode;
}
}
if (history != null) {
isar.historys.putSync(history);
history.chapter.saveSync();
}
}
});
}
isar.writeTxnSync(() {
isar.chapters.clearSync();
isar.downloads.clearSync();
isar.historys.clearSync();
isar.updates.clearSync();
isar.tracks.clearSync();
isar.trackPreferences.clearSync();
@ -359,3 +550,20 @@ void restoreKotatsuBackup(Ref ref, Archive archive) {
ref.invalidate(extensionsRepoStateProvider(ItemType.novel));
});
}
Status _convertStatusFromTachiBk(int idx) {
switch (idx) {
case 1:
return Status.ongoing;
case 2:
return Status.completed;
case 4:
return Status.publishingFinished;
case 5:
return Status.canceled;
case 6:
return Status.onHiatus;
default:
return Status.unknown;
}
}

View file

@ -6,7 +6,7 @@ part of 'restore.dart';
// RiverpodGenerator
// **************************************************************************
String _$doRestoreHash() => r'355f3ca8fb830aedc6fdc24cb91e2adc25c760f7';
String _$doRestoreHash() => r'5dfc1eea6bda317ee52dd0851a63d490293e9a81';
/// Copied from Dart SDK
class _SystemHash {
@ -173,7 +173,7 @@ class _DoRestoreProviderElement extends AutoDisposeProviderElement<void>
BuildContext get context => (origin as DoRestoreProvider).context;
}
String _$restoreBackupHash() => r'0b6bdb8eff801da7efa7b3776f80e50bee4d4ad1';
String _$restoreBackupHash() => r'503a17e4145bfb19e16f533cd87b75038cb50dbc';
/// See also [restoreBackup].
@ProviderFor(restoreBackup)
@ -321,7 +321,7 @@ class _RestoreBackupProviderElement extends AutoDisposeProviderElement<void>
}
String _$restoreKotatsuBackupHash() =>
r'a27c30891ba09cc48d4df69270a93a783aeb919f';
r'e2c10fb6d17ab8f44ee429712cce4aa5a9298bc0';
/// See also [restoreKotatsuBackup].
@ProviderFor(restoreKotatsuBackup)
@ -450,5 +450,153 @@ class _RestoreKotatsuBackupProviderElement
@override
Archive get archive => (origin as RestoreKotatsuBackupProvider).archive;
}
String _$restoreTachiBkBackupHash() =>
r'981786aa59a7391a0872eb191fb8f8de6a4b7f6a';
/// See also [restoreTachiBkBackup].
@ProviderFor(restoreTachiBkBackup)
const restoreTachiBkBackupProvider = RestoreTachiBkBackupFamily();
/// See also [restoreTachiBkBackup].
class RestoreTachiBkBackupFamily extends Family<void> {
/// See also [restoreTachiBkBackup].
const RestoreTachiBkBackupFamily();
/// See also [restoreTachiBkBackup].
RestoreTachiBkBackupProvider call(
String path,
BackupType bkType,
) {
return RestoreTachiBkBackupProvider(
path,
bkType,
);
}
@override
RestoreTachiBkBackupProvider getProviderOverride(
covariant RestoreTachiBkBackupProvider provider,
) {
return call(
provider.path,
provider.bkType,
);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'restoreTachiBkBackupProvider';
}
/// See also [restoreTachiBkBackup].
class RestoreTachiBkBackupProvider extends AutoDisposeProvider<void> {
/// See also [restoreTachiBkBackup].
RestoreTachiBkBackupProvider(
String path,
BackupType bkType,
) : this._internal(
(ref) => restoreTachiBkBackup(
ref as RestoreTachiBkBackupRef,
path,
bkType,
),
from: restoreTachiBkBackupProvider,
name: r'restoreTachiBkBackupProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$restoreTachiBkBackupHash,
dependencies: RestoreTachiBkBackupFamily._dependencies,
allTransitiveDependencies:
RestoreTachiBkBackupFamily._allTransitiveDependencies,
path: path,
bkType: bkType,
);
RestoreTachiBkBackupProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.path,
required this.bkType,
}) : super.internal();
final String path;
final BackupType bkType;
@override
Override overrideWith(
void Function(RestoreTachiBkBackupRef provider) create,
) {
return ProviderOverride(
origin: this,
override: RestoreTachiBkBackupProvider._internal(
(ref) => create(ref as RestoreTachiBkBackupRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
path: path,
bkType: bkType,
),
);
}
@override
AutoDisposeProviderElement<void> createElement() {
return _RestoreTachiBkBackupProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is RestoreTachiBkBackupProvider &&
other.path == path &&
other.bkType == bkType;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, path.hashCode);
hash = _SystemHash.combine(hash, bkType.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin RestoreTachiBkBackupRef on AutoDisposeProviderRef<void> {
/// The parameter `path` of this provider.
String get path;
/// The parameter `bkType` of this provider.
BackupType get bkType;
}
class _RestoreTachiBkBackupProviderElement
extends AutoDisposeProviderElement<void> with RestoreTachiBkBackupRef {
_RestoreTachiBkBackupProviderElement(super.provider);
@override
String get path => (origin as RestoreTachiBkBackupProvider).path;
@override
BackupType get bkType => (origin as RestoreTachiBkBackupProvider).bkType;
}
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

22
proto/BackupAnime.proto Normal file
View file

@ -0,0 +1,22 @@
syntax = "proto3";
import "BackupEpisode.proto";
import "BackupHistory.proto";
message BackupAnime {
int32 source = 1;
string url = 2;
string title = 3;
optional string artist = 4;
optional string author = 5;
optional string description = 6;
repeated string genre = 7;
int32 status = 8;
optional string thumbnailUrl = 9;
int32 dateAdded = 13;
repeated BackupEpisode episodes = 16;
repeated int32 categories = 17;
optional int32 viewer_flags = 103;
repeated BackupHistory history = 104;
optional int32 lastModifiedAt = 106;
}

15
proto/BackupAniyomi.proto Normal file
View file

@ -0,0 +1,15 @@
syntax = "proto3";
import "BackupManga.proto";
import "BackupCategory.proto";
import "BackupAnime.proto";
import "BackupSource.proto";
message BackupAniyomi {
repeated BackupManga backupManga = 1;
repeated BackupCategory backupCategories = 2;
repeated BackupAnime backupAnime = 3;
repeated BackupCategory backupAnimeCategories = 4;
repeated BackupSource backupSources = 101;
repeated BackupSource backupAnimeSources = 103;
}

View file

@ -0,0 +1,7 @@
syntax = "proto3";
message BackupCategory {
string name = 1;
int32 order = 2;
int32 flags = 100;
}

16
proto/BackupChapter.proto Normal file
View file

@ -0,0 +1,16 @@
syntax = "proto3";
message BackupChapter {
string url = 1;
string name = 2;
optional string scanlator = 3;
bool read = 4;
bool bookmark = 5;
int32 lastPageRead = 6;
int32 dateFetch = 7;
int32 dateUpload = 8;
float chapterNumber = 9;
int32 sourceOrder = 10;
int32 lastModifiedAt = 11;
int32 version = 12;
}

17
proto/BackupEpisode.proto Normal file
View file

@ -0,0 +1,17 @@
syntax = "proto3";
message BackupEpisode {
string url = 1;
string name = 2;
optional string scanlator = 3;
bool seen = 4;
bool bookmark = 5;
int32 lastSecondSeen = 6;
int32 dateFetch = 7;
int32 dateUpload = 8;
float episodeNumber = 9;
int32 sourceOrder = 10;
int32 lastModifiedAt = 11;
int32 version = 12;
int32 totalSeconds = 16;
}

View file

@ -0,0 +1,7 @@
syntax = "proto3";
message BackupHistory {
string url = 1;
int32 lastRead = 2;
int32 readDuration = 3;
}

23
proto/BackupManga.proto Normal file
View file

@ -0,0 +1,23 @@
syntax = "proto3";
import "BackupChapter.proto";
import "BackupHistory.proto";
message BackupManga {
int32 source = 1;
string url = 2;
string title = 3;
optional string artist = 4;
optional string author = 5;
optional string description = 6;
repeated string genre = 7;
int32 status = 8;
optional string thumbnailUrl = 9;
int32 dateAdded = 13;
int32 viewer = 14;
repeated BackupChapter chapters = 16;
repeated int32 categories = 17;
optional int32 viewer_flags = 103;
repeated BackupHistory history = 104;
optional int32 lastModifiedAt = 106;
}

11
proto/BackupMihon.proto Normal file
View file

@ -0,0 +1,11 @@
syntax = "proto3";
import "BackupManga.proto";
import "BackupCategory.proto";
import "BackupSource.proto";
message BackupMihon {
repeated BackupManga backupManga = 1;
repeated BackupCategory backupCategories = 2;
repeated BackupSource backupSources = 101;
}

6
proto/BackupSource.proto Normal file
View file

@ -0,0 +1,6 @@
syntax = "proto3";
message BackupSource {
string name = 1;
int32 sourceId = 2;
}

3
proto/gen_proto.bat Normal file
View file

@ -0,0 +1,3 @@
@echo
for %%f in (proto/*.proto) do protoc --dart_out="../lib/modules/more/data_and_storage/providers/proto" "%%f"

4
proto/gen_proto.sh Normal file
View file

@ -0,0 +1,4 @@
#!/bin/bash
for filename in proto/*.proto; do
protoc --dart_out=../lib/modules/more/data_and_storage/providers/proto "$filename"
done

View file

@ -1432,6 +1432,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.0.1"
protobuf:
dependency: "direct main"
description:
name: protobuf
sha256: "68645b24e0716782e58948f8467fd42a880f255096a821f9e7d0ec625b00c84d"
url: "https://pub.dev"
source: hosted
version: "3.1.0"
protoc_plugin:
dependency: "direct dev"
description:
name: protoc_plugin
sha256: fb0554851c9eca30bd18405fbbfe81e39166d4a2f0e5b770606fd69da3da0b2f
url: "https://pub.dev"
source: hosted
version: "21.1.2"
provider:
dependency: transitive
description:

View file

@ -82,6 +82,7 @@ dependencies:
connectivity_plus: ^6.1.3
app_links: ^6.4.0
win32: ^5.10.1
protobuf: ^3.1.0
dependency_overrides:
http: ^1.2.2
@ -117,6 +118,7 @@ dev_dependencies:
flutter_lints: ^5.0.0
freezed: ^2.0.0
inno_bundle: ^0.8.0
protoc_plugin: ^21.1.2
flutter:
uses-material-design: true