diff --git a/fediverse_archive_browser/lib/src/components/geo/geo_extensions.dart b/fediverse_archive_browser/lib/src/components/geo/geo_extensions.dart index 4eb67a4..a5de5cb 100644 --- a/fediverse_archive_browser/lib/src/components/geo/geo_extensions.dart +++ b/fediverse_archive_browser/lib/src/components/geo/geo_extensions.dart @@ -9,7 +9,7 @@ import 'marker_data.dart'; extension GeoSpatialPostExtensions on TimelineEntry { MarkerData toMarkerData(MapTransformer transformer, Color color) { final latLon = LatLng(locationData.latitude, locationData.longitude); - final offset = transformer.fromLatLngToXYCoords(latLon); + final offset = transformer.toOffset(latLon); return MarkerData(this, offset, color); } } diff --git a/fediverse_archive_browser/lib/src/components/geo/map_bounds.dart b/fediverse_archive_browser/lib/src/components/geo/map_bounds.dart index f39554f..b50cca1 100644 --- a/fediverse_archive_browser/lib/src/components/geo/map_bounds.dart +++ b/fediverse_archive_browser/lib/src/components/geo/map_bounds.dart @@ -20,9 +20,9 @@ class MapBounds { static MapBounds computed(MapTransformer transformer) { final mapSize = transformer.constraints.biggest; - final upperLeft = transformer.fromXYCoordsToLatLng(Offset.zero); + final upperLeft = transformer.toLatLng(Offset.zero); final lowerRight = - transformer.fromXYCoordsToLatLng(Offset(mapSize.width, mapSize.height)); + transformer.toLatLng(Offset(mapSize.width, mapSize.height)); final idealLeftLongitude = max(-180.0, upperLeft.longitude); final idealRightLongitude = min(180.0, lowerRight.longitude); final idealUpperLatitude = min(85.0, upperLeft.latitude); diff --git a/fediverse_archive_browser/lib/src/components/tree_entry_card.dart b/fediverse_archive_browser/lib/src/components/tree_entry_card.dart index 25f131f..1cc0d1b 100644 --- a/fediverse_archive_browser/lib/src/components/tree_entry_card.dart +++ b/fediverse_archive_browser/lib/src/components/tree_entry_card.dart @@ -25,10 +25,6 @@ class TreeEntryCard extends StatelessWidget { @override Widget build(BuildContext context) { - if (Scrollable.recommendDeferredLoadingForContext(context)) { - return const SizedBox(); - } - const double spacingHeight = 5.0; final formatter = Provider.of(context).dateTimeFormatter; diff --git a/fediverse_archive_browser/lib/src/home.dart b/fediverse_archive_browser/lib/src/home.dart index 6e0d9d7..355d29a 100644 --- a/fediverse_archive_browser/lib/src/home.dart +++ b/fediverse_archive_browser/lib/src/home.dart @@ -88,25 +88,13 @@ class _HomeState extends State { } Widget _buildNavBar() { - return LayoutBuilder(builder: (context, constraint) { - return Scrollbar( - isAlwaysShown: true, - child: SingleChildScrollView( - child: ConstrainedBox( - constraints: BoxConstraints(minHeight: constraint.maxHeight), - child: IntrinsicHeight( - child: NavigationRail( - destinations: - _pageData.map((p) => p.navRailDestination).toList(), - selectedIndex: _selectedIndex, - onDestinationSelected: _setSelectedIndex, - labelType: NavigationRailLabelType.all, - ), - ), - ), - ), - ); - }); + return NavigationRail( + destinations: + _pageData.map((p) => p.navRailDestination).toList(), + selectedIndex: _selectedIndex, + onDestinationSelected: _setSelectedIndex, + labelType: NavigationRailLabelType.all, + ); } Widget _buildMainArea() { diff --git a/fediverse_archive_browser/lib/src/mastodon/serializers/mastodon_contact_serializer.dart b/fediverse_archive_browser/lib/src/mastodon/serializers/mastodon_contact_serializer.dart new file mode 100644 index 0000000..e69de29 diff --git a/fediverse_archive_browser/lib/src/mastodon/serializers/mastodon_media_attachment_serializer.dart b/fediverse_archive_browser/lib/src/mastodon/serializers/mastodon_media_attachment_serializer.dart new file mode 100644 index 0000000..1cc0873 --- /dev/null +++ b/fediverse_archive_browser/lib/src/mastodon/serializers/mastodon_media_attachment_serializer.dart @@ -0,0 +1,23 @@ +import '../../models/media_attachment.dart'; + +MediaAttachment mediaAttachmentfromMastodonJson(Map json) { + final uri = Uri.parse(json['url']); + const creationTimestamp = 0; + final explicitType = (json['mediaType'] ?? '').startsWith('image') + ? AttachmentMediaType.image + : (json['mimetype'] ?? '').startsWith('video') + ? AttachmentMediaType.video + : AttachmentMediaType.unknown; + final thumbnailUri = Uri(); + final title = json['name'] ?? ''; + final description = json['blurhash'] ?? ''; + + return MediaAttachment( + uri: uri, + creationTimestamp: creationTimestamp, + metadata: {}, + thumbnailUri: thumbnailUri, + title: title, + explicitType: explicitType, + description: description); +} diff --git a/fediverse_archive_browser/lib/src/mastodon/serializers/mastodon_timeline_entry_serializer.dart b/fediverse_archive_browser/lib/src/mastodon/serializers/mastodon_timeline_entry_serializer.dart new file mode 100644 index 0000000..3670dba --- /dev/null +++ b/fediverse_archive_browser/lib/src/mastodon/serializers/mastodon_timeline_entry_serializer.dart @@ -0,0 +1,53 @@ +import 'package:fediverse_archive_browser/src/mastodon/serializers/mastodon_media_attachment_serializer.dart'; +import 'package:logging/logging.dart'; + +import '../../models/location_data.dart'; +import '../../models/timeline_entry.dart'; +import '../../utils/offsetdatetime_utils.dart'; + +final _logger = Logger('timelineEntryFromMastodonJson'); +TimelineEntry timelineEntryFromMastodonJson(Map json) { + final int timestamp = json.containsKey('published') + ? OffsetDateTimeUtils.epochSecTimeFromTimeZoneString(json['published']) + .fold( + onSuccess: (value) => value, + onError: (error) { + _logger.severe("Couldn't read date time string: $error"); + return 0; + }) + : 0; + final id = json['id'] ?? ''; + final isReshare = json.containsKey('reblogged'); + final parentId = json['inReplyTo'] ?? ''; + final parentAuthor = json['in_reply_to_account_id'] ?? ''; + final parentAuthorId = json['in_reply_to_account_id'] ?? ''; + final body = json['content'] ?? ''; + final author = json['attributedTo'] ?? ''; + final authorId = json['attributedTo'] ?? ''; + const title = ''; + final externalLink = json['url'] ?? ''; + final actualLocationData = LocationData(); + final modificationTimestamp = timestamp; + final backdatedTimestamp = timestamp; + final mediaAttachments = (json['attachment'] as List? ?? []) + .map((json) => mediaAttachmentfromMastodonJson(json)) + .toList(); + return TimelineEntry( + creationTimestamp: timestamp, + modificationTimestamp: modificationTimestamp, + backdatedTimestamp: backdatedTimestamp, + locationData: actualLocationData, + body: body, + isReshare: isReshare, + id: id, + parentId: parentId, + parentAuthorId: parentAuthorId, + externalLink: externalLink, + author: author, + authorId: authorId, + parentAuthor: parentAuthor, + title: title, + links: [], + mediaAttachments: mediaAttachments, + ); +} diff --git a/fediverse_archive_browser/lib/src/mastodon/services/mastodon_archive_service.dart b/fediverse_archive_browser/lib/src/mastodon/services/mastodon_archive_service.dart new file mode 100644 index 0000000..e2f6e2d --- /dev/null +++ b/fediverse_archive_browser/lib/src/mastodon/services/mastodon_archive_service.dart @@ -0,0 +1,145 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:path/path.dart' as p; +import 'package:result_monad/result_monad.dart'; + +import '../../models/entry_tree_item.dart'; +import '../../models/local_image_archive_entry.dart'; +import '../../services/archive_service_interface.dart'; +import '../../services/connections_manager.dart'; +import '../../utils/exec_error.dart'; +import '../serializers/mastodon_timeline_entry_serializer.dart'; +import 'mastodon_path_mapping_service.dart'; + +class MastodonArchiveService implements ArchiveService { + @override + final MastodonPathMappingService pathMappingService; + + final Map _imagesByRequestUrl = {}; + final List _postEntries = []; + final List _orphanedCommentEntries = []; + final List _allComments = []; + @override + final ConnectionsManager connectionsManager = ConnectionsManager(); + + MastodonArchiveService({required this.pathMappingService}); + + @override + // TODO: implement ownersName + String get ownersName => throw UnimplementedError(); + + @override + void clearCaches() { + connectionsManager.clearCaches(); + _imagesByRequestUrl.clear(); + _orphanedCommentEntries.clear(); + _allComments.clear(); + _postEntries.clear(); + } + + @override + FutureResult, ExecError> getPosts() async { + if (_postEntries.isEmpty && _allComments.isEmpty) { + _loadEntries(); + } + + return Result.ok(_postEntries); + } + + @override + FutureResult, ExecError> getAllComments() async { + if (_postEntries.isEmpty && _allComments.isEmpty) { + _loadEntries(); + } + + return Result.ok(_allComments); + } + + @override + FutureResult, ExecError> getOrphanedComments() async { + if (_postEntries.isEmpty && _allComments.isEmpty) { + _loadEntries(); + } + + return Result.ok(_orphanedCommentEntries); + } + + @override + Result getImageByUrl(String url) { + if (_imagesByRequestUrl.isEmpty) { + _loadImages(); + } + + final result = _imagesByRequestUrl[url]; + return result == null + ? Result.error(ExecError(errorMessage: '$url not found')) + : Result.ok(result); + } + + String get _baseArchiveFolder => pathMappingService.rootFolder; + + void _loadEntries() { + final entriesJsonPath = p.join(_baseArchiveFolder, 'outbox.json'); + final jsonFile = File(entriesJsonPath); + try { + if (jsonFile.existsSync()) { + final jsonText = jsonFile.readAsStringSync(); + final json = jsonDecode(jsonText) as Map; + final entriesJson = json['orderedItems'] as List; + final entries = entriesJson + .where((e) => 'Create' == e['type']) + .map((e) => e['object']) + .map((e) => timelineEntryFromMastodonJson(e)) + .toList(); + final topLevelEntries = + entries.where((element) => element.parentId.isEmpty); + final commentEntries = + entries.where((element) => element.parentId.isNotEmpty).toList(); + final entryTrees = {}; + + final postTreeEntries = []; + for (final entry in topLevelEntries) { + final treeEntry = EntryTreeItem(entry, false); + entryTrees[entry.id] = treeEntry; + postTreeEntries.add(treeEntry); + } + + final commentTreeEntries = []; + commentEntries.sort( + (c1, c2) => c1.creationTimestamp.compareTo(c2.creationTimestamp)); + for (final entry in commentEntries) { + final parent = entryTrees[entry.parentId]; + final treeEntry = EntryTreeItem(entry, parent == null); + parent?.addChild(treeEntry); + entryTrees[entry.id] = treeEntry; + commentTreeEntries.add(treeEntry); + } + + _postEntries.clear(); + _postEntries.addAll(postTreeEntries); + + _allComments.clear(); + _allComments.addAll(commentTreeEntries); + + _orphanedCommentEntries.clear(); + _orphanedCommentEntries + .addAll(entryTrees.values.where((element) => element.isOrphaned)); + } + } catch (e) { + print(e); + } + } + + void _loadImages() { + final imageJsonPath = p.join(_baseArchiveFolder, 'images.json'); + final jsonFile = File(imageJsonPath); + if (jsonFile.existsSync()) { + final json = jsonDecode(jsonFile.readAsStringSync()) as List; + final imageEntries = json.map((j) => ImageEntry.fromJson(j)); + for (final entry in imageEntries) { + _imagesByRequestUrl[entry.url] = entry; + } + } + } +} diff --git a/fediverse_archive_browser/lib/src/mastodon/services/mastodon_path_mapping_service.dart b/fediverse_archive_browser/lib/src/mastodon/services/mastodon_path_mapping_service.dart new file mode 100644 index 0000000..521e181 --- /dev/null +++ b/fediverse_archive_browser/lib/src/mastodon/services/mastodon_path_mapping_service.dart @@ -0,0 +1,73 @@ +import 'dart:io'; + +import 'package:fediverse_archive_browser/src/settings/settings_controller.dart'; +import 'package:logging/logging.dart'; +import 'package:path/path.dart' as p; + +import '../../services/path_mapper_service_interface.dart'; + +class MastodonPathMappingService implements PathMappingService { + static final _logger = Logger('$MastodonPathMappingService'); + final SettingsController settings; + final _archiveDirectories = []; + + MastodonPathMappingService(this.settings) { + refresh(); + } + + String get rootFolder => settings.rootFolder; + + List get archiveDirectories => + List.unmodifiable(_archiveDirectories); + + void refresh() { + _logger.fine('Refreshing path mapping service directory data.'); + if (!Directory(settings.rootFolder).existsSync()) { + _logger.severe( + "Base directory does not exist! can't do mapping of ${settings.rootFolder}"); + return; + } + _archiveDirectories.clear(); + + final recursive = !_calcRootIsSingleArchiveFolder(); + _archiveDirectories.addAll(Directory(settings.rootFolder) + .listSync(recursive: recursive) + .where((element) => + element.statSync().type == FileSystemEntityType.directory && + p.basename(element.path) == 'media_attachments') + .map((d) => d.parent)); + } + + String toFullPath(String relPath) { + for (final file in _archiveDirectories) { + final fullPath = + p.join(file.path, relPath[0] == '/' ? relPath.substring(1) : relPath); + if (File(fullPath).existsSync()) { + return fullPath; + } + } + + _logger.fine( + 'Did not find a file with this relPath anywhere therefore returning the relPath'); + return relPath; + } + + bool _calcRootIsSingleArchiveFolder() { + for (final entity in Directory(rootFolder).listSync(recursive: false)) { + if (_knownRootFilesAndFolders.contains(entity.uri.pathSegments + .where((element) => element.isNotEmpty) + .last)) { + return true; + } + } + + return false; + } + + static final _knownRootFilesAndFolders = [ + 'media_attachments', + 'actor.json', + 'likes.json', + 'outbox.json', + ]; +} diff --git a/fediverse_archive_browser/lib/src/models/archive_types_enum.dart b/fediverse_archive_browser/lib/src/models/archive_types_enum.dart index 5801882..a95983b 100644 --- a/fediverse_archive_browser/lib/src/models/archive_types_enum.dart +++ b/fediverse_archive_browser/lib/src/models/archive_types_enum.dart @@ -2,4 +2,5 @@ enum ArchiveType { unknown, diaspora, friendica, + mastodon, } diff --git a/fediverse_archive_browser/lib/src/screens/entries_screen.dart b/fediverse_archive_browser/lib/src/screens/entries_screen.dart index 0ce16fa..a6b05d5 100644 --- a/fediverse_archive_browser/lib/src/screens/entries_screen.dart +++ b/fediverse_archive_browser/lib/src/screens/entries_screen.dart @@ -1,4 +1,3 @@ -import 'package:flutter/material.dart'; import 'package:fediverse_archive_browser/src/components/filter_control_component.dart'; import 'package:fediverse_archive_browser/src/components/tree_entry_card.dart'; import 'package:fediverse_archive_browser/src/models/entry_tree_item.dart'; @@ -6,6 +5,7 @@ import 'package:fediverse_archive_browser/src/models/model_utils.dart'; import 'package:fediverse_archive_browser/src/screens/error_screen.dart'; import 'package:fediverse_archive_browser/src/settings/settings_controller.dart'; import 'package:fediverse_archive_browser/src/utils/exec_error.dart'; +import 'package:flutter/material.dart'; import 'package:logging/logging.dart'; import 'package:provider/provider.dart'; import 'package:result_monad/result_monad.dart'; diff --git a/fediverse_archive_browser/lib/src/screens/geospatial_screen.dart b/fediverse_archive_browser/lib/src/screens/geospatial_screen.dart index 6ebc486..9e3dd87 100644 --- a/fediverse_archive_browser/lib/src/screens/geospatial_screen.dart +++ b/fediverse_archive_browser/lib/src/screens/geospatial_screen.dart @@ -1,7 +1,5 @@ import 'dart:math'; -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; import 'package:fediverse_archive_browser/src/components/geo/geo_extensions.dart'; import 'package:fediverse_archive_browser/src/components/tree_entry_card.dart'; import 'package:fediverse_archive_browser/src/friendica/services/friendica_path_mapping_service.dart'; @@ -14,6 +12,8 @@ import 'package:fediverse_archive_browser/src/services/archive_service_provider. import 'package:fediverse_archive_browser/src/settings/settings_controller.dart'; import 'package:fediverse_archive_browser/src/utils/exec_error.dart'; import 'package:fediverse_archive_browser/src/utils/temp_file_builder.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:latlng/latlng.dart'; import 'package:logging/logging.dart'; @@ -191,7 +191,7 @@ class _GeospatialViewState extends State { postList, ], initialWeights: const [0.3], - minimalWeight: 0.2, + globalMinimalWeight: 0.2, ); return MultiSplitViewTheme( diff --git a/fediverse_archive_browser/lib/src/services/archive_service_provider.dart b/fediverse_archive_browser/lib/src/services/archive_service_provider.dart index 0f49c38..1389031 100644 --- a/fediverse_archive_browser/lib/src/services/archive_service_provider.dart +++ b/fediverse_archive_browser/lib/src/services/archive_service_provider.dart @@ -1,12 +1,14 @@ -import 'package:flutter/cupertino.dart'; import 'package:fediverse_archive_browser/src/diaspora/services/diaspora_archive_service.dart'; import 'package:fediverse_archive_browser/src/diaspora/services/diaspora_path_mapping_service.dart'; import 'package:fediverse_archive_browser/src/friendica/services/friendica_archive_service.dart'; import 'package:fediverse_archive_browser/src/friendica/services/friendica_path_mapping_service.dart'; +import 'package:fediverse_archive_browser/src/mastodon/services/mastodon_archive_service.dart'; +import 'package:fediverse_archive_browser/src/mastodon/services/mastodon_path_mapping_service.dart'; import 'package:fediverse_archive_browser/src/services/archive_service_interface.dart'; import 'package:fediverse_archive_browser/src/services/connections_manager.dart'; import 'package:fediverse_archive_browser/src/services/path_mapper_service_interface.dart'; import 'package:fediverse_archive_browser/src/settings/settings_controller.dart'; +import 'package:flutter/cupertino.dart'; import 'package:result_monad/result_monad.dart'; import '../models/archive_types_enum.dart'; @@ -18,6 +20,7 @@ class ArchiveServiceProvider extends ChangeNotifier implements ArchiveService { final SettingsController settings; late DiasporaArchiveService _diasporaArchiveService; late FriendicaArchiveService _friendicaArchiveService; + late MastodonArchiveService _mastodonArchiveService; @override ConnectionsManager get connectionsManager => @@ -32,6 +35,7 @@ class ArchiveServiceProvider extends ChangeNotifier implements ArchiveService { void clearCaches() { _friendicaArchiveService.clearCaches(); _diasporaArchiveService.clearCaches(); + _mastodonArchiveService.clearCaches(); _buildArchiveServices(); } @@ -61,17 +65,19 @@ class ArchiveServiceProvider extends ChangeNotifier implements ArchiveService { return _diasporaArchiveService; case ArchiveType.friendica: return _friendicaArchiveService; + case ArchiveType.mastodon: + return _mastodonArchiveService; default: throw Exception('Unknown archive type'); } } - void _buildArchiveServices() { _diasporaArchiveService = DiasporaArchiveService( pathMappingService: DiasporaPathMappingService(settings)); _friendicaArchiveService = FriendicaArchiveService( pathMappingService: FriendicaPathMappingService(settings)); + _mastodonArchiveService = MastodonArchiveService( + pathMappingService: MastodonPathMappingService(settings)); } - } diff --git a/fediverse_archive_browser/lib/src/utils/scrolling_behavior.dart b/fediverse_archive_browser/lib/src/utils/scrolling_behavior.dart index 0459c7a..eda8fe4 100644 --- a/fediverse_archive_browser/lib/src/utils/scrolling_behavior.dart +++ b/fediverse_archive_browser/lib/src/utils/scrolling_behavior.dart @@ -7,5 +7,6 @@ class AppScrollingBehavior extends MaterialScrollBehavior { Set get dragDevices => { PointerDeviceKind.touch, PointerDeviceKind.mouse, + PointerDeviceKind.trackpad, }; } diff --git a/fediverse_archive_browser/linux/flutter/generated_plugins.cmake b/fediverse_archive_browser/linux/flutter/generated_plugins.cmake index d4196a6..93a9532 100644 --- a/fediverse_archive_browser/linux/flutter/generated_plugins.cmake +++ b/fediverse_archive_browser/linux/flutter/generated_plugins.cmake @@ -7,6 +7,9 @@ list(APPEND FLUTTER_PLUGIN_LIST url_launcher_linux ) +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + set(PLUGIN_BUNDLED_LIBRARIES) foreach(plugin ${FLUTTER_PLUGIN_LIST}) @@ -15,3 +18,8 @@ foreach(plugin ${FLUTTER_PLUGIN_LIST}) list(APPEND PLUGIN_BUNDLED_LIBRARIES $) list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/fediverse_archive_browser/macos/Flutter/GeneratedPluginRegistrant.swift b/fediverse_archive_browser/macos/Flutter/GeneratedPluginRegistrant.swift index 402cf10..46cab40 100644 --- a/fediverse_archive_browser/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/fediverse_archive_browser/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,14 +5,22 @@ import FlutterMacOS import Foundation +import audio_session import desktop_window +import just_audio import path_provider_macos import shared_preferences_macos +import sqflite import url_launcher_macos +import wakelock_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + AudioSessionPlugin.register(with: registry.registrar(forPlugin: "AudioSessionPlugin")) DesktopWindowPlugin.register(with: registry.registrar(forPlugin: "DesktopWindowPlugin")) + JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) + SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) + WakelockMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockMacosPlugin")) } diff --git a/fediverse_archive_browser/macos/Podfile b/fediverse_archive_browser/macos/Podfile index dade8df..fe73390 100644 --- a/fediverse_archive_browser/macos/Podfile +++ b/fediverse_archive_browser/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.13' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/fediverse_archive_browser/macos/Podfile.lock b/fediverse_archive_browser/macos/Podfile.lock index ddebf10..64f0b50 100644 --- a/fediverse_archive_browser/macos/Podfile.lock +++ b/fediverse_archive_browser/macos/Podfile.lock @@ -1,40 +1,73 @@ PODS: + - audio_session (0.0.1): + - FlutterMacOS - desktop_window (0.0.1): - FlutterMacOS - FlutterMacOS (1.0.0) + - FMDB (2.7.5): + - FMDB/standard (= 2.7.5) + - FMDB/standard (2.7.5) + - just_audio (0.0.1): + - FlutterMacOS - path_provider_macos (0.0.1): - FlutterMacOS - shared_preferences_macos (0.0.1): - FlutterMacOS + - sqflite (0.0.2): + - FlutterMacOS + - FMDB (>= 2.7.5) - url_launcher_macos (0.0.1): - FlutterMacOS + - wakelock_macos (0.0.1): + - FlutterMacOS DEPENDENCIES: + - audio_session (from `Flutter/ephemeral/.symlinks/plugins/audio_session/macos`) - desktop_window (from `Flutter/ephemeral/.symlinks/plugins/desktop_window/macos`) - FlutterMacOS (from `Flutter/ephemeral`) + - just_audio (from `Flutter/ephemeral/.symlinks/plugins/just_audio/macos`) - path_provider_macos (from `Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos`) - shared_preferences_macos (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos`) + - sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`) - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) + - wakelock_macos (from `Flutter/ephemeral/.symlinks/plugins/wakelock_macos/macos`) + +SPEC REPOS: + trunk: + - FMDB EXTERNAL SOURCES: + audio_session: + :path: Flutter/ephemeral/.symlinks/plugins/audio_session/macos desktop_window: :path: Flutter/ephemeral/.symlinks/plugins/desktop_window/macos FlutterMacOS: :path: Flutter/ephemeral + just_audio: + :path: Flutter/ephemeral/.symlinks/plugins/just_audio/macos path_provider_macos: :path: Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos shared_preferences_macos: :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos + sqflite: + :path: Flutter/ephemeral/.symlinks/plugins/sqflite/macos url_launcher_macos: :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos + wakelock_macos: + :path: Flutter/ephemeral/.symlinks/plugins/wakelock_macos/macos SPEC CHECKSUMS: + audio_session: dea1f41890dbf1718f04a56f1d6150fd50039b72 desktop_window: fb7c4f12c1129f947ac482296b6f14059d57a3c3 - FlutterMacOS: 57701585bf7de1b3fc2bb61f6378d73bbdea8424 - path_provider_macos: 160cab0d5461f0c0e02995469a98f24bdb9a3f1f - shared_preferences_macos: 480ce071d0666e37cef23fe6c702293a3d21799e - url_launcher_macos: 45af3d61de06997666568a7149c1be98b41c95d4 + FlutterMacOS: ae6af50a8ea7d6103d888583d46bd8328a7e9811 + FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a + just_audio: 9b67ca7b97c61cfc9784ea23cd8cc55eb226d489 + path_provider_macos: 3c0c3b4b0d4a76d2bf989a913c2de869c5641a19 + shared_preferences_macos: a64dc611287ed6cbe28fd1297898db1336975727 + sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea + url_launcher_macos: 597e05b8e514239626bcf4a850fcf9ef5c856ec3 + wakelock_macos: bc3f2a9bd8d2e6c89fee1e1822e7ddac3bd004a9 -PODFILE CHECKSUM: 6eac6b3292e5142cfc23bdeb71848a40ec51c14c +PODFILE CHECKSUM: a884f6dd3f7494f3892ee6c81feea3a3abbf9153 -COCOAPODS: 1.10.2 +COCOAPODS: 1.11.3 diff --git a/fediverse_archive_browser/macos/Runner.xcodeproj/project.pbxproj b/fediverse_archive_browser/macos/Runner.xcodeproj/project.pbxproj index ecdd05b..9ec4470 100644 --- a/fediverse_archive_browser/macos/Runner.xcodeproj/project.pbxproj +++ b/fediverse_archive_browser/macos/Runner.xcodeproj/project.pbxproj @@ -405,7 +405,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.13; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -486,7 +486,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.13; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -533,7 +533,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.13; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/fediverse_archive_browser/pubspec.lock b/fediverse_archive_browser/pubspec.lock index 85e5e80..f006cc9 100644 --- a/fediverse_archive_browser/pubspec.lock +++ b/fediverse_archive_browser/pubspec.lock @@ -7,14 +7,21 @@ packages: name: args url: "https://pub.dartlang.org" source: hosted - version: "2.3.0" + version: "2.3.1" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.8.2" + version: "2.9.0" + audio_session: + dependency: transitive + description: + name: audio_session + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.10" boolean_selector: dependency: transitive description: @@ -22,13 +29,34 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.0" + cached_network_image: + dependency: transitive + description: + name: cached_network_image + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.2" + cached_network_image_platform_interface: + dependency: transitive + description: + name: cached_network_image_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + cached_network_image_web: + dependency: transitive + description: + name: cached_network_image_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" charcode: dependency: transitive description: @@ -50,34 +78,48 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.12.0" + chewie: + dependency: transitive + description: + name: chewie + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.5" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0" + version: "1.16.0" crypto: dependency: transitive description: name: crypto url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.0.2" csslib: dependency: transitive description: name: csslib url: "https://pub.dartlang.org" source: hosted - version: "0.17.1" + version: "0.17.2" + cupertino_icons: + dependency: transitive + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" desktop_window: dependency: "direct main" description: @@ -91,33 +133,54 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.3.1" ffi: dependency: transitive description: name: ffi url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.2.1" file: dependency: transitive description: name: file url: "https://pub.dartlang.org" source: hosted - version: "6.1.2" + version: "6.1.4" file_picker: dependency: "direct main" description: name: file_picker url: "https://pub.dartlang.org" source: hosted - version: "4.2.7" + version: "4.6.1" + fixnum: + dependency: transitive + description: + name: fixnum + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" flutter: dependency: "direct main" description: flutter source: sdk version: "0.0.0" + flutter_blurhash: + dependency: transitive + description: + name: flutter_blurhash + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.0" flutter_lints: dependency: "direct dev" description: @@ -136,7 +199,14 @@ packages: name: flutter_plugin_android_lifecycle url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.0.7" + flutter_svg: + dependency: transitive + description: + name: flutter_svg + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.6" flutter_test: dependency: "direct dev" description: flutter @@ -147,41 +217,90 @@ packages: description: flutter source: sdk version: "0.0.0" - flutter_widget_from_html_core: + flutter_widget_from_html: dependency: "direct main" + description: + name: flutter_widget_from_html + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.0" + flutter_widget_from_html_core: + dependency: transitive description: name: flutter_widget_from_html_core url: "https://pub.dartlang.org" source: hosted - version: "0.8.4" + version: "0.9.0" + fwfh_cached_network_image: + dependency: transitive + description: + name: fwfh_cached_network_image + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.0+3" + fwfh_chewie: + dependency: transitive + description: + name: fwfh_chewie + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.0+2" + fwfh_just_audio: + dependency: transitive + description: + name: fwfh_just_audio + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.0" + fwfh_svg: + dependency: transitive + description: + name: fwfh_svg + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.2+1" fwfh_text_style: dependency: transitive description: name: fwfh_text_style url: "https://pub.dartlang.org" source: hosted - version: "2.7.2" + version: "2.22.08+1" + fwfh_url_launcher: + dependency: transitive + description: + name: fwfh_url_launcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.0" + fwfh_webview: + dependency: transitive + description: + name: fwfh_webview + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.2+4" html: dependency: transitive description: name: html url: "https://pub.dartlang.org" source: hosted - version: "0.15.0" + version: "0.15.1" http: dependency: transitive description: name: http url: "https://pub.dartlang.org" source: hosted - version: "0.13.4" + version: "0.13.5" http_parser: dependency: transitive description: name: http_parser url: "https://pub.dartlang.org" source: hosted - version: "4.0.0" + version: "4.0.2" intl: dependency: "direct main" description: @@ -195,14 +314,35 @@ packages: name: js url: "https://pub.dartlang.org" source: hosted - version: "0.6.3" + version: "0.6.4" + just_audio: + dependency: transitive + description: + name: just_audio + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.30" + just_audio_platform_interface: + dependency: transitive + description: + name: just_audio_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.0" + just_audio_web: + dependency: transitive + description: + name: just_audio_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.7" latlng: dependency: "direct main" description: name: latlng url: "https://pub.dartlang.org" source: hosted - version: "0.1.0" + version: "0.1.1" lints: dependency: transitive description: @@ -216,14 +356,14 @@ packages: name: logging url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.1.0" map: dependency: "direct main" description: name: map url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.2.0" markdown: dependency: "direct main" description: @@ -237,21 +377,21 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.11" + version: "0.12.12" material_color_utilities: dependency: transitive description: name: material_color_utilities url: "https://pub.dartlang.org" source: hosted - version: "0.1.3" + version: "0.1.5" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.8.0" metadata_fetch: dependency: "direct main" description: @@ -265,7 +405,7 @@ packages: name: multi_split_view url: "https://pub.dartlang.org" source: hosted - version: "1.10.0+1" + version: "1.13.0" nested: dependency: transitive description: @@ -279,63 +419,98 @@ packages: name: network_to_file_image url: "https://pub.dartlang.org" source: hosted - version: "3.0.3" + version: "3.1.0" + octo_image: + dependency: transitive + description: + name: octo_image + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" path: dependency: "direct main" description: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0" + version: "1.8.2" + path_drawing: + dependency: transitive + description: + name: path_drawing + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + path_parsing: + dependency: transitive + description: + name: path_parsing + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" path_provider: dependency: "direct main" description: name: path_provider url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.0.11" path_provider_android: dependency: transitive description: name: path_provider_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.9" + version: "2.0.21" path_provider_ios: dependency: transitive description: name: path_provider_ios url: "https://pub.dartlang.org" source: hosted - version: "2.0.7" + version: "2.0.11" path_provider_linux: dependency: transitive description: name: path_provider_linux url: "https://pub.dartlang.org" source: hosted - version: "2.1.2" + version: "2.1.7" path_provider_macos: dependency: transitive description: name: path_provider_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "2.0.6" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.5" path_provider_windows: dependency: transitive description: name: path_provider_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "2.0.7" + pedantic: + dependency: transitive + description: + name: pedantic + url: "https://pub.dartlang.org" + source: hosted + version: "1.11.1" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "5.1.0" platform: dependency: transitive description: @@ -349,7 +524,7 @@ packages: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.1.3" process: dependency: transitive description: @@ -357,20 +532,34 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "4.2.4" + protobuf: + dependency: transitive + description: + name: protobuf + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" provider: dependency: "direct main" description: name: provider url: "https://pub.dartlang.org" source: hosted - version: "6.0.1" + version: "6.0.4" result_monad: dependency: "direct main" description: name: result_monad url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "2.0.2" + rxdart: + dependency: transitive + description: + name: rxdart + url: "https://pub.dartlang.org" + source: hosted + version: "0.27.5" scrollable_positioned_list: dependency: "direct main" description: @@ -384,56 +573,56 @@ packages: name: shared_preferences url: "https://pub.dartlang.org" source: hosted - version: "2.0.10" + version: "2.0.15" shared_preferences_android: dependency: transitive description: name: shared_preferences_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.9" + version: "2.0.14" shared_preferences_ios: dependency: transitive description: name: shared_preferences_ios url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.1.1" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux url: "https://pub.dartlang.org" source: hosted - version: "2.0.3" + version: "2.1.1" shared_preferences_macos: dependency: transitive description: name: shared_preferences_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.0.4" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0" shared_preferences_web: dependency: transitive description: name: shared_preferences_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.0.4" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.3" + version: "2.1.1" sky_engine: dependency: transitive description: flutter @@ -445,7 +634,21 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.1" + version: "1.9.0" + sqflite: + dependency: transitive + description: + name: sqflite + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0+3" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.0+2" stack_trace: dependency: transitive description: @@ -466,7 +669,7 @@ packages: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" string_validator: dependency: transitive description: @@ -474,26 +677,33 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.3.0" + synchronized: + dependency: transitive + description: + name: synchronized + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0+3" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.8" + version: "0.4.12" time_machine: dependency: "direct main" description: path: "." ref: master - resolved-ref: "040de1a261df442538ed97f6de5895465d7ca4dd" + resolved-ref: "246f3608b16d7fa36ee2155b3a21884b48c75b01" url: "https://github.com/Dana-Ferguson/time_machine" source: git version: "0.9.17" @@ -503,91 +713,196 @@ packages: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" url_launcher: dependency: "direct main" description: name: url_launcher url: "https://pub.dartlang.org" source: hosted - version: "6.0.17" + version: "6.1.6" url_launcher_android: dependency: transitive description: name: url_launcher_android url: "https://pub.dartlang.org" source: hosted - version: "6.0.13" + version: "6.0.21" url_launcher_ios: dependency: transitive description: name: url_launcher_ios url: "https://pub.dartlang.org" source: hosted - version: "6.0.13" + version: "6.0.17" url_launcher_linux: dependency: transitive description: name: url_launcher_linux url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "3.0.1" url_launcher_macos: dependency: transitive description: name: url_launcher_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "3.0.1" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "2.1.1" url_launcher_web: dependency: transitive description: name: url_launcher_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.0.13" url_launcher_windows: dependency: transitive description: name: url_launcher_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "3.0.1" uuid: dependency: "direct main" description: name: uuid url: "https://pub.dartlang.org" source: hosted - version: "3.0.5" + version: "3.0.6" vector_math: dependency: transitive description: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.2" + video_player: + dependency: transitive + description: + name: video_player + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.7" + video_player_android: + dependency: transitive + description: + name: video_player_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.9" + video_player_avfoundation: + dependency: transitive + description: + name: video_player_avfoundation + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.7" + video_player_platform_interface: + dependency: transitive + description: + name: video_player_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "5.1.4" + video_player_web: + dependency: transitive + description: + name: video_player_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.12" + wakelock: + dependency: transitive + description: + name: wakelock + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.2" + wakelock_macos: + dependency: transitive + description: + name: wakelock_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.0" + wakelock_platform_interface: + dependency: transitive + description: + name: wakelock_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.0" + wakelock_web: + dependency: transitive + description: + name: wakelock_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.0" + wakelock_windows: + dependency: transitive + description: + name: wakelock_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" + webview_flutter: + dependency: transitive + description: + name: webview_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.4" + webview_flutter_android: + dependency: transitive + description: + name: webview_flutter_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.10.4" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.5" + webview_flutter_wkwebview: + dependency: transitive + description: + name: webview_flutter_wkwebview + url: "https://pub.dartlang.org" + source: hosted + version: "2.9.5" win32: dependency: transitive description: name: win32 url: "https://pub.dartlang.org" source: hosted - version: "2.3.1" + version: "2.6.1" xdg_directories: dependency: transitive description: name: xdg_directories url: "https://pub.dartlang.org" source: hosted - version: "0.2.0" + version: "0.2.0+2" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.0" sdks: - dart: ">=2.14.4 <3.0.0" - flutter: ">=2.6.0-0" + dart: ">=2.18.2 <3.0.0" + flutter: ">=3.3.0" diff --git a/fediverse_archive_browser/pubspec.yaml b/fediverse_archive_browser/pubspec.yaml index 3e085bc..39f8ddd 100644 --- a/fediverse_archive_browser/pubspec.yaml +++ b/fediverse_archive_browser/pubspec.yaml @@ -1,13 +1,13 @@ name: fediverse_archive_browser -description: An Archive Browser for various fediverse projects (Friendica, Diaspora) +description: An Archive Browser for various fediverse projects (Friendica, Diaspora, Mastodon) # Prevent accidental publishing to pub.dev. publish_to: 'none' -version: 1.0.0 +version: 2.0.0 environment: - sdk: ">=2.14.0 <3.0.0" + sdk: '>=2.18.2 <3.0.0' dependencies: desktop_window: ^0.4.0 @@ -17,7 +17,7 @@ dependencies: charts_flutter: ^0.12.0 flutter_localizations: sdk: flutter - flutter_widget_from_html_core: ^0.8.4 + flutter_widget_from_html: ^0.9.0 intl: ^0.17.0 logging: ^1.0.2 latlng: ^0.1.0 @@ -28,7 +28,7 @@ dependencies: path: ^1.8.0 path_provider: ^2.0.6 provider: ^6.0.0 - result_monad: ^1.0.2 + result_monad: ^2.0.2 scrollable_positioned_list: ^0.2.2 shared_preferences: ^2.0.8 time_machine: diff --git a/fediverse_archive_browser/windows/flutter/generated_plugins.cmake b/fediverse_archive_browser/windows/flutter/generated_plugins.cmake index 431160e..d3bb578 100644 --- a/fediverse_archive_browser/windows/flutter/generated_plugins.cmake +++ b/fediverse_archive_browser/windows/flutter/generated_plugins.cmake @@ -7,6 +7,9 @@ list(APPEND FLUTTER_PLUGIN_LIST url_launcher_windows ) +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + set(PLUGIN_BUNDLED_LIBRARIES) foreach(plugin ${FLUTTER_PLUGIN_LIST}) @@ -15,3 +18,8 @@ foreach(plugin ${FLUTTER_PLUGIN_LIST}) list(APPEND PLUGIN_BUNDLED_LIBRARIES $) list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/fediverse_archive_browser/windows/runner/Runner.rc b/fediverse_archive_browser/windows/runner/Runner.rc index 2f2b4b0..e0fea0d 100644 --- a/fediverse_archive_browser/windows/runner/Runner.rc +++ b/fediverse_archive_browser/windows/runner/Runner.rc @@ -63,13 +63,13 @@ IDI_APP_ICON ICON "resources\\fediverse_archive_re #ifdef FLUTTER_BUILD_NUMBER #define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER #else -#define VERSION_AS_NUMBER 1,0,0 +#define VERSION_AS_NUMBER 2,0,0 #endif #ifdef FLUTTER_BUILD_NAME #define VERSION_AS_STRING #FLUTTER_BUILD_NAME #else -#define VERSION_AS_STRING "1.0.0" +#define VERSION_AS_STRING "2.0.0" #endif VS_VERSION_INFO VERSIONINFO