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/profile
/android/app/release /android/app/release
/android/key.properties /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 ## OpenContacts

View file

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

View file

@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <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 INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc. 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" <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. --> <!-- Required to fetch data from the internet. -->
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
@ -7,7 +7,7 @@
<!-- Optional, you'll have to check this permission by yourself. --> <!-- Optional, you'll have to check this permission by yourself. -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application <application
android:label="ReCon" android:label="OpenContacts"
android:name="${applicationName}" android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"> android:icon="@mipmap/ic_launcher">
<activity <activity

View file

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

View file

@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <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 INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc. 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>"; }; 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>"; }; 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>"; }; 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>"; }; 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>"; }; 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>"; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
@ -110,7 +110,7 @@
97C146EF1CF9000F007C117D /* Products */ = { 97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
97C146EE1CF9000F007C117D /* ReCon.app */, 97C146EE1CF9000F007C117D /* recon.app */,
331C8081294A63A400263BE5 /* RunnerTests.xctest */, 331C8081294A63A400263BE5 /* RunnerTests.xctest */,
); );
name = Products; name = Products;
@ -195,7 +195,7 @@
); );
name = Runner; name = Runner;
productName = Runner; productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* ReCon.app */; productReference = 97C146EE1CF9000F007C117D /* recon.app */;
productType = "com.apple.product-type.application"; productType = "com.apple.product-type.application";
}; };
/* End PBXNativeTarget section */ /* End PBXNativeTarget section */
@ -446,7 +446,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_KEY_CFBundleDisplayName = ReCon; INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
INFOPLIST_KEY_NSDownloadsFolderUsageDescription = "Downloading assets from your inventory"; INFOPLIST_KEY_NSDownloadsFolderUsageDescription = "Downloading assets from your inventory";
INFOPLIST_KEY_NSMicrophoneUsageDescription = "Recording voice messages"; INFOPLIST_KEY_NSMicrophoneUsageDescription = "Recording voice messages";
@ -474,7 +474,7 @@
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
FLUTTER_BUILD_NAME = 0.11.2; FLUTTER_BUILD_NAME = 0.11.2;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ReCon; INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
IPHONEOS_DEPLOYMENT_TARGET = 13.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
@ -484,7 +484,7 @@
MACOSX_DEPLOYMENT_TARGET = 11.0; MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 0.11.2; MARKETING_VERSION = 0.11.2;
PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon; PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon;
PRODUCT_NAME = ReCon; PRODUCT_NAME = recon;
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic"; VERSIONING_SYSTEM = "apple-generic";
@ -592,7 +592,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_KEY_CFBundleDisplayName = ReCon; INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
INFOPLIST_KEY_NSDownloadsFolderUsageDescription = "Downloading assets from your inventory"; INFOPLIST_KEY_NSDownloadsFolderUsageDescription = "Downloading assets from your inventory";
INFOPLIST_KEY_NSMicrophoneUsageDescription = "Recording voice messages"; INFOPLIST_KEY_NSMicrophoneUsageDescription = "Recording voice messages";
@ -652,7 +652,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_KEY_CFBundleDisplayName = ReCon; INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
INFOPLIST_KEY_NSDownloadsFolderUsageDescription = "Downloading assets from your inventory"; INFOPLIST_KEY_NSDownloadsFolderUsageDescription = "Downloading assets from your inventory";
INFOPLIST_KEY_NSMicrophoneUsageDescription = "Recording voice messages"; INFOPLIST_KEY_NSMicrophoneUsageDescription = "Recording voice messages";
@ -682,7 +682,7 @@
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
FLUTTER_BUILD_NAME = 0.11.2; FLUTTER_BUILD_NAME = 0.11.2;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ReCon; INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
IPHONEOS_DEPLOYMENT_TARGET = 13.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
@ -692,7 +692,7 @@
MACOSX_DEPLOYMENT_TARGET = 11.0; MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 0.11.2; MARKETING_VERSION = 0.11.2;
PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon; PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon;
PRODUCT_NAME = ReCon; PRODUCT_NAME = recon;
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
@ -712,7 +712,7 @@
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
FLUTTER_BUILD_NAME = 0.11.2; FLUTTER_BUILD_NAME = 0.11.2;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ReCon; INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
IPHONEOS_DEPLOYMENT_TARGET = 13.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
@ -722,7 +722,7 @@
MACOSX_DEPLOYMENT_TARGET = 11.0; MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 0.11.2; MARKETING_VERSION = 0.11.2;
PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon; PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon;
PRODUCT_NAME = ReCon; PRODUCT_NAME = recon;
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic"; VERSIONING_SYSTEM = "apple-generic";

View file

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

View file

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

View file

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

View file

@ -1,11 +1,11 @@
import 'dart:convert'; import 'dart:convert';
import 'package:recon/clients/api_client.dart'; import 'package:OpenContacts/clients/api_client.dart';
import 'package:recon/models/users/friend.dart'; import 'package:OpenContacts/models/users/friend.dart';
import 'package:recon/models/users/friend_status.dart'; import 'package:OpenContacts/models/users/friend_status.dart';
import 'package:recon/models/users/user.dart'; import 'package:OpenContacts/models/users/user.dart';
import 'package:recon/models/users/user_profile.dart'; import 'package:OpenContacts/models/users/user_profile.dart';
import 'package:recon/models/users/user_status.dart'; import 'package:OpenContacts/models/users/user_status.dart';
class ContactApi { class ContactApi {
static Future<List<Friend>> getFriendsList(ApiClient client, {DateTime? lastStatusUpdate}) async { 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; import 'package:http/http.dart' as http;
class GithubApi { class GithubApi {
static const baseUrl = "https://api.github.com"; static const baseUrl = "https://git.mrdab.vore.media/api/v1";
static Future<String> getLatestTagName() async { 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 ""; if (response.statusCode != 200) return "";
final body = jsonDecode(response.body) as List; final body = jsonDecode(response.body) as List;
if (body.isEmpty) return ""; if (body.isEmpty) return "";

View file

@ -1,7 +1,7 @@
import 'dart:convert'; import 'dart:convert';
import 'package:recon/clients/api_client.dart'; import 'package:OpenContacts/clients/api_client.dart';
import 'package:recon/models/message.dart'; import 'package:OpenContacts/models/message.dart';
class MessageApi { class MessageApi {
static Future<List<Message>> getUserMessages(ApiClient client, {String userId = "", DateTime? fromTime, 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:math';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:recon/models/records/asset_digest.dart'; import 'package:OpenContacts/models/records/asset_digest.dart';
import 'package:recon/models/records/json_template.dart'; import 'package:OpenContacts/models/records/json_template.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:recon/clients/api_client.dart'; import 'package:OpenContacts/clients/api_client.dart';
import 'package:recon/models/records/asset_upload_data.dart'; import 'package:OpenContacts/models/records/asset_upload_data.dart';
import 'package:recon/models/records/resonite_db_asset.dart'; import 'package:OpenContacts/models/records/resonite_db_asset.dart';
import 'package:recon/models/records/preprocess_status.dart'; import 'package:OpenContacts/models/records/preprocess_status.dart';
import 'package:recon/models/records/record.dart'; import 'package:OpenContacts/models/records/record.dart';
import 'package:http_parser/http_parser.dart'; import 'package:http_parser/http_parser.dart';
import 'package:path/path.dart'; import 'package:path/path.dart';

View file

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

View file

@ -1,9 +1,9 @@
import 'dart:convert'; import 'dart:convert';
import 'package:recon/clients/api_client.dart'; import 'package:OpenContacts/clients/api_client.dart';
import 'package:recon/models/personal_profile.dart'; import 'package:OpenContacts/models/personal_profile.dart';
import 'package:recon/models/users/user.dart'; import 'package:OpenContacts/models/users/user.dart';
import 'package:recon/models/users/user_status.dart'; import 'package:OpenContacts/models/users/user_status.dart';
class UserApi { class UserApi {
static Future<Iterable<User>> searchUsers(ApiClient client, {required String needle}) async { 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:flutter/material.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import 'package:html/parser.dart' as htmlparser; import 'package:html/parser.dart' as htmlparser;

View file

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

View file

@ -3,7 +3,7 @@ import 'dart:convert';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:http/http.dart' as http; 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:logging/logging.dart';
import 'package:uuid/uuid.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:http/http.dart' as http;
import 'package:path/path.dart'; import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:recon/auxiliary.dart'; import 'package:OpenContacts/auxiliary.dart';
import 'package:recon/clients/api_client.dart'; import 'package:OpenContacts/clients/api_client.dart';
import 'package:recon/models/message.dart'; import 'package:OpenContacts/models/message.dart';
class AudioCacheClient { class AudioCacheClient {
final Future<Directory> _directoryFuture = getTemporaryDirectory(); final Future<Directory> _directoryFuture = getTemporaryDirectory();

View file

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

View file

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

View file

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

View file

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

View file

@ -1,6 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'package:recon/models/settings.dart'; import 'package:OpenContacts/models/settings.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.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:collection/collection.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:recon/config.dart'; import 'package:OpenContacts/config.dart';
import 'package:recon/models/hub_events.dart'; import 'package:OpenContacts/models/hub_events.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';

View file

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

View file

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

View file

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

View file

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

View file

@ -1,6 +1,6 @@
import 'package:recon/auxiliary.dart'; import 'package:OpenContacts/auxiliary.dart';
import 'package:recon/models/users/entitlement.dart'; import 'package:OpenContacts/models/users/entitlement.dart';
import 'package:recon/models/users/user_profile.dart'; import 'package:OpenContacts/models/users/user_profile.dart';
class PersonalProfile { class PersonalProfile {
final String id; 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{ class AssetDiff extends ResoniteDBAsset{
final Diff state; final Diff state;

View file

@ -1,7 +1,7 @@
import 'dart:typed_data'; 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'; import 'package:path/path.dart';
class AssetDigest { 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 enum RecordPreprocessState
{ {

View file

@ -1,8 +1,8 @@
import 'package:recon/auxiliary.dart'; import 'package:OpenContacts/auxiliary.dart';
import 'package:recon/models/message.dart'; import 'package:OpenContacts/models/message.dart';
import 'package:recon/models/records/asset_digest.dart'; import 'package:OpenContacts/models/records/asset_digest.dart';
import 'package:recon/models/records/resonite_db_asset.dart'; import 'package:OpenContacts/models/records/resonite_db_asset.dart';
import 'package:recon/string_formatter.dart'; import 'package:OpenContacts/string_formatter.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:uuid/uuid.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 { class Session {
final String id; 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'; import 'package:intl/intl.dart';
class SessionMetadata { class SessionMetadata {

View file

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

View file

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

View file

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

View file

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

View file

@ -1,9 +1,9 @@
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:recon/config.dart'; import 'package:OpenContacts/config.dart';
import 'package:recon/crypto_helper.dart'; import 'package:OpenContacts/crypto_helper.dart';
import 'package:recon/models/session.dart'; import 'package:OpenContacts/models/session.dart';
import 'package:recon/models/session_metadata.dart'; import 'package:OpenContacts/models/session_metadata.dart';
import 'package:recon/models/users/online_status.dart'; import 'package:OpenContacts/models/users/online_status.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
enum UserSessionType 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'; import 'package:flutter/material.dart';
class FormattedText extends StatelessWidget { class FormattedText extends StatelessWidget {

View file

@ -66,7 +66,7 @@ class _ExpandingInputFabState extends State<ExpandingInputFab> {
}, },
splashRadius: 16, splashRadius: 16,
iconSize: 28, 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:flutter/material.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:recon/auxiliary.dart'; import 'package:OpenContacts/auxiliary.dart';
import 'package:recon/clients/messaging_client.dart'; import 'package:OpenContacts/clients/messaging_client.dart';
import 'package:recon/models/message.dart'; import 'package:OpenContacts/models/message.dart';
import 'package:recon/models/users/friend.dart'; import 'package:OpenContacts/models/users/friend.dart';
import 'package:recon/models/users/online_status.dart'; import 'package:OpenContacts/models/users/online_status.dart';
import 'package:recon/widgets/formatted_text.dart'; import 'package:OpenContacts/widgets/formatted_text.dart';
import 'package:recon/widgets/friends/friend_online_status_indicator.dart'; import 'package:OpenContacts/widgets/friends/friend_online_status_indicator.dart';
import 'package:recon/widgets/generic_avatar.dart'; import 'package:OpenContacts/widgets/generic_avatar.dart';
import 'package:recon/widgets/messages/messages_list.dart'; import 'package:OpenContacts/widgets/messages/messages_list.dart';
class FriendListTile extends StatelessWidget { class FriendListTile extends StatelessWidget {
const FriendListTile({required this.friend, required this.unreads, this.onTap, super.key}); 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:flutter/material.dart';
import 'package:recon/models/users/friend.dart'; import 'package:OpenContacts/models/users/friend.dart';
import 'package:recon/models/users/online_status.dart'; import 'package:OpenContacts/models/users/online_status.dart';
import 'package:recon/models/users/user_status.dart'; import 'package:OpenContacts/models/users/user_status.dart';
class FriendOnlineStatusIndicator extends StatelessWidget { class FriendOnlineStatusIndicator extends StatelessWidget {
const FriendOnlineStatusIndicator({required this.friend, super.key}); const FriendOnlineStatusIndicator({required this.friend, super.key});
@ -12,7 +12,7 @@ class FriendOnlineStatusIndicator extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final UserStatus userStatus = friend.userStatus; final UserStatus userStatus = friend.userStatus;
final OnlineStatus onlineStatus = userStatus.onlineStatus; final OnlineStatus onlineStatus = userStatus.onlineStatus;
return userStatus.appVersion.contains("ReCon") && friend.isOnline return userStatus.appVersion.contains("recon") && friend.isOnline
? SizedBox.square( ? SizedBox.square(
dimension: 10, dimension: 10,
child: Image.asset( child: Image.asset(

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -3,9 +3,9 @@ import 'dart:io';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:recon/client_holder.dart'; import 'package:OpenContacts/client_holder.dart';
import 'package:recon/clients/api_client.dart'; import 'package:OpenContacts/clients/api_client.dart';
import 'package:recon/models/authentication_data.dart'; import 'package:OpenContacts/models/authentication_data.dart';
class LoginScreen extends StatefulWidget { class LoginScreen extends StatefulWidget {
const LoginScreen({this.onLoginSuccessful, this.cachedUsername, super.key}); const LoginScreen({this.onLoginSuccessful, this.cachedUsername, super.key});
@ -27,6 +27,7 @@ class _LoginScreenState extends State<LoginScreen> {
late final FocusNode _totpFocusNode; late final FocusNode _totpFocusNode;
bool _isLoading = false; bool _isLoading = false;
bool _isEmailResetSend = false;
String _error = ""; String _error = "";
bool _needsTotp = false; bool _needsTotp = false;
@ -46,8 +47,15 @@ class _LoginScreenState extends State<LoginScreen> {
_totpFocusNode.dispose(); _totpFocusNode.dispose();
super.dispose(); super.dispose();
} }
RegExp emailReg = RegExp(
r"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$",
caseSensitive: false,
multiLine: false,
);
Future<void> submit() async { Future<void> submit() async {
if (_usernameController.text.isEmpty || _passwordController.text.isEmpty) { if (_usernameController.text.isEmpty || _passwordController.text.isEmpty) {
setState(() { setState(() {
_error = "Please enter a valid username/password combination."; _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 { Future<void> loginSuccessful(AuthenticationData authData) async {
final settingsClient = ClientHolder.of(context).settingsClient; final settingsClient = ClientHolder.of(context).settingsClient;
final notificationManager = FlutterLocalNotificationsPlugin(); final notificationManager = FlutterLocalNotificationsPlugin();
@ -160,7 +230,7 @@ class _LoginScreenState extends State<LoginScreen> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text("ReCon"), title: const Text("OpenContacts"),
), ),
body: Builder(builder: (context) { body: Builder(builder: (context) {
return ListView( return ListView(
@ -227,6 +297,16 @@ class _LoginScreenState extends State<LoginScreen> {
label: const Text("Login"), 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( Center(
child: AnimatedOpacity( child: AnimatedOpacity(
opacity: _errorOpacity, opacity: _errorOpacity,

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,11 +1,11 @@
import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image/cached_network_image.dart';
import 'package:recon/apis/session_api.dart'; import 'package:OpenContacts/apis/session_api.dart';
import 'package:recon/auxiliary.dart'; import 'package:OpenContacts/auxiliary.dart';
import 'package:recon/client_holder.dart'; import 'package:OpenContacts/client_holder.dart';
import 'package:recon/models/session.dart'; import 'package:OpenContacts/models/session.dart';
import 'package:recon/widgets/formatted_text.dart'; import 'package:OpenContacts/widgets/formatted_text.dart';
import 'package:recon/widgets/panorama.dart'; import 'package:OpenContacts/widgets/panorama.dart';
import 'package:recon/widgets/settings_page.dart'; import 'package:OpenContacts/widgets/settings_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class SessionView extends StatefulWidget { 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/material.dart';
import 'package:flutter_phoenix/flutter_phoenix.dart'; import 'package:flutter_phoenix/flutter_phoenix.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
@ -74,14 +74,14 @@ class SettingsPage extends StatelessWidget {
), ),
ListTile( ListTile(
trailing: const Icon(Icons.info_outline), trailing: const Icon(Icons.info_outline),
title: const Text("About ReCon"), title: const Text("About OpenContacts"),
onTap: () async { onTap: () async {
showAboutDialog( showAboutDialog(
context: context, context: context,
applicationVersion: (await PackageInfo.fromPlatform()).version, applicationVersion: (await PackageInfo.fromPlatform()).version,
applicationIcon: InkWell( applicationIcon: InkWell(
onTap: () async { 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)) { mode: LaunchMode.externalApplication)) {
if (context.mounted) { if (context.mounted) {
ScaffoldMessenger.of(context) ScaffoldMessenger.of(context)
@ -92,10 +92,10 @@ class SettingsPage extends StatelessWidget {
child: Container( child: Container(
margin: const EdgeInsets.all(16), margin: const EdgeInsets.all(16),
constraints: const BoxConstraints(maxWidth: 64), 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:OpenContacts/client_holder.dart';
import 'package:recon/models/sem_ver.dart'; import 'package:OpenContacts/models/sem_ver.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
@ -38,7 +38,7 @@ class UpdateNotifier extends StatelessWidget {
children: [ children: [
TextButton.icon( TextButton.icon(
onPressed: () { onPressed: () {
launchUrl(Uri.parse("https://github.com/Nutcake/ReCon/releases/latest"), launchUrl(Uri.parse("https://github.com/Nutcake/recon/releases/latest"),
mode: LaunchMode.externalApplication, mode: LaunchMode.externalApplication,
); );
}, },
@ -54,7 +54,7 @@ class UpdateNotifier extends StatelessWidget {
.secondary .secondary
), ),
icon: const Icon(Icons.download), 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") set(BINARY_NAME "recon")
# The unique GTK application identifier for this application. See: # The unique GTK application identifier for this application. See:
# https://wiki.gnome.org/HowDoI/ChooseApplicationID # 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 # Explicitly opt in to modern CMake behaviors to avoid warnings with recent
# versions of CMake. # versions of CMake.

View file

@ -40,11 +40,11 @@ static void my_application_activate(GApplication* application) {
if (use_header_bar) { if (use_header_bar) {
GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
gtk_widget_show(GTK_WIDGET(header_bar)); 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_header_bar_set_show_close_button(header_bar, TRUE);
gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
} else { } else {
gtk_window_set_title(window, "ReCon"); gtk_window_set_title(window, "recon");
} }
gtk_window_set_default_size(window, 480, 900); 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>"; }; 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>"; }; 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>"; }; 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>"; }; 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>"; }; 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>"; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
@ -134,7 +134,7 @@
33CC10EE2044A3C60003C045 /* Products */ = { 33CC10EE2044A3C60003C045 /* Products */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
33CC10ED2044A3C60003C045 /* ReCon.app */, 33CC10ED2044A3C60003C045 /* recon.app */,
331C80D5294CF71000263BE5 /* RunnerTests.xctest */, 331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
); );
name = Products; name = Products;
@ -238,7 +238,7 @@
); );
name = Runner; name = Runner;
productName = Runner; productName = Runner;
productReference = 33CC10ED2044A3C60003C045 /* ReCon.app */; productReference = 33CC10ED2044A3C60003C045 /* recon.app */;
productType = "com.apple.product-type.application"; productType = "com.apple.product-type.application";
}; };
/* End PBXNativeTarget section */ /* End PBXNativeTarget section */
@ -570,7 +570,7 @@
DEVELOPMENT_TEAM = P9AV4LPNLL; DEVELOPMENT_TEAM = P9AV4LPNLL;
FLUTTER_BUILD_NAME = "0.11.1-beta"; FLUTTER_BUILD_NAME = "0.11.1-beta";
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ReCon; INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@ -578,7 +578,7 @@
); );
MARKETING_VERSION = "0.11.1-beta"; MARKETING_VERSION = "0.11.1-beta";
PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon; PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon;
PRODUCT_NAME = ReCon; PRODUCT_NAME = recon;
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
}; };
@ -710,7 +710,7 @@
DEVELOPMENT_TEAM = P9AV4LPNLL; DEVELOPMENT_TEAM = P9AV4LPNLL;
FLUTTER_BUILD_NAME = "0.11.1-beta"; FLUTTER_BUILD_NAME = "0.11.1-beta";
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ReCon; INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@ -718,7 +718,7 @@
); );
MARKETING_VERSION = "0.11.1-beta"; MARKETING_VERSION = "0.11.1-beta";
PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon; PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon;
PRODUCT_NAME = ReCon; PRODUCT_NAME = recon;
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
@ -741,7 +741,7 @@
DEVELOPMENT_TEAM = P9AV4LPNLL; DEVELOPMENT_TEAM = P9AV4LPNLL;
FLUTTER_BUILD_NAME = "0.11.1-beta"; FLUTTER_BUILD_NAME = "0.11.1-beta";
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ReCon; INFOPLIST_KEY_CFBundleDisplayName = recon;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@ -749,7 +749,7 @@
); );
MARKETING_VERSION = "0.11.1-beta"; MARKETING_VERSION = "0.11.1-beta";
PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon; PRODUCT_BUNDLE_IDENTIFIER = ch.isota.recon;
PRODUCT_NAME = ReCon; PRODUCT_NAME = recon;
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
}; };

View file

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

View file

@ -125,10 +125,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: collection name: collection
sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.17.2" version: "1.18.0"
color: color:
dependency: "direct main" dependency: "direct main"
description: description:
@ -528,6 +528,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.4.8" 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: lints:
dependency: transitive dependency: transitive
description: description:
@ -548,26 +572,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.16" version: "0.12.16+1"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.5.0" version: "0.8.0"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.1" version: "1.12.0"
mime: mime:
dependency: transitive dependency: transitive
description: description:
@ -612,10 +636,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: path name: path
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.8.3" version: "1.9.0"
path_provider: path_provider:
dependency: "direct main" dependency: "direct main"
description: description:
@ -873,18 +897,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: stack_trace name: stack_trace
sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.11.0" version: "1.11.1"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
name: stream_channel name: stream_channel
sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.1" version: "2.1.2"
stream_transform: stream_transform:
dependency: transitive dependency: transitive
description: description:
@ -921,10 +945,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.0" version: "0.7.0"
timezone: timezone:
dependency: transitive dependency: transitive
description: description:
@ -1021,14 +1045,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.1.4"
web: vm_service:
dependency: transitive dependency: transitive
description: description:
name: web name: vm_service
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.1.4-beta" version: "14.2.1"
web_socket_channel: web_socket_channel:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1070,5 +1094,5 @@ packages:
source: hosted source: hosted
version: "6.3.0" version: "6.3.0"
sdks: sdks:
dart: ">=3.1.0 <4.0.0" dart: ">=3.3.0 <4.0.0"
flutter: ">=3.13.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 description: A Resonite Contacts App for Android
# The following line prevents the package from being accidentally published to # The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages. # 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 # 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 # 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. # 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: environment:
sdk: ">=3.0.1" sdk: ">=3.0.1"

View file

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