Merge branch 'stable'
This commit is contained in:
commit
d0f4533a09
@ -1688,7 +1688,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Libraries/sim",
|
"$(PROJECT_DIR)/Libraries/sim",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 5.2.2;
|
MARKETING_VERSION = 5.3;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.SimpleXChat;
|
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.SimpleXChat;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@ -1734,7 +1734,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Libraries/sim",
|
"$(PROJECT_DIR)/Libraries/sim",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 5.2.2;
|
MARKETING_VERSION = 5.3;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.SimpleXChat;
|
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.SimpleXChat;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
@ -24,9 +24,8 @@
|
|||||||
|
|
||||||
<application
|
<application
|
||||||
android:name="SimplexApp"
|
android:name="SimplexApp"
|
||||||
android:allowBackup="true"
|
android:allowBackup="false"
|
||||||
android:fullBackupOnly="true"
|
android:fullBackupOnly="false"
|
||||||
android:backupAgent="BackupAgent"
|
|
||||||
android:icon="@mipmap/icon"
|
android:icon="@mipmap/icon"
|
||||||
android:label="${app_name}"
|
android:label="${app_name}"
|
||||||
android:extractNativeLibs="${extract_native_libs}"
|
android:extractNativeLibs="${extract_native_libs}"
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
package chat.simplex.app
|
|
||||||
|
|
||||||
import android.app.backup.BackupAgentHelper
|
|
||||||
import android.app.backup.FullBackupDataOutput
|
|
||||||
import android.content.Context
|
|
||||||
import chat.simplex.common.model.AppPreferences
|
|
||||||
import chat.simplex.common.model.AppPreferences.Companion.SHARED_PREFS_PRIVACY_FULL_BACKUP
|
|
||||||
|
|
||||||
class BackupAgent: BackupAgentHelper() {
|
|
||||||
override fun onFullBackup(data: FullBackupDataOutput?) {
|
|
||||||
if (applicationContext
|
|
||||||
.getSharedPreferences(AppPreferences.SHARED_PREFS_ID, Context.MODE_PRIVATE)
|
|
||||||
.getBoolean(SHARED_PREFS_PRIVACY_FULL_BACKUP, true)
|
|
||||||
) {
|
|
||||||
super.onFullBackup(data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -92,7 +92,6 @@ class AppPreferences {
|
|||||||
set = fun(mode: SimplexLinkMode) { _simplexLinkMode.set(mode.name) }
|
set = fun(mode: SimplexLinkMode) { _simplexLinkMode.set(mode.name) }
|
||||||
)
|
)
|
||||||
val privacyDeliveryReceiptsSet = mkBoolPreference(SHARED_PREFS_PRIVACY_DELIVERY_RECEIPTS_SET, false)
|
val privacyDeliveryReceiptsSet = mkBoolPreference(SHARED_PREFS_PRIVACY_DELIVERY_RECEIPTS_SET, false)
|
||||||
val privacyFullBackup = mkBoolPreference(SHARED_PREFS_PRIVACY_FULL_BACKUP, false)
|
|
||||||
val experimentalCalls = mkBoolPreference(SHARED_PREFS_EXPERIMENTAL_CALLS, false)
|
val experimentalCalls = mkBoolPreference(SHARED_PREFS_EXPERIMENTAL_CALLS, false)
|
||||||
val showUnreadAndFavorites = mkBoolPreference(SHARED_PREFS_SHOW_UNREAD_AND_FAVORITES, false)
|
val showUnreadAndFavorites = mkBoolPreference(SHARED_PREFS_SHOW_UNREAD_AND_FAVORITES, false)
|
||||||
val chatArchiveName = mkStrPreference(SHARED_PREFS_CHAT_ARCHIVE_NAME, null)
|
val chatArchiveName = mkStrPreference(SHARED_PREFS_CHAT_ARCHIVE_NAME, null)
|
||||||
|
@ -78,7 +78,6 @@ fun DatabaseView(
|
|||||||
chatArchiveName,
|
chatArchiveName,
|
||||||
chatArchiveTime,
|
chatArchiveTime,
|
||||||
chatLastStart,
|
chatLastStart,
|
||||||
m.controller.appPrefs.privacyFullBackup,
|
|
||||||
appFilesCountAndSize,
|
appFilesCountAndSize,
|
||||||
chatItemTTL,
|
chatItemTTL,
|
||||||
m.currentUser.value,
|
m.currentUser.value,
|
||||||
@ -128,7 +127,6 @@ fun DatabaseLayout(
|
|||||||
chatArchiveName: MutableState<String?>,
|
chatArchiveName: MutableState<String?>,
|
||||||
chatArchiveTime: MutableState<Instant?>,
|
chatArchiveTime: MutableState<Instant?>,
|
||||||
chatLastStart: MutableState<Instant?>,
|
chatLastStart: MutableState<Instant?>,
|
||||||
privacyFullBackup: SharedPreference<Boolean>,
|
|
||||||
appFilesCountAndSize: MutableState<Pair<Int, Long>>,
|
appFilesCountAndSize: MutableState<Pair<Int, Long>>,
|
||||||
chatItemTTL: MutableState<ChatItemTTL>,
|
chatItemTTL: MutableState<ChatItemTTL>,
|
||||||
currentUser: User?,
|
currentUser: User?,
|
||||||
@ -168,6 +166,13 @@ fun DatabaseLayout(
|
|||||||
SectionView(stringResource(MR.strings.run_chat_section)) {
|
SectionView(stringResource(MR.strings.run_chat_section)) {
|
||||||
RunChatSetting(runChat, stopped, startChat, stopChatAlert)
|
RunChatSetting(runChat, stopped, startChat, stopChatAlert)
|
||||||
}
|
}
|
||||||
|
SectionTextFooter(
|
||||||
|
if (stopped) {
|
||||||
|
stringResource(MR.strings.you_must_use_the_most_recent_version_of_database)
|
||||||
|
} else {
|
||||||
|
stringResource(MR.strings.stop_chat_to_enable_database_actions)
|
||||||
|
}
|
||||||
|
)
|
||||||
SectionDividerSpaced()
|
SectionDividerSpaced()
|
||||||
|
|
||||||
SectionView(stringResource(MR.strings.chat_database_section)) {
|
SectionView(stringResource(MR.strings.chat_database_section)) {
|
||||||
@ -180,8 +185,6 @@ fun DatabaseLayout(
|
|||||||
iconColor = if (unencrypted) WarningOrange else MaterialTheme.colors.secondary,
|
iconColor = if (unencrypted) WarningOrange else MaterialTheme.colors.secondary,
|
||||||
disabled = operationsDisabled
|
disabled = operationsDisabled
|
||||||
)
|
)
|
||||||
AppDataBackupPreference(privacyFullBackup, initialRandomDBPassphrase)
|
|
||||||
SectionDividerSpaced(maxBottomPadding = false)
|
|
||||||
SettingsActionItem(
|
SettingsActionItem(
|
||||||
painterResource(MR.images.ic_ios_share),
|
painterResource(MR.images.ic_ios_share),
|
||||||
stringResource(MR.strings.export_database),
|
stringResource(MR.strings.export_database),
|
||||||
@ -225,13 +228,6 @@ fun DatabaseLayout(
|
|||||||
disabled = operationsDisabled
|
disabled = operationsDisabled
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
SectionTextFooter(
|
|
||||||
if (stopped) {
|
|
||||||
stringResource(MR.strings.you_must_use_the_most_recent_version_of_database)
|
|
||||||
} else {
|
|
||||||
stringResource(MR.strings.stop_chat_to_enable_database_actions)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
SectionDividerSpaced(maxTopPadding = true)
|
SectionDividerSpaced(maxTopPadding = true)
|
||||||
|
|
||||||
SectionView(stringResource(MR.strings.files_and_media_section).uppercase()) {
|
SectionView(stringResource(MR.strings.files_and_media_section).uppercase()) {
|
||||||
@ -258,23 +254,6 @@ fun DatabaseLayout(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
|
||||||
private fun AppDataBackupPreference(privacyFullBackup: SharedPreference<Boolean>, initialRandomDBPassphrase: SharedPreference<Boolean>) {
|
|
||||||
SettingsPreferenceItem(
|
|
||||||
painterResource(MR.images.ic_backup),
|
|
||||||
iconColor = MaterialTheme.colors.secondary,
|
|
||||||
pref = privacyFullBackup,
|
|
||||||
text = stringResource(MR.strings.full_backup)
|
|
||||||
) {
|
|
||||||
if (initialRandomDBPassphrase.get()) {
|
|
||||||
exportProhibitedAlert()
|
|
||||||
privacyFullBackup.set(false)
|
|
||||||
} else {
|
|
||||||
privacyFullBackup.set(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setChatItemTTLAlert(
|
private fun setChatItemTTLAlert(
|
||||||
m: ChatModel, selectedChatItemTTL: MutableState<ChatItemTTL>,
|
m: ChatModel, selectedChatItemTTL: MutableState<ChatItemTTL>,
|
||||||
progressIndicator: MutableState<Boolean>,
|
progressIndicator: MutableState<Boolean>,
|
||||||
@ -683,7 +662,6 @@ fun PreviewDatabaseLayout() {
|
|||||||
chatArchiveName = remember { mutableStateOf("dummy_archive") },
|
chatArchiveName = remember { mutableStateOf("dummy_archive") },
|
||||||
chatArchiveTime = remember { mutableStateOf(Clock.System.now()) },
|
chatArchiveTime = remember { mutableStateOf(Clock.System.now()) },
|
||||||
chatLastStart = remember { mutableStateOf(Clock.System.now()) },
|
chatLastStart = remember { mutableStateOf(Clock.System.now()) },
|
||||||
privacyFullBackup = SharedPreference({ true }, {}),
|
|
||||||
appFilesCountAndSize = remember { mutableStateOf(0 to 0L) },
|
appFilesCountAndSize = remember { mutableStateOf(0 to 0L) },
|
||||||
chatItemTTL = remember { mutableStateOf(ChatItemTTL.None) },
|
chatItemTTL = remember { mutableStateOf(ChatItemTTL.None) },
|
||||||
currentUser = User.sampleData,
|
currentUser = User.sampleData,
|
||||||
|
@ -242,11 +242,11 @@ getGroupAndMember db User {userId, userContactId} groupMemberId =
|
|||||||
LEFT JOIN connections c ON c.connection_id = (
|
LEFT JOIN connections c ON c.connection_id = (
|
||||||
SELECT max(cc.connection_id)
|
SELECT max(cc.connection_id)
|
||||||
FROM connections cc
|
FROM connections cc
|
||||||
where cc.group_member_id = m.group_member_id
|
where cc.user_id = ? AND cc.group_member_id = m.group_member_id
|
||||||
)
|
)
|
||||||
WHERE m.group_member_id = ? AND g.user_id = ? AND mu.contact_id = ?
|
WHERE m.group_member_id = ? AND g.user_id = ? AND mu.contact_id = ?
|
||||||
|]
|
|]
|
||||||
(groupMemberId, userId, userContactId)
|
(userId, groupMemberId, userId, userContactId)
|
||||||
where
|
where
|
||||||
toGroupAndMember :: (GroupInfoRow :. GroupMemberRow :. MaybeConnectionRow) -> (GroupInfo, GroupMember)
|
toGroupAndMember :: (GroupInfoRow :. GroupMemberRow :. MaybeConnectionRow) -> (GroupInfo, GroupMember)
|
||||||
toGroupAndMember (groupInfoRow :. memberRow :. connRow) =
|
toGroupAndMember (groupInfoRow :. memberRow :. connRow) =
|
||||||
@ -530,7 +530,7 @@ groupMemberQuery =
|
|||||||
LEFT JOIN connections c ON c.connection_id = (
|
LEFT JOIN connections c ON c.connection_id = (
|
||||||
SELECT max(cc.connection_id)
|
SELECT max(cc.connection_id)
|
||||||
FROM connections cc
|
FROM connections cc
|
||||||
where cc.group_member_id = m.group_member_id
|
where cc.user_id = ? AND cc.group_member_id = m.group_member_id
|
||||||
)
|
)
|
||||||
|]
|
|]
|
||||||
|
|
||||||
@ -540,7 +540,7 @@ getGroupMember db user@User {userId} groupId groupMemberId =
|
|||||||
DB.query
|
DB.query
|
||||||
db
|
db
|
||||||
(groupMemberQuery <> " WHERE m.group_id = ? AND m.group_member_id = ? AND m.user_id = ?")
|
(groupMemberQuery <> " WHERE m.group_id = ? AND m.group_member_id = ? AND m.user_id = ?")
|
||||||
(groupId, groupMemberId, userId)
|
(userId, groupId, groupMemberId, userId)
|
||||||
|
|
||||||
getGroupMemberById :: DB.Connection -> User -> GroupMemberId -> ExceptT StoreError IO GroupMember
|
getGroupMemberById :: DB.Connection -> User -> GroupMemberId -> ExceptT StoreError IO GroupMember
|
||||||
getGroupMemberById db user@User {userId} groupMemberId =
|
getGroupMemberById db user@User {userId} groupMemberId =
|
||||||
@ -548,7 +548,7 @@ getGroupMemberById db user@User {userId} groupMemberId =
|
|||||||
DB.query
|
DB.query
|
||||||
db
|
db
|
||||||
(groupMemberQuery <> " WHERE m.group_member_id = ? AND m.user_id = ?")
|
(groupMemberQuery <> " WHERE m.group_member_id = ? AND m.user_id = ?")
|
||||||
(groupMemberId, userId)
|
(userId, groupMemberId, userId)
|
||||||
|
|
||||||
getGroupMembers :: DB.Connection -> User -> GroupInfo -> IO [GroupMember]
|
getGroupMembers :: DB.Connection -> User -> GroupInfo -> IO [GroupMember]
|
||||||
getGroupMembers db user@User {userId, userContactId} GroupInfo {groupId} = do
|
getGroupMembers db user@User {userId, userContactId} GroupInfo {groupId} = do
|
||||||
@ -556,7 +556,7 @@ getGroupMembers db user@User {userId, userContactId} GroupInfo {groupId} = do
|
|||||||
<$> DB.query
|
<$> DB.query
|
||||||
db
|
db
|
||||||
(groupMemberQuery <> " WHERE m.group_id = ? AND m.user_id = ? AND (m.contact_id IS NULL OR m.contact_id != ?)")
|
(groupMemberQuery <> " WHERE m.group_id = ? AND m.user_id = ? AND (m.contact_id IS NULL OR m.contact_id != ?)")
|
||||||
(groupId, userId, userContactId)
|
(userId, groupId, userId, userContactId)
|
||||||
|
|
||||||
getGroupMembersForExpiration :: DB.Connection -> User -> GroupInfo -> IO [GroupMember]
|
getGroupMembersForExpiration :: DB.Connection -> User -> GroupInfo -> IO [GroupMember]
|
||||||
getGroupMembersForExpiration db user@User {userId, userContactId} GroupInfo {groupId} = do
|
getGroupMembersForExpiration db user@User {userId, userContactId} GroupInfo {groupId} = do
|
||||||
@ -572,7 +572,7 @@ getGroupMembersForExpiration db user@User {userId, userContactId} GroupInfo {gro
|
|||||||
)
|
)
|
||||||
|]
|
|]
|
||||||
)
|
)
|
||||||
(groupId, userId, userContactId, GSMemRemoved, GSMemLeft, GSMemGroupDeleted)
|
(userId, groupId, userId, userContactId, GSMemRemoved, GSMemLeft, GSMemGroupDeleted)
|
||||||
|
|
||||||
toContactMember :: User -> (GroupMemberRow :. MaybeConnectionRow) -> GroupMember
|
toContactMember :: User -> (GroupMemberRow :. MaybeConnectionRow) -> GroupMember
|
||||||
toContactMember User {userContactId} (memberRow :. connRow) =
|
toContactMember User {userContactId} (memberRow :. connRow) =
|
||||||
@ -998,11 +998,11 @@ getViaGroupMember db User {userId, userContactId} Contact {contactId} =
|
|||||||
LEFT JOIN connections c ON c.connection_id = (
|
LEFT JOIN connections c ON c.connection_id = (
|
||||||
SELECT max(cc.connection_id)
|
SELECT max(cc.connection_id)
|
||||||
FROM connections cc
|
FROM connections cc
|
||||||
where cc.group_member_id = m.group_member_id
|
where cc.user_id = ? AND cc.group_member_id = m.group_member_id
|
||||||
)
|
)
|
||||||
WHERE ct.user_id = ? AND ct.contact_id = ? AND mu.contact_id = ? AND ct.deleted = 0
|
WHERE ct.user_id = ? AND ct.contact_id = ? AND mu.contact_id = ? AND ct.deleted = 0
|
||||||
|]
|
|]
|
||||||
(userId, contactId, userContactId)
|
(userId, userId, contactId, userContactId)
|
||||||
where
|
where
|
||||||
toGroupAndMember :: (GroupInfoRow :. GroupMemberRow :. MaybeConnectionRow) -> (GroupInfo, GroupMember)
|
toGroupAndMember :: (GroupInfoRow :. GroupMemberRow :. MaybeConnectionRow) -> (GroupInfo, GroupMember)
|
||||||
toGroupAndMember (groupInfoRow :. memberRow :. connRow) =
|
toGroupAndMember (groupInfoRow :. memberRow :. connRow) =
|
||||||
@ -1296,11 +1296,11 @@ getXGrpMemIntroContDirect db User {userId} Contact {contactId} = do
|
|||||||
LEFT JOIN connections ch ON ch.connection_id = (
|
LEFT JOIN connections ch ON ch.connection_id = (
|
||||||
SELECT max(cc.connection_id)
|
SELECT max(cc.connection_id)
|
||||||
FROM connections cc
|
FROM connections cc
|
||||||
where cc.group_member_id = mh.group_member_id
|
where cc.user_id = ? AND cc.group_member_id = mh.group_member_id
|
||||||
)
|
)
|
||||||
WHERE ct.user_id = ? AND ct.contact_id = ? AND ct.deleted = 0 AND mh.member_category = ?
|
WHERE ct.user_id = ? AND ct.contact_id = ? AND ct.deleted = 0 AND mh.member_category = ?
|
||||||
|]
|
|]
|
||||||
(userId, contactId, GCHostMember)
|
(userId, userId, contactId, GCHostMember)
|
||||||
where
|
where
|
||||||
toCont :: (Int64, GroupId, GroupMemberId, MemberId, Maybe ConnReqInvitation) -> Maybe (Int64, XGrpMemIntroCont)
|
toCont :: (Int64, GroupId, GroupMemberId, MemberId, Maybe ConnReqInvitation) -> Maybe (Int64, XGrpMemIntroCont)
|
||||||
toCont (hostConnId, groupId, groupMemberId, memberId, connReq_) = case connReq_ of
|
toCont (hostConnId, groupId, groupMemberId, memberId, connReq_) = case connReq_ of
|
||||||
@ -1326,11 +1326,11 @@ getXGrpMemIntroContGroup db User {userId} GroupMember {groupMemberId} = do
|
|||||||
LEFT JOIN connections ch ON ch.connection_id = (
|
LEFT JOIN connections ch ON ch.connection_id = (
|
||||||
SELECT max(cc.connection_id)
|
SELECT max(cc.connection_id)
|
||||||
FROM connections cc
|
FROM connections cc
|
||||||
where cc.group_member_id = mh.group_member_id
|
where cc.user_id = ? AND cc.group_member_id = mh.group_member_id
|
||||||
)
|
)
|
||||||
WHERE m.user_id = ? AND m.group_member_id = ? AND mh.member_category = ? AND ct.deleted = 0
|
WHERE m.user_id = ? AND m.group_member_id = ? AND mh.member_category = ? AND ct.deleted = 0
|
||||||
|]
|
|]
|
||||||
(userId, groupMemberId, GCHostMember)
|
(userId, userId, groupMemberId, GCHostMember)
|
||||||
where
|
where
|
||||||
toCont :: (Int64, Maybe ConnReqInvitation) -> Maybe (Int64, ConnReqInvitation)
|
toCont :: (Int64, Maybe ConnReqInvitation) -> Maybe (Int64, ConnReqInvitation)
|
||||||
toCont (hostConnId, connReq_) = case connReq_ of
|
toCont (hostConnId, connReq_) = case connReq_ of
|
||||||
|
Loading…
Reference in New Issue
Block a user