fix: resolve video misclassification when filename contains 'audio' and remove legacy Kemono/Coomer providers
Build and Release / Build Windows x64 (push) Has been cancelled
Build and Release / Build macOS (push) Has been cancelled

This commit is contained in:
2026-09-05 15:35:41 +03:00
parent 5e3efb0da9
commit af00cb8179
14 changed files with 210 additions and 780 deletions
+23
View File
@@ -111,5 +111,28 @@ void main() {
expect(MediaUrlSelector.isAudio(photoPost), isFalse);
expect(MediaUrlSelector.isVideo(photoPost), isFalse);
});
test('MediaUrlSelector classifies mp4 containing "audio" in query parameter as video and not audio', () {
final trickyVideoPost = Post(
id: 'patreon:123:456:3',
providerId: 'pawchive',
providerName: 'Pawchive',
previewUrl: '',
sampleUrl: '',
fileUrl:
'https://file.pawchive.pw/data/b4/65/b465cb03ab7b26c0a677db3ae43500d1ef71e3e25151f160cda244c1fb40cfae.mp4?f=nsfw%202%20-%20audio%20spicy.mp4',
tags: const ['patreon', 'artist', 'nsfw 2 - audio spicy'],
rating: 'unknown',
width: 1920,
height: 1080,
createdAt: DateTime.now(),
fileType: 'video',
score: 0,
);
expect(MediaUrlSelector.isVideo(trickyVideoPost), isTrue);
expect(MediaUrlSelector.isAudio(trickyVideoPost), isFalse);
expect(MediaUrlSelector.video(trickyVideoPost), contains(trickyVideoPost.fileUrl));
});
}
+2 -3
View File
@@ -6,7 +6,6 @@ import 'package:gel_rule_app/backend/mappers/moebooru_mapper.dart';
import 'package:gel_rule_app/backend/mappers/rule34_mapper.dart';
import 'package:gel_rule_app/backend/models/content_provider_config.dart';
import 'package:gel_rule_app/backend/providers/custom_provider.dart';
import 'package:gel_rule_app/backend/providers/kemono_provider.dart';
import 'package:gel_rule_app/backend/providers/provider_factory.dart';
import 'package:gel_rule_app/backend/providers/realbooru_html_provider.dart';
import 'package:gel_rule_app/backend/repositories/provider_repository.dart';
@@ -307,7 +306,7 @@ void main() {
expect(provider, isA<RealbooruHtmlProvider>());
});
test('provider factory creates Kemono and Coomer artist providers', () {
test('provider factory treats removed Kemono and Coomer as unsupported', () {
final now = DateTime(2026);
for (final apiType in ['kemono', 'coomer']) {
final provider = ProviderFactory().create(ContentProviderConfig(
@@ -323,7 +322,7 @@ void main() {
updatedAt: now,
));
expect(provider, isA<KemonoProvider>());
expect(provider, isA<UnsupportedCustomProvider>());
}
});
}