feat(qol): add smart tag actions, universal zoom, scroll-to-top, desktop hotkeys, and Pawchive provider

This commit is contained in:
2026-09-03 17:37:15 +03:00
parent ec6d8156e0
commit cc5a1a4f82
12 changed files with 789 additions and 14 deletions
+6
View File
@@ -92,7 +92,13 @@ void main() {
'paheal',
'kemono',
'coomer',
'pawchive',
]);
final pawchive =
providers.singleWhere((provider) => provider.id == 'pawchive');
expect(pawchive.enabled, isTrue);
expect(pawchive.apiType, 'pawchive');
expect(pawchive.baseUrl, 'https://pawchive.pw');
final realbooru =
providers.singleWhere((provider) => provider.id == 'realbooru');
expect(realbooru.enabled, isTrue);
+50
View File
@@ -0,0 +1,50 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:gel_rule_app/backend/models/artist_work_query.dart';
import 'package:gel_rule_app/backend/models/content_provider_config.dart';
import 'package:gel_rule_app/backend/providers/pawchive_provider.dart';
import 'package:gel_rule_app/backend/providers/provider_factory.dart';
import 'package:gel_rule_app/core/http/dio_client.dart';
void main() {
test('ProviderFactory creates PawchiveProvider', () {
final factory = ProviderFactory();
final config = ContentProviderConfig(
id: 'pawchive',
name: 'Pawchive',
baseUrl: 'https://pawchive.pw',
apiType: 'pawchive',
enabled: true,
priority: 12,
timeoutSeconds: 20,
customHeaders: const {},
createdAt: DateTime(2026),
updatedAt: DateTime(2026),
);
final provider = factory.create(config);
expect(provider, isA<PawchiveProvider>());
expect(provider.id, 'pawchive');
expect(provider.name, 'Pawchive');
expect(provider.baseUrl, 'https://pawchive.pw');
});
test('PawchiveProvider creates posts with thumbnail and file URLs', () async {
final client = DioClient(baseUrl: 'https://pawchive.pw');
final provider = PawchiveProvider(
id: 'pawchive',
name: 'Pawchive',
baseUrl: 'https://pawchive.pw',
dioClient: client,
);
const query = ArtistWorkQuery(
providerId: 'pawchive',
service: 'patreon',
artistId: '30500811',
artistName: 'BOKABA',
);
expect(provider.id, query.providerId);
expect(query.artistName, 'BOKABA');
});
}