Merge pull request 'Merge Request 1' (#1) from dev into main

Reviewed-on: #1 on July 15th, 2024 @ 11:52AM Atlantic Standard Time
This commit is contained in:
ThatOneJackalGuy 2024-07-15 11:52:46 -04:00
commit 29a50bb0e7
83 changed files with 458 additions and 346 deletions

2
.gitignore vendored
View file

@ -43,3 +43,5 @@ app.*.map.json
/android/app/profile
/android/app/release
/android/key.properties
# NEVER STORE ANY KEY OR API KEYS WHEN COMMITING CODE!!

View file

@ -1,4 +1,4 @@
<img src="https://github.com/Nutcake/ReCon/raw/main/assets/images/logo512.png" width="200"/>
<img src="https://git.mrdab.vore.media/ThatOneJackalGuy/OpenContacts/raw/branch/dev/assets/images/testingIcon512.png" width="200"/>
## OpenContacts

View file

@ -49,7 +49,7 @@ android {
}
defaultConfig {
applicationId "me.voidspace.recon"
applicationId "de.tojcklguy.opencontacts"
minSdkVersion 24
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()

View file

@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.voidspace.recon">
package="de.tojcklguy.opencontacts">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.

View file

@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.voidspace.recon">
package="de.tojcklguy.opencontacts">
<!-- Required to fetch data from the internet. -->
<uses-permission android:name="android.permission.INTERNET" />
@ -7,7 +7,7 @@
<!-- Optional, you'll have to check this permission by yourself. -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:label="ReCon"
android:label="OpenContacts"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<activity

View file

@ -1,4 +1,4 @@
package de.voidspace.recon
package de.tojcklguy.opencontacts
import io.flutter.embedding.android.FlutterActivity

View file

@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.voidspace.recon">
package="de.tojcklguy.opencontacts">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View file

@ -45,7 +45,7 @@
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* ReCon.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ReCon.app; sourceTree = BUILT_PRODUCTS_DIR; };
97C146EE1CF9000F007C117D /* recon.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = recon.app; sourceTree = BUILT_PRODUCTS_DIR; };
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
@ -110,7 +110,7 @@
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* ReCon.app */,
97C146EE1CF9000F007C117D /* recon.app */,
331C8081294A63A400263BE5 /* RunnerTests.xctest */,
);
name = Products;
@ -195,7 +195,7 @@
);
name = Runner;
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* ReCon.app */;
productReference = 97C146EE1CF9000F007C117D /* recon.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
@ -446,7 +446,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_KEY_CFBundleDisplayName = ReCon;
INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
INFOPLIST_KEY_NSDownloadsFolderUsageDescription = "Downloading assets from your inventory";
INFOPLIST_KEY_NSMicrophoneUsageDescription = "Recording voice messages";
@ -474,7 +474,7 @@
ENABLE_BITCODE = NO;
FLUTTER_BUILD_NAME = 0.11.2;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ReCon;
INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
@ -484,7 +484,7 @@
MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 0.11.2;
PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon;
PRODUCT_NAME = ReCon;
PRODUCT_NAME = recon;
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
@ -592,7 +592,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_KEY_CFBundleDisplayName = ReCon;
INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
INFOPLIST_KEY_NSDownloadsFolderUsageDescription = "Downloading assets from your inventory";
INFOPLIST_KEY_NSMicrophoneUsageDescription = "Recording voice messages";
@ -652,7 +652,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_KEY_CFBundleDisplayName = ReCon;
INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
INFOPLIST_KEY_NSDownloadsFolderUsageDescription = "Downloading assets from your inventory";
INFOPLIST_KEY_NSMicrophoneUsageDescription = "Recording voice messages";
@ -682,7 +682,7 @@
ENABLE_BITCODE = NO;
FLUTTER_BUILD_NAME = 0.11.2;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ReCon;
INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
@ -692,7 +692,7 @@
MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 0.11.2;
PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon;
PRODUCT_NAME = ReCon;
PRODUCT_NAME = recon;
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@ -712,7 +712,7 @@
ENABLE_BITCODE = NO;
FLUTTER_BUILD_NAME = 0.11.2;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ReCon;
INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
@ -722,7 +722,7 @@
MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 0.11.2;
PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon;
PRODUCT_NAME = ReCon;
PRODUCT_NAME = recon;
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";

View file

@ -15,7 +15,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "ReCon.app"
BuildableName = "recon.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
@ -31,7 +31,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "ReCon.app"
BuildableName = "recon.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
@ -65,7 +65,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "ReCon.app"
BuildableName = "recon.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
@ -82,7 +82,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "ReCon.app"
BuildableName = "recon.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
@ -93,7 +93,7 @@
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
customArchiveName = "ReCon"
customArchiveName = "recon"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View file

@ -7,7 +7,7 @@
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>ReCon</string>
<string>recon</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
@ -15,7 +15,7 @@
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>ReCon</string>
<string>recon</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>

View file

@ -1,7 +1,7 @@
import 'dart:convert';
import 'package:recon/clients/api_client.dart';
import 'package:recon/models/cloud_variable.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/models/cloud_variable.dart';
class CloudVariableApi {
static Future<CloudVariable> readCloudVariable(ApiClient client,

View file

@ -1,11 +1,11 @@
import 'dart:convert';
import 'package:recon/clients/api_client.dart';
import 'package:recon/models/users/friend.dart';
import 'package:recon/models/users/friend_status.dart';
import 'package:recon/models/users/user.dart';
import 'package:recon/models/users/user_profile.dart';
import 'package:recon/models/users/user_status.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/models/users/friend.dart';
import 'package:OpenContacts/models/users/friend_status.dart';
import 'package:OpenContacts/models/users/user.dart';
import 'package:OpenContacts/models/users/user_profile.dart';
import 'package:OpenContacts/models/users/user_status.dart';
class ContactApi {
static Future<List<Friend>> getFriendsList(ApiClient client, {DateTime? lastStatusUpdate}) async {

View file

@ -3,10 +3,10 @@ import 'dart:convert';
import 'package:http/http.dart' as http;
class GithubApi {
static const baseUrl = "https://api.github.com";
static const baseUrl = "https://git.mrdab.vore.media/api/v1";
static Future<String> getLatestTagName() async {
final response = await http.get(Uri.parse("$baseUrl/repos/Nutcake/ReCon/releases?per_page=1"));
final response = await http.get(Uri.parse("$baseUrl/repos/ThatOneJackalGuy/OpenContacts/releases?per_page=1"));
if (response.statusCode != 200) return "";
final body = jsonDecode(response.body) as List;
if (body.isEmpty) return "";

View file

@ -1,7 +1,7 @@
import 'dart:convert';
import 'package:recon/clients/api_client.dart';
import 'package:recon/models/message.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/models/message.dart';
class MessageApi {
static Future<List<Message>> getUserMessages(ApiClient client, {String userId = "", DateTime? fromTime,

View file

@ -3,16 +3,16 @@ import 'dart:io';
import 'dart:math';
import 'dart:typed_data';
import 'package:collection/collection.dart';
import 'package:recon/models/records/asset_digest.dart';
import 'package:recon/models/records/json_template.dart';
import 'package:OpenContacts/models/records/asset_digest.dart';
import 'package:OpenContacts/models/records/json_template.dart';
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';
import 'package:recon/clients/api_client.dart';
import 'package:recon/models/records/asset_upload_data.dart';
import 'package:recon/models/records/resonite_db_asset.dart';
import 'package:recon/models/records/preprocess_status.dart';
import 'package:recon/models/records/record.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/models/records/asset_upload_data.dart';
import 'package:OpenContacts/models/records/resonite_db_asset.dart';
import 'package:OpenContacts/models/records/preprocess_status.dart';
import 'package:OpenContacts/models/records/record.dart';
import 'package:http_parser/http_parser.dart';
import 'package:path/path.dart';

View file

@ -1,7 +1,7 @@
import 'dart:convert';
import 'package:recon/clients/api_client.dart';
import 'package:recon/models/session.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/models/session.dart';
class SessionApi {
static Future<Session> getSession(ApiClient client, {required String sessionId}) async {

View file

@ -1,9 +1,9 @@
import 'dart:convert';
import 'package:recon/clients/api_client.dart';
import 'package:recon/models/personal_profile.dart';
import 'package:recon/models/users/user.dart';
import 'package:recon/models/users/user_status.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/models/personal_profile.dart';
import 'package:OpenContacts/models/users/user.dart';
import 'package:OpenContacts/models/users/user_status.dart';
class UserApi {
static Future<Iterable<User>> searchUsers(ApiClient client, {required String needle}) async {

View file

@ -1,4 +1,4 @@
import 'package:recon/config.dart';
import 'package:OpenContacts/config.dart';
import 'package:flutter/material.dart';
import 'package:path/path.dart' as p;
import 'package:html/parser.dart' as htmlparser;

View file

@ -1,8 +1,8 @@
import 'package:recon/clients/api_client.dart';
import 'package:recon/clients/notification_client.dart';
import 'package:recon/clients/settings_client.dart';
import 'package:recon/models/authentication_data.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/clients/notification_client.dart';
import 'package:OpenContacts/clients/settings_client.dart';
import 'package:OpenContacts/models/authentication_data.dart';
import 'package:flutter/material.dart';
class ClientHolder extends InheritedWidget {

View file

@ -3,7 +3,7 @@ import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:http/http.dart' as http;
import 'package:recon/models/authentication_data.dart';
import 'package:OpenContacts/models/authentication_data.dart';
import 'package:logging/logging.dart';
import 'package:uuid/uuid.dart';

View file

@ -4,9 +4,9 @@ import 'package:ffmpeg_kit_flutter_audio/ffmpeg_kit.dart';
import 'package:http/http.dart' as http;
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:recon/auxiliary.dart';
import 'package:recon/clients/api_client.dart';
import 'package:recon/models/message.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/models/message.dart';
class AudioCacheClient {
final Future<Directory> _directoryFuture = getTemporaryDirectory();

View file

@ -1,10 +1,10 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:recon/apis/record_api.dart';
import 'package:recon/clients/api_client.dart';
import 'package:recon/models/inventory/resonite_directory.dart';
import 'package:recon/models/records/record.dart';
import 'package:OpenContacts/apis/record_api.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/models/inventory/resonite_directory.dart';
import 'package:OpenContacts/models/records/record.dart';
enum SortMode {
name,

View file

@ -5,21 +5,21 @@ import 'package:flutter/widgets.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:logging/logging.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:recon/apis/contact_api.dart';
import 'package:recon/apis/message_api.dart';
import 'package:recon/apis/session_api.dart';
import 'package:recon/apis/user_api.dart';
import 'package:recon/clients/api_client.dart';
import 'package:recon/clients/notification_client.dart';
import 'package:recon/clients/settings_client.dart';
import 'package:recon/crypto_helper.dart';
import 'package:recon/hub_manager.dart';
import 'package:recon/models/hub_events.dart';
import 'package:recon/models/message.dart';
import 'package:recon/models/session.dart';
import 'package:recon/models/users/friend.dart';
import 'package:recon/models/users/online_status.dart';
import 'package:recon/models/users/user_status.dart';
import 'package:OpenContacts/apis/contact_api.dart';
import 'package:OpenContacts/apis/message_api.dart';
import 'package:OpenContacts/apis/session_api.dart';
import 'package:OpenContacts/apis/user_api.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/clients/notification_client.dart';
import 'package:OpenContacts/clients/settings_client.dart';
import 'package:OpenContacts/crypto_helper.dart';
import 'package:OpenContacts/hub_manager.dart';
import 'package:OpenContacts/models/hub_events.dart';
import 'package:OpenContacts/models/message.dart';
import 'package:OpenContacts/models/session.dart';
import 'package:OpenContacts/models/users/friend.dart';
import 'package:OpenContacts/models/users/online_status.dart';
import 'package:OpenContacts/models/users/user_status.dart';
class MessagingClient extends ChangeNotifier {
static const Duration _autoRefreshDuration = Duration(seconds: 10);
@ -228,17 +228,19 @@ class MessagingClient extends ChangeNotifier {
// Adjusting values to ensure correct placement of 'headless'
if (friend.isHeadless) return 2.5;
switch (friend.userStatus.onlineStatus) {
case OnlineStatus.online:
case OnlineStatus.sociable:
return 0;
case OnlineStatus.away:
case OnlineStatus.online:
return 1;
case OnlineStatus.busy:
case OnlineStatus.away:
return 2;
case OnlineStatus.busy:
return 3;
case OnlineStatus.invisible:
return 2.5;
return 3.5;
case OnlineStatus.offline:
default:
return 3;
return 4;
}
}

View file

@ -2,9 +2,9 @@ import 'dart:convert';
import 'package:collection/collection.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart' as fln;
import 'package:recon/auxiliary.dart';
import 'package:recon/models/message.dart';
import 'package:recon/models/session.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/models/message.dart';
import 'package:OpenContacts/models/session.dart';
class NotificationChannel {
final String id;
@ -26,7 +26,7 @@ class NotificationClient {
android: fln.AndroidInitializationSettings("ic_notification"),
iOS: fln.DarwinInitializationSettings(),
macOS: fln.DarwinInitializationSettings(),
linux: fln.LinuxInitializationSettings(defaultActionName: "Open ReCon"),
linux: fln.LinuxInitializationSettings(defaultActionName: "Open OpenContacts"),
));
Future<void> showUnreadMessagesNotification(Iterable<Message> messages) async {

View file

@ -1,8 +1,8 @@
import 'package:collection/collection.dart';
import 'package:recon/apis/session_api.dart';
import 'package:recon/clients/api_client.dart';
import 'package:recon/clients/settings_client.dart';
import 'package:recon/models/session.dart';
import 'package:OpenContacts/apis/session_api.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/clients/settings_client.dart';
import 'package:OpenContacts/models/session.dart';
import 'package:flutter/foundation.dart';
class SessionClient extends ChangeNotifier {

View file

@ -1,6 +1,6 @@
import 'dart:convert';
import 'package:recon/models/settings.dart';
import 'package:OpenContacts/models/settings.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';

View file

@ -3,8 +3,8 @@ import 'dart:io';
import 'package:collection/collection.dart';
import 'package:flutter/foundation.dart';
import 'package:recon/config.dart';
import 'package:recon/models/hub_events.dart';
import 'package:OpenContacts/config.dart';
import 'package:OpenContacts/models/hub_events.dart';
import 'package:logging/logging.dart';
import 'package:uuid/uuid.dart';

View file

@ -13,17 +13,17 @@ import 'package:intl/intl.dart';
import 'package:logging/logging.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:provider/provider.dart';
import 'package:recon/apis/github_api.dart';
import 'package:recon/client_holder.dart';
import 'package:recon/clients/api_client.dart';
import 'package:recon/clients/inventory_client.dart';
import 'package:recon/clients/messaging_client.dart';
import 'package:recon/clients/session_client.dart';
import 'package:recon/clients/settings_client.dart';
import 'package:recon/models/sem_ver.dart';
import 'package:recon/widgets/homepage.dart';
import 'package:recon/widgets/login_screen.dart';
import 'package:recon/widgets/update_notifier.dart';
import 'package:OpenContacts/apis/github_api.dart';
import 'package:OpenContacts/client_holder.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/clients/inventory_client.dart';
import 'package:OpenContacts/clients/messaging_client.dart';
import 'package:OpenContacts/clients/session_client.dart';
import 'package:OpenContacts/clients/settings_client.dart';
import 'package:OpenContacts/models/sem_ver.dart';
import 'package:OpenContacts/widgets/homepage.dart';
import 'package:OpenContacts/widgets/login_screen.dart';
import 'package:OpenContacts/widgets/update_notifier.dart';
import 'models/authentication_data.dart';
@ -59,20 +59,20 @@ void main() async {
// Ignore
}
runApp(ReCon(settingsClient: settingsClient, cachedAuthentication: cachedAuth));
runApp(recon(settingsClient: settingsClient, cachedAuthentication: cachedAuth));
}
class ReCon extends StatefulWidget {
const ReCon({required this.settingsClient, required this.cachedAuthentication, super.key});
class recon extends StatefulWidget {
const recon({required this.settingsClient, required this.cachedAuthentication, super.key});
final SettingsClient settingsClient;
final AuthenticationData cachedAuthentication;
@override
State<ReCon> createState() => _ReConState();
State<recon> createState() => _reconState();
}
class _ReConState extends State<ReCon> {
class _reconState extends State<recon> {
final Typography _typography = Typography.material2021(platform: defaultTargetPlatform);
final ReceivePort _port = ReceivePort();
late AuthenticationData _authData = widget.cachedAuthentication;
@ -165,7 +165,7 @@ class _ReConState extends State<ReCon> {
child: DynamicColorBuilder(
builder: (ColorScheme? lightDynamic, ColorScheme? darkDynamic) => MaterialApp(
debugShowCheckedModeBanner: true,
title: 'ReCon',
title: 'OpenContacts',
theme: ThemeData(
useMaterial3: true,
textTheme: _typography.black,

View file

@ -1,4 +1,4 @@
import 'package:recon/auxiliary.dart';
import 'package:OpenContacts/auxiliary.dart';
class CloudVariable {
final String ownerId;

View file

@ -1,5 +1,5 @@
import 'package:collection/collection.dart';
import 'package:recon/models/records/record.dart';
import 'package:OpenContacts/models/records/record.dart';
class ResoniteDirectory {
static const rootName = "Inventory";

View file

@ -1,10 +1,10 @@
import 'dart:async';
import 'dart:developer';
import 'package:recon/clients/api_client.dart';
import 'package:recon/apis/message_api.dart';
import 'package:recon/auxiliary.dart';
import 'package:recon/string_formatter.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/apis/message_api.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/string_formatter.dart';
import 'package:uuid/uuid.dart';
enum MessageType {

View file

@ -1,6 +1,6 @@
import 'package:recon/auxiliary.dart';
import 'package:recon/models/users/entitlement.dart';
import 'package:recon/models/users/user_profile.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/models/users/entitlement.dart';
import 'package:OpenContacts/models/users/user_profile.dart';
class PersonalProfile {
final String id;

View file

@ -1,5 +1,5 @@
import 'package:recon/models/records/resonite_db_asset.dart';
import 'package:OpenContacts/models/records/resonite_db_asset.dart';
class AssetDiff extends ResoniteDBAsset{
final Diff state;

View file

@ -1,7 +1,7 @@
import 'dart:typed_data';
import 'package:recon/models/records/resonite_db_asset.dart';
import 'package:OpenContacts/models/records/resonite_db_asset.dart';
import 'package:path/path.dart';
class AssetDigest {

View file

@ -1,4 +1,4 @@
import 'package:recon/models/records/asset_diff.dart';
import 'package:OpenContacts/models/records/asset_diff.dart';
enum RecordPreprocessState
{

View file

@ -1,8 +1,8 @@
import 'package:recon/auxiliary.dart';
import 'package:recon/models/message.dart';
import 'package:recon/models/records/asset_digest.dart';
import 'package:recon/models/records/resonite_db_asset.dart';
import 'package:recon/string_formatter.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/models/message.dart';
import 'package:OpenContacts/models/records/asset_digest.dart';
import 'package:OpenContacts/models/records/resonite_db_asset.dart';
import 'package:OpenContacts/string_formatter.dart';
import 'package:flutter/material.dart';
import 'package:uuid/uuid.dart';

View file

@ -1,4 +1,4 @@
import 'package:recon/string_formatter.dart';
import 'package:OpenContacts/string_formatter.dart';
class Session {
final String id;

View file

@ -1,4 +1,4 @@
import 'package:recon/models/session.dart';
import 'package:OpenContacts/models/session.dart';
import 'package:intl/intl.dart';
class SessionMetadata {

View file

@ -1,7 +1,7 @@
import 'dart:convert';
import 'package:recon/models/sem_ver.dart';
import 'package:recon/models/users/online_status.dart';
import 'package:OpenContacts/models/sem_ver.dart';
import 'package:OpenContacts/models/users/online_status.dart';
import 'package:flutter/material.dart';
import 'package:uuid/uuid.dart';

View file

@ -1,4 +1,4 @@
import 'package:recon/auxiliary.dart';
import 'package:OpenContacts/auxiliary.dart';
class Entitlement {
Entitlement();

View file

@ -1,8 +1,8 @@
import 'package:recon/auxiliary.dart';
import 'package:recon/models/users/friend_status.dart';
import 'package:recon/models/users/online_status.dart';
import 'package:recon/models/users/user_profile.dart';
import 'package:recon/models/users/user_status.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/models/users/friend_status.dart';
import 'package:OpenContacts/models/users/online_status.dart';
import 'package:OpenContacts/models/users/user_profile.dart';
import 'package:OpenContacts/models/users/user_status.dart';
class Friend implements Comparable {
static const _emptyId = "-1";

View file

@ -5,14 +5,16 @@ enum OnlineStatus {
invisible,
away,
busy,
online;
online,
sociable;
static final List<Color> _colors = [
Colors.transparent,
Colors.transparent,
Colors.grey,
Colors.yellow,
Colors.red,
Colors.green,
Colors.blue,
];
Color color(BuildContext context) => this == OnlineStatus.offline || this == OnlineStatus.invisible
@ -28,6 +30,8 @@ enum OnlineStatus {
int compareTo(OnlineStatus other) {
if (this == other) return 0;
if (this == OnlineStatus.sociable) return -1;
if (other == OnlineStatus.sociable) return 1;
if (this == OnlineStatus.online) return -1;
if (other == OnlineStatus.online) return 1;
if (this == OnlineStatus.away) return -1;

View file

@ -1,4 +1,4 @@
import 'package:recon/models/users/user_profile.dart';
import 'package:OpenContacts/models/users/user_profile.dart';
class User {
final String id;

View file

@ -1,9 +1,9 @@
import 'package:intl/intl.dart';
import 'package:recon/config.dart';
import 'package:recon/crypto_helper.dart';
import 'package:recon/models/session.dart';
import 'package:recon/models/session_metadata.dart';
import 'package:recon/models/users/online_status.dart';
import 'package:OpenContacts/config.dart';
import 'package:OpenContacts/crypto_helper.dart';
import 'package:OpenContacts/models/session.dart';
import 'package:OpenContacts/models/session_metadata.dart';
import 'package:OpenContacts/models/users/online_status.dart';
import 'package:uuid/uuid.dart';
enum UserSessionType

View file

@ -1,4 +1,4 @@
import 'package:recon/string_formatter.dart';
import 'package:OpenContacts/string_formatter.dart';
import 'package:flutter/material.dart';
class FormattedText extends StatelessWidget {

View file

@ -66,7 +66,7 @@ class _ExpandingInputFabState extends State<ExpandingInputFab> {
},
splashRadius: 16,
iconSize: 28,
icon: _isExtended ? const Icon(Icons.close) : const Icon(Icons.search),
icon: _isExtended ? const Icon(Icons.close) : const Icon(Icons.person_search),
),
)
],

View file

@ -1,15 +1,15 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:recon/auxiliary.dart';
import 'package:recon/clients/messaging_client.dart';
import 'package:recon/models/message.dart';
import 'package:recon/models/users/friend.dart';
import 'package:recon/models/users/online_status.dart';
import 'package:recon/widgets/formatted_text.dart';
import 'package:recon/widgets/friends/friend_online_status_indicator.dart';
import 'package:recon/widgets/generic_avatar.dart';
import 'package:recon/widgets/messages/messages_list.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/clients/messaging_client.dart';
import 'package:OpenContacts/models/message.dart';
import 'package:OpenContacts/models/users/friend.dart';
import 'package:OpenContacts/models/users/online_status.dart';
import 'package:OpenContacts/widgets/formatted_text.dart';
import 'package:OpenContacts/widgets/friends/friend_online_status_indicator.dart';
import 'package:OpenContacts/widgets/generic_avatar.dart';
import 'package:OpenContacts/widgets/messages/messages_list.dart';
class FriendListTile extends StatelessWidget {
const FriendListTile({required this.friend, required this.unreads, this.onTap, super.key});

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:recon/models/users/friend.dart';
import 'package:recon/models/users/online_status.dart';
import 'package:recon/models/users/user_status.dart';
import 'package:OpenContacts/models/users/friend.dart';
import 'package:OpenContacts/models/users/online_status.dart';
import 'package:OpenContacts/models/users/user_status.dart';
class FriendOnlineStatusIndicator extends StatelessWidget {
const FriendOnlineStatusIndicator({required this.friend, super.key});
@ -12,7 +12,7 @@ class FriendOnlineStatusIndicator extends StatelessWidget {
Widget build(BuildContext context) {
final UserStatus userStatus = friend.userStatus;
final OnlineStatus onlineStatus = userStatus.onlineStatus;
return userStatus.appVersion.contains("ReCon") && friend.isOnline
return userStatus.appVersion.contains("recon") && friend.isOnline
? SizedBox.square(
dimension: 10,
child: Image.asset(

View file

@ -1,7 +1,7 @@
import 'package:recon/clients/messaging_client.dart';
import 'package:recon/widgets/default_error_widget.dart';
import 'package:recon/widgets/friends/expanding_input_fab.dart';
import 'package:recon/widgets/friends/friend_list_tile.dart';
import 'package:OpenContacts/clients/messaging_client.dart';
import 'package:OpenContacts/widgets/default_error_widget.dart';
import 'package:OpenContacts/widgets/friends/expanding_input_fab.dart';
import 'package:OpenContacts/widgets/friends/friend_list_tile.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

View file

@ -1,9 +1,9 @@
import 'package:collection/collection.dart';
import 'package:recon/client_holder.dart';
import 'package:recon/clients/messaging_client.dart';
import 'package:recon/models/users/online_status.dart';
import 'package:recon/widgets/friends/user_search.dart';
import 'package:recon/widgets/my_profile_dialog.dart';
import 'package:OpenContacts/client_holder.dart';
import 'package:OpenContacts/clients/messaging_client.dart';
import 'package:OpenContacts/models/users/online_status.dart';
import 'package:OpenContacts/widgets/friends/user_search.dart';
import 'package:OpenContacts/widgets/my_profile_dialog.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
@ -21,7 +21,7 @@ class _FriendsListAppBarState extends State<FriendsListAppBar> with AutomaticKee
Widget build(BuildContext context) {
super.build(context);
return AppBar(
title: const Text("ReCon"),
title: const Text("OpenContacts"),
actions: [
Consumer<MessagingClient>(builder: (context, client, _) {
return PopupMenuButton<OnlineStatus>(
@ -53,7 +53,7 @@ class _FriendsListAppBarState extends State<FriendsListAppBar> with AutomaticKee
}
},
itemBuilder: (BuildContext context) => OnlineStatus.values
.where((element) => element == OnlineStatus.online || element == OnlineStatus.offline).sorted((a, b) => b.index.compareTo(a.index),)
.where((element) => element == OnlineStatus.sociable || element == OnlineStatus.online ||element == OnlineStatus.busy || element == OnlineStatus.offline).sorted((a, b) => b.index.compareTo(a.index),)
.map(
(item) => PopupMenuItem<OnlineStatus>(
value: item,
@ -85,7 +85,7 @@ class _FriendsListAppBarState extends State<FriendsListAppBar> with AutomaticKee
},
itemBuilder: (BuildContext context) => [
MenuItemDefinition(
name: "Find Users",
name: "Add Users",
icon: Icons.person_add,
onTap: () async {
final mClient = Provider.of<MessagingClient>(context, listen: false);

View file

@ -1,8 +1,8 @@
import 'package:recon/apis/contact_api.dart';
import 'package:recon/auxiliary.dart';
import 'package:recon/client_holder.dart';
import 'package:recon/models/users/user.dart';
import 'package:recon/widgets/generic_avatar.dart';
import 'package:OpenContacts/apis/contact_api.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/client_holder.dart';
import 'package:OpenContacts/models/users/user.dart';
import 'package:OpenContacts/widgets/generic_avatar.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';

View file

@ -1,11 +1,11 @@
import 'dart:async';
import 'package:recon/apis/user_api.dart';
import 'package:recon/client_holder.dart';
import 'package:recon/clients/messaging_client.dart';
import 'package:recon/models/users/user.dart';
import 'package:recon/widgets/default_error_widget.dart';
import 'package:recon/widgets/friends/user_list_tile.dart';
import 'package:OpenContacts/apis/user_api.dart';
import 'package:OpenContacts/client_holder.dart';
import 'package:OpenContacts/clients/messaging_client.dart';
import 'package:OpenContacts/models/users/user.dart';
import 'package:OpenContacts/widgets/default_error_widget.dart';
import 'package:OpenContacts/widgets/friends/user_list_tile.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
@ -56,7 +56,7 @@ class _UserSearchState extends State<UserSearch> {
final mClient = Provider.of<MessagingClient>(context, listen: false);
return Scaffold(
appBar: AppBar(
title: const Text("Find Users"),
title: const Text("Add Users"),
),
body: SafeArea(
top: false,

View file

@ -1,12 +1,12 @@
import 'package:flutter/material.dart';
import 'package:recon/widgets/friends/friends_list.dart';
import 'package:recon/widgets/friends/friends_list_app_bar.dart';
import 'package:recon/widgets/inventory/inventory_browser.dart';
import 'package:recon/widgets/inventory/inventory_browser_app_bar.dart';
import 'package:recon/widgets/sessions/session_list.dart';
import 'package:recon/widgets/sessions/session_list_app_bar.dart';
import 'package:recon/widgets/settings_app_bar.dart';
import 'package:recon/widgets/settings_page.dart';
import 'package:OpenContacts/widgets/friends/friends_list.dart';
import 'package:OpenContacts/widgets/friends/friends_list_app_bar.dart';
import 'package:OpenContacts/widgets/inventory/inventory_browser.dart';
import 'package:OpenContacts/widgets/inventory/inventory_browser_app_bar.dart';
import 'package:OpenContacts/widgets/sessions/session_list.dart';
import 'package:OpenContacts/widgets/sessions/session_list_app_bar.dart';
import 'package:OpenContacts/widgets/settings_app_bar.dart';
import 'package:OpenContacts/widgets/settings_page.dart';
class Home extends StatefulWidget {
const Home({super.key});
@ -17,8 +17,8 @@ class Home extends StatefulWidget {
class _HomeState extends State<Home> {
static const List<Widget> _appBars = [
FriendsListAppBar(),
SessionListAppBar(),
FriendsListAppBar(),
InventoryBrowserAppBar(),
SettingsAppBar()
];
@ -41,8 +41,8 @@ class _HomeState extends State<Home> {
controller: _pageController,
physics: const NeverScrollableScrollPhysics(),
children: const [
FriendsList(),
SessionList(),
FriendsList(),
InventoryBrowser(),
SettingsPage(),
],
@ -60,14 +60,14 @@ class _HomeState extends State<Home> {
});
},
destinations: const [
NavigationDestination(
icon: Icon(Icons.message),
label: "Chat",
),
NavigationDestination(
icon: Icon(Icons.public),
label: "Sessions",
),
NavigationDestination(
icon: Icon(Icons.message),
label: "Chat",
),
NavigationDestination(
icon: Icon(Icons.inventory),
label: "Inventory",

View file

@ -5,13 +5,13 @@ import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
import 'package:photo_view/photo_view.dart';
import 'package:provider/provider.dart';
import 'package:recon/auxiliary.dart';
import 'package:recon/clients/inventory_client.dart';
import 'package:recon/models/inventory/resonite_directory.dart';
import 'package:recon/models/records/record.dart';
import 'package:recon/widgets/default_error_widget.dart';
import 'package:recon/widgets/inventory/object_inventory_tile.dart';
import 'package:recon/widgets/inventory/path_inventory_tile.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/clients/inventory_client.dart';
import 'package:OpenContacts/models/inventory/resonite_directory.dart';
import 'package:OpenContacts/models/records/record.dart';
import 'package:OpenContacts/widgets/default_error_widget.dart';
import 'package:OpenContacts/widgets/inventory/object_inventory_tile.dart';
import 'package:OpenContacts/widgets/inventory/path_inventory_tile.dart';
class InventoryBrowser extends StatefulWidget {
const InventoryBrowser({super.key});

View file

@ -9,8 +9,8 @@ import 'package:intl/intl.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:provider/provider.dart';
import 'package:recon/auxiliary.dart';
import 'package:recon/clients/inventory_client.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/clients/inventory_client.dart';
import 'package:share_plus/share_plus.dart';
class InventoryBrowserAppBar extends StatefulWidget {

View file

@ -1,6 +1,6 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:recon/auxiliary.dart';
import 'package:recon/models/records/record.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/models/records/record.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';

View file

@ -1,5 +1,5 @@
import 'package:recon/models/records/record.dart';
import 'package:recon/widgets/formatted_text.dart';
import 'package:OpenContacts/models/records/record.dart';
import 'package:OpenContacts/widgets/formatted_text.dart';
import 'package:flutter/material.dart';
class PathInventoryTile extends StatelessWidget {

View file

@ -3,9 +3,9 @@ import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:recon/client_holder.dart';
import 'package:recon/clients/api_client.dart';
import 'package:recon/models/authentication_data.dart';
import 'package:OpenContacts/client_holder.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/models/authentication_data.dart';
class LoginScreen extends StatefulWidget {
const LoginScreen({this.onLoginSuccessful, this.cachedUsername, super.key});
@ -27,6 +27,7 @@ class _LoginScreenState extends State<LoginScreen> {
late final FocusNode _totpFocusNode;
bool _isLoading = false;
bool _isEmailResetSend = false;
String _error = "";
bool _needsTotp = false;
@ -46,8 +47,15 @@ class _LoginScreenState extends State<LoginScreen> {
_totpFocusNode.dispose();
super.dispose();
}
RegExp emailReg = RegExp(
r"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$",
caseSensitive: false,
multiLine: false,
);
Future<void> submit() async {
if (_usernameController.text.isEmpty || _passwordController.text.isEmpty) {
setState(() {
_error = "Please enter a valid username/password combination.";
@ -103,7 +111,69 @@ class _LoginScreenState extends State<LoginScreen> {
});
}
}
Future<void> passwordResetSubmit() async {
if (_usernameController.text.isEmpty) {
setState(() {
_error = "Please provide an email on the 'Username' textbox";
});
return;
}
if (_usernameController.text.contains(emailReg)) {
setState(() {
_error = "An email to reset your password has been requested to resonite.";
_isEmailResetSend = true;
});
return;
}
setState(() {
_error = "";
_isEmailResetSend = true;
});
/*try {
final authData = await ApiClient.tryLogin(
username: _usernameController.text,
password: _passwordController.text,
oneTimePad: _totpController.text.isEmpty ? null : _totpController.text,
);
if (!authData.isAuthenticated) {
setState(() {
_error = "Login unsuccessful: Server sent invalid response.";
_isLoading = false;
});
return;
}
setState(() {
_error = "";
_isLoading = false;
});
await loginSuccessful(authData);
} catch (e, s) {
setState(() {
if (e == ApiClient.totpKey) {
if (_needsTotp == false) {
_error = "Please enter your 2FA-Code";
_totpFocusNode.requestFocus();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
_scrollController.animateTo(_scrollController.position.maxScrollExtent,
duration: const Duration(milliseconds: 400), curve: Curves.easeOutCirc);
});
} else {
_error = "The given 2FA code is not valid.";
}
_needsTotp = true;
} else {
_error = "Login unsuccessful: $e.";
}
if (kDebugMode) {
FlutterError.reportError(FlutterErrorDetails(
exception: e,
stack: s,
));
}
_isLoading = false;
});
}*/
}
Future<void> loginSuccessful(AuthenticationData authData) async {
final settingsClient = ClientHolder.of(context).settingsClient;
final notificationManager = FlutterLocalNotificationsPlugin();
@ -160,7 +230,7 @@ class _LoginScreenState extends State<LoginScreen> {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("ReCon"),
title: const Text("OpenContacts"),
),
body: Builder(builder: (context) {
return ListView(
@ -227,6 +297,16 @@ class _LoginScreenState extends State<LoginScreen> {
label: const Text("Login"),
),
),
/*Padding(
padding: const EdgeInsets.only(top: 16),
child: _isEmailResetSend
? const Center(child: CircularProgressIndicator())
: TextButton.icon(
onPressed: passwordResetSubmit,
icon: const Icon(Icons.refresh),
label: const Text("Forgot Password?"),
),
),*/ // I have to look into this feature and understand how password resseting works
Center(
child: AnimatedOpacity(
opacity: _errorOpacity,

View file

@ -2,12 +2,12 @@
import 'dart:convert';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:recon/auxiliary.dart';
import 'package:recon/models/photo_asset.dart';
import 'package:recon/models/message.dart';
import 'package:recon/string_formatter.dart';
import 'package:recon/widgets/formatted_text.dart';
import 'package:recon/widgets/messages/message_state_indicator.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/models/photo_asset.dart';
import 'package:OpenContacts/models/message.dart';
import 'package:OpenContacts/string_formatter.dart';
import 'package:OpenContacts/widgets/formatted_text.dart';
import 'package:OpenContacts/widgets/messages/message_state_indicator.dart';
import 'package:flutter/material.dart';
import 'package:photo_view/photo_view.dart';

View file

@ -3,10 +3,10 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
import 'package:provider/provider.dart';
import 'package:recon/auxiliary.dart';
import 'package:recon/clients/audio_cache_client.dart';
import 'package:recon/models/message.dart';
import 'package:recon/widgets/messages/message_state_indicator.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/clients/audio_cache_client.dart';
import 'package:OpenContacts/models/message.dart';
import 'package:OpenContacts/widgets/messages/message_state_indicator.dart';
class MessageAudioPlayer extends StatefulWidget {
const MessageAudioPlayer({required this.message, this.foregroundColor, super.key});

View file

@ -1,9 +1,9 @@
import 'package:recon/client_holder.dart';
import 'package:recon/models/message.dart';
import 'package:recon/widgets/messages/message_asset.dart';
import 'package:recon/widgets/messages/message_audio_player.dart';
import 'package:recon/widgets/messages/message_session_invite.dart';
import 'package:recon/widgets/messages/message_text.dart';
import 'package:OpenContacts/client_holder.dart';
import 'package:OpenContacts/models/message.dart';
import 'package:OpenContacts/widgets/messages/message_asset.dart';
import 'package:OpenContacts/widgets/messages/message_audio_player.dart';
import 'package:OpenContacts/widgets/messages/message_session_invite.dart';
import 'package:OpenContacts/widgets/messages/message_text.dart';
import 'package:flutter/material.dart';
class MessageBubble extends StatelessWidget {

View file

@ -7,14 +7,14 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:image_picker/image_picker.dart';
import 'package:provider/provider.dart';
import 'package:recon/apis/record_api.dart';
import 'package:recon/auxiliary.dart';
import 'package:recon/client_holder.dart';
import 'package:recon/clients/api_client.dart';
import 'package:recon/clients/messaging_client.dart';
import 'package:recon/models/message.dart';
import 'package:recon/models/users/friend.dart';
import 'package:recon/widgets/messages/message_attachment_list.dart';
import 'package:OpenContacts/apis/record_api.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/client_holder.dart';
import 'package:OpenContacts/clients/api_client.dart';
import 'package:OpenContacts/clients/messaging_client.dart';
import 'package:OpenContacts/models/message.dart';
import 'package:OpenContacts/models/users/friend.dart';
import 'package:OpenContacts/widgets/messages/message_attachment_list.dart';
import 'package:record/record.dart';
class MessageInputBar extends StatefulWidget {

View file

@ -1,12 +1,12 @@
import 'dart:convert';
import 'package:recon/auxiliary.dart';
import 'package:recon/models/message.dart';
import 'package:recon/models/session.dart';
import 'package:recon/widgets/formatted_text.dart';
import 'package:recon/widgets/generic_avatar.dart';
import 'package:recon/widgets/messages/message_state_indicator.dart';
import 'package:recon/widgets/sessions/session_view.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/models/message.dart';
import 'package:OpenContacts/models/session.dart';
import 'package:OpenContacts/widgets/formatted_text.dart';
import 'package:OpenContacts/widgets/generic_avatar.dart';
import 'package:OpenContacts/widgets/messages/message_state_indicator.dart';
import 'package:OpenContacts/widgets/sessions/session_view.dart';
import 'package:flutter/material.dart';
class MessageSessionInvite extends StatelessWidget {

View file

@ -1,5 +1,5 @@
import 'package:recon/client_holder.dart';
import 'package:recon/models/message.dart';
import 'package:OpenContacts/client_holder.dart';
import 'package:OpenContacts/models/message.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';

View file

@ -2,9 +2,9 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:recon/models/message.dart';
import 'package:recon/widgets/formatted_text.dart';
import 'package:recon/widgets/messages/message_state_indicator.dart';
import 'package:OpenContacts/models/message.dart';
import 'package:OpenContacts/widgets/formatted_text.dart';
import 'package:OpenContacts/widgets/messages/message_state_indicator.dart';
class MessageText extends StatelessWidget {
const MessageText({required this.message, this.foregroundColor, super.key});

View file

@ -1,12 +1,12 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:recon/clients/audio_cache_client.dart';
import 'package:recon/clients/messaging_client.dart';
import 'package:recon/models/users/friend.dart';
import 'package:recon/widgets/default_error_widget.dart';
import 'package:recon/widgets/friends/friend_online_status_indicator.dart';
import 'package:recon/widgets/messages/message_input_bar.dart';
import 'package:recon/widgets/messages/messages_session_header.dart';
import 'package:OpenContacts/clients/audio_cache_client.dart';
import 'package:OpenContacts/clients/messaging_client.dart';
import 'package:OpenContacts/models/users/friend.dart';
import 'package:OpenContacts/widgets/default_error_widget.dart';
import 'package:OpenContacts/widgets/friends/friend_online_status_indicator.dart';
import 'package:OpenContacts/widgets/messages/message_input_bar.dart';
import 'package:OpenContacts/widgets/messages/messages_session_header.dart';
import 'message_bubble.dart';

View file

@ -1,9 +1,9 @@
import 'package:flutter/material.dart';
import 'package:recon/auxiliary.dart';
import 'package:recon/models/session.dart';
import 'package:recon/widgets/formatted_text.dart';
import 'package:recon/widgets/generic_avatar.dart';
import 'package:recon/widgets/sessions/session_view.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/models/session.dart';
import 'package:OpenContacts/widgets/formatted_text.dart';
import 'package:OpenContacts/widgets/generic_avatar.dart';
import 'package:OpenContacts/widgets/sessions/session_view.dart';
class SessionTile extends StatelessWidget {
const SessionTile({required this.session, super.key});

View file

@ -1,11 +1,11 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:recon/apis/user_api.dart';
import 'package:recon/auxiliary.dart';
import 'package:recon/client_holder.dart';
import 'package:recon/models/personal_profile.dart';
import 'package:recon/widgets/default_error_widget.dart';
import 'package:recon/widgets/generic_avatar.dart';
import 'package:OpenContacts/apis/user_api.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/client_holder.dart';
import 'package:OpenContacts/models/personal_profile.dart';
import 'package:OpenContacts/widgets/default_error_widget.dart';
import 'package:OpenContacts/widgets/generic_avatar.dart';
class MyProfileDialog extends StatefulWidget {
const MyProfileDialog({super.key});

View file

@ -1,8 +1,8 @@
import 'dart:math';
import 'package:recon/client_holder.dart';
import 'package:recon/clients/session_client.dart';
import 'package:recon/models/session.dart';
import 'package:OpenContacts/client_holder.dart';
import 'package:OpenContacts/clients/session_client.dart';
import 'package:OpenContacts/models/session.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

View file

@ -1,10 +1,10 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:recon/auxiliary.dart';
import 'package:recon/clients/session_client.dart';
import 'package:recon/models/session.dart';
import 'package:recon/widgets/default_error_widget.dart';
import 'package:recon/widgets/formatted_text.dart';
import 'package:recon/widgets/sessions/session_view.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/clients/session_client.dart';
import 'package:OpenContacts/models/session.dart';
import 'package:OpenContacts/widgets/default_error_widget.dart';
import 'package:OpenContacts/widgets/formatted_text.dart';
import 'package:OpenContacts/widgets/sessions/session_view.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

View file

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:recon/clients/session_client.dart';
import 'package:recon/widgets/sessions/session_filter_dialog.dart';
import 'package:OpenContacts/clients/session_client.dart';
import 'package:OpenContacts/widgets/sessions/session_filter_dialog.dart';
class SessionListAppBar extends StatefulWidget {
const SessionListAppBar({super.key});

View file

@ -1,11 +1,11 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:recon/apis/session_api.dart';
import 'package:recon/auxiliary.dart';
import 'package:recon/client_holder.dart';
import 'package:recon/models/session.dart';
import 'package:recon/widgets/formatted_text.dart';
import 'package:recon/widgets/panorama.dart';
import 'package:recon/widgets/settings_page.dart';
import 'package:OpenContacts/apis/session_api.dart';
import 'package:OpenContacts/auxiliary.dart';
import 'package:OpenContacts/client_holder.dart';
import 'package:OpenContacts/models/session.dart';
import 'package:OpenContacts/widgets/formatted_text.dart';
import 'package:OpenContacts/widgets/panorama.dart';
import 'package:OpenContacts/widgets/settings_page.dart';
import 'package:flutter/material.dart';
class SessionView extends StatefulWidget {

View file

@ -1,4 +1,4 @@
import 'package:recon/client_holder.dart';
import 'package:OpenContacts/client_holder.dart';
import 'package:flutter/material.dart';
import 'package:flutter_phoenix/flutter_phoenix.dart';
import 'package:intl/intl.dart';
@ -74,14 +74,14 @@ class SettingsPage extends StatelessWidget {
),
ListTile(
trailing: const Icon(Icons.info_outline),
title: const Text("About ReCon"),
title: const Text("About OpenContacts"),
onTap: () async {
showAboutDialog(
context: context,
applicationVersion: (await PackageInfo.fromPlatform()).version,
applicationIcon: InkWell(
onTap: () async {
if (!await launchUrl(Uri.parse("https://github.com/Nutcake/ReCon"),
if (!await launchUrl(Uri.parse("https://git.mrdab.vore.media/ThatOneJackalGuy/OpenContacts"),
mode: LaunchMode.externalApplication)) {
if (context.mounted) {
ScaffoldMessenger.of(context)
@ -92,10 +92,10 @@ class SettingsPage extends StatelessWidget {
child: Container(
margin: const EdgeInsets.all(16),
constraints: const BoxConstraints(maxWidth: 64),
child: Image.asset("assets/images/logo512.png"),
child: Image.asset("assets/images/testingIcon512.png"),
),
),
applicationLegalese: "Created by Nutcake with love <3",
applicationLegalese: "ReCon by Nutcake, OpenContacts by ThatOneJackalGuy. Both apps made with <3",
);
},
)

View file

@ -1,5 +1,5 @@
import 'package:recon/client_holder.dart';
import 'package:recon/models/sem_ver.dart';
import 'package:OpenContacts/client_holder.dart';
import 'package:OpenContacts/models/sem_ver.dart';
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
@ -38,7 +38,7 @@ class UpdateNotifier extends StatelessWidget {
children: [
TextButton.icon(
onPressed: () {
launchUrl(Uri.parse("https://github.com/Nutcake/ReCon/releases/latest"),
launchUrl(Uri.parse("https://github.com/Nutcake/recon/releases/latest"),
mode: LaunchMode.externalApplication,
);
},
@ -54,7 +54,7 @@ class UpdateNotifier extends StatelessWidget {
.secondary
),
icon: const Icon(Icons.download),
label: const Text("Get it on Github"),
label: const Text("Get it on Forgejo"),
),
],
),

View file

@ -7,7 +7,7 @@ project(runner LANGUAGES CXX)
set(BINARY_NAME "recon")
# The unique GTK application identifier for this application. See:
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
set(APPLICATION_ID "de.voidspace.recon")
set(APPLICATION_ID "de.tojcklguy.opencontacts")
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
# versions of CMake.

View file

@ -40,11 +40,11 @@ static void my_application_activate(GApplication* application) {
if (use_header_bar) {
GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
gtk_widget_show(GTK_WIDGET(header_bar));
gtk_header_bar_set_title(header_bar, "ReCon");
gtk_header_bar_set_title(header_bar, "recon");
gtk_header_bar_set_show_close_button(header_bar, TRUE);
gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
} else {
gtk_window_set_title(window, "ReCon");
gtk_window_set_title(window, "recon");
}
gtk_window_set_default_size(window, 480, 900);

View file

@ -54,7 +54,7 @@
331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
33CC10ED2044A3C60003C045 /* ReCon.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ReCon.app; sourceTree = BUILT_PRODUCTS_DIR; };
33CC10ED2044A3C60003C045 /* recon.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = recon.app; sourceTree = BUILT_PRODUCTS_DIR; };
33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
@ -134,7 +134,7 @@
33CC10EE2044A3C60003C045 /* Products */ = {
isa = PBXGroup;
children = (
33CC10ED2044A3C60003C045 /* ReCon.app */,
33CC10ED2044A3C60003C045 /* recon.app */,
331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
);
name = Products;
@ -238,7 +238,7 @@
);
name = Runner;
productName = Runner;
productReference = 33CC10ED2044A3C60003C045 /* ReCon.app */;
productReference = 33CC10ED2044A3C60003C045 /* recon.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
@ -570,7 +570,7 @@
DEVELOPMENT_TEAM = P9AV4LPNLL;
FLUTTER_BUILD_NAME = "0.11.1-beta";
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ReCon;
INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@ -578,7 +578,7 @@
);
MARKETING_VERSION = "0.11.1-beta";
PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon;
PRODUCT_NAME = ReCon;
PRODUCT_NAME = recon;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
};
@ -710,7 +710,7 @@
DEVELOPMENT_TEAM = P9AV4LPNLL;
FLUTTER_BUILD_NAME = "0.11.1-beta";
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ReCon;
INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@ -718,7 +718,7 @@
);
MARKETING_VERSION = "0.11.1-beta";
PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon;
PRODUCT_NAME = ReCon;
PRODUCT_NAME = recon;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@ -741,7 +741,7 @@
DEVELOPMENT_TEAM = P9AV4LPNLL;
FLUTTER_BUILD_NAME = "0.11.1-beta";
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ReCon;
INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@ -749,7 +749,7 @@
);
MARKETING_VERSION = "0.11.1-beta";
PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon;
PRODUCT_NAME = ReCon;
PRODUCT_NAME = recon;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
};

View file

@ -15,7 +15,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
BuildableName = "ReCon.app"
BuildableName = "recon.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
@ -31,7 +31,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
BuildableName = "ReCon.app"
BuildableName = "recon.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
@ -65,7 +65,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
BuildableName = "ReCon.app"
BuildableName = "recon.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
@ -82,7 +82,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
BuildableName = "ReCon.app"
BuildableName = "recon.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>

View file

@ -125,10 +125,10 @@ packages:
dependency: "direct main"
description:
name: collection
sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev"
source: hosted
version: "1.17.2"
version: "1.18.0"
color:
dependency: "direct main"
description:
@ -528,6 +528,30 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.4.8"
leak_tracker:
dependency: transitive
description:
name: leak_tracker
sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a"
url: "https://pub.dev"
source: hosted
version: "10.0.4"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8"
url: "https://pub.dev"
source: hosted
version: "3.0.3"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
lints:
dependency: transitive
description:
@ -548,26 +572,26 @@ packages:
dependency: transitive
description:
name: matcher
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.dev"
source: hosted
version: "0.12.16"
version: "0.12.16+1"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
url: "https://pub.dev"
source: hosted
version: "0.5.0"
version: "0.8.0"
meta:
dependency: transitive
description:
name: meta
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
url: "https://pub.dev"
source: hosted
version: "1.9.1"
version: "1.12.0"
mime:
dependency: transitive
description:
@ -612,10 +636,10 @@ packages:
dependency: "direct main"
description:
name: path
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev"
source: hosted
version: "1.8.3"
version: "1.9.0"
path_provider:
dependency: "direct main"
description:
@ -873,18 +897,18 @@ packages:
dependency: transitive
description:
name: stack_trace
sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.dev"
source: hosted
version: "1.11.0"
version: "1.11.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.dev"
source: hosted
version: "2.1.1"
version: "2.1.2"
stream_transform:
dependency: transitive
description:
@ -921,10 +945,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8"
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
url: "https://pub.dev"
source: hosted
version: "0.6.0"
version: "0.7.0"
timezone:
dependency: transitive
description:
@ -1021,14 +1045,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.4"
web:
vm_service:
dependency: transitive
description:
name: web
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10
name: vm_service
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
url: "https://pub.dev"
source: hosted
version: "0.1.4-beta"
version: "14.2.1"
web_socket_channel:
dependency: "direct main"
description:
@ -1070,5 +1094,5 @@ packages:
source: hosted
version: "6.3.0"
sdks:
dart: ">=3.1.0 <4.0.0"
flutter: ">=3.13.0"
dart: ">=3.3.0 <4.0.0"
flutter: ">=3.18.0-18.0.pre.54"

View file

@ -1,4 +1,4 @@
name: recon
name: OpenContacts
description: A Resonite Contacts App for Android
# The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages.
@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
version: 0.11.3-beta+1
version: 0.0.1-alpha+2
environment:
sdk: ">=3.0.1"

View file

@ -7,14 +7,14 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:recon/clients/settings_client.dart';
import 'package:recon/main.dart';
import 'package:recon/models/authentication_data.dart';
import 'package:OpenContacts/clients/settings_client.dart';
import 'package:OpenContacts/main.dart';
import 'package:OpenContacts/models/authentication_data.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(ReCon(
await tester.pumpWidget(recon(
settingsClient: SettingsClient(),
cachedAuthentication: AuthenticationData.unauthenticated(),
));