updating to new api version

This commit is contained in:
otsmr 2025-06-09 23:35:45 +02:00
parent 5243fd609f
commit d871e04f0e
37 changed files with 563 additions and 885 deletions

View file

@ -16,7 +16,7 @@ cd "$SRC_DIR" || {
}
# Iterate over all .proto files in the source directory
for proto_file in "api/"*.proto; do
for proto_file in "api/"**/*.proto; do
# Check if the file exists to avoid errors if no .proto files are found
if [[ -f "$proto_file" ]]; then

View file

@ -1,3 +1,5 @@
import 'dart:isolate';
import 'package:camera/camera.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
@ -45,8 +47,10 @@ void main() async {
await twonlyDB.messagesDao.handleMediaFilesOlderThan7Days();
// purge media files in the background
Isolate.run(() {
purgeReceivedMediaFiles();
purgeSendMediaFiles();
});
runApp(
MultiProvider(

View file

@ -0,0 +1,163 @@
//
// Generated code. Do not modify.
// source: api/http/http_requests.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:fixnum/fixnum.dart' as $fixnum;
import 'package:protobuf/protobuf.dart' as $pb;
class TextMessage extends $pb.GeneratedMessage {
factory TextMessage({
$fixnum.Int64? userId,
$core.List<$core.int>? body,
$core.List<$core.int>? pushData,
}) {
final $result = create();
if (userId != null) {
$result.userId = userId;
}
if (body != null) {
$result.body = body;
}
if (pushData != null) {
$result.pushData = pushData;
}
return $result;
}
TextMessage._() : super();
factory TextMessage.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory TextMessage.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'TextMessage', package: const $pb.PackageName(_omitMessageNames ? '' : 'http_requests'), createEmptyInstance: create)
..aInt64(1, _omitFieldNames ? '' : 'userId')
..a<$core.List<$core.int>>(2, _omitFieldNames ? '' : 'body', $pb.PbFieldType.OY)
..a<$core.List<$core.int>>(3, _omitFieldNames ? '' : 'pushData', $pb.PbFieldType.OY)
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
TextMessage clone() => TextMessage()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
TextMessage copyWith(void Function(TextMessage) updates) => super.copyWith((message) => updates(message as TextMessage)) as TextMessage;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static TextMessage create() => TextMessage._();
TextMessage createEmptyInstance() => create();
static $pb.PbList<TextMessage> createRepeated() => $pb.PbList<TextMessage>();
@$core.pragma('dart2js:noInline')
static TextMessage getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<TextMessage>(create);
static TextMessage? _defaultInstance;
@$pb.TagNumber(1)
$fixnum.Int64 get userId => $_getI64(0);
@$pb.TagNumber(1)
set userId($fixnum.Int64 v) { $_setInt64(0, v); }
@$pb.TagNumber(1)
$core.bool hasUserId() => $_has(0);
@$pb.TagNumber(1)
void clearUserId() => clearField(1);
@$pb.TagNumber(2)
$core.List<$core.int> get body => $_getN(1);
@$pb.TagNumber(2)
set body($core.List<$core.int> v) { $_setBytes(1, v); }
@$pb.TagNumber(2)
$core.bool hasBody() => $_has(1);
@$pb.TagNumber(2)
void clearBody() => clearField(2);
@$pb.TagNumber(3)
$core.List<$core.int> get pushData => $_getN(2);
@$pb.TagNumber(3)
set pushData($core.List<$core.int> v) { $_setBytes(2, v); }
@$pb.TagNumber(3)
$core.bool hasPushData() => $_has(2);
@$pb.TagNumber(3)
void clearPushData() => clearField(3);
}
class UploadRequest extends $pb.GeneratedMessage {
factory UploadRequest({
$core.List<$core.int>? encryptedData,
$core.Iterable<$core.List<$core.int>>? downloadTokens,
$core.Iterable<TextMessage>? messagesOnSuccess,
}) {
final $result = create();
if (encryptedData != null) {
$result.encryptedData = encryptedData;
}
if (downloadTokens != null) {
$result.downloadTokens.addAll(downloadTokens);
}
if (messagesOnSuccess != null) {
$result.messagesOnSuccess.addAll(messagesOnSuccess);
}
return $result;
}
UploadRequest._() : super();
factory UploadRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory UploadRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'UploadRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'http_requests'), createEmptyInstance: create)
..a<$core.List<$core.int>>(1, _omitFieldNames ? '' : 'encryptedData', $pb.PbFieldType.OY)
..p<$core.List<$core.int>>(2, _omitFieldNames ? '' : 'downloadTokens', $pb.PbFieldType.PY)
..pc<TextMessage>(3, _omitFieldNames ? '' : 'messagesOnSuccess', $pb.PbFieldType.PM, subBuilder: TextMessage.create)
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
UploadRequest clone() => UploadRequest()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
UploadRequest copyWith(void Function(UploadRequest) updates) => super.copyWith((message) => updates(message as UploadRequest)) as UploadRequest;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static UploadRequest create() => UploadRequest._();
UploadRequest createEmptyInstance() => create();
static $pb.PbList<UploadRequest> createRepeated() => $pb.PbList<UploadRequest>();
@$core.pragma('dart2js:noInline')
static UploadRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<UploadRequest>(create);
static UploadRequest? _defaultInstance;
@$pb.TagNumber(1)
$core.List<$core.int> get encryptedData => $_getN(0);
@$pb.TagNumber(1)
set encryptedData($core.List<$core.int> v) { $_setBytes(0, v); }
@$pb.TagNumber(1)
$core.bool hasEncryptedData() => $_has(0);
@$pb.TagNumber(1)
void clearEncryptedData() => clearField(1);
@$pb.TagNumber(2)
$core.List<$core.List<$core.int>> get downloadTokens => $_getList(1);
@$pb.TagNumber(3)
$core.List<TextMessage> get messagesOnSuccess => $_getList(2);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,11 @@
//
// Generated code. Do not modify.
// source: api/http/http_requests.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import

View file

@ -0,0 +1,50 @@
//
// Generated code. Do not modify.
// source: api/http/http_requests.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use textMessageDescriptor instead')
const TextMessage$json = {
'1': 'TextMessage',
'2': [
{'1': 'user_id', '3': 1, '4': 1, '5': 3, '10': 'userId'},
{'1': 'body', '3': 2, '4': 1, '5': 12, '10': 'body'},
{'1': 'push_data', '3': 3, '4': 1, '5': 12, '9': 0, '10': 'pushData', '17': true},
],
'8': [
{'1': '_push_data'},
],
};
/// Descriptor for `TextMessage`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List textMessageDescriptor = $convert.base64Decode(
'CgtUZXh0TWVzc2FnZRIXCgd1c2VyX2lkGAEgASgDUgZ1c2VySWQSEgoEYm9keRgCIAEoDFIEYm'
'9keRIgCglwdXNoX2RhdGEYAyABKAxIAFIIcHVzaERhdGGIAQFCDAoKX3B1c2hfZGF0YQ==');
@$core.Deprecated('Use uploadRequestDescriptor instead')
const UploadRequest$json = {
'1': 'UploadRequest',
'2': [
{'1': 'encrypted_data', '3': 1, '4': 1, '5': 12, '10': 'encryptedData'},
{'1': 'download_tokens', '3': 2, '4': 3, '5': 12, '10': 'downloadTokens'},
{'1': 'messages_on_success', '3': 3, '4': 3, '5': 11, '6': '.http_requests.TextMessage', '10': 'messagesOnSuccess'},
],
};
/// Descriptor for `UploadRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List uploadRequestDescriptor = $convert.base64Decode(
'Cg1VcGxvYWRSZXF1ZXN0EiUKDmVuY3J5cHRlZF9kYXRhGAEgASgMUg1lbmNyeXB0ZWREYXRhEi'
'cKD2Rvd25sb2FkX3Rva2VucxgCIAMoDFIOZG93bmxvYWRUb2tlbnMSSgoTbWVzc2FnZXNfb25f'
'c3VjY2VzcxgDIAMoCzIaLmh0dHBfcmVxdWVzdHMuVGV4dE1lc3NhZ2VSEW1lc3NhZ2VzT25TdW'
'NjZXNz');

View file

@ -0,0 +1,14 @@
//
// Generated code. Do not modify.
// source: api/http/http_requests.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'http_requests.pb.dart';

View file

@ -1,6 +1,6 @@
//
// Generated code. Do not modify.
// source: api/client_to_server.proto
// source: api/websocket/client_to_server.proto
//
// @dart = 2.12
@ -1531,276 +1531,6 @@ class ApplicationData_UpdateSignedPreKey extends $pb.GeneratedMessage {
void clearSignedPrekeySignature() => clearField(3);
}
class ApplicationData_GetUploadToken extends $pb.GeneratedMessage {
factory ApplicationData_GetUploadToken({
$core.int? recipientsCount,
}) {
final $result = create();
if (recipientsCount != null) {
$result.recipientsCount = recipientsCount;
}
return $result;
}
ApplicationData_GetUploadToken._() : super();
factory ApplicationData_GetUploadToken.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory ApplicationData_GetUploadToken.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ApplicationData.GetUploadToken', package: const $pb.PackageName(_omitMessageNames ? '' : 'client_to_server'), createEmptyInstance: create)
..a<$core.int>(1, _omitFieldNames ? '' : 'recipientsCount', $pb.PbFieldType.OU3)
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
ApplicationData_GetUploadToken clone() => ApplicationData_GetUploadToken()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
ApplicationData_GetUploadToken copyWith(void Function(ApplicationData_GetUploadToken) updates) => super.copyWith((message) => updates(message as ApplicationData_GetUploadToken)) as ApplicationData_GetUploadToken;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ApplicationData_GetUploadToken create() => ApplicationData_GetUploadToken._();
ApplicationData_GetUploadToken createEmptyInstance() => create();
static $pb.PbList<ApplicationData_GetUploadToken> createRepeated() => $pb.PbList<ApplicationData_GetUploadToken>();
@$core.pragma('dart2js:noInline')
static ApplicationData_GetUploadToken getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ApplicationData_GetUploadToken>(create);
static ApplicationData_GetUploadToken? _defaultInstance;
@$pb.TagNumber(1)
$core.int get recipientsCount => $_getIZ(0);
@$pb.TagNumber(1)
set recipientsCount($core.int v) { $_setUnsignedInt32(0, v); }
@$pb.TagNumber(1)
$core.bool hasRecipientsCount() => $_has(0);
@$pb.TagNumber(1)
void clearRecipientsCount() => clearField(1);
}
class ApplicationData_UploadData extends $pb.GeneratedMessage {
factory ApplicationData_UploadData({
$core.List<$core.int>? uploadToken,
$core.int? offset,
$core.List<$core.int>? data,
$core.List<$core.int>? checksum,
}) {
final $result = create();
if (uploadToken != null) {
$result.uploadToken = uploadToken;
}
if (offset != null) {
$result.offset = offset;
}
if (data != null) {
$result.data = data;
}
if (checksum != null) {
$result.checksum = checksum;
}
return $result;
}
ApplicationData_UploadData._() : super();
factory ApplicationData_UploadData.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory ApplicationData_UploadData.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ApplicationData.UploadData', package: const $pb.PackageName(_omitMessageNames ? '' : 'client_to_server'), createEmptyInstance: create)
..a<$core.List<$core.int>>(1, _omitFieldNames ? '' : 'uploadToken', $pb.PbFieldType.OY)
..a<$core.int>(2, _omitFieldNames ? '' : 'offset', $pb.PbFieldType.OU3)
..a<$core.List<$core.int>>(3, _omitFieldNames ? '' : 'data', $pb.PbFieldType.OY)
..a<$core.List<$core.int>>(4, _omitFieldNames ? '' : 'checksum', $pb.PbFieldType.OY)
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
ApplicationData_UploadData clone() => ApplicationData_UploadData()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
ApplicationData_UploadData copyWith(void Function(ApplicationData_UploadData) updates) => super.copyWith((message) => updates(message as ApplicationData_UploadData)) as ApplicationData_UploadData;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ApplicationData_UploadData create() => ApplicationData_UploadData._();
ApplicationData_UploadData createEmptyInstance() => create();
static $pb.PbList<ApplicationData_UploadData> createRepeated() => $pb.PbList<ApplicationData_UploadData>();
@$core.pragma('dart2js:noInline')
static ApplicationData_UploadData getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ApplicationData_UploadData>(create);
static ApplicationData_UploadData? _defaultInstance;
@$pb.TagNumber(1)
$core.List<$core.int> get uploadToken => $_getN(0);
@$pb.TagNumber(1)
set uploadToken($core.List<$core.int> v) { $_setBytes(0, v); }
@$pb.TagNumber(1)
$core.bool hasUploadToken() => $_has(0);
@$pb.TagNumber(1)
void clearUploadToken() => clearField(1);
@$pb.TagNumber(2)
$core.int get offset => $_getIZ(1);
@$pb.TagNumber(2)
set offset($core.int v) { $_setUnsignedInt32(1, v); }
@$pb.TagNumber(2)
$core.bool hasOffset() => $_has(1);
@$pb.TagNumber(2)
void clearOffset() => clearField(2);
@$pb.TagNumber(3)
$core.List<$core.int> get data => $_getN(2);
@$pb.TagNumber(3)
set data($core.List<$core.int> v) { $_setBytes(2, v); }
@$pb.TagNumber(3)
$core.bool hasData() => $_has(2);
@$pb.TagNumber(3)
void clearData() => clearField(3);
@$pb.TagNumber(4)
$core.List<$core.int> get checksum => $_getN(3);
@$pb.TagNumber(4)
set checksum($core.List<$core.int> v) { $_setBytes(3, v); }
@$pb.TagNumber(4)
$core.bool hasChecksum() => $_has(3);
@$pb.TagNumber(4)
void clearChecksum() => clearField(4);
}
class ApplicationData_UploadDone extends $pb.GeneratedMessage {
factory ApplicationData_UploadDone({
$core.List<$core.int>? uploadToken,
$core.int? recipientsCount,
}) {
final $result = create();
if (uploadToken != null) {
$result.uploadToken = uploadToken;
}
if (recipientsCount != null) {
$result.recipientsCount = recipientsCount;
}
return $result;
}
ApplicationData_UploadDone._() : super();
factory ApplicationData_UploadDone.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory ApplicationData_UploadDone.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ApplicationData.UploadDone', package: const $pb.PackageName(_omitMessageNames ? '' : 'client_to_server'), createEmptyInstance: create)
..a<$core.List<$core.int>>(1, _omitFieldNames ? '' : 'uploadToken', $pb.PbFieldType.OY)
..a<$core.int>(2, _omitFieldNames ? '' : 'recipientsCount', $pb.PbFieldType.OU3)
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
ApplicationData_UploadDone clone() => ApplicationData_UploadDone()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
ApplicationData_UploadDone copyWith(void Function(ApplicationData_UploadDone) updates) => super.copyWith((message) => updates(message as ApplicationData_UploadDone)) as ApplicationData_UploadDone;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ApplicationData_UploadDone create() => ApplicationData_UploadDone._();
ApplicationData_UploadDone createEmptyInstance() => create();
static $pb.PbList<ApplicationData_UploadDone> createRepeated() => $pb.PbList<ApplicationData_UploadDone>();
@$core.pragma('dart2js:noInline')
static ApplicationData_UploadDone getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ApplicationData_UploadDone>(create);
static ApplicationData_UploadDone? _defaultInstance;
@$pb.TagNumber(1)
$core.List<$core.int> get uploadToken => $_getN(0);
@$pb.TagNumber(1)
set uploadToken($core.List<$core.int> v) { $_setBytes(0, v); }
@$pb.TagNumber(1)
$core.bool hasUploadToken() => $_has(0);
@$pb.TagNumber(1)
void clearUploadToken() => clearField(1);
@$pb.TagNumber(2)
$core.int get recipientsCount => $_getIZ(1);
@$pb.TagNumber(2)
set recipientsCount($core.int v) { $_setUnsignedInt32(1, v); }
@$pb.TagNumber(2)
$core.bool hasRecipientsCount() => $_has(1);
@$pb.TagNumber(2)
void clearRecipientsCount() => clearField(2);
}
class ApplicationData_DownloadData extends $pb.GeneratedMessage {
factory ApplicationData_DownloadData({
$core.List<$core.int>? downloadToken,
$core.int? offset,
}) {
final $result = create();
if (downloadToken != null) {
$result.downloadToken = downloadToken;
}
if (offset != null) {
$result.offset = offset;
}
return $result;
}
ApplicationData_DownloadData._() : super();
factory ApplicationData_DownloadData.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory ApplicationData_DownloadData.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ApplicationData.DownloadData', package: const $pb.PackageName(_omitMessageNames ? '' : 'client_to_server'), createEmptyInstance: create)
..a<$core.List<$core.int>>(1, _omitFieldNames ? '' : 'downloadToken', $pb.PbFieldType.OY)
..a<$core.int>(2, _omitFieldNames ? '' : 'offset', $pb.PbFieldType.OU3)
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
ApplicationData_DownloadData clone() => ApplicationData_DownloadData()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
ApplicationData_DownloadData copyWith(void Function(ApplicationData_DownloadData) updates) => super.copyWith((message) => updates(message as ApplicationData_DownloadData)) as ApplicationData_DownloadData;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ApplicationData_DownloadData create() => ApplicationData_DownloadData._();
ApplicationData_DownloadData createEmptyInstance() => create();
static $pb.PbList<ApplicationData_DownloadData> createRepeated() => $pb.PbList<ApplicationData_DownloadData>();
@$core.pragma('dart2js:noInline')
static ApplicationData_DownloadData getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ApplicationData_DownloadData>(create);
static ApplicationData_DownloadData? _defaultInstance;
@$pb.TagNumber(1)
$core.List<$core.int> get downloadToken => $_getN(0);
@$pb.TagNumber(1)
set downloadToken($core.List<$core.int> v) { $_setBytes(0, v); }
@$pb.TagNumber(1)
$core.bool hasDownloadToken() => $_has(0);
@$pb.TagNumber(1)
void clearDownloadToken() => clearField(1);
@$pb.TagNumber(2)
$core.int get offset => $_getIZ(1);
@$pb.TagNumber(2)
set offset($core.int v) { $_setUnsignedInt32(1, v); }
@$pb.TagNumber(2)
$core.bool hasOffset() => $_has(1);
@$pb.TagNumber(2)
void clearOffset() => clearField(2);
}
class ApplicationData_DownloadDone extends $pb.GeneratedMessage {
factory ApplicationData_DownloadDone({
$core.List<$core.int>? downloadToken,
@ -1887,10 +1617,7 @@ enum ApplicationData_ApplicationData {
textmessage,
getuserbyusername,
getprekeysbyuserid,
getuploadtoken,
uploaddata,
getuserbyid,
downloaddata,
updategooglefcmtoken,
getlocation,
getcurrentplaninfos,
@ -1904,7 +1631,6 @@ enum ApplicationData_ApplicationData {
removeadditionaluser,
updateplanoptions,
downloaddone,
uploaddone,
getsignedprekeybyuserid,
updatesignedprekey,
deleteaccount,
@ -1916,10 +1642,7 @@ class ApplicationData extends $pb.GeneratedMessage {
ApplicationData_TextMessage? textmessage,
ApplicationData_GetUserByUsername? getuserbyusername,
ApplicationData_GetPrekeysByUserId? getprekeysbyuserid,
ApplicationData_GetUploadToken? getuploadtoken,
ApplicationData_UploadData? uploaddata,
ApplicationData_GetUserById? getuserbyid,
ApplicationData_DownloadData? downloaddata,
ApplicationData_UpdateGoogleFcmToken? updategooglefcmtoken,
ApplicationData_GetLocation? getlocation,
ApplicationData_GetCurrentPlanInfos? getcurrentplaninfos,
@ -1933,7 +1656,6 @@ class ApplicationData extends $pb.GeneratedMessage {
ApplicationData_RemoveAdditionalUser? removeadditionaluser,
ApplicationData_UpdatePlanOptions? updateplanoptions,
ApplicationData_DownloadDone? downloaddone,
ApplicationData_UploadDone? uploaddone,
ApplicationData_GetSignedPreKeyByUserId? getsignedprekeybyuserid,
ApplicationData_UpdateSignedPreKey? updatesignedprekey,
ApplicationData_DeleteAccount? deleteaccount,
@ -1948,18 +1670,9 @@ class ApplicationData extends $pb.GeneratedMessage {
if (getprekeysbyuserid != null) {
$result.getprekeysbyuserid = getprekeysbyuserid;
}
if (getuploadtoken != null) {
$result.getuploadtoken = getuploadtoken;
}
if (uploaddata != null) {
$result.uploaddata = uploaddata;
}
if (getuserbyid != null) {
$result.getuserbyid = getuserbyid;
}
if (downloaddata != null) {
$result.downloaddata = downloaddata;
}
if (updategooglefcmtoken != null) {
$result.updategooglefcmtoken = updategooglefcmtoken;
}
@ -1999,9 +1712,6 @@ class ApplicationData extends $pb.GeneratedMessage {
if (downloaddone != null) {
$result.downloaddone = downloaddone;
}
if (uploaddone != null) {
$result.uploaddone = uploaddone;
}
if (getsignedprekeybyuserid != null) {
$result.getsignedprekeybyuserid = getsignedprekeybyuserid;
}
@ -2021,10 +1731,7 @@ class ApplicationData extends $pb.GeneratedMessage {
1 : ApplicationData_ApplicationData.textmessage,
2 : ApplicationData_ApplicationData.getuserbyusername,
3 : ApplicationData_ApplicationData.getprekeysbyuserid,
4 : ApplicationData_ApplicationData.getuploadtoken,
5 : ApplicationData_ApplicationData.uploaddata,
6 : ApplicationData_ApplicationData.getuserbyid,
7 : ApplicationData_ApplicationData.downloaddata,
8 : ApplicationData_ApplicationData.updategooglefcmtoken,
9 : ApplicationData_ApplicationData.getlocation,
10 : ApplicationData_ApplicationData.getcurrentplaninfos,
@ -2038,21 +1745,17 @@ class ApplicationData extends $pb.GeneratedMessage {
18 : ApplicationData_ApplicationData.removeadditionaluser,
19 : ApplicationData_ApplicationData.updateplanoptions,
20 : ApplicationData_ApplicationData.downloaddone,
21 : ApplicationData_ApplicationData.uploaddone,
22 : ApplicationData_ApplicationData.getsignedprekeybyuserid,
23 : ApplicationData_ApplicationData.updatesignedprekey,
24 : ApplicationData_ApplicationData.deleteaccount,
0 : ApplicationData_ApplicationData.notSet
};
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ApplicationData', package: const $pb.PackageName(_omitMessageNames ? '' : 'client_to_server'), createEmptyInstance: create)
..oo(0, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24])
..oo(0, [1, 2, 3, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24])
..aOM<ApplicationData_TextMessage>(1, _omitFieldNames ? '' : 'textmessage', subBuilder: ApplicationData_TextMessage.create)
..aOM<ApplicationData_GetUserByUsername>(2, _omitFieldNames ? '' : 'getuserbyusername', subBuilder: ApplicationData_GetUserByUsername.create)
..aOM<ApplicationData_GetPrekeysByUserId>(3, _omitFieldNames ? '' : 'getprekeysbyuserid', subBuilder: ApplicationData_GetPrekeysByUserId.create)
..aOM<ApplicationData_GetUploadToken>(4, _omitFieldNames ? '' : 'getuploadtoken', subBuilder: ApplicationData_GetUploadToken.create)
..aOM<ApplicationData_UploadData>(5, _omitFieldNames ? '' : 'uploaddata', subBuilder: ApplicationData_UploadData.create)
..aOM<ApplicationData_GetUserById>(6, _omitFieldNames ? '' : 'getuserbyid', subBuilder: ApplicationData_GetUserById.create)
..aOM<ApplicationData_DownloadData>(7, _omitFieldNames ? '' : 'downloaddata', subBuilder: ApplicationData_DownloadData.create)
..aOM<ApplicationData_UpdateGoogleFcmToken>(8, _omitFieldNames ? '' : 'updategooglefcmtoken', subBuilder: ApplicationData_UpdateGoogleFcmToken.create)
..aOM<ApplicationData_GetLocation>(9, _omitFieldNames ? '' : 'getlocation', subBuilder: ApplicationData_GetLocation.create)
..aOM<ApplicationData_GetCurrentPlanInfos>(10, _omitFieldNames ? '' : 'getcurrentplaninfos', subBuilder: ApplicationData_GetCurrentPlanInfos.create)
@ -2066,7 +1769,6 @@ class ApplicationData extends $pb.GeneratedMessage {
..aOM<ApplicationData_RemoveAdditionalUser>(18, _omitFieldNames ? '' : 'removeadditionaluser', subBuilder: ApplicationData_RemoveAdditionalUser.create)
..aOM<ApplicationData_UpdatePlanOptions>(19, _omitFieldNames ? '' : 'updateplanoptions', subBuilder: ApplicationData_UpdatePlanOptions.create)
..aOM<ApplicationData_DownloadDone>(20, _omitFieldNames ? '' : 'downloaddone', subBuilder: ApplicationData_DownloadDone.create)
..aOM<ApplicationData_UploadDone>(21, _omitFieldNames ? '' : 'uploaddone', subBuilder: ApplicationData_UploadDone.create)
..aOM<ApplicationData_GetSignedPreKeyByUserId>(22, _omitFieldNames ? '' : 'getsignedprekeybyuserid', subBuilder: ApplicationData_GetSignedPreKeyByUserId.create)
..aOM<ApplicationData_UpdateSignedPreKey>(23, _omitFieldNames ? '' : 'updatesignedprekey', subBuilder: ApplicationData_UpdateSignedPreKey.create)
..aOM<ApplicationData_DeleteAccount>(24, _omitFieldNames ? '' : 'deleteaccount', subBuilder: ApplicationData_DeleteAccount.create)
@ -2130,236 +1832,192 @@ class ApplicationData extends $pb.GeneratedMessage {
@$pb.TagNumber(3)
ApplicationData_GetPrekeysByUserId ensureGetprekeysbyuserid() => $_ensure(2);
@$pb.TagNumber(4)
ApplicationData_GetUploadToken get getuploadtoken => $_getN(3);
@$pb.TagNumber(4)
set getuploadtoken(ApplicationData_GetUploadToken v) { setField(4, v); }
@$pb.TagNumber(4)
$core.bool hasGetuploadtoken() => $_has(3);
@$pb.TagNumber(4)
void clearGetuploadtoken() => clearField(4);
@$pb.TagNumber(4)
ApplicationData_GetUploadToken ensureGetuploadtoken() => $_ensure(3);
@$pb.TagNumber(5)
ApplicationData_UploadData get uploaddata => $_getN(4);
@$pb.TagNumber(5)
set uploaddata(ApplicationData_UploadData v) { setField(5, v); }
@$pb.TagNumber(5)
$core.bool hasUploaddata() => $_has(4);
@$pb.TagNumber(5)
void clearUploaddata() => clearField(5);
@$pb.TagNumber(5)
ApplicationData_UploadData ensureUploaddata() => $_ensure(4);
@$pb.TagNumber(6)
ApplicationData_GetUserById get getuserbyid => $_getN(5);
ApplicationData_GetUserById get getuserbyid => $_getN(3);
@$pb.TagNumber(6)
set getuserbyid(ApplicationData_GetUserById v) { setField(6, v); }
@$pb.TagNumber(6)
$core.bool hasGetuserbyid() => $_has(5);
$core.bool hasGetuserbyid() => $_has(3);
@$pb.TagNumber(6)
void clearGetuserbyid() => clearField(6);
@$pb.TagNumber(6)
ApplicationData_GetUserById ensureGetuserbyid() => $_ensure(5);
@$pb.TagNumber(7)
ApplicationData_DownloadData get downloaddata => $_getN(6);
@$pb.TagNumber(7)
set downloaddata(ApplicationData_DownloadData v) { setField(7, v); }
@$pb.TagNumber(7)
$core.bool hasDownloaddata() => $_has(6);
@$pb.TagNumber(7)
void clearDownloaddata() => clearField(7);
@$pb.TagNumber(7)
ApplicationData_DownloadData ensureDownloaddata() => $_ensure(6);
ApplicationData_GetUserById ensureGetuserbyid() => $_ensure(3);
@$pb.TagNumber(8)
ApplicationData_UpdateGoogleFcmToken get updategooglefcmtoken => $_getN(7);
ApplicationData_UpdateGoogleFcmToken get updategooglefcmtoken => $_getN(4);
@$pb.TagNumber(8)
set updategooglefcmtoken(ApplicationData_UpdateGoogleFcmToken v) { setField(8, v); }
@$pb.TagNumber(8)
$core.bool hasUpdategooglefcmtoken() => $_has(7);
$core.bool hasUpdategooglefcmtoken() => $_has(4);
@$pb.TagNumber(8)
void clearUpdategooglefcmtoken() => clearField(8);
@$pb.TagNumber(8)
ApplicationData_UpdateGoogleFcmToken ensureUpdategooglefcmtoken() => $_ensure(7);
ApplicationData_UpdateGoogleFcmToken ensureUpdategooglefcmtoken() => $_ensure(4);
@$pb.TagNumber(9)
ApplicationData_GetLocation get getlocation => $_getN(8);
ApplicationData_GetLocation get getlocation => $_getN(5);
@$pb.TagNumber(9)
set getlocation(ApplicationData_GetLocation v) { setField(9, v); }
@$pb.TagNumber(9)
$core.bool hasGetlocation() => $_has(8);
$core.bool hasGetlocation() => $_has(5);
@$pb.TagNumber(9)
void clearGetlocation() => clearField(9);
@$pb.TagNumber(9)
ApplicationData_GetLocation ensureGetlocation() => $_ensure(8);
ApplicationData_GetLocation ensureGetlocation() => $_ensure(5);
@$pb.TagNumber(10)
ApplicationData_GetCurrentPlanInfos get getcurrentplaninfos => $_getN(9);
ApplicationData_GetCurrentPlanInfos get getcurrentplaninfos => $_getN(6);
@$pb.TagNumber(10)
set getcurrentplaninfos(ApplicationData_GetCurrentPlanInfos v) { setField(10, v); }
@$pb.TagNumber(10)
$core.bool hasGetcurrentplaninfos() => $_has(9);
$core.bool hasGetcurrentplaninfos() => $_has(6);
@$pb.TagNumber(10)
void clearGetcurrentplaninfos() => clearField(10);
@$pb.TagNumber(10)
ApplicationData_GetCurrentPlanInfos ensureGetcurrentplaninfos() => $_ensure(9);
ApplicationData_GetCurrentPlanInfos ensureGetcurrentplaninfos() => $_ensure(6);
@$pb.TagNumber(11)
ApplicationData_RedeemVoucher get redeemvoucher => $_getN(10);
ApplicationData_RedeemVoucher get redeemvoucher => $_getN(7);
@$pb.TagNumber(11)
set redeemvoucher(ApplicationData_RedeemVoucher v) { setField(11, v); }
@$pb.TagNumber(11)
$core.bool hasRedeemvoucher() => $_has(10);
$core.bool hasRedeemvoucher() => $_has(7);
@$pb.TagNumber(11)
void clearRedeemvoucher() => clearField(11);
@$pb.TagNumber(11)
ApplicationData_RedeemVoucher ensureRedeemvoucher() => $_ensure(10);
ApplicationData_RedeemVoucher ensureRedeemvoucher() => $_ensure(7);
@$pb.TagNumber(12)
ApplicationData_GetAvailablePlans get getavailableplans => $_getN(11);
ApplicationData_GetAvailablePlans get getavailableplans => $_getN(8);
@$pb.TagNumber(12)
set getavailableplans(ApplicationData_GetAvailablePlans v) { setField(12, v); }
@$pb.TagNumber(12)
$core.bool hasGetavailableplans() => $_has(11);
$core.bool hasGetavailableplans() => $_has(8);
@$pb.TagNumber(12)
void clearGetavailableplans() => clearField(12);
@$pb.TagNumber(12)
ApplicationData_GetAvailablePlans ensureGetavailableplans() => $_ensure(11);
ApplicationData_GetAvailablePlans ensureGetavailableplans() => $_ensure(8);
@$pb.TagNumber(13)
ApplicationData_CreateVoucher get createvoucher => $_getN(12);
ApplicationData_CreateVoucher get createvoucher => $_getN(9);
@$pb.TagNumber(13)
set createvoucher(ApplicationData_CreateVoucher v) { setField(13, v); }
@$pb.TagNumber(13)
$core.bool hasCreatevoucher() => $_has(12);
$core.bool hasCreatevoucher() => $_has(9);
@$pb.TagNumber(13)
void clearCreatevoucher() => clearField(13);
@$pb.TagNumber(13)
ApplicationData_CreateVoucher ensureCreatevoucher() => $_ensure(12);
ApplicationData_CreateVoucher ensureCreatevoucher() => $_ensure(9);
@$pb.TagNumber(14)
ApplicationData_GetVouchers get getvouchers => $_getN(13);
ApplicationData_GetVouchers get getvouchers => $_getN(10);
@$pb.TagNumber(14)
set getvouchers(ApplicationData_GetVouchers v) { setField(14, v); }
@$pb.TagNumber(14)
$core.bool hasGetvouchers() => $_has(13);
$core.bool hasGetvouchers() => $_has(10);
@$pb.TagNumber(14)
void clearGetvouchers() => clearField(14);
@$pb.TagNumber(14)
ApplicationData_GetVouchers ensureGetvouchers() => $_ensure(13);
ApplicationData_GetVouchers ensureGetvouchers() => $_ensure(10);
@$pb.TagNumber(15)
ApplicationData_SwitchToPayedPlan get switchtopayedplan => $_getN(14);
ApplicationData_SwitchToPayedPlan get switchtopayedplan => $_getN(11);
@$pb.TagNumber(15)
set switchtopayedplan(ApplicationData_SwitchToPayedPlan v) { setField(15, v); }
@$pb.TagNumber(15)
$core.bool hasSwitchtopayedplan() => $_has(14);
$core.bool hasSwitchtopayedplan() => $_has(11);
@$pb.TagNumber(15)
void clearSwitchtopayedplan() => clearField(15);
@$pb.TagNumber(15)
ApplicationData_SwitchToPayedPlan ensureSwitchtopayedplan() => $_ensure(14);
ApplicationData_SwitchToPayedPlan ensureSwitchtopayedplan() => $_ensure(11);
@$pb.TagNumber(16)
ApplicationData_GetAddAccountsInvites get getaddaccountsinvites => $_getN(15);
ApplicationData_GetAddAccountsInvites get getaddaccountsinvites => $_getN(12);
@$pb.TagNumber(16)
set getaddaccountsinvites(ApplicationData_GetAddAccountsInvites v) { setField(16, v); }
@$pb.TagNumber(16)
$core.bool hasGetaddaccountsinvites() => $_has(15);
$core.bool hasGetaddaccountsinvites() => $_has(12);
@$pb.TagNumber(16)
void clearGetaddaccountsinvites() => clearField(16);
@$pb.TagNumber(16)
ApplicationData_GetAddAccountsInvites ensureGetaddaccountsinvites() => $_ensure(15);
ApplicationData_GetAddAccountsInvites ensureGetaddaccountsinvites() => $_ensure(12);
@$pb.TagNumber(17)
ApplicationData_RedeemAdditionalCode get redeemadditionalcode => $_getN(16);
ApplicationData_RedeemAdditionalCode get redeemadditionalcode => $_getN(13);
@$pb.TagNumber(17)
set redeemadditionalcode(ApplicationData_RedeemAdditionalCode v) { setField(17, v); }
@$pb.TagNumber(17)
$core.bool hasRedeemadditionalcode() => $_has(16);
$core.bool hasRedeemadditionalcode() => $_has(13);
@$pb.TagNumber(17)
void clearRedeemadditionalcode() => clearField(17);
@$pb.TagNumber(17)
ApplicationData_RedeemAdditionalCode ensureRedeemadditionalcode() => $_ensure(16);
ApplicationData_RedeemAdditionalCode ensureRedeemadditionalcode() => $_ensure(13);
@$pb.TagNumber(18)
ApplicationData_RemoveAdditionalUser get removeadditionaluser => $_getN(17);
ApplicationData_RemoveAdditionalUser get removeadditionaluser => $_getN(14);
@$pb.TagNumber(18)
set removeadditionaluser(ApplicationData_RemoveAdditionalUser v) { setField(18, v); }
@$pb.TagNumber(18)
$core.bool hasRemoveadditionaluser() => $_has(17);
$core.bool hasRemoveadditionaluser() => $_has(14);
@$pb.TagNumber(18)
void clearRemoveadditionaluser() => clearField(18);
@$pb.TagNumber(18)
ApplicationData_RemoveAdditionalUser ensureRemoveadditionaluser() => $_ensure(17);
ApplicationData_RemoveAdditionalUser ensureRemoveadditionaluser() => $_ensure(14);
@$pb.TagNumber(19)
ApplicationData_UpdatePlanOptions get updateplanoptions => $_getN(18);
ApplicationData_UpdatePlanOptions get updateplanoptions => $_getN(15);
@$pb.TagNumber(19)
set updateplanoptions(ApplicationData_UpdatePlanOptions v) { setField(19, v); }
@$pb.TagNumber(19)
$core.bool hasUpdateplanoptions() => $_has(18);
$core.bool hasUpdateplanoptions() => $_has(15);
@$pb.TagNumber(19)
void clearUpdateplanoptions() => clearField(19);
@$pb.TagNumber(19)
ApplicationData_UpdatePlanOptions ensureUpdateplanoptions() => $_ensure(18);
ApplicationData_UpdatePlanOptions ensureUpdateplanoptions() => $_ensure(15);
@$pb.TagNumber(20)
ApplicationData_DownloadDone get downloaddone => $_getN(19);
ApplicationData_DownloadDone get downloaddone => $_getN(16);
@$pb.TagNumber(20)
set downloaddone(ApplicationData_DownloadDone v) { setField(20, v); }
@$pb.TagNumber(20)
$core.bool hasDownloaddone() => $_has(19);
$core.bool hasDownloaddone() => $_has(16);
@$pb.TagNumber(20)
void clearDownloaddone() => clearField(20);
@$pb.TagNumber(20)
ApplicationData_DownloadDone ensureDownloaddone() => $_ensure(19);
@$pb.TagNumber(21)
ApplicationData_UploadDone get uploaddone => $_getN(20);
@$pb.TagNumber(21)
set uploaddone(ApplicationData_UploadDone v) { setField(21, v); }
@$pb.TagNumber(21)
$core.bool hasUploaddone() => $_has(20);
@$pb.TagNumber(21)
void clearUploaddone() => clearField(21);
@$pb.TagNumber(21)
ApplicationData_UploadDone ensureUploaddone() => $_ensure(20);
ApplicationData_DownloadDone ensureDownloaddone() => $_ensure(16);
@$pb.TagNumber(22)
ApplicationData_GetSignedPreKeyByUserId get getsignedprekeybyuserid => $_getN(21);
ApplicationData_GetSignedPreKeyByUserId get getsignedprekeybyuserid => $_getN(17);
@$pb.TagNumber(22)
set getsignedprekeybyuserid(ApplicationData_GetSignedPreKeyByUserId v) { setField(22, v); }
@$pb.TagNumber(22)
$core.bool hasGetsignedprekeybyuserid() => $_has(21);
$core.bool hasGetsignedprekeybyuserid() => $_has(17);
@$pb.TagNumber(22)
void clearGetsignedprekeybyuserid() => clearField(22);
@$pb.TagNumber(22)
ApplicationData_GetSignedPreKeyByUserId ensureGetsignedprekeybyuserid() => $_ensure(21);
ApplicationData_GetSignedPreKeyByUserId ensureGetsignedprekeybyuserid() => $_ensure(17);
@$pb.TagNumber(23)
ApplicationData_UpdateSignedPreKey get updatesignedprekey => $_getN(22);
ApplicationData_UpdateSignedPreKey get updatesignedprekey => $_getN(18);
@$pb.TagNumber(23)
set updatesignedprekey(ApplicationData_UpdateSignedPreKey v) { setField(23, v); }
@$pb.TagNumber(23)
$core.bool hasUpdatesignedprekey() => $_has(22);
$core.bool hasUpdatesignedprekey() => $_has(18);
@$pb.TagNumber(23)
void clearUpdatesignedprekey() => clearField(23);
@$pb.TagNumber(23)
ApplicationData_UpdateSignedPreKey ensureUpdatesignedprekey() => $_ensure(22);
ApplicationData_UpdateSignedPreKey ensureUpdatesignedprekey() => $_ensure(18);
@$pb.TagNumber(24)
ApplicationData_DeleteAccount get deleteaccount => $_getN(23);
ApplicationData_DeleteAccount get deleteaccount => $_getN(19);
@$pb.TagNumber(24)
set deleteaccount(ApplicationData_DeleteAccount v) { setField(24, v); }
@$pb.TagNumber(24)
$core.bool hasDeleteaccount() => $_has(23);
$core.bool hasDeleteaccount() => $_has(19);
@$pb.TagNumber(24)
void clearDeleteaccount() => clearField(24);
@$pb.TagNumber(24)
ApplicationData_DeleteAccount ensureDeleteaccount() => $_ensure(23);
ApplicationData_DeleteAccount ensureDeleteaccount() => $_ensure(19);
}
class Response_PreKey extends $pb.GeneratedMessage {

View file

@ -1,6 +1,6 @@
//
// Generated code. Do not modify.
// source: api/client_to_server.proto
// source: api/websocket/client_to_server.proto
//
// @dart = 2.12

View file

@ -1,6 +1,6 @@
//
// Generated code. Do not modify.
// source: api/client_to_server.proto
// source: api/websocket/client_to_server.proto
//
// @dart = 2.12
@ -139,10 +139,7 @@ const ApplicationData$json = {
{'1': 'textmessage', '3': 1, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.TextMessage', '9': 0, '10': 'textmessage'},
{'1': 'getuserbyusername', '3': 2, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.GetUserByUsername', '9': 0, '10': 'getuserbyusername'},
{'1': 'getprekeysbyuserid', '3': 3, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.GetPrekeysByUserId', '9': 0, '10': 'getprekeysbyuserid'},
{'1': 'getuploadtoken', '3': 4, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.GetUploadToken', '9': 0, '10': 'getuploadtoken'},
{'1': 'uploaddata', '3': 5, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.UploadData', '9': 0, '10': 'uploaddata'},
{'1': 'getuserbyid', '3': 6, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.GetUserById', '9': 0, '10': 'getuserbyid'},
{'1': 'downloaddata', '3': 7, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.DownloadData', '9': 0, '10': 'downloaddata'},
{'1': 'updategooglefcmtoken', '3': 8, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.UpdateGoogleFcmToken', '9': 0, '10': 'updategooglefcmtoken'},
{'1': 'getlocation', '3': 9, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.GetLocation', '9': 0, '10': 'getlocation'},
{'1': 'getcurrentplaninfos', '3': 10, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.GetCurrentPlanInfos', '9': 0, '10': 'getcurrentplaninfos'},
@ -156,12 +153,11 @@ const ApplicationData$json = {
{'1': 'removeadditionaluser', '3': 18, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.RemoveAdditionalUser', '9': 0, '10': 'removeadditionaluser'},
{'1': 'updateplanoptions', '3': 19, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.UpdatePlanOptions', '9': 0, '10': 'updateplanoptions'},
{'1': 'downloaddone', '3': 20, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.DownloadDone', '9': 0, '10': 'downloaddone'},
{'1': 'uploaddone', '3': 21, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.UploadDone', '9': 0, '10': 'uploaddone'},
{'1': 'getsignedprekeybyuserid', '3': 22, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.GetSignedPreKeyByUserId', '9': 0, '10': 'getsignedprekeybyuserid'},
{'1': 'updatesignedprekey', '3': 23, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.UpdateSignedPreKey', '9': 0, '10': 'updatesignedprekey'},
{'1': 'deleteaccount', '3': 24, '4': 1, '5': 11, '6': '.client_to_server.ApplicationData.DeleteAccount', '9': 0, '10': 'deleteaccount'},
],
'3': [ApplicationData_TextMessage$json, ApplicationData_GetUserByUsername$json, ApplicationData_UpdateGoogleFcmToken$json, ApplicationData_GetUserById$json, ApplicationData_RedeemVoucher$json, ApplicationData_SwitchToPayedPlan$json, ApplicationData_UpdatePlanOptions$json, ApplicationData_CreateVoucher$json, ApplicationData_GetLocation$json, ApplicationData_GetVouchers$json, ApplicationData_GetAvailablePlans$json, ApplicationData_GetAddAccountsInvites$json, ApplicationData_GetCurrentPlanInfos$json, ApplicationData_RedeemAdditionalCode$json, ApplicationData_RemoveAdditionalUser$json, ApplicationData_GetPrekeysByUserId$json, ApplicationData_GetSignedPreKeyByUserId$json, ApplicationData_UpdateSignedPreKey$json, ApplicationData_GetUploadToken$json, ApplicationData_UploadData$json, ApplicationData_UploadDone$json, ApplicationData_DownloadData$json, ApplicationData_DownloadDone$json, ApplicationData_DeleteAccount$json],
'3': [ApplicationData_TextMessage$json, ApplicationData_GetUserByUsername$json, ApplicationData_UpdateGoogleFcmToken$json, ApplicationData_GetUserById$json, ApplicationData_RedeemVoucher$json, ApplicationData_SwitchToPayedPlan$json, ApplicationData_UpdatePlanOptions$json, ApplicationData_CreateVoucher$json, ApplicationData_GetLocation$json, ApplicationData_GetVouchers$json, ApplicationData_GetAvailablePlans$json, ApplicationData_GetAddAccountsInvites$json, ApplicationData_GetCurrentPlanInfos$json, ApplicationData_RedeemAdditionalCode$json, ApplicationData_RemoveAdditionalUser$json, ApplicationData_GetPrekeysByUserId$json, ApplicationData_GetSignedPreKeyByUserId$json, ApplicationData_UpdateSignedPreKey$json, ApplicationData_DownloadDone$json, ApplicationData_DeleteAccount$json],
'8': [
{'1': 'ApplicationData'},
],
@ -305,46 +301,6 @@ const ApplicationData_UpdateSignedPreKey$json = {
],
};
@$core.Deprecated('Use applicationDataDescriptor instead')
const ApplicationData_GetUploadToken$json = {
'1': 'GetUploadToken',
'2': [
{'1': 'recipients_count', '3': 1, '4': 1, '5': 13, '10': 'recipientsCount'},
],
};
@$core.Deprecated('Use applicationDataDescriptor instead')
const ApplicationData_UploadData$json = {
'1': 'UploadData',
'2': [
{'1': 'upload_token', '3': 1, '4': 1, '5': 12, '10': 'uploadToken'},
{'1': 'offset', '3': 2, '4': 1, '5': 13, '10': 'offset'},
{'1': 'data', '3': 3, '4': 1, '5': 12, '10': 'data'},
{'1': 'checksum', '3': 4, '4': 1, '5': 12, '9': 0, '10': 'checksum', '17': true},
],
'8': [
{'1': '_checksum'},
],
};
@$core.Deprecated('Use applicationDataDescriptor instead')
const ApplicationData_UploadDone$json = {
'1': 'UploadDone',
'2': [
{'1': 'upload_token', '3': 1, '4': 1, '5': 12, '10': 'uploadToken'},
{'1': 'recipients_count', '3': 2, '4': 1, '5': 13, '10': 'recipientsCount'},
],
};
@$core.Deprecated('Use applicationDataDescriptor instead')
const ApplicationData_DownloadData$json = {
'1': 'DownloadData',
'2': [
{'1': 'download_token', '3': 1, '4': 1, '5': 12, '10': 'downloadToken'},
{'1': 'offset', '3': 2, '4': 1, '5': 13, '10': 'offset'},
],
};
@$core.Deprecated('Use applicationDataDescriptor instead')
const ApplicationData_DownloadDone$json = {
'1': 'DownloadDone',
@ -365,69 +321,56 @@ final $typed_data.Uint8List applicationDataDescriptor = $convert.base64Decode(
'Ynl1c2VybmFtZRgCIAEoCzIzLmNsaWVudF90b19zZXJ2ZXIuQXBwbGljYXRpb25EYXRhLkdldF'
'VzZXJCeVVzZXJuYW1lSABSEWdldHVzZXJieXVzZXJuYW1lEmYKEmdldHByZWtleXNieXVzZXJp'
'ZBgDIAEoCzI0LmNsaWVudF90b19zZXJ2ZXIuQXBwbGljYXRpb25EYXRhLkdldFByZWtleXNCeV'
'VzZXJJZEgAUhJnZXRwcmVrZXlzYnl1c2VyaWQSWgoOZ2V0dXBsb2FkdG9rZW4YBCABKAsyMC5j'
'bGllbnRfdG9fc2VydmVyLkFwcGxpY2F0aW9uRGF0YS5HZXRVcGxvYWRUb2tlbkgAUg5nZXR1cG'
'xvYWR0b2tlbhJOCgp1cGxvYWRkYXRhGAUgASgLMiwuY2xpZW50X3RvX3NlcnZlci5BcHBsaWNh'
'dGlvbkRhdGEuVXBsb2FkRGF0YUgAUgp1cGxvYWRkYXRhElEKC2dldHVzZXJieWlkGAYgASgLMi'
'0uY2xpZW50X3RvX3NlcnZlci5BcHBsaWNhdGlvbkRhdGEuR2V0VXNlckJ5SWRIAFILZ2V0dXNl'
'cmJ5aWQSVAoMZG93bmxvYWRkYXRhGAcgASgLMi4uY2xpZW50X3RvX3NlcnZlci5BcHBsaWNhdG'
'lvbkRhdGEuRG93bmxvYWREYXRhSABSDGRvd25sb2FkZGF0YRJsChR1cGRhdGVnb29nbGVmY210'
'b2tlbhgIIAEoCzI2LmNsaWVudF90b19zZXJ2ZXIuQXBwbGljYXRpb25EYXRhLlVwZGF0ZUdvb2'
'dsZUZjbVRva2VuSABSFHVwZGF0ZWdvb2dsZWZjbXRva2VuElEKC2dldGxvY2F0aW9uGAkgASgL'
'Mi0uY2xpZW50X3RvX3NlcnZlci5BcHBsaWNhdGlvbkRhdGEuR2V0TG9jYXRpb25IAFILZ2V0bG'
'9jYXRpb24SaQoTZ2V0Y3VycmVudHBsYW5pbmZvcxgKIAEoCzI1LmNsaWVudF90b19zZXJ2ZXIu'
'QXBwbGljYXRpb25EYXRhLkdldEN1cnJlbnRQbGFuSW5mb3NIAFITZ2V0Y3VycmVudHBsYW5pbm'
'ZvcxJXCg1yZWRlZW12b3VjaGVyGAsgASgLMi8uY2xpZW50X3RvX3NlcnZlci5BcHBsaWNhdGlv'
'bkRhdGEuUmVkZWVtVm91Y2hlckgAUg1yZWRlZW12b3VjaGVyEmMKEWdldGF2YWlsYWJsZXBsYW'
'5zGAwgASgLMjMuY2xpZW50X3RvX3NlcnZlci5BcHBsaWNhdGlvbkRhdGEuR2V0QXZhaWxhYmxl'
'UGxhbnNIAFIRZ2V0YXZhaWxhYmxlcGxhbnMSVwoNY3JlYXRldm91Y2hlchgNIAEoCzIvLmNsaW'
'VudF90b19zZXJ2ZXIuQXBwbGljYXRpb25EYXRhLkNyZWF0ZVZvdWNoZXJIAFINY3JlYXRldm91'
'Y2hlchJRCgtnZXR2b3VjaGVycxgOIAEoCzItLmNsaWVudF90b19zZXJ2ZXIuQXBwbGljYXRpb2'
'5EYXRhLkdldFZvdWNoZXJzSABSC2dldHZvdWNoZXJzEmMKEVN3aXRjaHRvcGF5ZWRwbGFuGA8g'
'ASgLMjMuY2xpZW50X3RvX3NlcnZlci5BcHBsaWNhdGlvbkRhdGEuU3dpdGNoVG9QYXllZFBsYW'
'5IAFIRU3dpdGNodG9wYXllZHBsYW4SbwoVZ2V0YWRkYWNjb3VudHNpbnZpdGVzGBAgASgLMjcu'
'Y2xpZW50X3RvX3NlcnZlci5BcHBsaWNhdGlvbkRhdGEuR2V0QWRkQWNjb3VudHNJbnZpdGVzSA'
'BSFWdldGFkZGFjY291bnRzaW52aXRlcxJsChRyZWRlZW1hZGRpdGlvbmFsY29kZRgRIAEoCzI2'
'LmNsaWVudF90b19zZXJ2ZXIuQXBwbGljYXRpb25EYXRhLlJlZGVlbUFkZGl0aW9uYWxDb2RlSA'
'BSFHJlZGVlbWFkZGl0aW9uYWxjb2RlEmwKFHJlbW92ZWFkZGl0aW9uYWx1c2VyGBIgASgLMjYu'
'Y2xpZW50X3RvX3NlcnZlci5BcHBsaWNhdGlvbkRhdGEuUmVtb3ZlQWRkaXRpb25hbFVzZXJIAF'
'IUcmVtb3ZlYWRkaXRpb25hbHVzZXISYwoRdXBkYXRlcGxhbm9wdGlvbnMYEyABKAsyMy5jbGll'
'bnRfdG9fc2VydmVyLkFwcGxpY2F0aW9uRGF0YS5VcGRhdGVQbGFuT3B0aW9uc0gAUhF1cGRhdG'
'VwbGFub3B0aW9ucxJUCgxkb3dubG9hZGRvbmUYFCABKAsyLi5jbGllbnRfdG9fc2VydmVyLkFw'
'cGxpY2F0aW9uRGF0YS5Eb3dubG9hZERvbmVIAFIMZG93bmxvYWRkb25lEk4KCnVwbG9hZGRvbm'
'UYFSABKAsyLC5jbGllbnRfdG9fc2VydmVyLkFwcGxpY2F0aW9uRGF0YS5VcGxvYWREb25lSABS'
'CnVwbG9hZGRvbmUSdQoXZ2V0c2lnbmVkcHJla2V5Ynl1c2VyaWQYFiABKAsyOS5jbGllbnRfdG'
'9fc2VydmVyLkFwcGxpY2F0aW9uRGF0YS5HZXRTaWduZWRQcmVLZXlCeVVzZXJJZEgAUhdnZXRz'
'aWduZWRwcmVrZXlieXVzZXJpZBJmChJ1cGRhdGVzaWduZWRwcmVrZXkYFyABKAsyNC5jbGllbn'
'RfdG9fc2VydmVyLkFwcGxpY2F0aW9uRGF0YS5VcGRhdGVTaWduZWRQcmVLZXlIAFISdXBkYXRl'
'c2lnbmVkcHJla2V5ElcKDWRlbGV0ZWFjY291bnQYGCABKAsyLy5jbGllbnRfdG9fc2VydmVyLk'
'FwcGxpY2F0aW9uRGF0YS5EZWxldGVBY2NvdW50SABSDWRlbGV0ZWFjY291bnQaagoLVGV4dE1l'
'c3NhZ2USFwoHdXNlcl9pZBgBIAEoA1IGdXNlcklkEhIKBGJvZHkYAyABKAxSBGJvZHkSIAoJcH'
'VzaF9kYXRhGAQgASgMSABSCHB1c2hEYXRhiAEBQgwKCl9wdXNoX2RhdGEaLwoRR2V0VXNlckJ5'
'VXNlcm5hbWUSGgoIdXNlcm5hbWUYASABKAlSCHVzZXJuYW1lGjUKFFVwZGF0ZUdvb2dsZUZjbV'
'Rva2VuEh0KCmdvb2dsZV9mY20YASABKAlSCWdvb2dsZUZjbRomCgtHZXRVc2VyQnlJZBIXCgd1'
'c2VyX2lkGAEgASgDUgZ1c2VySWQaKQoNUmVkZWVtVm91Y2hlchIYCgd2b3VjaGVyGAEgASgJUg'
'd2b3VjaGVyGnAKEVN3aXRjaFRvUGF5ZWRQbGFuEhcKB3BsYW5faWQYASABKAlSBnBsYW5JZBIf'
'CgtwYXlfbW9udGhseRgCIAEoCFIKcGF5TW9udGhseRIhCgxhdXRvX3JlbmV3YWwYAyABKAhSC2'
'F1dG9SZW5ld2FsGjYKEVVwZGF0ZVBsYW5PcHRpb25zEiEKDGF1dG9fcmVuZXdhbBgBIAEoCFIL'
'YXV0b1JlbmV3YWwaMAoNQ3JlYXRlVm91Y2hlchIfCgt2YWx1ZV9jZW50cxgBIAEoDVIKdmFsdW'
'VDZW50cxoNCgtHZXRMb2NhdGlvbhoNCgtHZXRWb3VjaGVycxoTChFHZXRBdmFpbGFibGVQbGFu'
'cxoXChVHZXRBZGRBY2NvdW50c0ludml0ZXMaFQoTR2V0Q3VycmVudFBsYW5JbmZvcxo3ChRSZW'
'RlZW1BZGRpdGlvbmFsQ29kZRIfCgtpbnZpdGVfY29kZRgCIAEoCVIKaW52aXRlQ29kZRovChRS'
'ZW1vdmVBZGRpdGlvbmFsVXNlchIXCgd1c2VyX2lkGAEgASgDUgZ1c2VySWQaLQoSR2V0UHJla2'
'V5c0J5VXNlcklkEhcKB3VzZXJfaWQYASABKANSBnVzZXJJZBoyChdHZXRTaWduZWRQcmVLZXlC'
'eVVzZXJJZBIXCgd1c2VyX2lkGAEgASgDUgZ1c2VySWQamwEKElVwZGF0ZVNpZ25lZFByZUtleR'
'IoChBzaWduZWRfcHJla2V5X2lkGAEgASgDUg5zaWduZWRQcmVrZXlJZBIjCg1zaWduZWRfcHJl'
'a2V5GAIgASgMUgxzaWduZWRQcmVrZXkSNgoXc2lnbmVkX3ByZWtleV9zaWduYXR1cmUYAyABKA'
'xSFXNpZ25lZFByZWtleVNpZ25hdHVyZRo7Cg5HZXRVcGxvYWRUb2tlbhIpChByZWNpcGllbnRz'
'X2NvdW50GAEgASgNUg9yZWNpcGllbnRzQ291bnQaiQEKClVwbG9hZERhdGESIQoMdXBsb2FkX3'
'Rva2VuGAEgASgMUgt1cGxvYWRUb2tlbhIWCgZvZmZzZXQYAiABKA1SBm9mZnNldBISCgRkYXRh'
'GAMgASgMUgRkYXRhEh8KCGNoZWNrc3VtGAQgASgMSABSCGNoZWNrc3VtiAEBQgsKCV9jaGVja3'
'N1bRpaCgpVcGxvYWREb25lEiEKDHVwbG9hZF90b2tlbhgBIAEoDFILdXBsb2FkVG9rZW4SKQoQ'
'cmVjaXBpZW50c19jb3VudBgCIAEoDVIPcmVjaXBpZW50c0NvdW50Gk0KDERvd25sb2FkRGF0YR'
'IlCg5kb3dubG9hZF90b2tlbhgBIAEoDFINZG93bmxvYWRUb2tlbhIWCgZvZmZzZXQYAiABKA1S'
'Bm9mZnNldBo1CgxEb3dubG9hZERvbmUSJQoOZG93bmxvYWRfdG9rZW4YASABKAxSDWRvd25sb2'
'FkVG9rZW4aDwoNRGVsZXRlQWNjb3VudEIRCg9BcHBsaWNhdGlvbkRhdGE=');
'VzZXJJZEgAUhJnZXRwcmVrZXlzYnl1c2VyaWQSUQoLZ2V0dXNlcmJ5aWQYBiABKAsyLS5jbGll'
'bnRfdG9fc2VydmVyLkFwcGxpY2F0aW9uRGF0YS5HZXRVc2VyQnlJZEgAUgtnZXR1c2VyYnlpZB'
'JsChR1cGRhdGVnb29nbGVmY210b2tlbhgIIAEoCzI2LmNsaWVudF90b19zZXJ2ZXIuQXBwbGlj'
'YXRpb25EYXRhLlVwZGF0ZUdvb2dsZUZjbVRva2VuSABSFHVwZGF0ZWdvb2dsZWZjbXRva2VuEl'
'EKC2dldGxvY2F0aW9uGAkgASgLMi0uY2xpZW50X3RvX3NlcnZlci5BcHBsaWNhdGlvbkRhdGEu'
'R2V0TG9jYXRpb25IAFILZ2V0bG9jYXRpb24SaQoTZ2V0Y3VycmVudHBsYW5pbmZvcxgKIAEoCz'
'I1LmNsaWVudF90b19zZXJ2ZXIuQXBwbGljYXRpb25EYXRhLkdldEN1cnJlbnRQbGFuSW5mb3NI'
'AFITZ2V0Y3VycmVudHBsYW5pbmZvcxJXCg1yZWRlZW12b3VjaGVyGAsgASgLMi8uY2xpZW50X3'
'RvX3NlcnZlci5BcHBsaWNhdGlvbkRhdGEuUmVkZWVtVm91Y2hlckgAUg1yZWRlZW12b3VjaGVy'
'EmMKEWdldGF2YWlsYWJsZXBsYW5zGAwgASgLMjMuY2xpZW50X3RvX3NlcnZlci5BcHBsaWNhdG'
'lvbkRhdGEuR2V0QXZhaWxhYmxlUGxhbnNIAFIRZ2V0YXZhaWxhYmxlcGxhbnMSVwoNY3JlYXRl'
'dm91Y2hlchgNIAEoCzIvLmNsaWVudF90b19zZXJ2ZXIuQXBwbGljYXRpb25EYXRhLkNyZWF0ZV'
'ZvdWNoZXJIAFINY3JlYXRldm91Y2hlchJRCgtnZXR2b3VjaGVycxgOIAEoCzItLmNsaWVudF90'
'b19zZXJ2ZXIuQXBwbGljYXRpb25EYXRhLkdldFZvdWNoZXJzSABSC2dldHZvdWNoZXJzEmMKEV'
'N3aXRjaHRvcGF5ZWRwbGFuGA8gASgLMjMuY2xpZW50X3RvX3NlcnZlci5BcHBsaWNhdGlvbkRh'
'dGEuU3dpdGNoVG9QYXllZFBsYW5IAFIRU3dpdGNodG9wYXllZHBsYW4SbwoVZ2V0YWRkYWNjb3'
'VudHNpbnZpdGVzGBAgASgLMjcuY2xpZW50X3RvX3NlcnZlci5BcHBsaWNhdGlvbkRhdGEuR2V0'
'QWRkQWNjb3VudHNJbnZpdGVzSABSFWdldGFkZGFjY291bnRzaW52aXRlcxJsChRyZWRlZW1hZG'
'RpdGlvbmFsY29kZRgRIAEoCzI2LmNsaWVudF90b19zZXJ2ZXIuQXBwbGljYXRpb25EYXRhLlJl'
'ZGVlbUFkZGl0aW9uYWxDb2RlSABSFHJlZGVlbWFkZGl0aW9uYWxjb2RlEmwKFHJlbW92ZWFkZG'
'l0aW9uYWx1c2VyGBIgASgLMjYuY2xpZW50X3RvX3NlcnZlci5BcHBsaWNhdGlvbkRhdGEuUmVt'
'b3ZlQWRkaXRpb25hbFVzZXJIAFIUcmVtb3ZlYWRkaXRpb25hbHVzZXISYwoRdXBkYXRlcGxhbm'
'9wdGlvbnMYEyABKAsyMy5jbGllbnRfdG9fc2VydmVyLkFwcGxpY2F0aW9uRGF0YS5VcGRhdGVQ'
'bGFuT3B0aW9uc0gAUhF1cGRhdGVwbGFub3B0aW9ucxJUCgxkb3dubG9hZGRvbmUYFCABKAsyLi'
'5jbGllbnRfdG9fc2VydmVyLkFwcGxpY2F0aW9uRGF0YS5Eb3dubG9hZERvbmVIAFIMZG93bmxv'
'YWRkb25lEnUKF2dldHNpZ25lZHByZWtleWJ5dXNlcmlkGBYgASgLMjkuY2xpZW50X3RvX3Nlcn'
'Zlci5BcHBsaWNhdGlvbkRhdGEuR2V0U2lnbmVkUHJlS2V5QnlVc2VySWRIAFIXZ2V0c2lnbmVk'
'cHJla2V5Ynl1c2VyaWQSZgoSdXBkYXRlc2lnbmVkcHJla2V5GBcgASgLMjQuY2xpZW50X3RvX3'
'NlcnZlci5BcHBsaWNhdGlvbkRhdGEuVXBkYXRlU2lnbmVkUHJlS2V5SABSEnVwZGF0ZXNpZ25l'
'ZHByZWtleRJXCg1kZWxldGVhY2NvdW50GBggASgLMi8uY2xpZW50X3RvX3NlcnZlci5BcHBsaW'
'NhdGlvbkRhdGEuRGVsZXRlQWNjb3VudEgAUg1kZWxldGVhY2NvdW50GmoKC1RleHRNZXNzYWdl'
'EhcKB3VzZXJfaWQYASABKANSBnVzZXJJZBISCgRib2R5GAMgASgMUgRib2R5EiAKCXB1c2hfZG'
'F0YRgEIAEoDEgAUghwdXNoRGF0YYgBAUIMCgpfcHVzaF9kYXRhGi8KEUdldFVzZXJCeVVzZXJu'
'YW1lEhoKCHVzZXJuYW1lGAEgASgJUgh1c2VybmFtZRo1ChRVcGRhdGVHb29nbGVGY21Ub2tlbh'
'IdCgpnb29nbGVfZmNtGAEgASgJUglnb29nbGVGY20aJgoLR2V0VXNlckJ5SWQSFwoHdXNlcl9p'
'ZBgBIAEoA1IGdXNlcklkGikKDVJlZGVlbVZvdWNoZXISGAoHdm91Y2hlchgBIAEoCVIHdm91Y2'
'hlchpwChFTd2l0Y2hUb1BheWVkUGxhbhIXCgdwbGFuX2lkGAEgASgJUgZwbGFuSWQSHwoLcGF5'
'X21vbnRobHkYAiABKAhSCnBheU1vbnRobHkSIQoMYXV0b19yZW5ld2FsGAMgASgIUgthdXRvUm'
'VuZXdhbBo2ChFVcGRhdGVQbGFuT3B0aW9ucxIhCgxhdXRvX3JlbmV3YWwYASABKAhSC2F1dG9S'
'ZW5ld2FsGjAKDUNyZWF0ZVZvdWNoZXISHwoLdmFsdWVfY2VudHMYASABKA1SCnZhbHVlQ2VudH'
'MaDQoLR2V0TG9jYXRpb24aDQoLR2V0Vm91Y2hlcnMaEwoRR2V0QXZhaWxhYmxlUGxhbnMaFwoV'
'R2V0QWRkQWNjb3VudHNJbnZpdGVzGhUKE0dldEN1cnJlbnRQbGFuSW5mb3MaNwoUUmVkZWVtQW'
'RkaXRpb25hbENvZGUSHwoLaW52aXRlX2NvZGUYAiABKAlSCmludml0ZUNvZGUaLwoUUmVtb3Zl'
'QWRkaXRpb25hbFVzZXISFwoHdXNlcl9pZBgBIAEoA1IGdXNlcklkGi0KEkdldFByZWtleXNCeV'
'VzZXJJZBIXCgd1c2VyX2lkGAEgASgDUgZ1c2VySWQaMgoXR2V0U2lnbmVkUHJlS2V5QnlVc2Vy'
'SWQSFwoHdXNlcl9pZBgBIAEoA1IGdXNlcklkGpsBChJVcGRhdGVTaWduZWRQcmVLZXkSKAoQc2'
'lnbmVkX3ByZWtleV9pZBgBIAEoA1IOc2lnbmVkUHJla2V5SWQSIwoNc2lnbmVkX3ByZWtleRgC'
'IAEoDFIMc2lnbmVkUHJla2V5EjYKF3NpZ25lZF9wcmVrZXlfc2lnbmF0dXJlGAMgASgMUhVzaW'
'duZWRQcmVrZXlTaWduYXR1cmUaNQoMRG93bmxvYWREb25lEiUKDmRvd25sb2FkX3Rva2VuGAEg'
'ASgMUg1kb3dubG9hZFRva2VuGg8KDURlbGV0ZUFjY291bnRCEQoPQXBwbGljYXRpb25EYXRh');
@$core.Deprecated('Use responseDescriptor instead')
const Response$json = {

View file

@ -1,6 +1,6 @@
//
// Generated code. Do not modify.
// source: api/client_to_server.proto
// source: api/websocket/client_to_server.proto
//
// @dart = 2.12

View file

@ -1,6 +1,6 @@
//
// Generated code. Do not modify.
// source: api/error.proto
// source: api/websocket/error.proto
//
// @dart = 2.12

View file

@ -1,6 +1,6 @@
//
// Generated code. Do not modify.
// source: api/error.proto
// source: api/websocket/error.proto
//
// @dart = 2.12

View file

@ -1,6 +1,6 @@
//
// Generated code. Do not modify.
// source: api/error.proto
// source: api/websocket/error.proto
//
// @dart = 2.12

View file

@ -1,6 +1,6 @@
//
// Generated code. Do not modify.
// source: api/error.proto
// source: api/websocket/error.proto
//
// @dart = 2.12

View file

@ -1,6 +1,6 @@
//
// Generated code. Do not modify.
// source: api/server_to_client.proto
// source: api/websocket/server_to_client.proto
//
// @dart = 2.12
@ -88,7 +88,6 @@ enum V0_Kind {
response,
newMessage,
requestNewPreKeys,
downloaddata,
error,
notSet
}
@ -99,7 +98,6 @@ class V0 extends $pb.GeneratedMessage {
Response? response,
NewMessage? newMessage,
$core.bool? requestNewPreKeys,
DownloadData? downloaddata,
$0.ErrorCode? error,
}) {
final $result = create();
@ -115,9 +113,6 @@ class V0 extends $pb.GeneratedMessage {
if (requestNewPreKeys != null) {
$result.requestNewPreKeys = requestNewPreKeys;
}
if (downloaddata != null) {
$result.downloaddata = downloaddata;
}
if (error != null) {
$result.error = error;
}
@ -131,17 +126,15 @@ class V0 extends $pb.GeneratedMessage {
2 : V0_Kind.response,
3 : V0_Kind.newMessage,
4 : V0_Kind.requestNewPreKeys,
5 : V0_Kind.downloaddata,
6 : V0_Kind.error,
0 : V0_Kind.notSet
};
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'V0', package: const $pb.PackageName(_omitMessageNames ? '' : 'server_to_client'), createEmptyInstance: create)
..oo(0, [2, 3, 4, 5, 6])
..oo(0, [2, 3, 4, 6])
..a<$fixnum.Int64>(1, _omitFieldNames ? '' : 'seq', $pb.PbFieldType.OU6, defaultOrMaker: $fixnum.Int64.ZERO)
..aOM<Response>(2, _omitFieldNames ? '' : 'response', subBuilder: Response.create)
..aOM<NewMessage>(3, _omitFieldNames ? '' : 'newMessage', protoName: 'newMessage', subBuilder: NewMessage.create)
..aOB(4, _omitFieldNames ? '' : 'RequestNewPreKeys', protoName: 'RequestNewPreKeys')
..aOM<DownloadData>(5, _omitFieldNames ? '' : 'downloaddata', subBuilder: DownloadData.create)
..e<$0.ErrorCode>(6, _omitFieldNames ? '' : 'error', $pb.PbFieldType.OE, defaultOrMaker: $0.ErrorCode.Unknown, valueOf: $0.ErrorCode.valueOf, enumValues: $0.ErrorCode.values)
..hasRequiredFields = false
;
@ -210,23 +203,12 @@ class V0 extends $pb.GeneratedMessage {
@$pb.TagNumber(4)
void clearRequestNewPreKeys() => clearField(4);
@$pb.TagNumber(5)
DownloadData get downloaddata => $_getN(4);
@$pb.TagNumber(5)
set downloaddata(DownloadData v) { setField(5, v); }
@$pb.TagNumber(5)
$core.bool hasDownloaddata() => $_has(4);
@$pb.TagNumber(5)
void clearDownloaddata() => clearField(5);
@$pb.TagNumber(5)
DownloadData ensureDownloaddata() => $_ensure(4);
@$pb.TagNumber(6)
$0.ErrorCode get error => $_getN(5);
$0.ErrorCode get error => $_getN(4);
@$pb.TagNumber(6)
set error($0.ErrorCode v) { setField(6, v); }
@$pb.TagNumber(6)
$core.bool hasError() => $_has(5);
$core.bool hasError() => $_has(4);
@$pb.TagNumber(6)
void clearError() => clearField(6);
}
@ -295,98 +277,6 @@ class NewMessage extends $pb.GeneratedMessage {
void clearFromUserId() => clearField(2);
}
class DownloadData extends $pb.GeneratedMessage {
factory DownloadData({
$core.List<$core.int>? downloadToken,
$core.int? offset,
$core.List<$core.int>? data,
$core.bool? fin,
}) {
final $result = create();
if (downloadToken != null) {
$result.downloadToken = downloadToken;
}
if (offset != null) {
$result.offset = offset;
}
if (data != null) {
$result.data = data;
}
if (fin != null) {
$result.fin = fin;
}
return $result;
}
DownloadData._() : super();
factory DownloadData.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);
factory DownloadData.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'DownloadData', package: const $pb.PackageName(_omitMessageNames ? '' : 'server_to_client'), createEmptyInstance: create)
..a<$core.List<$core.int>>(1, _omitFieldNames ? '' : 'downloadToken', $pb.PbFieldType.OY)
..a<$core.int>(2, _omitFieldNames ? '' : 'offset', $pb.PbFieldType.OU3)
..a<$core.List<$core.int>>(3, _omitFieldNames ? '' : 'data', $pb.PbFieldType.OY)
..aOB(4, _omitFieldNames ? '' : 'fin')
..hasRequiredFields = false
;
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
DownloadData clone() => DownloadData()..mergeFromMessage(this);
@$core.Deprecated(
'Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
DownloadData copyWith(void Function(DownloadData) updates) => super.copyWith((message) => updates(message as DownloadData)) as DownloadData;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static DownloadData create() => DownloadData._();
DownloadData createEmptyInstance() => create();
static $pb.PbList<DownloadData> createRepeated() => $pb.PbList<DownloadData>();
@$core.pragma('dart2js:noInline')
static DownloadData getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<DownloadData>(create);
static DownloadData? _defaultInstance;
@$pb.TagNumber(1)
$core.List<$core.int> get downloadToken => $_getN(0);
@$pb.TagNumber(1)
set downloadToken($core.List<$core.int> v) { $_setBytes(0, v); }
@$pb.TagNumber(1)
$core.bool hasDownloadToken() => $_has(0);
@$pb.TagNumber(1)
void clearDownloadToken() => clearField(1);
@$pb.TagNumber(2)
$core.int get offset => $_getIZ(1);
@$pb.TagNumber(2)
set offset($core.int v) { $_setUnsignedInt32(1, v); }
@$pb.TagNumber(2)
$core.bool hasOffset() => $_has(1);
@$pb.TagNumber(2)
void clearOffset() => clearField(2);
@$pb.TagNumber(3)
$core.List<$core.int> get data => $_getN(2);
@$pb.TagNumber(3)
set data($core.List<$core.int> v) { $_setBytes(2, v); }
@$pb.TagNumber(3)
$core.bool hasData() => $_has(2);
@$pb.TagNumber(3)
void clearData() => clearField(3);
@$pb.TagNumber(4)
$core.bool get fin => $_getBF(3);
@$pb.TagNumber(4)
set fin($core.bool v) { $_setBool(3, v); }
@$pb.TagNumber(4)
$core.bool hasFin() => $_has(3);
@$pb.TagNumber(4)
void clearFin() => clearField(4);
}
class Response_Authenticated extends $pb.GeneratedMessage {
factory Response_Authenticated({
$core.String? plan,

View file

@ -1,6 +1,6 @@
//
// Generated code. Do not modify.
// source: api/server_to_client.proto
// source: api/websocket/server_to_client.proto
//
// @dart = 2.12

View file

@ -1,6 +1,6 @@
//
// Generated code. Do not modify.
// source: api/server_to_client.proto
// source: api/websocket/server_to_client.proto
//
// @dart = 2.12
@ -37,7 +37,6 @@ const V0$json = {
{'1': 'response', '3': 2, '4': 1, '5': 11, '6': '.server_to_client.Response', '9': 0, '10': 'response'},
{'1': 'newMessage', '3': 3, '4': 1, '5': 11, '6': '.server_to_client.NewMessage', '9': 0, '10': 'newMessage'},
{'1': 'RequestNewPreKeys', '3': 4, '4': 1, '5': 8, '9': 0, '10': 'RequestNewPreKeys'},
{'1': 'downloaddata', '3': 5, '4': 1, '5': 11, '6': '.server_to_client.DownloadData', '9': 0, '10': 'downloaddata'},
{'1': 'error', '3': 6, '4': 1, '5': 14, '6': '.error.ErrorCode', '9': 0, '10': 'error'},
],
'8': [
@ -50,9 +49,8 @@ final $typed_data.Uint8List v0Descriptor = $convert.base64Decode(
'CgJWMBIQCgNzZXEYASABKARSA3NlcRI4CghyZXNwb25zZRgCIAEoCzIaLnNlcnZlcl90b19jbG'
'llbnQuUmVzcG9uc2VIAFIIcmVzcG9uc2USPgoKbmV3TWVzc2FnZRgDIAEoCzIcLnNlcnZlcl90'
'b19jbGllbnQuTmV3TWVzc2FnZUgAUgpuZXdNZXNzYWdlEi4KEVJlcXVlc3ROZXdQcmVLZXlzGA'
'QgASgISABSEVJlcXVlc3ROZXdQcmVLZXlzEkQKDGRvd25sb2FkZGF0YRgFIAEoCzIeLnNlcnZl'
'cl90b19jbGllbnQuRG93bmxvYWREYXRhSABSDGRvd25sb2FkZGF0YRIoCgVlcnJvchgGIAEoDj'
'IQLmVycm9yLkVycm9yQ29kZUgAUgVlcnJvckIGCgRLaW5k');
'QgASgISABSEVJlcXVlc3ROZXdQcmVLZXlzEigKBWVycm9yGAYgASgOMhAuZXJyb3IuRXJyb3JD'
'b2RlSABSBWVycm9yQgYKBEtpbmQ=');
@$core.Deprecated('Use newMessageDescriptor instead')
const NewMessage$json = {
@ -68,23 +66,6 @@ final $typed_data.Uint8List newMessageDescriptor = $convert.base64Decode(
'CgpOZXdNZXNzYWdlEiAKDGZyb21fdXNlcl9pZBgCIAEoA1IKZnJvbVVzZXJJZBISCgRib2R5GA'
'EgASgMUgRib2R5');
@$core.Deprecated('Use downloadDataDescriptor instead')
const DownloadData$json = {
'1': 'DownloadData',
'2': [
{'1': 'download_token', '3': 1, '4': 1, '5': 12, '10': 'downloadToken'},
{'1': 'offset', '3': 2, '4': 1, '5': 13, '10': 'offset'},
{'1': 'data', '3': 3, '4': 1, '5': 12, '10': 'data'},
{'1': 'fin', '3': 4, '4': 1, '5': 8, '10': 'fin'},
],
};
/// Descriptor for `DownloadData`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List downloadDataDescriptor = $convert.base64Decode(
'CgxEb3dubG9hZERhdGESJQoOZG93bmxvYWRfdG9rZW4YASABKAxSDWRvd25sb2FkVG9rZW4SFg'
'oGb2Zmc2V0GAIgASgNUgZvZmZzZXQSEgoEZGF0YRgDIAEoDFIEZGF0YRIQCgNmaW4YBCABKAhS'
'A2Zpbg==');
@$core.Deprecated('Use responseDescriptor instead')
const Response$json = {
'1': 'Response',

View file

@ -1,6 +1,6 @@
//
// Generated code. Do not modify.
// source: api/server_to_client.proto
// source: api/websocket/server_to_client.proto
//
// @dart = 2.12

View file

@ -13,11 +13,11 @@ import 'package:twonly/globals.dart';
import 'package:twonly/app.dart';
import 'package:twonly/src/database/twonly_database.dart';
import 'package:twonly/src/model/json/userdata.dart';
import 'package:twonly/src/model/protobuf/api/client_to_server.pbserver.dart';
import 'package:twonly/src/model/protobuf/api/error.pb.dart';
import 'package:twonly/src/model/protobuf/api/server_to_client.pb.dart'
import 'package:twonly/src/model/protobuf/api/websocket/client_to_server.pbserver.dart';
import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart'
as server;
import 'package:twonly/src/model/protobuf/api/server_to_client.pbserver.dart';
import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pbserver.dart';
import 'package:twonly/src/services/api/messages.dart';
import 'package:twonly/src/services/api/utils.dart';
import 'package:twonly/src/services/api/media_received.dart';
@ -435,25 +435,6 @@ class ApiService {
return await sendRequestSync(req, contactId: userId);
}
Future<Result> getUploadToken(int recipientsCount) async {
var get = ApplicationData_GetUploadToken()
..recipientsCount = recipientsCount;
var appData = ApplicationData()..getuploadtoken = get;
var req = createClientToServerFromApplicationData(appData);
return await sendRequestSync(req);
}
Future<Result> getDownloadTokens(List<int> uploadToken, int recipientsCount,
{bool ensureRetransmission = false}) async {
var get = ApplicationData_UploadDone()
..uploadToken = uploadToken
..recipientsCount = recipientsCount;
var appData = ApplicationData()..uploaddone = get;
var req = createClientToServerFromApplicationData(appData);
return await sendRequestSync(req,
ensureRetransmission: ensureRetransmission);
}
Future<Result> downloadDone(List<int> token) async {
var get = ApplicationData_DownloadDone()..downloadToken = token;
var appData = ApplicationData()..downloaddone = get;
@ -468,21 +449,6 @@ class ApiService {
return await sendRequestSync(req);
}
Future<Result> uploadData(List<int> uploadToken, Uint8List data, int offset,
List<int>? checksum) async {
var get = ApplicationData_UploadData()
..uploadToken = uploadToken
..data = data
..offset = offset;
if (checksum != null) {
get.checksum = checksum;
}
var appData = ApplicationData()..uploaddata = get;
var req = createClientToServerFromApplicationData(appData);
final result = await sendRequestSync(req);
return result;
}
Future<Result> getUserData(String username) async {
var get = ApplicationData_GetUserByUsername()..username = username;
var appData = ApplicationData()..getuserbyusername = get;

View file

@ -1,5 +1,9 @@
import 'dart:async';
import 'dart:convert';
import 'dart:isolate';
import 'dart:math';
import 'package:fixnum/fixnum.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:http/http.dart' as http;
import 'dart:io';
@ -15,12 +19,11 @@ import 'package:twonly/src/database/tables/media_uploads_table.dart';
import 'package:twonly/src/database/tables/messages_table.dart';
import 'package:twonly/src/database/twonly_database.dart';
import 'package:twonly/src/model/json/message.dart';
import 'package:twonly/src/model/protobuf/api/error.pb.dart';
import 'package:twonly/src/model/protobuf/api/server_to_client.pb.dart';
import 'package:twonly/src/services/api/messages.dart';
import 'package:twonly/src/services/api/utils.dart';
import 'package:twonly/src/model/protobuf/api/http/http_requests.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart';
import 'package:twonly/src/services/api/media_received.dart';
import 'package:twonly/src/services/notification.service.dart';
import 'package:twonly/src/services/signal/encryption.signal.dart';
import 'package:twonly/src/utils/log.dart';
import 'package:twonly/src/utils/misc.dart';
import 'package:twonly/src/utils/storage.dart';
@ -73,7 +76,6 @@ Future<bool> checkForFailedUploads() async {
int affectedRows = await twonlyDB.mediaUploadsDao.updateMediaUpload(
message.mediaUploadId!,
MediaUploadsCompanion(
uploadTokens: Value(null), // reupload them
state: Value(UploadState.pending),
encryptionData: Value(
null, // start from scratch e.q. encrypt the files again if already happen
@ -119,14 +121,6 @@ Future retryMediaUpload(bool appRestarted, {int maxRetries = 3}) async {
if (appRestarted) {
/// When the app got restarted and the messageIds or the metadata is not
/// set then the app was closed before the images was send.
// the media upload was canceled,
if (mediaFile.uploadTokens != null) {
/// the file was already uploaded.
/// notify the server to remove the upload
apiService.getDownloadTokens(
mediaFile.uploadTokens!.uploadToken, 0);
}
await twonlyDB.mediaUploadsDao
.deleteMediaUpload(mediaFile.mediaUploadId);
Log.info(
@ -192,7 +186,6 @@ Future<Uint8List> addOrModifyImageToUpload(
mediaUploadId,
MediaUploadsCompanion(
encryptionData: Value(null),
uploadTokens: Value(null),
),
);
return imageBytesCompressed;
@ -202,7 +195,7 @@ Future handlePreProcessingState(MediaUpload media) async {
try {
final imageHandler = readMediaFile(media.mediaUploadId, "png");
final videoHandler = compressVideoIfExists(media.mediaUploadId);
await encryptAndPreUploadMediaFiles(
await encryptMediaFiles(
media.mediaUploadId,
imageHandler,
videoHandler,
@ -213,7 +206,7 @@ Future handlePreProcessingState(MediaUpload media) async {
}
}
Future encryptAndPreUploadMediaFiles(
Future encryptMediaFiles(
int mediaUploadId,
Future imageHandler,
Future<bool>? videoHandler,
@ -237,10 +230,12 @@ Future encryptAndPreUploadMediaFiles(
state.encryptionKey = secretKey.bytes;
state.encryptionNonce = xchacha20.newNonce();
final secretBox = await xchacha20.encrypt(
final secretBox = await Isolate.run(
() => xchacha20.encrypt(
dataToEncrypt,
secretKey: secretKey,
nonce: state.encryptionNonce,
),
);
state.encryptionMac = secretBox.mac.bytes;
@ -262,7 +257,7 @@ Future encryptAndPreUploadMediaFiles(
encryptionData: Value(state),
),
);
await handleNextMediaUploadSteps(mediaUploadId);
handleNextMediaUploadSteps(mediaUploadId);
}
Future finalizeUpload(int mediaUploadId, List<int> contactIds,
@ -318,6 +313,8 @@ Future finalizeUpload(int mediaUploadId, List<int> contactIds,
metadata: Value(metadata),
),
);
handleNextMediaUploadSteps(mediaUploadId);
}
final lockingHandleNextMediaUploadStep = Mutex();
@ -340,27 +337,12 @@ Future handleNextMediaUploadSteps(int mediaUploadId) async {
return false;
}
if (mediaUpload.uploadTokens == null) {
/// the files are not yet uploaded, handle upload...
/// if the upload succeed the uploadTokens was updated and this function
/// can be called again to processed the upload done
return await handleMediaUpload(mediaUploadId);
}
if (mediaUpload.messageIds == null || mediaUpload.metadata == null) {
/// the finalize function was not called yet...
return false;
}
// at this point the media file is uploaded and the receiver are known.
final downloadTokens = mediaUpload.uploadTokens!.downloadTokens;
if (downloadTokens.isEmpty) {
/// there are no download tokens yet, request them...
return await handleUploadDone(mediaUpload);
}
// download tokens are known so send the media file to the receivers
await handleNotifyReceiver(mediaUpload);
return await handleMediaUpload(mediaUpload);
} catch (e) {
Log.error("Non recoverable error while sending media file: $e");
await handleUploadError(mediaUpload);
@ -392,39 +374,80 @@ Future handleUploadError(MediaUpload mediaUpload) async {
await twonlyDB.mediaUploadsDao.deleteMediaUpload(mediaUpload.mediaUploadId);
}
Future<bool> handleUploadDone(MediaUpload media) async {
Result res = await apiService.getDownloadTokens(
media.uploadTokens!.uploadToken, media.messageIds!.length);
Future<bool> handleMediaUpload(MediaUpload media) async {
Uint8List bytesToUpload =
await readMediaFile(media.mediaUploadId, "encrypted");
if (res.isError || !res.value.hasDownloadtokens()) {
if (res.isError) {
if (res.error == ErrorCode.PlanNotAllowed) {
throw Exception("PlanNotAllowed");
}
if (res.error == ErrorCode.PlanLimitReached) {
throw Exception("PlanLimitReached");
}
}
Log.error("Upload done will be tried again when reconnected to server!");
return false;
}
if (media.messageIds == null) return false;
Response_DownloadTokens tokens = res.value.downloadtokens;
var token = MediaUploadTokens();
token.uploadToken = media.uploadTokens!.uploadToken;
token.downloadTokens = tokens.downloadTokens;
List<Uint8List> downloadTokens =
createDownloadTokens(media.messageIds!.length);
await twonlyDB.mediaUploadsDao.updateMediaUpload(
media.mediaUploadId,
MediaUploadsCompanion(
uploadTokens: Value(token),
List<TextMessage> messagesOnSuccess = [];
for (var i = 0; i < media.messageIds!.length; i++) {
MessageJson msg = MessageJson(
kind: MessageKind.media,
messageId: media.messageIds![i],
content: MediaMessageContent(
downloadToken: downloadTokens[i],
maxShowTime: media.metadata!.maxShowTime,
isRealTwonly: media.metadata!.isRealTwonly,
isVideo: media.metadata!.isVideo,
mirrorVideo: media.metadata!.mirrorVideo,
encryptionKey: media.encryptionData!.encryptionKey,
encryptionMac: media.encryptionData!.encryptionMac,
encryptionNonce: media.encryptionData!.encryptionNonce,
),
timestamp: media.metadata!.messageSendAt,
);
return true;
}
Future<bool> handleMediaUpload(int mediaUploadId) async {
Uint8List bytesToUpload = await readMediaFile(mediaUploadId, "encrypted");
Uint8List plaintextContent =
Uint8List.fromList(gzip.encode(utf8.encode(jsonEncode(msg.toJson()))));
Message? message = await twonlyDB.messagesDao
.getMessageByMessageId(media.messageIds![i])
.getSingleOrNull();
if (message == null) continue;
await twonlyDB.contactsDao.incFlameCounter(
message.contactId,
false,
message.sendAt,
);
Uint8List? encryptedBytes = await signalEncryptMessage(
message.contactId,
plaintextContent,
);
if (encryptedBytes == null) continue;
final pushKind = (media.metadata!.isRealTwonly)
? PushKind.twonly
: (media.metadata!.isVideo)
? PushKind.video
: PushKind.image;
var messageOnSuccess = TextMessage()
..body = encryptedBytes
..userId = Int64(message.contactId);
var pushData = await getPushData(message.contactId, pushKind);
if (pushData != null) {
messageOnSuccess.pushData = pushData.toList();
}
messagesOnSuccess.add(messageOnSuccess);
}
final uploadRequest = UploadRequest(
messagesOnSuccess: messagesOnSuccess,
downloadTokens: downloadTokens,
encryptedData: bytesToUpload,
);
final uploadRequestBytes = uploadRequest.writeToBuffer();
final storage = FlutterSecureStorage();
String? apiAuthToken = await storage.read(key: "api_auth_token");
@ -445,11 +468,11 @@ Future<bool> handleMediaUpload(int mediaUploadId) async {
requestMultipart.files.add(http.MultipartFile.fromBytes(
"file",
bytesToUpload,
uploadRequestBytes,
filename: "upload",
));
Log.info("Starting upload from $mediaUploadId ");
Log.info("Starting upload from ${media.mediaUploadId}");
try {
var streamedResponse = await requestMultipart.send();
@ -457,86 +480,7 @@ Future<bool> handleMediaUpload(int mediaUploadId) async {
final response = await http.Response.fromStream(streamedResponse);
if (response.statusCode == 200) {
if (response.body.length != 64) {
Log.error("Got invalid upload token.");
return false;
}
final uploadToken = hexToUint8List(response.body);
var token = MediaUploadTokens();
token.uploadToken = uploadToken;
token.downloadTokens = [];
await twonlyDB.mediaUploadsDao.updateMediaUpload(
mediaUploadId,
MediaUploadsCompanion(
uploadTokens: Value(token),
),
);
return true;
}
} catch (e) {
Log.error("Exception during upload: $e");
}
return false;
}
Future<bool> handleNotifyReceiver(MediaUpload media) async {
List<int> alreadyNotified = media.alreadyNotified;
for (var i = 0; i < media.messageIds!.length; i++) {
int messageId = media.messageIds![i];
if (alreadyNotified.contains(messageId)) {
continue;
}
Message? message = await twonlyDB.messagesDao
.getMessageByMessageId(messageId)
.getSingleOrNull();
if (message == null) continue;
await twonlyDB.contactsDao.incFlameCounter(
message.contactId,
false,
message.sendAt,
);
// Ensures the retransmit of the message
await encryptAndSendMessageAsync(
messageId,
message.contactId,
MessageJson(
kind: MessageKind.media,
messageId: messageId,
content: MediaMessageContent(
downloadToken: media.uploadTokens!.downloadTokens[i],
maxShowTime: media.metadata!.maxShowTime,
isRealTwonly: media.metadata!.isRealTwonly,
isVideo: media.metadata!.isVideo,
mirrorVideo: media.metadata!.mirrorVideo,
encryptionKey: media.encryptionData!.encryptionKey,
encryptionMac: media.encryptionData!.encryptionMac,
encryptionNonce: media.encryptionData!.encryptionNonce,
),
timestamp: media.metadata!.messageSendAt,
),
pushKind: (media.metadata!.isRealTwonly)
? PushKind.twonly
: (media.metadata!.isVideo)
? PushKind.video
: PushKind.image,
);
alreadyNotified.add(messageId);
await twonlyDB.mediaUploadsDao.updateMediaUpload(
media.mediaUploadId,
MediaUploadsCompanion(
alreadyNotified: Value(alreadyNotified),
),
);
}
Log.info("Upload was success!");
await twonlyDB.mediaUploadsDao.updateMediaUpload(
media.mediaUploadId,
@ -544,7 +488,35 @@ Future<bool> handleNotifyReceiver(MediaUpload media) async {
state: Value(UploadState.receiverNotified),
),
);
for (final messageId in media.messageIds!) {
await twonlyDB.messagesDao.updateMessageByMessageId(
messageId,
MessagesCompanion(
acknowledgeByServer: Value(true),
errorWhileSending: Value(false),
),
);
}
return true;
} else {
if (response.statusCode >= 400 && response.statusCode < 500) {
for (final messageId in media.messageIds!) {
await twonlyDB.messagesDao.updateMessageByMessageId(
messageId,
MessagesCompanion(
acknowledgeByServer: Value(true),
errorWhileSending: Value(true),
),
);
}
}
Log.error("Got error while uploading: ${response.statusCode}");
}
} catch (e) {
Log.error("Exception during upload: $e");
}
return false;
}
Future<bool> compressVideoIfExists(int mediaUploadId) async {
@ -562,8 +534,8 @@ Future<bool> compressVideoIfExists(int mediaUploadId) async {
return false;
}
return await Isolate.run(() async {
MediaInfo? mediaInfo;
try {
mediaInfo = await VideoCompress.compressVideo(
videoOriginalFile.path,
@ -596,6 +568,7 @@ Future<bool> compressVideoIfExists(int mediaUploadId) async {
await mediaInfo.file!.delete();
}
return true;
});
}
/// --- helper functions ---
@ -676,3 +649,18 @@ String uint8ListToHex(List<int> bytes) {
Uint8List hexToUint8List(String hex) => Uint8List.fromList(List<int>.generate(
hex.length ~/ 2,
(i) => int.parse(hex.substring(i * 2, i * 2 + 2), radix: 16)));
List<Uint8List> createDownloadTokens(int n) {
final Random random = Random();
List<Uint8List> tokens = [];
for (int i = 0; i < n; i++) {
Uint8List token = Uint8List(32);
for (int j = 0; j < 32; j++) {
token[j] = random.nextInt(256); // Generate a random byte (0-255)
}
tokens.add(token);
}
return tokens;
}

View file

@ -6,7 +6,7 @@ import 'package:twonly/src/database/twonly_database.dart';
import 'package:twonly/src/database/tables/messages_table.dart';
import 'package:twonly/src/model/json/message.dart';
import 'package:twonly/src/model/json/userdata.dart';
import 'package:twonly/src/model/protobuf/api/error.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart';
import 'package:twonly/src/services/api/utils.dart';
import 'package:twonly/src/services/signal/encryption.signal.dart';
import 'package:twonly/src/services/notification.service.dart';

View file

@ -7,11 +7,11 @@ import 'package:twonly/globals.dart';
import 'package:twonly/src/database/twonly_database.dart';
import 'package:twonly/src/database/tables/messages_table.dart';
import 'package:twonly/src/model/json/message.dart';
import 'package:twonly/src/model/protobuf/api/client_to_server.pb.dart'
import 'package:twonly/src/model/protobuf/api/websocket/client_to_server.pb.dart'
as client;
import 'package:twonly/src/model/protobuf/api/client_to_server.pbserver.dart';
import 'package:twonly/src/model/protobuf/api/error.pb.dart';
import 'package:twonly/src/model/protobuf/api/server_to_client.pb.dart'
import 'package:twonly/src/model/protobuf/api/websocket/client_to_server.pbserver.dart';
import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart'
as server;
import 'package:twonly/src/services/api/messages.dart';
import 'package:twonly/src/services/api/utils.dart';

View file

@ -4,11 +4,11 @@ import 'package:twonly/globals.dart';
import 'package:twonly/src/database/tables/messages_table.dart';
import 'package:twonly/src/database/twonly_database.dart';
import 'package:twonly/src/model/json/message.dart';
import 'package:twonly/src/model/protobuf/api/client_to_server.pb.dart'
import 'package:twonly/src/model/protobuf/api/websocket/client_to_server.pb.dart'
as client;
import 'package:twonly/src/model/protobuf/api/client_to_server.pbserver.dart';
import 'package:twonly/src/model/protobuf/api/error.pb.dart';
import 'package:twonly/src/model/protobuf/api/server_to_client.pb.dart'
import 'package:twonly/src/model/protobuf/api/websocket/client_to_server.pbserver.dart';
import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart'
as server;
import 'package:twonly/src/services/api/messages.dart';
import 'package:twonly/src/services/signal/session.signal.dart';

View file

@ -2,7 +2,7 @@ import 'package:drift/drift.dart';
import 'package:twonly/globals.dart';
import 'package:twonly/src/database/twonly_database.dart';
import 'package:twonly/src/utils/log.dart';
import 'package:twonly/src/model/protobuf/api/server_to_client.pb.dart'
import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart'
as server;
class OtherPreKeys {

View file

@ -1,7 +1,7 @@
import 'dart:typed_data';
import 'package:libsignal_protocol_dart/libsignal_protocol_dart.dart';
import 'package:twonly/src/model/json/userdata.dart';
import 'package:twonly/src/model/protobuf/api/server_to_client.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart';
import 'package:twonly/src/database/signal/connect_signal_protocol_store.dart';
import 'package:twonly/src/services/signal/consts.signal.dart';
import 'package:twonly/src/services/signal/utils.signal.dart';

View file

@ -14,7 +14,7 @@ import 'package:twonly/globals.dart';
import 'package:twonly/src/database/tables/messages_table.dart';
import 'package:twonly/src/database/twonly_database.dart';
import 'package:twonly/src/model/json/message.dart';
import 'package:twonly/src/model/protobuf/api/error.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart';
import 'package:twonly/src/localization/generated/app_localizations.dart';
import 'package:twonly/src/providers/settings.provider.dart';

View file

@ -4,7 +4,7 @@ import 'package:twonly/globals.dart';
import 'package:twonly/src/utils/log.dart';
import 'package:twonly/src/views/camera/image_editor/layers/filter_layer.dart';
import 'package:twonly/src/views/camera/image_editor/layers/filters/datetime_filter.dart';
import 'package:twonly/src/model/protobuf/api/server_to_client.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:path_provider/path_provider.dart';

View file

@ -4,7 +4,8 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:twonly/globals.dart';
import 'package:twonly/src/model/protobuf/api/error.pb.dart' show ErrorCode;
import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart'
show ErrorCode;
import 'package:twonly/src/services/api/media_send.dart';
import 'package:twonly/src/utils/log.dart';
import 'package:twonly/src/views/camera/camera_preview_components/save_to_gallery.dart';
@ -430,7 +431,7 @@ class _ShareImageEditorView extends State<ShareImageEditorView> {
);
/// then call the upload process in the background
encryptAndPreUploadMediaFiles(
encryptMediaFiles(
mediaUploadId!,
imageHandler,
videoUploadHandler,

View file

@ -4,7 +4,7 @@ import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:twonly/globals.dart';
import 'package:twonly/src/model/protobuf/api/error.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart';
import 'package:twonly/src/services/api/media_send.dart';
import 'package:twonly/src/views/camera/share_image_components/best_friends_selector.dart';
import 'package:twonly/src/views/components/flame.dart';
@ -79,7 +79,7 @@ class _ShareImageView extends State<ShareImageView> {
final imageHandler =
addOrModifyImageToUpload(widget.mediaUploadId, imageBytes!);
// start with the pre upload of the media file...
encryptAndPreUploadMediaFiles(
encryptMediaFiles(
widget.mediaUploadId, imageHandler, widget.videoUploadHandler);
}
setState(() {});

View file

@ -4,7 +4,7 @@ import 'package:intl/intl.dart';
import 'package:restart_app/restart_app.dart';
import 'package:flutter/material.dart';
import 'package:twonly/globals.dart';
import 'package:twonly/src/model/protobuf/api/server_to_client.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart';
import 'package:twonly/src/views/components/alert_dialog.dart';
import 'package:twonly/src/utils/misc.dart';
import 'package:twonly/src/utils/storage.dart';

View file

@ -5,7 +5,7 @@ import 'package:flutter/services.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:twonly/globals.dart';
import 'package:twonly/src/database/daos/contacts_dao.dart';
import 'package:twonly/src/model/protobuf/api/server_to_client.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart';
import 'package:twonly/src/services/api/utils.dart';
import 'package:twonly/src/utils/log.dart';
import 'package:twonly/src/utils/misc.dart';

View file

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:twonly/globals.dart';
import 'package:twonly/src/model/protobuf/api/server_to_client.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart';
import 'package:twonly/src/services/api/utils.dart';
import 'package:twonly/src/providers/connection.provider.dart';
import 'package:twonly/src/utils/misc.dart';

View file

@ -6,8 +6,8 @@ import 'package:provider/provider.dart';
import 'package:twonly/globals.dart';
import 'package:twonly/src/database/daos/contacts_dao.dart';
import 'package:twonly/src/database/twonly_database.dart';
import 'package:twonly/src/model/protobuf/api/error.pb.dart';
import 'package:twonly/src/model/protobuf/api/server_to_client.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart';
import 'package:twonly/src/providers/connection.provider.dart';
import 'package:twonly/src/utils/log.dart';
import 'package:twonly/src/utils/misc.dart';

View file

@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:twonly/src/model/protobuf/api/server_to_client.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart';
import 'package:twonly/src/utils/misc.dart';
class TransactionView extends StatefulWidget {

View file

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:intl/intl.dart';
import 'package:twonly/globals.dart';
import 'package:twonly/src/model/protobuf/api/server_to_client.pb.dart';
import 'package:twonly/src/model/protobuf/api/websocket/server_to_client.pb.dart';
import 'package:twonly/src/utils/misc.dart';
class VoucherView extends StatefulWidget {

View file

@ -65,6 +65,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.2.1"
background_downloader:
dependency: "direct main"
description:
name: background_downloader
sha256: d3016a9eb584f6cb16384c8b4a008943c39119730d60046044349b5dbbda4ccb
url: "https://pub.dev"
source: hosted
version: "9.2.2"
boolean_selector:
dependency: transitive
description:

View file

@ -65,6 +65,7 @@ dependencies:
share_plus: ^11.0.0
photo_view: ^0.15.0
tutorial_coach_mark: ^1.3.0
background_downloader: ^9.2.2
dev_dependencies:
flutter_test: