This commit is contained in:
kodjomoustapha 2024-12-20 17:02:36 +01:00
parent 69c745238d
commit cb103afbb0
10 changed files with 213 additions and 40 deletions

View file

@ -641,6 +641,7 @@ class ChapterFilterBookmarked {
@embedded
class ChapterPageurls {
int? chapterId;
String? chapterUrl;
List<String>? urls;
List<String>? headers;

View file

@ -11674,13 +11674,18 @@ const ChapterPageurlsSchema = Schema(
name: r'chapterId',
type: IsarType.long,
),
r'headers': PropertySchema(
r'chapterUrl': PropertySchema(
id: 1,
name: r'chapterUrl',
type: IsarType.string,
),
r'headers': PropertySchema(
id: 2,
name: r'headers',
type: IsarType.stringList,
),
r'urls': PropertySchema(
id: 2,
id: 3,
name: r'urls',
type: IsarType.stringList,
)
@ -11697,6 +11702,12 @@ int _chapterPageurlsEstimateSize(
Map<Type, List<int>> allOffsets,
) {
var bytesCount = offsets.last;
{
final value = object.chapterUrl;
if (value != null) {
bytesCount += 3 + value.length * 3;
}
}
{
final list = object.headers;
if (list != null) {
@ -11731,8 +11742,9 @@ void _chapterPageurlsSerialize(
Map<Type, List<int>> allOffsets,
) {
writer.writeLong(offsets[0], object.chapterId);
writer.writeStringList(offsets[1], object.headers);
writer.writeStringList(offsets[2], object.urls);
writer.writeString(offsets[1], object.chapterUrl);
writer.writeStringList(offsets[2], object.headers);
writer.writeStringList(offsets[3], object.urls);
}
ChapterPageurls _chapterPageurlsDeserialize(
@ -11743,9 +11755,10 @@ ChapterPageurls _chapterPageurlsDeserialize(
) {
final object = ChapterPageurls(
chapterId: reader.readLongOrNull(offsets[0]),
urls: reader.readStringList(offsets[2]),
urls: reader.readStringList(offsets[3]),
);
object.headers = reader.readStringList(offsets[1]);
object.chapterUrl = reader.readStringOrNull(offsets[1]);
object.headers = reader.readStringList(offsets[2]);
return object;
}
@ -11759,9 +11772,11 @@ P _chapterPageurlsDeserializeProp<P>(
case 0:
return (reader.readLongOrNull(offset)) as P;
case 1:
return (reader.readStringList(offset)) as P;
return (reader.readStringOrNull(offset)) as P;
case 2:
return (reader.readStringList(offset)) as P;
case 3:
return (reader.readStringList(offset)) as P;
default:
throw IsarError('Unknown property with id $propertyId');
}
@ -11843,6 +11858,160 @@ extension ChapterPageurlsQueryFilter
});
}
QueryBuilder<ChapterPageurls, ChapterPageurls, QAfterFilterCondition>
chapterUrlIsNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNull(
property: r'chapterUrl',
));
});
}
QueryBuilder<ChapterPageurls, ChapterPageurls, QAfterFilterCondition>
chapterUrlIsNotNull() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(const FilterCondition.isNotNull(
property: r'chapterUrl',
));
});
}
QueryBuilder<ChapterPageurls, ChapterPageurls, QAfterFilterCondition>
chapterUrlEqualTo(
String? value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'chapterUrl',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<ChapterPageurls, ChapterPageurls, QAfterFilterCondition>
chapterUrlGreaterThan(
String? value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
include: include,
property: r'chapterUrl',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<ChapterPageurls, ChapterPageurls, QAfterFilterCondition>
chapterUrlLessThan(
String? value, {
bool include = false,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.lessThan(
include: include,
property: r'chapterUrl',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<ChapterPageurls, ChapterPageurls, QAfterFilterCondition>
chapterUrlBetween(
String? lower,
String? upper, {
bool includeLower = true,
bool includeUpper = true,
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.between(
property: r'chapterUrl',
lower: lower,
includeLower: includeLower,
upper: upper,
includeUpper: includeUpper,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<ChapterPageurls, ChapterPageurls, QAfterFilterCondition>
chapterUrlStartsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.startsWith(
property: r'chapterUrl',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<ChapterPageurls, ChapterPageurls, QAfterFilterCondition>
chapterUrlEndsWith(
String value, {
bool caseSensitive = true,
}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.endsWith(
property: r'chapterUrl',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<ChapterPageurls, ChapterPageurls, QAfterFilterCondition>
chapterUrlContains(String value, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.contains(
property: r'chapterUrl',
value: value,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<ChapterPageurls, ChapterPageurls, QAfterFilterCondition>
chapterUrlMatches(String pattern, {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.matches(
property: r'chapterUrl',
wildcard: pattern,
caseSensitive: caseSensitive,
));
});
}
QueryBuilder<ChapterPageurls, ChapterPageurls, QAfterFilterCondition>
chapterUrlIsEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.equalTo(
property: r'chapterUrl',
value: '',
));
});
}
QueryBuilder<ChapterPageurls, ChapterPageurls, QAfterFilterCondition>
chapterUrlIsNotEmpty() {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(FilterCondition.greaterThan(
property: r'chapterUrl',
value: '',
));
});
}
QueryBuilder<ChapterPageurls, ChapterPageurls, QAfterFilterCondition>
headersIsNull() {
return QueryBuilder.apply(this, (query) {

View file

@ -102,18 +102,14 @@ Future<dynamic> updateMangaDetail(Ref ref,
for (var i = 0; i < oldChapers.length; i++) {
final oldChap = oldChapers[i];
final newChap = chaps[i];
if (newChap.url != null &&
newChap.url!.isNotEmpty &&
newChap.url != oldChap.url &&
newChap.name == oldChap.name) {
oldChap.url = newChap.url;
oldChap.scanlator = newChap.scanlator;
ref
.read(changedItemsManagerProvider(managerId: 1).notifier)
.addUpdatedChapter(oldChap, false, false);
isar.chapters.putSync(oldChap);
oldChap.manga.saveSync();
}
oldChap.name = newChap.name;
oldChap.url = newChap.url;
oldChap.scanlator = newChap.scanlator;
ref
.read(changedItemsManagerProvider(managerId: 1).notifier)
.addUpdatedChapter(oldChap, false, false);
isar.chapters.putSync(oldChap);
oldChap.manga.saveSync();
}
}
});

View file

@ -6,7 +6,7 @@ part of 'update_manga_detail_providers.dart';
// RiverpodGenerator
// **************************************************************************
String _$updateMangaDetailHash() => r'29a10d49454febb4fe88ca9c007d3512d812bf84';
String _$updateMangaDetailHash() => r'82c52aa8760fb455e6558be925d05f5f0703af98';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -94,6 +94,7 @@ Future<List<PageUrl>> downloadChapter(
chapterPageUrls.add(ChapterPageurls()
..chapterId = chapter.id
..urls = pageUrls.map((e) => e.url).toList()
..chapterUrl = chapter.url
..headers = chapterPageHeaders.first != null
? chapterPageHeaders.map((e) => e.toString()).toList()
: null);

View file

@ -6,7 +6,7 @@ part of 'aniskip.dart';
// RiverpodGenerator
// **************************************************************************
String _$aniSkipHash() => r'887869b54e2e151633efd46da83bde845e14f421';
String _$aniSkipHash() => r'2e5d19b025a2207ff64da7bf7908450ea9e5ff8c';
/// See also [AniSkip].
@ProviderFor(AniSkip)

View file

@ -43,8 +43,9 @@ Future<GetChapterPagesModel> getChapterPages(
final settings = isar.settings.getSync(227);
List<ChapterPageurls>? chapterPageUrlsList =
settings!.chapterPageUrlsList ?? [];
final isarPageUrls =
chapterPageUrlsList.where((element) => element.chapterId == chapter.id);
final isarPageUrls = chapterPageUrlsList
.where((element) => element.chapterId == chapter.id)
.firstOrNull;
final incognitoMode = ref.watch(incognitoModeStateProvider);
final storageProvider = StorageProvider();
path = await storageProvider.getMangaChapterDirectory(chapter);
@ -55,16 +56,15 @@ Future<GetChapterPagesModel> getChapterPages(
if (!chapter.manga.value!.isLocalArchive!) {
final source =
getSource(chapter.manga.value!.lang!, chapter.manga.value!.source!)!;
if (isarPageUrls.isNotEmpty &&
isarPageUrls.first.urls != null &&
isarPageUrls.first.urls!.isNotEmpty) {
for (var i = 0; i < isarPageUrls.first.urls!.length; i++) {
if ((isarPageUrls?.urls?.isNotEmpty ?? false) &&
(isarPageUrls?.chapterUrl ?? chapter.url) == chapter.url) {
for (var i = 0; i < isarPageUrls!.urls!.length; i++) {
Map<String, String>? headers;
if (isarPageUrls.first.headers?.isNotEmpty ?? false) {
headers = (jsonDecode(isarPageUrls.first.headers![i]) as Map?)
?.toMapStringString;
if (isarPageUrls.headers?.isNotEmpty ?? false) {
headers =
(jsonDecode(isarPageUrls.headers![i]) as Map?)?.toMapStringString;
}
pageUrls.add(PageUrl(isarPageUrls.first.urls![i], headers: headers));
pageUrls.add(PageUrl(isarPageUrls.urls![i], headers: headers));
}
} else {
pageUrls = await getExtensionService(source).getPageList(chapter.url!);
@ -111,6 +111,7 @@ Future<GetChapterPagesModel> getChapterPages(
chapterPageUrls.add(ChapterPageurls()
..chapterId = chapter.id
..urls = pageUrls.map((e) => e.url).toList()
..chapterUrl = chapter.url
..headers = chapterPageHeaders.first != null
? chapterPageHeaders.map((e) => e.toString()).toList()
: null);

View file

@ -1,3 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:http_interceptor/http_interceptor.dart';
import 'package:mangayomi/eval/model/m_bridge.dart';
import 'dart:async';
@ -173,9 +174,13 @@ class LoggerInterceptor extends InterceptorContract {
Future<BaseRequest> interceptRequest({
required BaseRequest request,
}) async {
final content =
"----- Request -----\n${request.toString()}\nheaders: ${request.headers.toString()}";
if (kDebugMode) {
print(content);
}
if (useLogger) {
Logger.add(LoggerLevel.info,
'----- Request -----\n${request.toString()}\nheaders: ${request.headers.toString()}');
Logger.add(LoggerLevel.info, content);
}
return request;
@ -189,9 +194,13 @@ class LoggerInterceptor extends InterceptorContract {
final cloudflare = [403, 503].contains(response.statusCode) &&
["cloudflare-nginx", "cloudflare"]
.contains(response.headers["server"]);
final content =
"----- Response -----\n${response.request?.method}: ${response.request?.url}, statusCode: ${response.statusCode} ${cloudflare ? "Failed to bypass Cloudflare" : ""}";
if (kDebugMode) {
print(content);
}
if (useLogger) {
Logger.add(LoggerLevel.info,
"----- Response -----\n${response.request?.method}: ${response.request?.url}, statusCode: ${response.statusCode} ${cloudflare ? "Failed to bypass Cloudflare" : ""}");
Logger.add(LoggerLevel.info, content);
}
if (cloudflare) {
botToast("${response.statusCode} Failed to bypass Cloudflare",

View file

@ -6,7 +6,7 @@ part of 'anilist.dart';
// RiverpodGenerator
// **************************************************************************
String _$anilistHash() => r'87784b25bccf5b1c61d6c7494f0569a28494dd8b';
String _$anilistHash() => r'd3a8852d689b13c3bde46ec05b464e7779149e58';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -1,4 +1,3 @@
import 'package:flutter/foundation.dart';
import 'dart:async';
bool useLogger = false;
@ -16,9 +15,6 @@ class Logger {
static List<(LoggerLevel, String, DateTime)> get logs => _logs;
static void add(LoggerLevel level, String content) {
if (kDebugMode) {
print(content);
}
_logStreamController.add((level, content, DateTime.now()));
_logs.add((level, content, DateTime.now()));
}