importBundle returns result
continuous-integration/drone/pr Build is passing Details

This commit is contained in:
Dan Ballard 2022-08-15 22:33:09 -07:00
parent 5d09341277
commit d550c23fbd
8 changed files with 28 additions and 52 deletions

View File

@ -1 +1 @@
2022-08-13-14-33-v1.8.0-10-gb99e35e 2022-08-16-10-59-v1.8.0-12-gf1de9b1

View File

@ -1 +1 @@
2022-08-13-18-34-v1.8.0-10-gb99e35e 2022-08-16-14-59-v1.8.0-12-gf1de9b1

View File

@ -442,7 +442,7 @@ class MainActivity: FlutterActivity() {
"ImportBundle" -> { "ImportBundle" -> {
val profile: String = call.argument("ProfileOnion") ?: "" val profile: String = call.argument("ProfileOnion") ?: ""
val bundle: String = call.argument("bundle") ?: "" val bundle: String = call.argument("bundle") ?: ""
Cwtch.importBundle(profile, bundle) result.success(Cwtch.importBundle(profile, bundle))
} }
"CreateGroup" -> { "CreateGroup" -> {
val profile: String = call.argument("ProfileOnion") ?: "" val profile: String = call.argument("ProfileOnion") ?: ""

View File

@ -91,7 +91,7 @@ abstract class Cwtch {
void CreateGroup(String profile, String server, String groupName); void CreateGroup(String profile, String server, String groupName);
// ignore: non_constant_identifier_names // ignore: non_constant_identifier_names
void ImportBundle(String profile, String bundle); Future<dynamic> ImportBundle(String profile, String bundle);
// ignore: non_constant_identifier_names // ignore: non_constant_identifier_names
void SetProfileAttribute(String profile, String key, String val); void SetProfileAttribute(String profile, String key, String val);
// ignore: non_constant_identifier_names // ignore: non_constant_identifier_names

View File

@ -505,15 +505,18 @@ class CwtchFfi implements Cwtch {
@override @override
// ignore: non_constant_identifier_names // ignore: non_constant_identifier_names
void ImportBundle(String profileOnion, String bundle) { Future<dynamic> ImportBundle(String profileOnion, String bundle) async {
var importBundle = library.lookup<NativeFunction<string_string_to_void_function>>("c_ImportBundle"); var importBundle = library.lookup<NativeFunction<string_string_to_string_function>>("c_ImportBundle");
// ignore: non_constant_identifier_names // ignore: non_constant_identifier_names
final ImportBundle = importBundle.asFunction<VoidFromStringStringFn>(); final ImportBundle = importBundle.asFunction<StringFromStringStringFn>();
final u1 = profileOnion.toNativeUtf8(); final u1 = profileOnion.toNativeUtf8();
final u2 = bundle.toNativeUtf8(); final u2 = bundle.toNativeUtf8();
ImportBundle(u1, u1.length, u2, u2.length); Pointer<Utf8> responsePtr = ImportBundle(u1, u1.length, u2, u2.length);
String response = responsePtr.toDartString();
_UnsafeFreePointerAnyUseOfThisFunctionMustBeDoubleApproved(responsePtr);
malloc.free(u1); malloc.free(u1);
malloc.free(u2); malloc.free(u2);
return response;
} }
@override @override

View File

@ -190,8 +190,8 @@ class CwtchGomobile implements Cwtch {
@override @override
// ignore: non_constant_identifier_names // ignore: non_constant_identifier_names
void ImportBundle(String profileOnion, String bundle) { Future<dynamic> ImportBundle(String profileOnion, String bundle) {
cwtchPlatform.invokeMethod("ImportBundle", {"ProfileOnion": profileOnion, "bundle": bundle}); return cwtchPlatform.invokeMethod("ImportBundle", {"ProfileOnion": profileOnion, "bundle": bundle});
} }
@override @override

View File

@ -13,11 +13,6 @@ class ErrorHandler extends ChangeNotifier {
bool changePasswordError = false; bool changePasswordError = false;
bool explicitChangePasswordSuccess = false; bool explicitChangePasswordSuccess = false;
// Import Bundle Specific Errors
static const String importBundleErrorPrefix = "importBundle";
bool importBundleError = false;
bool importBundleSuccess = false;
static const String deleteProfileErrorPrefix = "deleteprofile"; static const String deleteProfileErrorPrefix = "deleteprofile";
bool deleteProfileError = false; bool deleteProfileError = false;
bool deleteProfileSuccess = false; bool deleteProfileSuccess = false;
@ -27,9 +22,6 @@ class ErrorHandler extends ChangeNotifier {
bool deletedServerSuccess = false; bool deletedServerSuccess = false;
reset() { reset() {
importBundleError = false;
importBundleSuccess = false;
deleteProfileError = false; deleteProfileError = false;
deleteProfileSuccess = false; deleteProfileSuccess = false;
@ -49,9 +41,6 @@ class ErrorHandler extends ChangeNotifier {
String errorType = parts[1]; String errorType = parts[1];
switch (prefix) { switch (prefix) {
case importBundleErrorPrefix:
handleImportBundleError(errorType);
break;
case deleteProfileErrorPrefix: case deleteProfileErrorPrefix:
handleDeleteProfileError(errorType); handleDeleteProfileError(errorType);
break; break;
@ -65,21 +54,6 @@ class ErrorHandler extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
handleImportBundleError(String errorType) {
// Reset add contact errors
importBundleError = false;
importBundleSuccess = false;
switch (errorType) {
case successErrorType:
importBundleSuccess = true;
break;
default:
importBundleError = true;
break;
}
}
handleDeleteProfileError(String errorType) { handleDeleteProfileError(String errorType) {
// Reset add contact errors // Reset add contact errors
deleteProfileError = false; deleteProfileError = false;

View File

@ -38,6 +38,7 @@ class _AddContactViewState extends State<AddContactView> {
String server = ""; String server = "";
// flutter textfield onChange often fires twice and since we need contexts, we can't easily use a controler/listener // flutter textfield onChange often fires twice and since we need contexts, we can't easily use a controler/listener
String lastContactValue = ""; String lastContactValue = "";
bool failedImport = false;
@override @override
@ -153,9 +154,9 @@ class _AddContactViewState extends State<AddContactView> {
if (value == "") { if (value == "") {
return null; return null;
} }
if (globalErrorHandler.importBundleError) { if (failedImport) {
return AppLocalizations.of(context)!.invalidImportString; return AppLocalizations.of(context)!.invalidImportString;
} else if (globalErrorHandler.importBundleSuccess) { return null; } }
return null; return null;
}, },
onChanged: (String importBundle) async { onChanged: (String importBundle) async {
@ -167,20 +168,18 @@ class _AddContactViewState extends State<AddContactView> {
Provider Provider
.of<FlwtchState>(bcontext, listen: false) .of<FlwtchState>(bcontext, listen: false)
.cwtch .cwtch
.ImportBundle(profileOnion, importBundle.replaceFirst("cwtch:", "")); .ImportBundle(profileOnion, importBundle.replaceFirst("cwtch:", "")).then((result) {
if (result == "importBundle.success") {
Future.delayed(const Duration(milliseconds: 500), () { failedImport = false;
if (globalErrorHandler.importBundleSuccess) { if (AppLocalizations.of(bcontext) != null) {
// TODO: This isn't ideal, but because onChange can be fired during this future check final snackBar = SnackBar(content: Text(AppLocalizations.of(bcontext)!.successfullAddedContact + importBundle));
// and because the context can change after being popped we have this kind of double assertion... ScaffoldMessenger.of(bcontext).showSnackBar(snackBar);
// There is probably a better pattern to handle this... Navigator.popUntil(bcontext, (route) => route.settings.name == "conversations");
if (AppLocalizations.of(bcontext) != null) { }
final snackBar = SnackBar(content: Text(AppLocalizations.of(bcontext)!.successfullAddedContact + importBundle)); } else {
ScaffoldMessenger.of(bcontext).showSnackBar(snackBar); failedImport = true;
Navigator.popUntil(bcontext, (route) => route.settings.name == "conversations"); }
} });
}
});
} }
}, },
hintText: '', hintText: '',