Merge branch 'dev' into cleanup
|
@ -374,8 +374,6 @@
|
|||
C32C5D19256DD493003C73A2 /* OWSLinkPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDBA8255A581500E217F9 /* OWSLinkPreview.swift */; };
|
||||
C32C5D23256DD4C0003C73A2 /* Mention.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA7E255A57FB00E217F9 /* Mention.swift */; };
|
||||
C32C5D24256DD4C0003C73A2 /* MentionsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA81255A57FC00E217F9 /* MentionsManager.swift */; };
|
||||
C32C5D2E256DD4EA003C73A2 /* TSUnreadIndicatorInteraction.m in Sources */ = {isa = PBXBuildFile; fileRef = C38EF2C1255B6DA6007E1867 /* TSUnreadIndicatorInteraction.m */; };
|
||||
C32C5D37256DD4ED003C73A2 /* TSUnreadIndicatorInteraction.h in Headers */ = {isa = PBXBuildFile; fileRef = C38EF2BE255B6DA6007E1867 /* TSUnreadIndicatorInteraction.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
C32C5D83256DD5B6003C73A2 /* SSKKeychainStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDBBC255A581600E217F9 /* SSKKeychainStorage.swift */; };
|
||||
C32C5D9C256DD6DC003C73A2 /* OWSOutgoingReceiptManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB6F255A580F00E217F9 /* OWSOutgoingReceiptManager.m */; };
|
||||
C32C5DA5256DD6E5003C73A2 /* OWSOutgoingReceiptManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDABD255A580100E217F9 /* OWSOutgoingReceiptManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
|
@ -400,9 +398,6 @@
|
|||
C32C5EEE256DF54E003C73A2 /* TSDatabaseView.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB46255A580C00E217F9 /* TSDatabaseView.m */; };
|
||||
C32C5EF7256DF567003C73A2 /* TSDatabaseView.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB2C255A580A00E217F9 /* TSDatabaseView.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
C32C5F11256DF79A003C73A2 /* SSKIncrementingIdFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB32255A580A00E217F9 /* SSKIncrementingIdFinder.swift */; };
|
||||
C32C5F1A256DFCAD003C73A2 /* TSErrorMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAE7255A580500E217F9 /* TSErrorMessage.m */; };
|
||||
C32C5F23256DFCC0003C73A2 /* TSErrorMessage_privateConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB5D255A580E00E217F9 /* TSErrorMessage_privateConstructor.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
C32C5F34256DFCC4003C73A2 /* TSErrorMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBB0255A581500E217F9 /* TSErrorMessage.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
C32C5FA1256DFED5003C73A2 /* NSArray+Functional.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAB8255A580100E217F9 /* NSArray+Functional.m */; };
|
||||
C32C5FAA256DFED9003C73A2 /* NSArray+Functional.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB5C255A580E00E217F9 /* NSArray+Functional.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||
C32C5FBB256E0206003C73A2 /* OWSBackgroundTask.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDC1B255A581F00E217F9 /* OWSBackgroundTask.m */; };
|
||||
|
@ -1346,7 +1341,6 @@
|
|||
C33FDAE1255A580400E217F9 /* OWSReadTracking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSReadTracking.h; sourceTree = "<group>"; };
|
||||
C33FDAE4255A580400E217F9 /* TSAttachmentStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TSAttachmentStream.h; sourceTree = "<group>"; };
|
||||
C33FDAE6255A580400E217F9 /* TSInteraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TSInteraction.h; sourceTree = "<group>"; };
|
||||
C33FDAE7255A580500E217F9 /* TSErrorMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TSErrorMessage.m; sourceTree = "<group>"; };
|
||||
C33FDAE8255A580500E217F9 /* OWSMessageUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSMessageUtils.h; sourceTree = "<group>"; };
|
||||
C33FDAEA255A580500E217F9 /* OWSBackupFragment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSBackupFragment.h; sourceTree = "<group>"; };
|
||||
C33FDAEC255A580500E217F9 /* SignalRecipient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignalRecipient.h; sourceTree = "<group>"; };
|
||||
|
@ -1397,7 +1391,6 @@
|
|||
C33FDB59255A580E00E217F9 /* OWSFailedAttachmentDownloadsJob.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSFailedAttachmentDownloadsJob.m; sourceTree = "<group>"; };
|
||||
C33FDB5B255A580E00E217F9 /* YapDatabaseTransaction+OWS.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "YapDatabaseTransaction+OWS.m"; sourceTree = "<group>"; };
|
||||
C33FDB5C255A580E00E217F9 /* NSArray+Functional.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Functional.h"; sourceTree = "<group>"; };
|
||||
C33FDB5D255A580E00E217F9 /* TSErrorMessage_privateConstructor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TSErrorMessage_privateConstructor.h; sourceTree = "<group>"; };
|
||||
C33FDB5F255A580E00E217F9 /* YapDatabaseConnection+OWS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "YapDatabaseConnection+OWS.h"; sourceTree = "<group>"; };
|
||||
C33FDB60255A580E00E217F9 /* TSMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TSMessage.m; sourceTree = "<group>"; };
|
||||
C33FDB67255A580F00E217F9 /* OWSMediaGalleryFinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSMediaGalleryFinder.h; sourceTree = "<group>"; };
|
||||
|
@ -1432,7 +1425,6 @@
|
|||
C33FDBA9255A581500E217F9 /* OWSIdentityManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSIdentityManager.m; sourceTree = "<group>"; };
|
||||
C33FDBAB255A581500E217F9 /* OWSFileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSFileSystem.h; sourceTree = "<group>"; };
|
||||
C33FDBAE255A581500E217F9 /* SignalAccount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignalAccount.h; sourceTree = "<group>"; };
|
||||
C33FDBB0255A581500E217F9 /* TSErrorMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TSErrorMessage.h; sourceTree = "<group>"; };
|
||||
C33FDBB4255A581600E217F9 /* NSURLSessionDataTask+StatusCode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURLSessionDataTask+StatusCode.m"; sourceTree = "<group>"; };
|
||||
C33FDBB6255A581600E217F9 /* DataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DataSource.m; sourceTree = "<group>"; };
|
||||
C33FDBB7255A581600E217F9 /* SignalRecipient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignalRecipient.m; sourceTree = "<group>"; };
|
||||
|
@ -1543,8 +1535,6 @@
|
|||
C38EF2A4255B6D93007E1867 /* ProfilePictureView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ProfilePictureView.swift; path = "SignalUtilitiesKit/Profile Pictures/ProfilePictureView.swift"; sourceTree = SOURCE_ROOT; };
|
||||
C38EF2B1255B6D9C007E1867 /* UIViewController+Utilities.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIViewController+Utilities.swift"; path = "SignalUtilitiesKit/Utilities/UIViewController+Utilities.swift"; sourceTree = SOURCE_ROOT; };
|
||||
C38EF2B2255B6D9C007E1867 /* UIView+Utilities.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIView+Utilities.swift"; path = "SignalUtilitiesKit/Utilities/UIView+Utilities.swift"; sourceTree = SOURCE_ROOT; };
|
||||
C38EF2BE255B6DA6007E1867 /* TSUnreadIndicatorInteraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TSUnreadIndicatorInteraction.h; path = "SessionMessagingKit/Sending & Receiving/Read Tracking/TSUnreadIndicatorInteraction.h"; sourceTree = SOURCE_ROOT; };
|
||||
C38EF2C1255B6DA6007E1867 /* TSUnreadIndicatorInteraction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TSUnreadIndicatorInteraction.m; path = "SessionMessagingKit/Sending & Receiving/Read Tracking/TSUnreadIndicatorInteraction.m"; sourceTree = SOURCE_ROOT; };
|
||||
C38EF2CF255B6DAE007E1867 /* OWSProfileManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWSProfileManager.m; path = "SignalUtilitiesKit/To Do/OWSProfileManager.m"; sourceTree = SOURCE_ROOT; };
|
||||
C38EF2D1255B6DAF007E1867 /* OWSUserProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OWSUserProfile.m; path = "SessionMessagingKit/To Do/OWSUserProfile.m"; sourceTree = SOURCE_ROOT; };
|
||||
C38EF2D2255B6DAF007E1867 /* OWSProfileManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OWSProfileManager.h; path = "SignalUtilitiesKit/To Do/OWSProfileManager.h"; sourceTree = SOURCE_ROOT; };
|
||||
|
@ -2498,9 +2488,6 @@
|
|||
C32C5A99256DBDC1003C73A2 /* Signal */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
C33FDB5D255A580E00E217F9 /* TSErrorMessage_privateConstructor.h */,
|
||||
C33FDBB0255A581500E217F9 /* TSErrorMessage.h */,
|
||||
C33FDAE7255A580500E217F9 /* TSErrorMessage.m */,
|
||||
C33FDB9C255A581300E217F9 /* TSIncomingMessage.h */,
|
||||
C33FDA97255A57FE00E217F9 /* TSIncomingMessage.m */,
|
||||
C3B7845C25649DA600ADB2E7 /* TSIncomingMessage+Conversion.swift */,
|
||||
|
@ -2526,8 +2513,6 @@
|
|||
C33FDB1D255A580900E217F9 /* OWSReadReceiptManager.h */,
|
||||
C33FDA71255A57FA00E217F9 /* OWSReadReceiptManager.m */,
|
||||
C33FDAE1255A580400E217F9 /* OWSReadTracking.h */,
|
||||
C38EF2BE255B6DA6007E1867 /* TSUnreadIndicatorInteraction.h */,
|
||||
C38EF2C1255B6DA6007E1867 /* TSUnreadIndicatorInteraction.m */,
|
||||
);
|
||||
path = "Read Tracking";
|
||||
sourceTree = "<group>";
|
||||
|
@ -3646,7 +3631,6 @@
|
|||
C32C5EE5256DF506003C73A2 /* YapDatabaseConnection+OWS.h in Headers */,
|
||||
C32C5AAF256DBE8F003C73A2 /* TSMessage.h in Headers */,
|
||||
C32C5B8D256DC565003C73A2 /* SSKEnvironment.h in Headers */,
|
||||
C32C5F34256DFCC4003C73A2 /* TSErrorMessage.h in Headers */,
|
||||
C32C59C6256DB41F003C73A2 /* TSGroupThread.h in Headers */,
|
||||
C3C2A6F425539DE700C340D1 /* SessionMessagingKit.h in Headers */,
|
||||
C32C59C2256DB41F003C73A2 /* TSContactThread.h in Headers */,
|
||||
|
@ -3663,7 +3647,6 @@
|
|||
C32C5AB3256DBE8F003C73A2 /* TSInteraction.h in Headers */,
|
||||
C32C5DA5256DD6E5003C73A2 /* OWSOutgoingReceiptManager.h in Headers */,
|
||||
C32C5B0A256DC076003C73A2 /* OWSDisappearingMessagesConfiguration.h in Headers */,
|
||||
C32C5D37256DD4ED003C73A2 /* TSUnreadIndicatorInteraction.h in Headers */,
|
||||
C32C5ADF256DBFAA003C73A2 /* OWSReadTracking.h in Headers */,
|
||||
C3D9E486256775D20040E4F3 /* TSAttachmentPointer.h in Headers */,
|
||||
C32C5EF7256DF567003C73A2 /* TSDatabaseView.h in Headers */,
|
||||
|
@ -3676,7 +3659,6 @@
|
|||
B8856D72256F1421001CE70E /* OWSWindowManager.h in Headers */,
|
||||
B8AE761425ABFBB9001A84D2 /* GeneralUtilities.h in Headers */,
|
||||
C32C5B6B256DC357003C73A2 /* OWSDisappearingConfigurationUpdateInfoMessage.h in Headers */,
|
||||
C32C5F23256DFCC0003C73A2 /* TSErrorMessage_privateConstructor.h in Headers */,
|
||||
C32C5BBA256DC7E3003C73A2 /* ProfileManagerProtocol.h in Headers */,
|
||||
C3A3A193256E20D4004D228D /* SignalRecipient.h in Headers */,
|
||||
B8856CF7256F105E001CE70E /* OWSAudioPlayer.h in Headers */,
|
||||
|
@ -4707,7 +4689,6 @@
|
|||
C32C5A02256DB658003C73A2 /* MessageSender+Convenience.swift in Sources */,
|
||||
B8566C6C256F60F50045A0B9 /* OWSUserProfile.m in Sources */,
|
||||
B8D0A25925E367AC00C1835E /* Notification+MessageReceiver.swift in Sources */,
|
||||
C32C5D2E256DD4EA003C73A2 /* TSUnreadIndicatorInteraction.m in Sources */,
|
||||
C32C599E256DB02B003C73A2 /* TypingIndicators.swift in Sources */,
|
||||
C3DB66CC260AF1F3001EFC55 /* OpenGroupAPIV2+ObjC.swift in Sources */,
|
||||
C32C5BEF256DC8EE003C73A2 /* OWSDisappearingMessagesJob.m in Sources */,
|
||||
|
@ -4753,7 +4734,6 @@
|
|||
C32C5C88256DD0D2003C73A2 /* Storage+Messaging.swift in Sources */,
|
||||
C32C59C7256DB41F003C73A2 /* TSThread.m in Sources */,
|
||||
C300A5B22554AF9800555489 /* VisibleMessage+Profile.swift in Sources */,
|
||||
C32C5F1A256DFCAD003C73A2 /* TSErrorMessage.m in Sources */,
|
||||
C32C5A75256DBBCF003C73A2 /* TSAttachmentPointer+Conversion.swift in Sources */,
|
||||
C32C5AF8256DC051003C73A2 /* OWSDisappearingMessagesConfiguration.m in Sources */,
|
||||
C32C5EBA256DE130003C73A2 /* OWSQuotedReplyModel.m in Sources */,
|
||||
|
@ -5068,7 +5048,7 @@
|
|||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 232;
|
||||
CURRENT_PROJECT_VERSION = 235;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DEVELOPMENT_TEAM = SUQ8J2PCT7;
|
||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
||||
|
@ -5089,7 +5069,7 @@
|
|||
INFOPLIST_FILE = SessionShareExtension/Meta/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MARKETING_VERSION = 1.10.0;
|
||||
MARKETING_VERSION = 1.10.1;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger.ShareExtension";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
|
@ -5137,7 +5117,7 @@
|
|||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 232;
|
||||
CURRENT_PROJECT_VERSION = 235;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_TEAM = SUQ8J2PCT7;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
|
@ -5163,7 +5143,7 @@
|
|||
INFOPLIST_FILE = SessionShareExtension/Meta/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MARKETING_VERSION = 1.10.0;
|
||||
MARKETING_VERSION = 1.10.1;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger.ShareExtension";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
|
@ -5198,7 +5178,7 @@
|
|||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 232;
|
||||
CURRENT_PROJECT_VERSION = 235;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DEVELOPMENT_TEAM = SUQ8J2PCT7;
|
||||
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
|
||||
|
@ -5217,7 +5197,7 @@
|
|||
INFOPLIST_FILE = SessionNotificationServiceExtension/Meta/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MARKETING_VERSION = 1.10.0;
|
||||
MARKETING_VERSION = 1.10.1;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger.NotificationServiceExtension";
|
||||
|
@ -5268,7 +5248,7 @@
|
|||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 232;
|
||||
CURRENT_PROJECT_VERSION = 235;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_TEAM = SUQ8J2PCT7;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
|
@ -5292,7 +5272,7 @@
|
|||
INFOPLIST_FILE = SessionNotificationServiceExtension/Meta/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MARKETING_VERSION = 1.10.0;
|
||||
MARKETING_VERSION = 1.10.1;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger.NotificationServiceExtension";
|
||||
|
@ -6153,7 +6133,7 @@
|
|||
CODE_SIGN_ENTITLEMENTS = Session/Meta/Signal.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 232;
|
||||
CURRENT_PROJECT_VERSION = 235;
|
||||
DEVELOPMENT_TEAM = SUQ8J2PCT7;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
|
@ -6189,7 +6169,7 @@
|
|||
"$(SRCROOT)",
|
||||
);
|
||||
LLVM_LTO = NO;
|
||||
MARKETING_VERSION = 1.10.0;
|
||||
MARKETING_VERSION = 1.10.1;
|
||||
OTHER_LDFLAGS = "$(inherited)";
|
||||
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger";
|
||||
|
@ -6221,7 +6201,7 @@
|
|||
CODE_SIGN_ENTITLEMENTS = Session/Meta/Signal.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 232;
|
||||
CURRENT_PROJECT_VERSION = 235;
|
||||
DEVELOPMENT_TEAM = SUQ8J2PCT7;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
|
@ -6257,7 +6237,7 @@
|
|||
"$(SRCROOT)",
|
||||
);
|
||||
LLVM_LTO = NO;
|
||||
MARKETING_VERSION = 1.10.0;
|
||||
MARKETING_VERSION = 1.10.1;
|
||||
OTHER_LDFLAGS = "$(inherited)";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger";
|
||||
PRODUCT_NAME = Session;
|
||||
|
|
|
@ -24,7 +24,7 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc
|
|||
// MARK: Blocking
|
||||
@objc func unblock() {
|
||||
guard let thread = thread as? TSContactThread else { return }
|
||||
let publicKey = thread.contactIdentifier()
|
||||
let publicKey = thread.contactSessionID()
|
||||
UIView.animate(withDuration: 0.25, animations: {
|
||||
self.blockedBanner.alpha = 0
|
||||
}, completion: { _ in
|
||||
|
@ -34,7 +34,7 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc
|
|||
|
||||
func showBlockedModalIfNeeded() -> Bool {
|
||||
guard let thread = thread as? TSContactThread else { return false }
|
||||
let publicKey = thread.contactIdentifier()
|
||||
let publicKey = thread.contactSessionID()
|
||||
guard OWSBlockingManager.shared().isRecipientIdBlocked(publicKey) else { return false }
|
||||
let blockedModal = BlockedModal(publicKey: publicKey)
|
||||
blockedModal.modalPresentationStyle = .overFullScreen
|
||||
|
@ -390,7 +390,7 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc
|
|||
case .audio:
|
||||
if viewItem.interaction is TSIncomingMessage,
|
||||
let thread = self.thread as? TSContactThread,
|
||||
Storage.shared.getContact(with: thread.contactIdentifier())?.isTrusted != true {
|
||||
Storage.shared.getContact(with: thread.contactSessionID())?.isTrusted != true {
|
||||
confirmDownload()
|
||||
} else {
|
||||
playOrPauseAudio(for: viewItem)
|
||||
|
@ -400,7 +400,7 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc
|
|||
let cell = messagesTableView.cellForRow(at: IndexPath(row: index, section: 0)) as? VisibleMessageCell else { return }
|
||||
if viewItem.interaction is TSIncomingMessage,
|
||||
let thread = self.thread as? TSContactThread,
|
||||
Storage.shared.getContact(with: thread.contactIdentifier())?.isTrusted != true {
|
||||
Storage.shared.getContact(with: thread.contactSessionID())?.isTrusted != true {
|
||||
confirmDownload()
|
||||
} else {
|
||||
guard let albumView = cell.albumView else { return }
|
||||
|
@ -431,7 +431,7 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc
|
|||
case .genericAttachment:
|
||||
if viewItem.interaction is TSIncomingMessage,
|
||||
let thread = self.thread as? TSContactThread,
|
||||
Storage.shared.getContact(with: thread.contactIdentifier())?.isTrusted != true {
|
||||
Storage.shared.getContact(with: thread.contactSessionID())?.isTrusted != true {
|
||||
confirmDownload()
|
||||
} else {
|
||||
// Open the document if possible
|
||||
|
|
|
@ -116,7 +116,7 @@ final class ConversationVC : BaseVC, ConversationViewModelDelegate, OWSConversat
|
|||
lazy var blockedBanner: InfoBanner = {
|
||||
let name: String
|
||||
if let thread = thread as? TSContactThread {
|
||||
let publicKey = thread.contactIdentifier()
|
||||
let publicKey = thread.contactSessionID()
|
||||
let context = Contact.context(for: thread)
|
||||
name = Storage.shared.getContact(with: publicKey)?.displayName(for: context) ?? publicKey
|
||||
} else {
|
||||
|
@ -416,7 +416,7 @@ final class ConversationVC : BaseVC, ConversationViewModelDelegate, OWSConversat
|
|||
blockedBanner.removeFromSuperview()
|
||||
}
|
||||
guard let thread = thread as? TSContactThread else { return detach() }
|
||||
if OWSBlockingManager.shared().isRecipientIdBlocked(thread.contactIdentifier()) {
|
||||
if OWSBlockingManager.shared().isRecipientIdBlocked(thread.contactSessionID()) {
|
||||
view.addSubview(blockedBanner)
|
||||
blockedBanner.pin([ UIView.HorizontalEdge.left, UIView.VerticalEdge.top, UIView.HorizontalEdge.right ], to: view)
|
||||
} else {
|
||||
|
|
|
@ -451,7 +451,6 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
|
|||
case OWSInteractionType_Offer:
|
||||
case OWSInteractionType_TypingIndicator:
|
||||
return;
|
||||
case OWSInteractionType_Error:
|
||||
case OWSInteractionType_Info:
|
||||
case OWSInteractionType_Call:
|
||||
self.systemMessageText = [self systemMessageTextWithTransaction:transaction];
|
||||
|
@ -651,10 +650,6 @@ NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType)
|
|||
OWSAssertDebug(transaction);
|
||||
|
||||
switch (self.interaction.interactionType) {
|
||||
case OWSInteractionType_Error: {
|
||||
TSErrorMessage *errorMessage = (TSErrorMessage *)self.interaction;
|
||||
return [errorMessage previewTextWithTransaction:transaction];
|
||||
}
|
||||
case OWSInteractionType_Info: {
|
||||
TSInfoMessage *infoMessage = (TSInfoMessage *)self.interaction;
|
||||
return [infoMessage previewTextWithTransaction:transaction];
|
||||
|
|
|
@ -1005,7 +1005,6 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
case OWSInteractionType_IncomingMessage:
|
||||
case OWSInteractionType_OutgoingMessage:
|
||||
return interaction;
|
||||
case OWSInteractionType_Error:
|
||||
case OWSInteractionType_Info:
|
||||
break;
|
||||
case OWSInteractionType_Call:
|
||||
|
@ -1134,7 +1133,6 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
break;
|
||||
case OWSInteractionType_IncomingMessage:
|
||||
case OWSInteractionType_OutgoingMessage:
|
||||
case OWSInteractionType_Error:
|
||||
case OWSInteractionType_Info:
|
||||
case OWSInteractionType_Call:
|
||||
canShowDate = YES;
|
||||
|
|
|
@ -344,7 +344,7 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewDelegate {
|
|||
case .mediaMessage:
|
||||
if viewItem.interaction is TSIncomingMessage,
|
||||
let thread = viewItem.interaction.thread as? TSContactThread,
|
||||
Storage.shared.getContact(with: thread.contactIdentifier())?.isTrusted != true {
|
||||
Storage.shared.getContact(with: thread.contactSessionID())?.isTrusted != true {
|
||||
showMediaPlaceholder()
|
||||
} else {
|
||||
guard let cache = delegate?.getMediaCache() else { preconditionFailure() }
|
||||
|
@ -370,7 +370,7 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewDelegate {
|
|||
case .audio:
|
||||
if viewItem.interaction is TSIncomingMessage,
|
||||
let thread = viewItem.interaction.thread as? TSContactThread,
|
||||
Storage.shared.getContact(with: thread.contactIdentifier())?.isTrusted != true {
|
||||
Storage.shared.getContact(with: thread.contactSessionID())?.isTrusted != true {
|
||||
showMediaPlaceholder()
|
||||
} else {
|
||||
let voiceMessageView = VoiceMessageView(viewItem: viewItem)
|
||||
|
@ -381,7 +381,7 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewDelegate {
|
|||
case .genericAttachment:
|
||||
if viewItem.interaction is TSIncomingMessage,
|
||||
let thread = viewItem.interaction.thread as? TSContactThread,
|
||||
Storage.shared.getContact(with: thread.contactIdentifier())?.isTrusted != true {
|
||||
Storage.shared.getContact(with: thread.contactSessionID())?.isTrusted != true {
|
||||
showMediaPlaceholder()
|
||||
} else {
|
||||
let documentView = DocumentView(viewItem: viewItem, textColor: bodyLabelTextColor)
|
||||
|
|
|
@ -139,8 +139,9 @@ CGFloat kIconViewLength = 24;
|
|||
- (nullable NSString *)threadName
|
||||
{
|
||||
NSString *threadName = self.thread.name;
|
||||
if (self.thread.contactIdentifier) {
|
||||
return [[LKStorage.shared getContactWithSessionID:self.thread.contactIdentifier] displayNameFor:SNContactContextRegular] ?: @"Anonymous";
|
||||
if ([self.thread isKindOfClass:TSContactThread.class]) {
|
||||
TSContactThread *thread = (TSContactThread *)self.thread;
|
||||
return [[LKStorage.shared getContactWithSessionID:thread.contactSessionID] displayNameFor:SNContactContextRegular] ?: @"Anonymous";
|
||||
} else if (threadName.length == 0 && [self isGroupThread]) {
|
||||
threadName = [MessageStrings newGroupDefaultTitle];
|
||||
}
|
||||
|
@ -367,7 +368,8 @@ CGFloat kIconViewLength = 24;
|
|||
if (self.thread.isGroupThread) {
|
||||
displayName = @"the group";
|
||||
} else {
|
||||
displayName = [[LKStorage.shared getContactWithSessionID:self.thread.contactIdentifier] displayNameFor:SNContactContextRegular] ?: @"anonymous";
|
||||
TSContactThread *thread = (TSContactThread *)self.thread;
|
||||
displayName = [[LKStorage.shared getContactWithSessionID:thread.contactSessionID] displayNameFor:SNContactContextRegular] ?: @"anonymous";
|
||||
}
|
||||
subtitleLabel.text = [NSString stringWithFormat:NSLocalizedString(@"When enabled, messages between you and %@ will disappear after they have been seen.", ""), displayName];
|
||||
subtitleLabel.textColor = LKColors.text;
|
||||
|
@ -738,7 +740,7 @@ CGFloat kIconViewLength = 24;
|
|||
subtitleView.font = [LKFonts spaceMonoOfSize:LKValues.smallFontSize];
|
||||
subtitleView.lineBreakMode = NSLineBreakByCharWrapping;
|
||||
subtitleView.numberOfLines = 2;
|
||||
subtitleView.text = self.thread.contactIdentifier;
|
||||
subtitleView.text = ((TSContactThread *)self.thread).contactSessionID;
|
||||
subtitleView.textAlignment = NSTextAlignmentCenter;
|
||||
[stackView addArrangedSubview:subtitleView];
|
||||
}
|
||||
|
@ -1084,7 +1086,7 @@ CGFloat kIconViewLength = 24;
|
|||
|
||||
- (void)copySessionID
|
||||
{
|
||||
UIPasteboard.generalPasteboard.string = self.thread.contactIdentifier;
|
||||
UIPasteboard.generalPasteboard.string = ((TSContactThread *)self.thread).contactSessionID;
|
||||
}
|
||||
|
||||
- (void)showMediaGallery
|
||||
|
@ -1135,7 +1137,7 @@ CGFloat kIconViewLength = 24;
|
|||
- (void)saveName
|
||||
{
|
||||
if (![self.thread isKindOfClass:TSContactThread.class]) { return; }
|
||||
SNContact *contact = [LKStorage.shared getContactWithSessionID:self.thread.contactIdentifier];
|
||||
SNContact *contact = [LKStorage.shared getContactWithSessionID:((TSContactThread *)self.thread).contactSessionID];
|
||||
if (contact == nil) { return; }
|
||||
NSString *text = [self.displayNameTextField.text stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet];
|
||||
contact.nickname = text.length > 0 ? text : nil;
|
||||
|
@ -1186,7 +1188,7 @@ CGFloat kIconViewLength = 24;
|
|||
OWSAssertDebug(recipientId.length > 0);
|
||||
|
||||
if (recipientId.length > 0 && [self.thread isKindOfClass:[TSContactThread class]] &&
|
||||
[self.thread.contactIdentifier isEqualToString:recipientId]) {
|
||||
[((TSContactThread *)self.thread).contactSessionID isEqualToString:recipientId]) {
|
||||
[self updateTableContents];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -76,7 +76,7 @@ final class ConversationTitleView : UIView {
|
|||
} else if thread.isNoteToSelf() {
|
||||
return "Note to Self"
|
||||
} else {
|
||||
let sessionID = thread.contactIdentifier()!
|
||||
let sessionID = (thread as! TSContactThread).contactSessionID()
|
||||
var result = sessionID
|
||||
Storage.read { transaction in
|
||||
result = Storage.shared.getContact(with: sessionID)?.displayName(for: .regular) ?? "Anonymous"
|
||||
|
|
|
@ -154,7 +154,7 @@ final class NewDMVC : BaseVC, UIPageViewControllerDataSource, UIPageViewControll
|
|||
}
|
||||
|
||||
private func startNewDM(with sessionID: String) {
|
||||
let thread = TSContactThread.getOrCreateThread(contactId: sessionID)
|
||||
let thread = TSContactThread.getOrCreateThread(contactSessionID: sessionID)
|
||||
presentingViewController?.dismiss(animated: true, completion: nil)
|
||||
SignalApp.shared().presentConversation(for: thread, action: .compose, animated: false)
|
||||
}
|
||||
|
|
|
@ -337,8 +337,8 @@ final class HomeVC : BaseVC, UITableViewDataSource, UITableViewDelegate, NewConv
|
|||
self.present(alert, animated: true, completion: nil)
|
||||
}
|
||||
delete.backgroundColor = Colors.destructive
|
||||
if thread is TSContactThread {
|
||||
let publicKey = thread.contactIdentifier()!
|
||||
if let thread = thread as? TSContactThread {
|
||||
let publicKey = thread.contactSessionID()
|
||||
let blockingManager = SSKEnvironment.shared.blockingManager
|
||||
let isBlocked = blockingManager.isRecipientIdBlocked(publicKey)
|
||||
let block = UITableViewRowAction(style: .normal, title: NSLocalizedString("BLOCK_LIST_BLOCK_BUTTON", comment: "")) { _, _ in
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "NavBarBackWhite@1x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "NavBarBackWhite@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "NavBarBackWhite@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.9 KiB |
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "NavBarBackWhiteRTL@1x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "NavBarBackWhiteRTL@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "NavBarBackWhiteRTL@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Session/Meta/Images.xcassets/NavBarBackRTL.imageset/NavBarBackWhiteRTL@1x.png
vendored
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
Session/Meta/Images.xcassets/NavBarBackRTL.imageset/NavBarBackWhiteRTL@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
Session/Meta/Images.xcassets/NavBarBackRTL.imageset/NavBarBackWhiteRTL@3x.png
vendored
Normal file
After Width: | Height: | Size: 2.0 KiB |
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "marker-32@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "marker-32@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "marker-32@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 355 B |
After Width: | Height: | Size: 640 B |
After Width: | Height: | Size: 960 B |
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "caption-24@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "caption-24@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "caption-24@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
BIN
Session/Meta/Images.xcassets/image_editor_caption.imageset/caption-24@1x.png
vendored
Normal file
After Width: | Height: | Size: 153 B |
BIN
Session/Meta/Images.xcassets/image_editor_caption.imageset/caption-24@2x.png
vendored
Normal file
After Width: | Height: | Size: 190 B |
BIN
Session/Meta/Images.xcassets/image_editor_caption.imageset/caption-24@3x.png
vendored
Normal file
After Width: | Height: | Size: 297 B |
23
Session/Meta/Images.xcassets/image_editor_checkmark_empty.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "checkmark-circle-outline-32@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "checkmark-circle-outline-32@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "checkmark-circle-outline-32@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 503 B |
After Width: | Height: | Size: 966 B |
After Width: | Height: | Size: 1.6 KiB |
23
Session/Meta/Images.xcassets/image_editor_checkmark_full.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "checkmark-circle-filled-32@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "checkmark-circle-filled-32@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "checkmark-circle-filled-32@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
BIN
Session/Meta/Images.xcassets/image_editor_checkmark_full.imageset/checkmark-circle-filled-32@1x.png
vendored
Normal file
After Width: | Height: | Size: 383 B |
BIN
Session/Meta/Images.xcassets/image_editor_checkmark_full.imageset/checkmark-circle-filled-32@2x.png
vendored
Normal file
After Width: | Height: | Size: 724 B |
BIN
Session/Meta/Images.xcassets/image_editor_checkmark_full.imageset/checkmark-circle-filled-32@3x.png
vendored
Normal file
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "crop-32@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "crop-32@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "crop-32@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 286 B |
After Width: | Height: | Size: 531 B |
After Width: | Height: | Size: 731 B |
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "crop-lock-32@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "crop-lock-32@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "crop-lock-32@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
BIN
Session/Meta/Images.xcassets/image_editor_crop_lock.imageset/crop-lock-32@1x.png
vendored
Normal file
After Width: | Height: | Size: 400 B |
BIN
Session/Meta/Images.xcassets/image_editor_crop_lock.imageset/crop-lock-32@2x.png
vendored
Normal file
After Width: | Height: | Size: 681 B |
BIN
Session/Meta/Images.xcassets/image_editor_crop_lock.imageset/crop-lock-32@3x.png
vendored
Normal file
After Width: | Height: | Size: 981 B |
23
Session/Meta/Images.xcassets/image_editor_crop_unlock.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "crop-unlock-32@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "crop-unlock-32@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "crop-unlock-32@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
BIN
Session/Meta/Images.xcassets/image_editor_crop_unlock.imageset/crop-unlock-32@1x.png
vendored
Normal file
After Width: | Height: | Size: 402 B |
BIN
Session/Meta/Images.xcassets/image_editor_crop_unlock.imageset/crop-unlock-32@2x.png
vendored
Normal file
After Width: | Height: | Size: 694 B |
BIN
Session/Meta/Images.xcassets/image_editor_crop_unlock.imageset/crop-unlock-32@3x.png
vendored
Normal file
After Width: | Height: | Size: 979 B |
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "flip-32@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "flip-32@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "flip-32@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 458 B |
After Width: | Height: | Size: 893 B |
After Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "rotate-32@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "rotate-32@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "rotate-32@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 431 B |
After Width: | Height: | Size: 868 B |
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "text-32@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "text-32@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "text-32@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 491 B |
After Width: | Height: | Size: 989 B |
After Width: | Height: | Size: 1.5 KiB |
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "undo-32@1x.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "undo-32@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "undo-32@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 446 B |
After Width: | Height: | Size: 808 B |
After Width: | Height: | Size: 1.2 KiB |
|
@ -75,7 +75,6 @@
|
|||
#import <SessionMessagingKit/TSAttachmentPointer.h>
|
||||
#import <SessionMessagingKit/TSAttachmentStream.h>
|
||||
#import <SessionMessagingKit/TSContactThread.h>
|
||||
#import <SessionMessagingKit/TSErrorMessage.h>
|
||||
#import <SessionMessagingKit/TSGroupThread.h>
|
||||
#import <SessionMessagingKit/TSIncomingMessage.h>
|
||||
#import <SessionMessagingKit/TSInfoMessage.h>
|
||||
|
|
|
@ -61,7 +61,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
{
|
||||
__block TSThread *thread = nil;
|
||||
[LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
|
||||
thread = [TSContactThread getOrCreateThreadWithContactId:recipientId transaction:transaction];
|
||||
thread = [TSContactThread getOrCreateThreadWithContactSessionID:recipientId transaction:transaction];
|
||||
}];
|
||||
[self presentConversationForThread:thread action:action animated:(BOOL)isAnimated];
|
||||
}
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "Bitte erstelle ein komprimiertes Archiv von dieser Datei oder diesem Ordner und versuche stattdessen dieses zu versenden.";
|
||||
/* Alert title when picking a document fails because user picked a directory/bundle */
|
||||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "Datei nicht unterstützt";
|
||||
/* Short text label for a voice message attachment, used for thread preview and on the lock screen */
|
||||
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Sprachnachricht";
|
||||
/* Error indicating the backup export could not export the user's data. */
|
||||
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "Sicherungsdaten konnten nicht exportiert werden.";
|
||||
/* Error indicating that the app received an invalid response from CloudKit. */
|
||||
|
@ -150,6 +152,8 @@
|
|||
"DATE_YESTERDAY" = "Gestern";
|
||||
/* table cell label in conversation settings */
|
||||
"DISAPPEARING_MESSAGES" = "Verschwindende Nachrichten";
|
||||
/* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear, see the *_TIME_AMOUNT strings for context. */
|
||||
"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "Nachrichten dieser Unterhaltung werden nach %@ verschwinden.";
|
||||
/* table cell label in conversation settings */
|
||||
"EDIT_GROUP_ACTION" = "Gruppe bearbeiten";
|
||||
/* Label indicating media gallery is empty */
|
||||
|
@ -262,6 +266,10 @@
|
|||
"NOTIFICATIONS_SHOW" = "Anzeigen";
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "Okay";
|
||||
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
|
||||
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ hat verschwindende Nachrichten deaktiviert.";
|
||||
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ hat die Zeit für verschwindende Nachrichten auf %@ festgelegt.";
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Bild kann nicht aufgenommen werden.";
|
||||
/* alert title */
|
||||
|
@ -390,7 +398,10 @@
|
|||
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "Antippen und Halten zum Aufnehmen einer Sprachnachricht.";
|
||||
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
|
||||
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "Sprachnachricht";
|
||||
/* Info Message when you disable disappearing messages */
|
||||
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Du hast verschwindende Nachrichten deaktiviert.";
|
||||
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Du hast die Zeit für verschwindende Nachrichten auf %@ festgelegt.";
|
||||
// MARK: - Session
|
||||
"continue_2" = "Fortsetzen";
|
||||
"copy" = "Kopieren";
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "Please create a compressed archive of this file or directory and try sending that instead.";
|
||||
/* Alert title when picking a document fails because user picked a directory/bundle */
|
||||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "Unsupported File";
|
||||
/* Short text label for a voice message attachment, used for thread preview and on the lock screen */
|
||||
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Voice Message";
|
||||
/* Error indicating the backup export could not export the user's data. */
|
||||
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "Backup data could not be exported.";
|
||||
/* Error indicating that the app received an invalid response from CloudKit. */
|
||||
|
@ -150,6 +152,8 @@
|
|||
"DATE_YESTERDAY" = "Yesterday";
|
||||
/* table cell label in conversation settings */
|
||||
"DISAPPEARING_MESSAGES" = "Disappearing Messages";
|
||||
/* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear, see the *_TIME_AMOUNT strings for context. */
|
||||
"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "Messages in this conversation will disappear after %@.";
|
||||
/* table cell label in conversation settings */
|
||||
"EDIT_GROUP_ACTION" = "Edit Group";
|
||||
/* Label indicating media gallery is empty */
|
||||
|
@ -262,6 +266,10 @@
|
|||
"NOTIFICATIONS_SHOW" = "Show";
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "OK";
|
||||
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
|
||||
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ disabled disappearing messages.";
|
||||
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ set disappearing message time to %@";
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Unable to capture image.";
|
||||
/* alert title */
|
||||
|
@ -390,6 +398,10 @@
|
|||
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "Tap and hold to record a voice message.";
|
||||
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
|
||||
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "Voice Message";
|
||||
/* Info Message when you disable disappearing messages */
|
||||
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "You disabled disappearing messages.";
|
||||
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "You set disappearing message time to %@";
|
||||
// MARK: - Session
|
||||
"continue_2" = "Continue";
|
||||
"copy" = "Copy";
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "Crea un archivo comprimido de este fichero o carpeta y prueba a enviar la versión comprimida.";
|
||||
/* Alert title when picking a document fails because user picked a directory/bundle */
|
||||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "Archivo no admitido";
|
||||
/* Short text label for a voice message attachment, used for thread preview and on the lock screen */
|
||||
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Nota de voz";
|
||||
/* Error indicating the backup export could not export the user's data. */
|
||||
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "Fallo al exportar los datos en la copia de seguridad.";
|
||||
/* Error indicating that the app received an invalid response from CloudKit. */
|
||||
|
@ -150,6 +152,8 @@
|
|||
"DATE_YESTERDAY" = "Ayer";
|
||||
/* table cell label in conversation settings */
|
||||
"DISAPPEARING_MESSAGES" = "Desaparición de mensajes";
|
||||
/* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear, see the *_TIME_AMOUNT strings for context. */
|
||||
"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "Los mensajes de este chat desaparecerán tras %@.";
|
||||
/* table cell label in conversation settings */
|
||||
"EDIT_GROUP_ACTION" = "Editar grupo";
|
||||
/* Label indicating media gallery is empty */
|
||||
|
@ -262,6 +266,10 @@
|
|||
"NOTIFICATIONS_SHOW" = "Ver";
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "OK";
|
||||
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
|
||||
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ ha desactivado la desaparición de mensajes.";
|
||||
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ ha fijado la desaparición de mensajes en %@.";
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Fallo al tomar foto.";
|
||||
/* alert title */
|
||||
|
@ -390,7 +398,10 @@
|
|||
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "Toca y mantén pulsado el icono del micrófono para grabar una nota de voz corta. Toca, arrastra hacia arriba y suelta para grabar notas de voz más largas.";
|
||||
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
|
||||
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "Nota de voz";
|
||||
/* Info Message when you disable disappearing messages */
|
||||
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Has desactivado la desaparición de mensajes.";
|
||||
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Has fijado la desaparición de mensajes en %@.";
|
||||
// MARK: - Session
|
||||
"continue_2" = "Continuar";
|
||||
"copy" = "Copiar";
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "لطفا یک آرشیو فشرده از این فایل یا دایرکتوری را ساخته و ارسال آن را امتحان کنید.";
|
||||
/* Alert title when picking a document fails because user picked a directory/bundle */
|
||||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "این نوع فایل پشتیبانی نمیشود.";
|
||||
/* Short text label for a voice message attachment, used for thread preview and on the lock screen */
|
||||
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "پیام صوتی";
|
||||
/* Error indicating the backup export could not export the user's data. */
|
||||
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "دادههای پشتیبان گرفتهشده قادر به صدور نیستند.";
|
||||
/* Error indicating that the app received an invalid response from CloudKit. */
|
||||
|
@ -150,6 +152,8 @@
|
|||
"DATE_YESTERDAY" = "دیروز";
|
||||
/* table cell label in conversation settings */
|
||||
"DISAPPEARING_MESSAGES" = "پیامهای محوشونده";
|
||||
/* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear, see the *_TIME_AMOUNT strings for context. */
|
||||
"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "پیام های در این مکالمه بعد از %@ ناپدید خواهند شد.";
|
||||
/* table cell label in conversation settings */
|
||||
"EDIT_GROUP_ACTION" = "وایرایش گروه";
|
||||
/* Label indicating media gallery is empty */
|
||||
|
@ -262,6 +266,10 @@
|
|||
"NOTIFICATIONS_NONE" = "هیچ نام و یا محتوایی وجود ندارد";
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "باشه";
|
||||
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
|
||||
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ پیامهای محوشونده را غیرفعال کرده است.";
|
||||
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ زمان محوشدن پیام را روی %@ تنظیم کرده.";
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Unable to capture image.";
|
||||
/* alert title */
|
||||
|
@ -390,7 +398,10 @@
|
|||
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "برای ضبط و ارسال پیام صوتی اینجا را لمس کرده و نگه دارید";
|
||||
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
|
||||
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "پیام صوتی";
|
||||
/* Info Message when you disable disappearing messages */
|
||||
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "شما پیامهای محوشونده را غیرفعال کردید.";
|
||||
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "شما زمان محوشدن پیامها را به %@ تنظیم کردید.";
|
||||
// MARK: - Session
|
||||
"continue_2" = "ادامه ";
|
||||
"copy" = "کپی کردن";
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "Veuillez compresser ce fichier ou ce dossier et essayez plutôt d’envoyer le fichier compressé.";
|
||||
/* Alert title when picking a document fails because user picked a directory/bundle */
|
||||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "Fichier non pris en charge";
|
||||
/* Short text label for a voice message attachment, used for thread preview and on the lock screen */
|
||||
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Message vocal";
|
||||
/* Error indicating the backup export could not export the user's data. */
|
||||
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "Impossible d’exporter les données de sauvegarde.";
|
||||
/* Error indicating that the app received an invalid response from CloudKit. */
|
||||
|
@ -150,6 +152,8 @@
|
|||
"DATE_YESTERDAY" = "Hier";
|
||||
/* table cell label in conversation settings */
|
||||
"DISAPPEARING_MESSAGES" = "Messages éphémères";
|
||||
/* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear, see the *_TIME_AMOUNT strings for context. */
|
||||
"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "Les messages de cette conversation disparaîtront dans %@.";
|
||||
/* table cell label in conversation settings */
|
||||
"EDIT_GROUP_ACTION" = "Modifier le groupe";
|
||||
/* Label indicating media gallery is empty */
|
||||
|
@ -262,6 +266,10 @@
|
|||
"NOTIFICATIONS_SHOW" = "Afficher";
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "Valider";
|
||||
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
|
||||
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ a désactivé les messages éphémères.";
|
||||
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ a défini l’expiration des messages éphémères à %@.";
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Impossible de capturer l’image.";
|
||||
/* alert title */
|
||||
|
@ -390,7 +398,10 @@
|
|||
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "Touchez et maintenez pour enregistrer un message vocal";
|
||||
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
|
||||
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "Message vocal";
|
||||
/* Info Message when you disable disappearing messages */
|
||||
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Vous avez désactivé les messages éphémères.";
|
||||
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Vous avez défini l’expiration des messages éphémères à %@.";
|
||||
// MARK: - Session
|
||||
"continue_2" = "Continuer";
|
||||
"copy" = "Copier";
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "Please create a compressed archive of this file or directory and try sending that instead.";
|
||||
/* Alert title when picking a document fails because user picked a directory/bundle */
|
||||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "Berkas tidak didukung.";
|
||||
/* Short text label for a voice message attachment, used for thread preview and on the lock screen */
|
||||
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Pesan Suara";
|
||||
/* Error indicating the backup export could not export the user's data. */
|
||||
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "Data cadangan tidak dapat diekspor.";
|
||||
/* Error indicating that the app received an invalid response from CloudKit. */
|
||||
|
@ -150,6 +152,8 @@
|
|||
"DATE_YESTERDAY" = "Kemarin";
|
||||
/* table cell label in conversation settings */
|
||||
"DISAPPEARING_MESSAGES" = "Pesan Menghilang";
|
||||
/* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear, see the *_TIME_AMOUNT strings for context. */
|
||||
"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "Pesan dalam percakapan ini akan hilang setelah %@.";
|
||||
/* table cell label in conversation settings */
|
||||
"EDIT_GROUP_ACTION" = "Ubah Grup";
|
||||
/* Label indicating media gallery is empty */
|
||||
|
@ -262,6 +266,10 @@
|
|||
"NOTIFICATIONS_NONE" = "Tanpa Nama atau Isi";
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "OK";
|
||||
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
|
||||
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@menonaktifkan pesan tersembunyi";
|
||||
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@mengatur waktu penghilangan pesan menjadi %@";
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Unable to capture image.";
|
||||
/* alert title */
|
||||
|
@ -390,7 +398,10 @@
|
|||
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "Ketuk dan tahan untuk merekam suara pesan";
|
||||
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
|
||||
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "Pesan suara";
|
||||
/* Info Message when you disable disappearing messages */
|
||||
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Nonaktif pesan tersembunyi";
|
||||
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Anda mengatur pesan tersembunyi pada %@.";
|
||||
// MARK: - Session
|
||||
"continue_2" = "Lanjut";
|
||||
"copy" = "Salin";
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "Crea un archivio compresso di questo file o cartella e quindi prova a inviarlo.";
|
||||
/* Alert title when picking a document fails because user picked a directory/bundle */
|
||||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "Documento non supportato";
|
||||
/* Short text label for a voice message attachment, used for thread preview and on the lock screen */
|
||||
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Messaggio vocale";
|
||||
/* Error indicating the backup export could not export the user's data. */
|
||||
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "I dati del backup non possono essere esportati.";
|
||||
/* Error indicating that the app received an invalid response from CloudKit. */
|
||||
|
@ -150,6 +152,8 @@
|
|||
"DATE_YESTERDAY" = "Ieri";
|
||||
/* table cell label in conversation settings */
|
||||
"DISAPPEARING_MESSAGES" = "Messaggi a scomparsa";
|
||||
/* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear, see the *_TIME_AMOUNT strings for context. */
|
||||
"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "I messaggi in questa conversazione scompariranno dopo %@.";
|
||||
/* table cell label in conversation settings */
|
||||
"EDIT_GROUP_ACTION" = "Modifica gruppo";
|
||||
/* Label indicating media gallery is empty */
|
||||
|
@ -262,6 +266,10 @@
|
|||
"NOTIFICATIONS_SHOW" = "Mostra";
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "OK";
|
||||
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
|
||||
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ ha disabilitato la scomparsa dei messaggi.";
|
||||
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ ha impostato il tempo di scomparsa dei messaggi a %@.";
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Impossibile scattare foto.";
|
||||
/* alert title */
|
||||
|
@ -390,7 +398,10 @@
|
|||
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "Tieni premuto per registrare un messaggio vocale.";
|
||||
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
|
||||
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "Messaggio vocale";
|
||||
/* Info Message when you disable disappearing messages */
|
||||
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Hai disabilitato la scomparsa dei messaggi.";
|
||||
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Hai impostato la scomparsa dei messaggi a %@.";
|
||||
// MARK: - Session
|
||||
"continue_2" = "Continua";
|
||||
"copy" = "Copia";
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "ファイルやディレクトリを圧縮して再送信してみてください。";
|
||||
/* Alert title when picking a document fails because user picked a directory/bundle */
|
||||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "未対応ファイル";
|
||||
/* Short text label for a voice message attachment, used for thread preview and on the lock screen */
|
||||
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "音声メッセージ";
|
||||
/* Error indicating the backup export could not export the user's data. */
|
||||
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "バックアップデータのエクスポートができませんでした。";
|
||||
/* Error indicating that the app received an invalid response from CloudKit. */
|
||||
|
@ -150,6 +152,8 @@
|
|||
"DATE_YESTERDAY" = "昨日";
|
||||
/* table cell label in conversation settings */
|
||||
"DISAPPEARING_MESSAGES" = "消えるメッセージ";
|
||||
/* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear, see the *_TIME_AMOUNT strings for context. */
|
||||
"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "この会話中のメッセージは%@後に消えます";
|
||||
/* table cell label in conversation settings */
|
||||
"EDIT_GROUP_ACTION" = "グループを編集";
|
||||
/* Label indicating media gallery is empty */
|
||||
|
@ -262,6 +266,10 @@
|
|||
"NOTIFICATIONS_SHOW" = "表示内容";
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "OK";
|
||||
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
|
||||
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@がメッセージの消失をオフにしました";
|
||||
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@がメッセージの消失時間を%@に設定しました";
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "画像はキャプチャできません";
|
||||
/* alert title */
|
||||
|
@ -390,7 +398,10 @@
|
|||
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "タップを保持して音声録音";
|
||||
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
|
||||
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "音声メッセージ";
|
||||
/* Info Message when you disable disappearing messages */
|
||||
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "消えるメッセージをオフにしました";
|
||||
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "消えるメッセージの消失時間を%@に設定しました";
|
||||
// MARK: - Session
|
||||
"continue_2" = "続行する";
|
||||
"copy" = "コピーする";
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "Nieobsługiwany typ pliku. Spróbuj go skompresować przed ponownym wysyłaniem.";
|
||||
/* Alert title when picking a document fails because user picked a directory/bundle */
|
||||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "Nieobsługiwany plik";
|
||||
/* Short text label for a voice message attachment, used for thread preview and on the lock screen */
|
||||
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Wiadomość głosowa";
|
||||
/* Error indicating the backup export could not export the user's data. */
|
||||
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "Nie udało się eksportować kopii zapasowej.";
|
||||
/* Error indicating that the app received an invalid response from CloudKit. */
|
||||
|
@ -150,6 +152,8 @@
|
|||
"DATE_YESTERDAY" = "Wczoraj";
|
||||
/* table cell label in conversation settings */
|
||||
"DISAPPEARING_MESSAGES" = "Znikające wiadomości";
|
||||
/* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear, see the *_TIME_AMOUNT strings for context. */
|
||||
"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "Wiadomości w tej rozmowie znikną po %@.";
|
||||
/* table cell label in conversation settings */
|
||||
"EDIT_GROUP_ACTION" = "Edytuj grupę";
|
||||
/* Label indicating media gallery is empty */
|
||||
|
@ -262,6 +266,10 @@
|
|||
"NOTIFICATIONS_SHOW" = "Pokaż";
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "OK";
|
||||
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
|
||||
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ wyłączył(a) znikające wiadomości.";
|
||||
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ ustawił(a) znikające wiadomości na %@.";
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Nie można wykonać zdjęcia.";
|
||||
/* alert title */
|
||||
|
@ -390,7 +398,10 @@
|
|||
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "Dotknij i przytrzymaj, aby nagrać wiadomość głosową.";
|
||||
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
|
||||
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "Wiadomość głosowa";
|
||||
/* Info Message when you disable disappearing messages */
|
||||
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Wyłączono znikające wiadomości.";
|
||||
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Ustawiono czasomierz znikających wiadomości na %@.";
|
||||
// MARK: - Session
|
||||
"continue_2" = "Kontyntynuj";
|
||||
"copy" = "Kopiuj";
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "Por favor, crie um arquivo comprimido deste arquivo ou diretório e tente novamente o envio.";
|
||||
/* Alert title when picking a document fails because user picked a directory/bundle */
|
||||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "Arquivo Incompatível";
|
||||
/* Short text label for a voice message attachment, used for thread preview and on the lock screen */
|
||||
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Mensagem de voz";
|
||||
/* Error indicating the backup export could not export the user's data. */
|
||||
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "A cópia de segurança não pôde ser exportada.";
|
||||
/* Error indicating that the app received an invalid response from CloudKit. */
|
||||
|
@ -150,6 +152,8 @@
|
|||
"DATE_YESTERDAY" = "Ontem";
|
||||
/* table cell label in conversation settings */
|
||||
"DISAPPEARING_MESSAGES" = "Mensagens efêmeras";
|
||||
/* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear, see the *_TIME_AMOUNT strings for context. */
|
||||
"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "Mensagens nesta conversa desaparecem após %@.";
|
||||
/* table cell label in conversation settings */
|
||||
"EDIT_GROUP_ACTION" = "Editar Grupo";
|
||||
/* Label indicating media gallery is empty */
|
||||
|
@ -262,6 +266,10 @@
|
|||
"NOTIFICATIONS_SHOW" = "Exibir";
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "OK";
|
||||
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
|
||||
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ desabilitou mensagens efêmeras.";
|
||||
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ definiu a expiração da mensagem efêmera para %@.";
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Não foi possível capturar a imagem.";
|
||||
/* alert title */
|
||||
|
@ -390,7 +398,10 @@
|
|||
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "Toque e segure para gravar uma mensagem de voz.";
|
||||
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
|
||||
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "Mensagem de voz";
|
||||
/* Info Message when you disable disappearing messages */
|
||||
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Você desabilitou mensagens efêmeras.";
|
||||
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Você definiu a expiração de mensagens efêmeras para %@.";
|
||||
// MARK: - Session
|
||||
"continue_2" = "Continuar";
|
||||
"copy" = "Copiar";
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "Пожалуйста, создайте сжатый архив этого файла или папки и попробуйте отправить его.";
|
||||
/* Alert title when picking a document fails because user picked a directory/bundle */
|
||||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "Неподдерживаемый файл";
|
||||
/* Short text label for a voice message attachment, used for thread preview and on the lock screen */
|
||||
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Голосовое сообщение";
|
||||
/* Error indicating the backup export could not export the user's data. */
|
||||
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "Не удалось экспортировать резервную копию.";
|
||||
/* Error indicating that the app received an invalid response from CloudKit. */
|
||||
|
@ -150,6 +152,8 @@
|
|||
"DATE_YESTERDAY" = "Вчера";
|
||||
/* table cell label in conversation settings */
|
||||
"DISAPPEARING_MESSAGES" = "Исчезающие сообщения";
|
||||
/* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear, see the *_TIME_AMOUNT strings for context. */
|
||||
"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "Сообщения в этой беседе исчезнут после %@.";
|
||||
/* table cell label in conversation settings */
|
||||
"EDIT_GROUP_ACTION" = "Изменить группу";
|
||||
/* Label indicating media gallery is empty */
|
||||
|
@ -262,6 +266,10 @@
|
|||
"NOTIFICATIONS_SHOW" = "Показывать";
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "Ок";
|
||||
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
|
||||
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ отключил(а) исчезающие сообщения.";
|
||||
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ установил(а) время исчезновения сообщений — %@.";
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Невозможно сделать снимок.";
|
||||
/* alert title */
|
||||
|
@ -390,6 +398,10 @@
|
|||
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "Нажмите и удерживайте для записи голосового сообщения";
|
||||
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
|
||||
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "Голосовое сообщение";
|
||||
/* Info Message when you disable disappearing messages */
|
||||
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Вы отключили исчезающие сообщения.";
|
||||
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "Вы установили время исчезновения сообщений — %@.";
|
||||
// MARK: - Session
|
||||
"continue_2" = "Продолжить";
|
||||
"copy" = "Копировать";
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "Please create a compressed archive of this file or directory and try sending that instead.";
|
||||
/* Alert title when picking a document fails because user picked a directory/bundle */
|
||||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "Nepodporovaný súbor";
|
||||
/* Short text label for a voice message attachment, used for thread preview and on the lock screen */
|
||||
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Voice Message";
|
||||
/* Error indicating the backup export could not export the user's data. */
|
||||
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "Backup data could not be exported.";
|
||||
/* Error indicating that the app received an invalid response from CloudKit. */
|
||||
|
@ -150,6 +152,8 @@
|
|||
"DATE_YESTERDAY" = "Včera";
|
||||
/* table cell label in conversation settings */
|
||||
"DISAPPEARING_MESSAGES" = "Miznúce správy";
|
||||
/* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear, see the *_TIME_AMOUNT strings for context. */
|
||||
"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "Messages in this conversation will disappear after %@.";
|
||||
/* table cell label in conversation settings */
|
||||
"EDIT_GROUP_ACTION" = "Upraviť skupinu";
|
||||
/* Label indicating media gallery is empty */
|
||||
|
@ -262,6 +266,10 @@
|
|||
"NOTIFICATIONS_SHOW" = "Zobraziť";
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "OK";
|
||||
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
|
||||
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ disabled disappearing messages.";
|
||||
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ set disappearing message time to %@";
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Unable to capture image.";
|
||||
/* alert title */
|
||||
|
@ -390,6 +398,10 @@
|
|||
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "Tap and hold to record a voice message.";
|
||||
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
|
||||
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "Hlasová správa";
|
||||
/* Info Message when you disable disappearing messages */
|
||||
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "You disabled disappearing messages.";
|
||||
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "You set disappearing message time to %@";
|
||||
// MARK: - Session
|
||||
"continue_2" = "Pokračovať";
|
||||
"copy" = "Kopírovať";
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "Please create a compressed archive of this file or directory and try sending that instead.";
|
||||
/* Alert title when picking a document fails because user picked a directory/bundle */
|
||||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "Unsupported File";
|
||||
/* Short text label for a voice message attachment, used for thread preview and on the lock screen */
|
||||
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "Voice Message";
|
||||
/* Error indicating the backup export could not export the user's data. */
|
||||
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "Backup data could not be exported.";
|
||||
/* Error indicating that the app received an invalid response from CloudKit. */
|
||||
|
@ -150,6 +152,8 @@
|
|||
"DATE_YESTERDAY" = "Yesterday";
|
||||
/* table cell label in conversation settings */
|
||||
"DISAPPEARING_MESSAGES" = "Disappearing Messages";
|
||||
/* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear, see the *_TIME_AMOUNT strings for context. */
|
||||
"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "Messages in this conversation will disappear after %@.";
|
||||
/* table cell label in conversation settings */
|
||||
"EDIT_GROUP_ACTION" = "Edit Group";
|
||||
/* Label indicating media gallery is empty */
|
||||
|
@ -268,6 +272,10 @@
|
|||
"NOTIFICATIONS_SHOW" = "Show";
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "OK";
|
||||
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
|
||||
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ disabled disappearing messages.";
|
||||
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ set disappearing message time to %@";
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Unable to capture image.";
|
||||
/* alert title */
|
||||
|
@ -396,7 +404,10 @@
|
|||
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "Tap and hold to record a voice message.";
|
||||
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
|
||||
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "Voice Message";
|
||||
/* Info Message when you disable disappearing messages */
|
||||
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "You disabled disappearing messages.";
|
||||
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "You set disappearing message time to %@";
|
||||
// MARK: - Session
|
||||
"continue_2" = "Tiếp tục";
|
||||
"copy" = "Sao chép";
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_BODY" = "请将此文件或目录压缩后再发送。";
|
||||
/* Alert title when picking a document fails because user picked a directory/bundle */
|
||||
"ATTACHMENT_PICKER_DOCUMENTS_PICKED_DIRECTORY_FAILED_ALERT_TITLE" = "不支持的文件";
|
||||
/* Short text label for a voice message attachment, used for thread preview and on the lock screen */
|
||||
"ATTACHMENT_TYPE_VOICE_MESSAGE" = "语音消息";
|
||||
/* Error indicating the backup export could not export the user's data. */
|
||||
"BACKUP_EXPORT_ERROR_COULD_NOT_EXPORT" = "无法导出要备份的数据。";
|
||||
/* Error indicating that the app received an invalid response from CloudKit. */
|
||||
|
@ -150,6 +152,8 @@
|
|||
"DATE_YESTERDAY" = "昨日";
|
||||
/* table cell label in conversation settings */
|
||||
"DISAPPEARING_MESSAGES" = "阅后即焚";
|
||||
/* Info Message when added to a group which has enabled disappearing messages. Embeds {{time amount}} before messages disappear, see the *_TIME_AMOUNT strings for context. */
|
||||
"DISAPPEARING_MESSAGES_CONFIGURATION_GROUP_EXISTING_FORMAT" = "此对话中的消息将在%@后消失。";
|
||||
/* table cell label in conversation settings */
|
||||
"EDIT_GROUP_ACTION" = "编辑群聊";
|
||||
/* Label indicating media gallery is empty */
|
||||
|
@ -262,6 +266,10 @@
|
|||
"NOTIFICATIONS_SHOW" = "显示";
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "好";
|
||||
/* Info Message when {{other user}} disables or doesn't support disappearing messages */
|
||||
"OTHER_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ 取消了阅后即焚。";
|
||||
/* Info Message when {{other user}} updates message expiration to {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"OTHER_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "%@ 设置了消息 %@ 后消失。";
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "无法拍摄图片。";
|
||||
/* alert title */
|
||||
|
@ -390,7 +398,10 @@
|
|||
"VOICE_MESSAGE_TOO_SHORT_ALERT_MESSAGE" = "按住不放来录取语音消息。";
|
||||
/* Title for the alert indicating the 'voice message' needs to be held to be held down to record. */
|
||||
"VOICE_MESSAGE_TOO_SHORT_ALERT_TITLE" = "语音消息";
|
||||
/* Info Message when you disable disappearing messages */
|
||||
"YOU_DISABLED_DISAPPEARING_MESSAGES_CONFIGURATION" = "您取消了阅后即焚。";
|
||||
/* Info message embedding a {{time amount}}, see the *_TIME_AMOUNT strings for context. */
|
||||
"YOU_UPDATED_DISAPPEARING_MESSAGES_CONFIGURATION" = "您设置了消息%@后消失。";
|
||||
// MARK: - Session
|
||||
"continue_2" = "继续";
|
||||
"copy" = "复制";
|
||||
|
|
|
@ -255,50 +255,6 @@ public class NotificationPresenter: NSObject, NotificationsProtocol {
|
|||
}
|
||||
}
|
||||
|
||||
public func notifyUser(for errorMessage: TSErrorMessage, thread: TSThread, transaction: YapDatabaseReadWriteTransaction) {
|
||||
|
||||
let notificationTitle: String?
|
||||
switch self.previewType {
|
||||
case .namePreview, .nameNoPreview:
|
||||
notificationTitle = thread.name()
|
||||
case .noNameNoPreview:
|
||||
notificationTitle = nil
|
||||
}
|
||||
|
||||
let notificationBody = errorMessage.previewText(with: transaction)
|
||||
|
||||
guard let threadId = thread.uniqueId else {
|
||||
owsFailDebug("threadId was unexpectedly nil")
|
||||
return
|
||||
}
|
||||
|
||||
let userInfo = [
|
||||
AppNotificationUserInfoKey.threadId: threadId
|
||||
]
|
||||
|
||||
transaction.addCompletionQueue(DispatchQueue.main) {
|
||||
let sound = self.requestSound(thread: thread)
|
||||
self.adaptee.notify(category: .errorMessage,
|
||||
title: notificationTitle,
|
||||
body: notificationBody,
|
||||
userInfo: userInfo,
|
||||
sound: sound)
|
||||
}
|
||||
}
|
||||
|
||||
public func notifyUser(forThreadlessErrorMessage errorMessage: TSErrorMessage, transaction: YapDatabaseReadWriteTransaction) {
|
||||
let notificationBody = errorMessage.previewText(with: transaction)
|
||||
|
||||
transaction.addCompletionQueue(DispatchQueue.main) {
|
||||
let sound = self.checkIfShouldPlaySound() ? OWSSounds.globalNotificationSound() : nil
|
||||
self.adaptee.notify(category: .threadlessErrorMessage,
|
||||
title: nil,
|
||||
body: notificationBody,
|
||||
userInfo: [:],
|
||||
sound: sound)
|
||||
}
|
||||
}
|
||||
|
||||
@objc
|
||||
public func cancelNotifications(threadId: String) {
|
||||
self.adaptee.cancelNotifications(threadId: threadId)
|
||||
|
|
|
@ -126,7 +126,7 @@ final class QRCodeVC : BaseVC, UIPageViewControllerDataSource, UIPageViewControl
|
|||
alert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default, handler: nil))
|
||||
presentAlert(alert)
|
||||
} else {
|
||||
let thread = TSContactThread.getOrCreateThread(contactId: hexEncodedPublicKey)
|
||||
let thread = TSContactThread.getOrCreateThread(contactSessionID: hexEncodedPublicKey)
|
||||
presentingViewController?.dismiss(animated: true, completion: nil)
|
||||
SignalApp.shared().presentConversation(for: thread, action: .compose, animated: false)
|
||||
}
|
||||
|
|
|
@ -161,7 +161,7 @@ final class ConversationCell : UITableViewCell {
|
|||
MentionsManager.populateUserPublicKeyCacheIfNeeded(for: threadID) // FIXME: This is a terrible place to do this
|
||||
let isBlocked: Bool
|
||||
if let thread = thread as? TSContactThread {
|
||||
isBlocked = SSKEnvironment.shared.blockingManager.isRecipientIdBlocked(thread.contactIdentifier())
|
||||
isBlocked = SSKEnvironment.shared.blockingManager.isRecipientIdBlocked(thread.contactSessionID())
|
||||
} else {
|
||||
isBlocked = false
|
||||
}
|
||||
|
@ -220,7 +220,7 @@ final class ConversationCell : UITableViewCell {
|
|||
if threadViewModel.threadRecord.isNoteToSelf() {
|
||||
return NSLocalizedString("NOTE_TO_SELF", comment: "")
|
||||
} else {
|
||||
let hexEncodedPublicKey = threadViewModel.contactIdentifier!
|
||||
let hexEncodedPublicKey = threadViewModel.contactSessionID!
|
||||
return Storage.shared.getContact(with: hexEncodedPublicKey)?.displayName(for: .regular) ?? hexEncodedPublicKey
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,8 +5,8 @@ enum ContactUtilities {
|
|||
var result: [String] = []
|
||||
Storage.read { transaction in
|
||||
TSContactThread.enumerateCollectionObjects(with: transaction) { object, _ in
|
||||
guard let thread = object as? TSContactThread, thread.shouldThreadBeVisible else { return }
|
||||
result.append(thread.contactIdentifier())
|
||||
guard let thread = object as? TSContactThread, thread.shouldBeVisible else { return }
|
||||
result.append(thread.contactSessionID())
|
||||
}
|
||||
}
|
||||
func getDisplayName(for publicKey: String) -> String {
|
||||
|
|
|
@ -73,8 +73,6 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
|
|||
// Specifically, it causes YDB's "view version" checks to fail.
|
||||
- (void)readWriteWithBlock:(void (^)(YapDatabaseReadWriteTransaction *transaction))block
|
||||
{
|
||||
id<OWSDatabaseConnectionDelegate> delegate = self.delegate;
|
||||
|
||||
OWSBackgroundTask *_Nullable backgroundTask = nil;
|
||||
if (CurrentAppContext().isMainApp && !CurrentAppContext().isRunningTests) {
|
||||
backgroundTask = [OWSBackgroundTask backgroundTaskWithLabelStr:__PRETTY_FUNCTION__];
|
||||
|
@ -98,8 +96,6 @@ NSString *const kNSUserDefaults_DatabaseExtensionVersionMap = @"kNSUserDefaults_
|
|||
completionQueue:(nullable dispatch_queue_t)completionQueue
|
||||
completionBlock:(nullable dispatch_block_t)completionBlock
|
||||
{
|
||||
id<OWSDatabaseConnectionDelegate> delegate = self.delegate;
|
||||
|
||||
__block OWSBackgroundTask *_Nullable backgroundTask = nil;
|
||||
if (CurrentAppContext().isMainApp) {
|
||||
backgroundTask = [OWSBackgroundTask backgroundTaskWithLabelStr:__PRETTY_FUNCTION__];
|
||||
|
|
|
@ -6,9 +6,7 @@ extension Storage {
|
|||
}
|
||||
|
||||
private static let closedGroupPublicKeyCollection = "SNClosedGroupPublicKeyCollection"
|
||||
|
||||
private static let closedGroupFormationTimestampCollection = "SNClosedGroupFormationTimestampCollection"
|
||||
|
||||
private static let closedGroupZombieMembersCollection = "SNClosedGroupZombieMembersCollection"
|
||||
|
||||
public func getClosedGroupEncryptionKeyPairs(for groupPublicKey: String) -> [ECKeyPair] {
|
||||
|
|
|
@ -16,7 +16,7 @@ extension Storage {
|
|||
let groupID = LKGroupUtilities.getEncodedClosedGroupIDAsData(groupPublicKey)
|
||||
threadOrNil = TSGroupThread.fetch(uniqueId: TSGroupThread.threadId(fromGroupId: groupID), transaction: transaction)
|
||||
} else {
|
||||
threadOrNil = TSContactThread.getOrCreateThread(withContactId: publicKey, transaction: transaction)
|
||||
threadOrNil = TSContactThread.getOrCreateThread(withContactSessionID: publicKey, transaction: transaction)
|
||||
}
|
||||
return threadOrNil?.uniqueId
|
||||
}
|
||||
|
|
|
@ -158,7 +158,6 @@ extension Storage {
|
|||
// MARK: - Metadata
|
||||
|
||||
private static let openGroupUserCountCollection = "SNOpenGroupUserCountCollection"
|
||||
private static let openGroupMessageIDCollection = "LKMessageIDCollection"
|
||||
private static let openGroupImageCollection = "SNOpenGroupImageCollection"
|
||||
|
||||
public func getUserCount(forV2OpenGroupWithID openGroupID: String) -> UInt64? {
|
||||
|
@ -172,18 +171,6 @@ extension Storage {
|
|||
public func setUserCount(to newValue: UInt64, forV2OpenGroupWithID openGroupID: String, using transaction: Any) {
|
||||
(transaction as! YapDatabaseReadWriteTransaction).setObject(newValue, forKey: openGroupID, inCollection: Storage.openGroupUserCountCollection)
|
||||
}
|
||||
|
||||
public func getIDForMessage(withServerID serverID: UInt64) -> String? {
|
||||
var result: String? = nil
|
||||
Storage.read { transaction in
|
||||
result = transaction.object(forKey: String(serverID), inCollection: Storage.openGroupMessageIDCollection) as? String
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
public func setIDForMessage(withServerID serverID: UInt64, to messageID: String, using transaction: Any) {
|
||||
(transaction as! YapDatabaseReadWriteTransaction).setObject(messageID, forKey: String(serverID), inCollection: Storage.openGroupMessageIDCollection)
|
||||
}
|
||||
|
||||
public func getOpenGroupImage(for room: String, on server: String) -> Data? {
|
||||
var result: Data?
|
||||
|
|
|
@ -234,7 +234,7 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
|
|||
}
|
||||
TSThread *thread = (TSThread *)object;
|
||||
|
||||
if (thread.shouldThreadBeVisible) {
|
||||
if (thread.shouldBeVisible) {
|
||||
// Do nothing; we never hide threads that have ever had a message.
|
||||
} else {
|
||||
YapDatabaseViewTransaction *viewTransaction = [transaction ext:TSMessageDatabaseViewExtensionName];
|
||||
|
@ -244,7 +244,7 @@ NSString *const TSLazyRestoreAttachmentsGroup = @"TSLazyRestoreAttachmentsGroup"
|
|||
}
|
||||
}
|
||||
|
||||
return [thread isArchivedWithTransaction:transaction] ? TSArchiveGroup : TSInboxGroup;
|
||||
return TSInboxGroup;
|
||||
}];
|
||||
|
||||
YapDatabaseViewSorting *viewSorting = [self threadSorting];
|
||||
|
|
|
@ -9,7 +9,7 @@ public extension Message {
|
|||
|
||||
static func from(_ thread: TSThread) -> Message.Destination {
|
||||
if let thread = thread as? TSContactThread {
|
||||
return .contact(publicKey: thread.contactIdentifier())
|
||||
return .contact(publicKey: thread.contactSessionID())
|
||||
} else if let thread = thread as? TSGroupThread, thread.isClosedGroup {
|
||||
let groupID = thread.groupModel.groupId
|
||||
let groupPublicKey = LKGroupUtilities.getDecodedGroupID(groupID)
|
||||
|
|
|
@ -1,76 +0,0 @@
|
|||
//
|
||||
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import <SessionMessagingKit/OWSReadTracking.h>
|
||||
#import <SessionMessagingKit/TSMessage.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class SNProtoEnvelope;
|
||||
|
||||
typedef NS_ENUM(int32_t, TSErrorMessageType) {
|
||||
TSErrorMessageNoSession,
|
||||
// DEPRECATED: We no longer create TSErrorMessageWrongTrustedIdentityKey, but
|
||||
// persisted legacy messages could exist indefinitly.
|
||||
TSErrorMessageWrongTrustedIdentityKey,
|
||||
TSErrorMessageInvalidKeyException,
|
||||
// unused
|
||||
TSErrorMessageMissingKeyId,
|
||||
TSErrorMessageInvalidMessage,
|
||||
// unused
|
||||
TSErrorMessageDuplicateMessage,
|
||||
TSErrorMessageInvalidVersion,
|
||||
TSErrorMessageNonBlockingIdentityChange,
|
||||
TSErrorMessageUnknownContactBlockOffer,
|
||||
TSErrorMessageGroupCreationFailed,
|
||||
};
|
||||
|
||||
@interface TSErrorMessage : TSMessage <OWSReadTracking>
|
||||
|
||||
- (instancetype)initMessageWithTimestamp:(uint64_t)timestamp
|
||||
inThread:(nullable TSThread *)thread
|
||||
messageBody:(nullable NSString *)body
|
||||
attachmentIds:(NSArray<NSString *> *)attachmentIds
|
||||
expiresInSeconds:(uint32_t)expiresInSeconds
|
||||
expireStartedAt:(uint64_t)expireStartedAt
|
||||
quotedMessage:(nullable TSQuotedMessage *)quotedMessage
|
||||
contactShare:(nullable OWSContact *)contact
|
||||
linkPreview:(nullable OWSLinkPreview *)linkPreview NS_UNAVAILABLE;
|
||||
|
||||
- (instancetype)initWithTimestamp:(uint64_t)timestamp
|
||||
inThread:(nullable TSThread *)thread
|
||||
messageBody:(nullable NSString *)body
|
||||
attachmentIds:(NSArray<NSString *> *)attachmentIds
|
||||
expiresInSeconds:(uint32_t)expiresInSeconds
|
||||
expireStartedAt:(uint64_t)expireStartedAt NS_UNAVAILABLE;
|
||||
|
||||
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
- (instancetype)initWithTimestamp:(uint64_t)timestamp
|
||||
inThread:(nullable TSThread *)thread
|
||||
failedMessageType:(TSErrorMessageType)errorMessageType
|
||||
recipientId:(nullable NSString *)recipientId NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
+ (instancetype)corruptedMessageWithEnvelope:(SNProtoEnvelope *)envelope
|
||||
withTransaction:(YapDatabaseReadWriteTransaction *)transaction;
|
||||
|
||||
+ (instancetype)corruptedMessageInUnknownThread;
|
||||
|
||||
+ (instancetype)invalidVersionWithEnvelope:(SNProtoEnvelope *)envelope
|
||||
withTransaction:(YapDatabaseReadWriteTransaction *)transaction;
|
||||
|
||||
+ (instancetype)invalidKeyExceptionWithEnvelope:(SNProtoEnvelope *)envelope
|
||||
withTransaction:(YapDatabaseReadWriteTransaction *)transaction;
|
||||
|
||||
+ (instancetype)missingSessionWithEnvelope:(SNProtoEnvelope *)envelope
|
||||
withTransaction:(YapDatabaseReadWriteTransaction *)transaction;
|
||||
|
||||
+ (instancetype)nonblockingIdentityChangeInThread:(TSThread *)thread recipientId:(NSString *)recipientId;
|
||||
|
||||
@property (nonatomic, readonly) TSErrorMessageType errorType;
|
||||
@property (nullable, nonatomic, readonly) NSString *recipientId;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -1,219 +0,0 @@
|
|||
//
|
||||
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TSErrorMessage.h"
|
||||
#import "SSKEnvironment.h"
|
||||
#import "TSContactThread.h"
|
||||
#import "TSErrorMessage_privateConstructor.h"
|
||||
#import <SignalCoreKit/NSDate+OWS.h>
|
||||
#import <YapDatabase/YapDatabaseConnection.h>
|
||||
#import <SessionMessagingKit/SessionMessagingKit-Swift.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
NSUInteger TSErrorMessageSchemaVersion = 1;
|
||||
|
||||
@interface TSErrorMessage ()
|
||||
|
||||
@property (nonatomic, getter=wasRead) BOOL read;
|
||||
|
||||
@property (nonatomic, readonly) NSUInteger errorMessageSchemaVersion;
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@implementation TSErrorMessage
|
||||
|
||||
- (nullable instancetype)initWithCoder:(NSCoder *)coder
|
||||
{
|
||||
self = [super initWithCoder:coder];
|
||||
if (!self) {
|
||||
return self;
|
||||
}
|
||||
|
||||
if (self.errorMessageSchemaVersion < 1) {
|
||||
_read = YES;
|
||||
}
|
||||
|
||||
_errorMessageSchemaVersion = TSErrorMessageSchemaVersion;
|
||||
|
||||
if (self.isDynamicInteraction) {
|
||||
self.read = YES;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)initWithTimestamp:(uint64_t)timestamp
|
||||
inThread:(nullable TSThread *)thread
|
||||
failedMessageType:(TSErrorMessageType)errorMessageType
|
||||
recipientId:(nullable NSString *)recipientId
|
||||
{
|
||||
self = [super initMessageWithTimestamp:timestamp
|
||||
inThread:thread
|
||||
messageBody:nil
|
||||
attachmentIds:@[]
|
||||
expiresInSeconds:0
|
||||
expireStartedAt:0
|
||||
quotedMessage:nil
|
||||
linkPreview:nil];
|
||||
|
||||
if (!self) {
|
||||
return self;
|
||||
}
|
||||
|
||||
_errorType = errorMessageType;
|
||||
_recipientId = recipientId;
|
||||
_errorMessageSchemaVersion = TSErrorMessageSchemaVersion;
|
||||
|
||||
if (self.isDynamicInteraction) {
|
||||
self.read = YES;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)initWithTimestamp:(uint64_t)timestamp
|
||||
inThread:(nullable TSThread *)thread
|
||||
failedMessageType:(TSErrorMessageType)errorMessageType
|
||||
{
|
||||
return [self initWithTimestamp:timestamp inThread:thread failedMessageType:errorMessageType recipientId:nil];
|
||||
}
|
||||
|
||||
- (instancetype)initWithEnvelope:(SNProtoEnvelope *)envelope
|
||||
withTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
failedMessageType:(TSErrorMessageType)errorMessageType
|
||||
{
|
||||
NSString *source = envelope.source;
|
||||
TSContactThread *contactThread =
|
||||
[TSContactThread getOrCreateThreadWithContactId:source transaction:transaction];
|
||||
|
||||
// Legit usage of senderTimestamp. We don't actually currently surface it in the UI, but it serves as
|
||||
// a reference to the envelope which we failed to process.
|
||||
return [self initWithTimestamp:envelope.timestamp inThread:contactThread failedMessageType:errorMessageType];
|
||||
}
|
||||
|
||||
- (OWSInteractionType)interactionType
|
||||
{
|
||||
return OWSInteractionType_Error;
|
||||
}
|
||||
|
||||
- (NSString *)previewTextWithTransaction:(YapDatabaseReadTransaction *)transaction
|
||||
{
|
||||
switch (_errorType) {
|
||||
case TSErrorMessageNoSession:
|
||||
return NSLocalizedString(@"ERROR_MESSAGE_NO_SESSION", @"");
|
||||
case TSErrorMessageInvalidMessage:
|
||||
return NSLocalizedString(@"ERROR_MESSAGE_INVALID_MESSAGE", @"");
|
||||
case TSErrorMessageInvalidVersion:
|
||||
return NSLocalizedString(@"ERROR_MESSAGE_INVALID_VERSION", @"");
|
||||
case TSErrorMessageDuplicateMessage:
|
||||
return NSLocalizedString(@"ERROR_MESSAGE_DUPLICATE_MESSAGE", @"");
|
||||
case TSErrorMessageInvalidKeyException:
|
||||
return NSLocalizedString(@"ERROR_MESSAGE_INVALID_KEY_EXCEPTION", @"");
|
||||
case TSErrorMessageWrongTrustedIdentityKey:
|
||||
return NSLocalizedString(@"ERROR_MESSAGE_WRONG_TRUSTED_IDENTITY_KEY", @"");
|
||||
case TSErrorMessageNonBlockingIdentityChange: {
|
||||
if (self.recipientId) {
|
||||
NSString *messageFormat = NSLocalizedString(@"ERROR_MESSAGE_NON_BLOCKING_IDENTITY_CHANGE_FORMAT",
|
||||
@"Shown when signal users safety numbers changed, embeds the user's {{name or phone number}}");
|
||||
|
||||
return [NSString stringWithFormat:messageFormat, self.recipientId];
|
||||
} else {
|
||||
// recipientId will be nil for legacy errors
|
||||
return NSLocalizedString(
|
||||
@"ERROR_MESSAGE_NON_BLOCKING_IDENTITY_CHANGE", @"Shown when signal users safety numbers changed");
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TSErrorMessageUnknownContactBlockOffer:
|
||||
return NSLocalizedString(@"UNKNOWN_CONTACT_BLOCK_OFFER",
|
||||
@"Message shown in conversation view that offers to block an unknown user.");
|
||||
case TSErrorMessageGroupCreationFailed:
|
||||
return NSLocalizedString(@"GROUP_CREATION_FAILED",
|
||||
@"Message shown in conversation view that indicates there were issues with group creation.");
|
||||
default:
|
||||
return NSLocalizedString(@"ERROR_MESSAGE_UNKNOWN_ERROR", @"");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+ (instancetype)corruptedMessageWithEnvelope:(SNProtoEnvelope *)envelope
|
||||
withTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
return [[self alloc] initWithEnvelope:envelope
|
||||
withTransaction:transaction
|
||||
failedMessageType:TSErrorMessageInvalidMessage];
|
||||
}
|
||||
|
||||
+ (instancetype)corruptedMessageInUnknownThread
|
||||
{
|
||||
// MJK TODO - Seems like we could safely remove this timestamp
|
||||
return [[self alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp]
|
||||
inThread:nil
|
||||
failedMessageType:TSErrorMessageInvalidMessage];
|
||||
}
|
||||
|
||||
+ (instancetype)invalidVersionWithEnvelope:(SNProtoEnvelope *)envelope
|
||||
withTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
return [[self alloc] initWithEnvelope:envelope
|
||||
withTransaction:transaction
|
||||
failedMessageType:TSErrorMessageInvalidVersion];
|
||||
}
|
||||
|
||||
+ (instancetype)invalidKeyExceptionWithEnvelope:(SNProtoEnvelope *)envelope
|
||||
withTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
return [[self alloc] initWithEnvelope:envelope
|
||||
withTransaction:transaction
|
||||
failedMessageType:TSErrorMessageInvalidKeyException];
|
||||
}
|
||||
|
||||
+ (instancetype)missingSessionWithEnvelope:(SNProtoEnvelope *)envelope
|
||||
withTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
return
|
||||
[[self alloc] initWithEnvelope:envelope withTransaction:transaction failedMessageType:TSErrorMessageNoSession];
|
||||
}
|
||||
|
||||
+ (instancetype)nonblockingIdentityChangeInThread:(TSThread *)thread recipientId:(NSString *)recipientId
|
||||
{
|
||||
// MJK TODO - should be safe to remove this senderTimestamp
|
||||
return [[self alloc] initWithTimestamp:[NSDate ows_millisecondTimeStamp]
|
||||
inThread:thread
|
||||
failedMessageType:TSErrorMessageNonBlockingIdentityChange
|
||||
recipientId:recipientId];
|
||||
}
|
||||
|
||||
#pragma mark - OWSReadTracking
|
||||
|
||||
- (uint64_t)expireStartedAt
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
- (BOOL)shouldAffectUnreadCounts
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (void)markAsReadAtTimestamp:(uint64_t)readTimestamp
|
||||
sendReadReceipt:(BOOL)sendReadReceipt
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
if (_read) {
|
||||
return;
|
||||
}
|
||||
|
||||
_read = YES;
|
||||
[self saveWithTransaction:transaction];
|
||||
|
||||
// Ignore sendReadReceipt - it doesn't apply to error messages.
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -1,19 +0,0 @@
|
|||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import <SessionMessagingKit/TSErrorMessage.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface TSErrorMessage ()
|
||||
|
||||
- (instancetype)initWithTimestamp:(uint64_t)timestamp
|
||||
inThread:(nullable TSThread *)thread
|
||||
failedMessageType:(TSErrorMessageType)errorMessageType NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
@property (atomic, nullable) NSData *envelopeData;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
|
@ -36,7 +36,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
}
|
||||
|
||||
if (_authorId == nil) {
|
||||
_authorId = [TSContactThread contactIdFromThreadId:self.uniqueThreadId];
|
||||
_authorId = [TSContactThread contactSessionIDFromThreadID:self.uniqueThreadId];
|
||||
}
|
||||
|
||||
return self;
|
||||
|
|
|
@ -10,8 +10,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
@interface TSInfoMessage : TSMessage <OWSReadTracking>
|
||||
|
||||
typedef NS_ENUM(NSInteger, TSInfoMessageType) {
|
||||
TSInfoMessageTypeGroupUpdate,
|
||||
TSInfoMessageTypeGroupQuit,
|
||||
TSInfoMessageTypeGroupCreated,
|
||||
TSInfoMessageTypeGroupUpdated,
|
||||
TSInfoMessageTypeGroupCurrentUserLeft,
|
||||
TSInfoMessageTypeDisappearingMessagesUpdate,
|
||||
TSInfoMessageTypeScreenshotNotification,
|
||||
TSInfoMessageTypeMediaSavedNotification
|
||||
|
|
|
@ -103,10 +103,12 @@ NSUInteger TSInfoMessageSchemaVersion = 1;
|
|||
- (NSString *)previewTextWithTransaction:(YapDatabaseReadTransaction *)transaction
|
||||
{
|
||||
switch (_messageType) {
|
||||
case TSInfoMessageTypeGroupQuit:
|
||||
return NSLocalizedString(@"GROUP_YOU_LEFT", nil);
|
||||
case TSInfoMessageTypeGroupUpdate:
|
||||
return _customMessage != nil ? _customMessage : NSLocalizedString(@"GROUP_UPDATED", nil);
|
||||
case TSInfoMessageTypeGroupCreated:
|
||||
return NSLocalizedString(@"GROUP_CREATED", @"");
|
||||
case TSInfoMessageTypeGroupCurrentUserLeft:
|
||||
return NSLocalizedString(@"GROUP_YOU_LEFT", @"");
|
||||
case TSInfoMessageTypeGroupUpdated:
|
||||
return _customMessage != nil ? _customMessage : NSLocalizedString(@"GROUP_UPDATED", @"");
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@ typedef NS_ENUM(NSInteger, OWSInteractionType) {
|
|||
OWSInteractionType_Unknown,
|
||||
OWSInteractionType_IncomingMessage,
|
||||
OWSInteractionType_OutgoingMessage,
|
||||
OWSInteractionType_Error,
|
||||
OWSInteractionType_Call,
|
||||
OWSInteractionType_Info,
|
||||
OWSInteractionType_Offer,
|
||||
|
|
|
@ -20,8 +20,6 @@ NSString *NSStringFromOWSInteractionType(OWSInteractionType value)
|
|||
return @"OWSInteractionType_IncomingMessage";
|
||||
case OWSInteractionType_OutgoingMessage:
|
||||
return @"OWSInteractionType_OutgoingMessage";
|
||||
case OWSInteractionType_Error:
|
||||
return @"OWSInteractionType_Error";
|
||||
case OWSInteractionType_Call:
|
||||
return @"OWSInteractionType_Call";
|
||||
case OWSInteractionType_Info:
|
||||
|
|
|
@ -42,8 +42,6 @@ FOUNDATION_EXPORT const unsigned char SessionMessagingKitVersionString[];
|
|||
#import <SessionMessagingKit/TSContactThread.h>
|
||||
#import <SessionMessagingKit/TSDatabaseSecondaryIndexes.h>
|
||||
#import <SessionMessagingKit/TSDatabaseView.h>
|
||||
#import <SessionMessagingKit/TSErrorMessage.h>
|
||||
#import <SessionMessagingKit/TSErrorMessage_privateConstructor.h>
|
||||
#import <SessionMessagingKit/TSGroupModel.h>
|
||||
#import <SessionMessagingKit/TSGroupThread.h>
|
||||
#import <SessionMessagingKit/TSIncomingMessage.h>
|
||||
|
@ -52,6 +50,5 @@ FOUNDATION_EXPORT const unsigned char SessionMessagingKitVersionString[];
|
|||
#import <SessionMessagingKit/TSOutgoingMessage.h>
|
||||
#import <SessionMessagingKit/TSQuotedMessage.h>
|
||||
#import <SessionMessagingKit/TSThread.h>
|
||||
#import <SessionMessagingKit/TSUnreadIndicatorInteraction.h>
|
||||
#import <SessionMessagingKit/YapDatabaseConnection+OWS.h>
|
||||
#import <SessionMessagingKit/YapDatabaseTransaction+OWS.h>
|
||||
|
|
|
@ -50,7 +50,7 @@ public final class OpenGroupManagerV2 : NSObject {
|
|||
storage.write(with: { transaction in
|
||||
let transaction = transaction as! YapDatabaseReadWriteTransaction
|
||||
let thread = TSGroupThread.getOrCreateThread(with: model, transaction: transaction)
|
||||
thread.shouldThreadBeVisible = true
|
||||
thread.shouldBeVisible = true
|
||||
thread.save(with: transaction)
|
||||
storage.setV2OpenGroup(openGroup, for: thread.uniqueId!, using: transaction)
|
||||
}, completion: {
|
||||
|
|
|
@ -80,7 +80,7 @@ NSString *const kOWSBlockingManager_SyncedBlockedGroupIdsKey = @"kOWSBlockingMan
|
|||
{
|
||||
if ([thread isKindOfClass:[TSContactThread class]]) {
|
||||
TSContactThread *contactThread = (TSContactThread *)thread;
|
||||
return [self isRecipientIdBlocked:contactThread.contactIdentifier];
|
||||
return [self isRecipientIdBlocked:contactThread.contactSessionID];
|
||||
} else if ([thread isKindOfClass:[TSGroupThread class]]) {
|
||||
TSGroupThread *groupThread = (TSGroupThread *)thread;
|
||||
return [self isGroupIdBlocked:groupThread.groupModel.groupId];
|
||||
|
|
|
@ -16,7 +16,7 @@ final class DataExtractionNotificationInfoMessage : TSInfoMessage {
|
|||
|
||||
override func previewText(with transaction: YapDatabaseReadTransaction) -> String {
|
||||
guard let thread = thread as? TSContactThread else { return "" } // Should never occur
|
||||
let sessionID = thread.contactIdentifier()
|
||||
let sessionID = thread.contactSessionID()
|
||||
let displayName = Storage.shared.getContact(with: sessionID)?.displayName(for: .regular) ?? sessionID
|
||||
switch messageType {
|
||||
case .screenshotNotification: return "\(displayName) took a screenshot."
|
||||
|
|