Merge tag '2.38.0.11'
This commit is contained in:
commit
07e88009e4
|
@ -47,7 +47,7 @@
|
|||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.38.0.9</string>
|
||||
<string>2.38.0.11</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LOGS_EMAIL</key>
|
||||
|
|
|
@ -82,11 +82,12 @@ extension ConversationSearchController: UISearchResultsUpdating {
|
|||
public func updateSearchResults(for searchController: UISearchController) {
|
||||
Logger.verbose("searchBar.text: \( searchController.searchBar.text ?? "<blank>")")
|
||||
|
||||
guard let searchText = searchController.searchBar.text?.stripped else {
|
||||
guard let rawSearchText = searchController.searchBar.text?.stripped else {
|
||||
self.resultsBar.updateResults(resultSet: nil)
|
||||
self.delegate?.conversationSearchController(self, didUpdateSearchResults: nil)
|
||||
return
|
||||
}
|
||||
let searchText = FullTextSearchFinder.normalize(text: rawSearchText)
|
||||
BenchManager.startEvent(title: "Conversation Search", eventId: searchText)
|
||||
|
||||
guard searchText.count >= ConversationSearchController.kMinimumSearchTextLength else {
|
||||
|
|
|
@ -137,8 +137,7 @@ public class NotificationPresenter: NSObject, NotificationsProtocol {
|
|||
|
||||
@objc
|
||||
public override init() {
|
||||
let userNotificationsFeatureEnabled = true
|
||||
if userNotificationsFeatureEnabled, #available(iOS 10, *) {
|
||||
if #available(iOS 10, *) {
|
||||
self.adaptee = UserNotificationPresenterAdaptee()
|
||||
} else {
|
||||
self.adaptee = LegacyNotificationPresenterAdaptee()
|
||||
|
@ -648,7 +647,7 @@ class NotificationActionHandler {
|
|||
// can be visible to the user immediately upon opening the app, rather than having to watch
|
||||
// it animate in from the homescreen.
|
||||
let shouldAnimate = UIApplication.shared.applicationState == .active
|
||||
signalApp.presentConversation(forThreadId: threadId, animated: shouldAnimate)
|
||||
signalApp.presentConversationAndScrollToFirstUnreadMessage(forThreadId: threadId, animated: shouldAnimate)
|
||||
return Promise.value(())
|
||||
}
|
||||
|
||||
|
|
|
@ -708,10 +708,12 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
initWithString:text
|
||||
attributes:@{ NSFontAttributeName : font, NSForegroundColorAttributeName : textColor }];
|
||||
if (searchText.length >= ConversationSearchController.kMinimumSearchTextLength) {
|
||||
NSString *searchableText = [FullTextSearchFinder normalizeWithText:searchText];
|
||||
NSError *error;
|
||||
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:searchText
|
||||
options:NSRegularExpressionCaseInsensitive
|
||||
error:&error];
|
||||
NSRegularExpression *regex =
|
||||
[[NSRegularExpression alloc] initWithPattern:[NSRegularExpression escapedPatternForString:searchableText]
|
||||
options:NSRegularExpressionCaseInsensitive
|
||||
error:&error];
|
||||
OWSAssertDebug(error == nil);
|
||||
for (NSTextCheckingResult *match in
|
||||
[regex matchesInString:text options:NSMatchingWithoutAnchoringBounds range:NSMakeRange(0, text.length)]) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
//
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import <SignalMessaging/OWSViewController.h>
|
||||
|
@ -25,6 +25,8 @@ typedef NS_ENUM(NSUInteger, ConversationViewAction) {
|
|||
|
||||
- (void)popKeyBoard;
|
||||
|
||||
- (void)scrollToFirstUnreadMessage:(BOOL)isAnimated;
|
||||
|
||||
#pragma mark 3D Touch Methods
|
||||
|
||||
- (void)peekSetup;
|
||||
|
|
|
@ -751,7 +751,7 @@ typedef enum : NSUInteger {
|
|||
|
||||
// We want to set the initial scroll state the first time we enter the view.
|
||||
if (!self.viewHasEverAppeared) {
|
||||
[self scrollToDefaultPosition];
|
||||
[self scrollToDefaultPosition:NO];
|
||||
} else if (self.menuActionsViewController != nil) {
|
||||
[self scrollToMenuActionInteraction:NO];
|
||||
}
|
||||
|
@ -806,7 +806,7 @@ typedef enum : NSUInteger {
|
|||
return [NSIndexPath indexPathForRow:row inSection:0];
|
||||
}
|
||||
|
||||
- (void)scrollToDefaultPosition
|
||||
- (void)scrollToDefaultPosition:(BOOL)isAnimated
|
||||
{
|
||||
if (self.isUserScrolling) {
|
||||
return;
|
||||
|
@ -823,14 +823,14 @@ typedef enum : NSUInteger {
|
|||
|
||||
if (indexPath) {
|
||||
if (indexPath.section == 0 && indexPath.row == 0) {
|
||||
[self.collectionView setContentOffset:CGPointZero animated:NO];
|
||||
[self.collectionView setContentOffset:CGPointZero animated:isAnimated];
|
||||
} else {
|
||||
[self.collectionView scrollToItemAtIndexPath:indexPath
|
||||
atScrollPosition:UICollectionViewScrollPositionTop
|
||||
animated:NO];
|
||||
animated:isAnimated];
|
||||
}
|
||||
} else {
|
||||
[self scrollToBottomAnimated:NO];
|
||||
[self scrollToBottomAnimated:isAnimated];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3875,11 +3875,11 @@ typedef enum : NSUInteger {
|
|||
|
||||
// Adjust content offset to prevent the presented keyboard from obscuring content.
|
||||
if (!self.viewHasEverAppeared) {
|
||||
[self scrollToDefaultPosition];
|
||||
[self scrollToDefaultPosition:NO];
|
||||
} else if (wasScrolledToBottom) {
|
||||
// If we were scrolled to the bottom, don't do any fancy math. Just stay at the bottom.
|
||||
[self scrollToBottomAnimated:NO];
|
||||
} else {
|
||||
} else if (self.isViewCompletelyAppeared) {
|
||||
// If we were scrolled away from the bottom, shift the content in lockstep with the
|
||||
// keyboard, up to the limits of the content bounds.
|
||||
CGFloat insetChange = newInsets.bottom - oldInsets.bottom;
|
||||
|
@ -4011,6 +4011,11 @@ typedef enum : NSUInteger {
|
|||
[self didScrollToBottom];
|
||||
}
|
||||
|
||||
- (void)scrollToFirstUnreadMessage:(BOOL)isAnimated
|
||||
{
|
||||
[self scrollToDefaultPosition:isAnimated];
|
||||
}
|
||||
|
||||
#pragma mark - UIScrollViewDelegate
|
||||
|
||||
- (void)updateLastKnownDistanceFromBottom
|
||||
|
@ -4190,7 +4195,16 @@ typedef enum : NSUInteger {
|
|||
|
||||
// restore first responder to VC
|
||||
[self becomeFirstResponder];
|
||||
[self reloadInputViews];
|
||||
if (@available(iOS 10, *)) {
|
||||
[self reloadInputViews];
|
||||
} else {
|
||||
// We want to change the inputAccessoryView from SearchResults -> MessageInput
|
||||
// reloading too soon on an old iOS9 device caused the inputAccessoryView to go from
|
||||
// SearchResults -> MessageInput -> SearchResults
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[self reloadInputViews];
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark ConversationSearchControllerDelegate
|
||||
|
|
|
@ -371,21 +371,22 @@ const CGFloat kIconViewLength = 24;
|
|||
[weakSelf showMediaGallery];
|
||||
}]];
|
||||
|
||||
// TODO icon
|
||||
[mainSection addItem:[OWSTableItem
|
||||
itemWithCustomCellBlock:^{
|
||||
NSString *title = NSLocalizedString(@"CONVERSATION_SETTINGS_SEARCH",
|
||||
@"Table cell label in conversation settings which returns the user to the "
|
||||
@"conversation with 'search mode' activated");
|
||||
return [weakSelf
|
||||
disclosureCellWithName:title
|
||||
iconName:@"conversation_settings_search"
|
||||
accessibilityIdentifier:ACCESSIBILITY_IDENTIFIER_WITH_NAME(
|
||||
OWSConversationSettingsViewController, @"search")];
|
||||
}
|
||||
actionBlock:^{
|
||||
[weakSelf tappedConversationSearch];
|
||||
}]];
|
||||
if (SSKFeatureFlags.conversationSearch) {
|
||||
[mainSection addItem:[OWSTableItem
|
||||
itemWithCustomCellBlock:^{
|
||||
NSString *title = NSLocalizedString(@"CONVERSATION_SETTINGS_SEARCH",
|
||||
@"Table cell label in conversation settings which returns the user to the "
|
||||
@"conversation with 'search mode' activated");
|
||||
return [weakSelf
|
||||
disclosureCellWithName:title
|
||||
iconName:@"conversation_settings_search"
|
||||
accessibilityIdentifier:ACCESSIBILITY_IDENTIFIER_WITH_NAME(
|
||||
OWSConversationSettingsViewController, @"search")];
|
||||
}
|
||||
actionBlock:^{
|
||||
[weakSelf tappedConversationSearch];
|
||||
}]];
|
||||
}
|
||||
|
||||
if (!isNoteToSelf && !self.isGroupThread && self.thread.hasSafetyNumbers) {
|
||||
[mainSection
|
||||
|
|
|
@ -46,6 +46,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
focusMessageId:(nullable NSString *)focusMessageId
|
||||
animated:(BOOL)isAnimated;
|
||||
|
||||
- (void)presentConversationAndScrollToFirstUnreadMessageForThreadId:(NSString *)threadId animated:(BOOL)isAnimated;
|
||||
|
||||
#pragma mark - Methods
|
||||
|
||||
+ (void)resetAppData;
|
||||
|
|
|
@ -109,7 +109,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
|
||||
DispatchMainThreadSafe(^{
|
||||
UIViewController *frontmostVC = [[UIApplication sharedApplication] frontmostViewController];
|
||||
|
||||
|
||||
if ([frontmostVC isKindOfClass:[ConversationViewController class]]) {
|
||||
ConversationViewController *conversationVC = (ConversationViewController *)frontmostVC;
|
||||
if ([conversationVC.thread.uniqueId isEqualToString:thread.uniqueId]) {
|
||||
|
@ -117,11 +117,42 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[self.homeViewController presentThread:thread action:action focusMessageId:focusMessageId animated:isAnimated];
|
||||
});
|
||||
}
|
||||
|
||||
- (void)presentConversationAndScrollToFirstUnreadMessageForThreadId:(NSString *)threadId animated:(BOOL)isAnimated
|
||||
{
|
||||
OWSAssertIsOnMainThread();
|
||||
OWSAssertDebug(threadId.length > 0);
|
||||
|
||||
OWSLogInfo(@"");
|
||||
|
||||
TSThread *thread = [TSThread fetchObjectWithUniqueID:threadId];
|
||||
if (thread == nil) {
|
||||
OWSFailDebug(@"unable to find thread with id: %@", threadId);
|
||||
return;
|
||||
}
|
||||
|
||||
DispatchMainThreadSafe(^{
|
||||
UIViewController *frontmostVC = [[UIApplication sharedApplication] frontmostViewController];
|
||||
|
||||
if ([frontmostVC isKindOfClass:[ConversationViewController class]]) {
|
||||
ConversationViewController *conversationVC = (ConversationViewController *)frontmostVC;
|
||||
if ([conversationVC.thread.uniqueId isEqualToString:thread.uniqueId]) {
|
||||
[conversationVC scrollToFirstUnreadMessage:isAnimated];
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
[self.homeViewController presentThread:thread
|
||||
action:ConversationViewActionNone
|
||||
focusMessageId:nil
|
||||
animated:isAnimated];
|
||||
});
|
||||
}
|
||||
|
||||
- (void)didChangeCallLoggingPreference:(NSNotification *)notitication
|
||||
{
|
||||
[AppEnvironment.shared.callService createCallUIAdapter];
|
||||
|
|
|
@ -38,8 +38,31 @@
|
|||
self.axis = .horizontal
|
||||
self.spacing = kDotMaxHSpacing
|
||||
self.alignment = .center
|
||||
|
||||
NotificationCenter.default.addObserver(self,
|
||||
selector: #selector(didBecomeActive),
|
||||
name: NSNotification.Name.OWSApplicationDidBecomeActive,
|
||||
object: nil)
|
||||
}
|
||||
|
||||
deinit {
|
||||
NotificationCenter.default.removeObserver(self)
|
||||
}
|
||||
|
||||
// MARK: - Notifications
|
||||
|
||||
@objc func didBecomeActive() {
|
||||
AssertIsOnMainThread()
|
||||
|
||||
// CoreAnimation animations are stopped in the background, so ensure
|
||||
// animations are restored if necessary.
|
||||
if isAnimating {
|
||||
startAnimation()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: -
|
||||
|
||||
@objc
|
||||
public override func sizeThatFits(_ size: CGSize) -> CGSize {
|
||||
return CGSize(width: TypingIndicatorView.kMaxRadiusPt * 3 + kDotMaxHSpacing * 2, height: TypingIndicatorView.kMaxRadiusPt)
|
||||
|
@ -49,8 +72,12 @@
|
|||
return [dot1, dot2, dot3]
|
||||
}
|
||||
|
||||
private var isAnimating = false
|
||||
|
||||
@objc
|
||||
public func startAnimation() {
|
||||
isAnimating = true
|
||||
|
||||
for dot in dots() {
|
||||
dot.startAnimation()
|
||||
}
|
||||
|
@ -58,6 +85,8 @@
|
|||
|
||||
@objc
|
||||
public func stopAnimation() {
|
||||
isAnimating = false
|
||||
|
||||
for dot in dots() {
|
||||
dot.stopAnimation()
|
||||
}
|
||||
|
|
|
@ -2250,7 +2250,7 @@
|
|||
"SETTINGS_UNIDENTIFIED_DELIVERY_LEARN_MORE" = "Saznaj više";
|
||||
|
||||
/* table section label */
|
||||
"SETTINGS_UNIDENTIFIED_DELIVERY_SECTION_TITLE" = "Sealed Sender";
|
||||
"SETTINGS_UNIDENTIFIED_DELIVERY_SECTION_TITLE" = "Zapečaćeni pošiljalac";
|
||||
|
||||
/* switch label */
|
||||
"SETTINGS_UNIDENTIFIED_DELIVERY_SHOW_INDICATORS" = "Display Indicators";
|
||||
|
@ -2262,7 +2262,7 @@
|
|||
"SETTINGS_UNIDENTIFIED_DELIVERY_UNRESTRICTED_ACCESS" = "Allow from Anyone";
|
||||
|
||||
/* table section footer */
|
||||
"SETTINGS_UNIDENTIFIED_DELIVERY_UNRESTRICTED_ACCESS_FOOTER" = "Enable sealed sender for incoming messages from non-contacts and people with whom you have not shared your profile.";
|
||||
"SETTINGS_UNIDENTIFIED_DELIVERY_UNRESTRICTED_ACCESS_FOOTER" = "Aktiviraj opciju zapečaćenog pošiljaoca za poruke koje dolaze od osoba koje nisu među Vašim kontaktima i s kojima niste razmijenili profile.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SETTINGS_VERSION" = "Verzija";
|
||||
|
|
|
@ -96,7 +96,7 @@
|
|||
"ATTACHMENT_APPROVAL_CAPTION_PLACEHOLDER" = "Afegeix una descripció...";
|
||||
|
||||
/* Title for 'caption' mode of the attachment approval view. */
|
||||
"ATTACHMENT_APPROVAL_CAPTION_TITLE" = "Caption";
|
||||
"ATTACHMENT_APPROVAL_CAPTION_TITLE" = "Títol";
|
||||
|
||||
/* Format string for file extension label in call interstitial view */
|
||||
"ATTACHMENT_APPROVAL_FILE_EXTENSION_FORMAT" = "Tipus de fitxer: %@";
|
||||
|
@ -351,7 +351,7 @@
|
|||
"CALL_VIEW_DECLINE_INCOMING_CALL_LABEL" = "Rebutja trucades";
|
||||
|
||||
/* tooltip label when remote party has enabled their video */
|
||||
"CALL_VIEW_ENABLE_VIDEO_HINT" = "Tap here to turn on your video";
|
||||
"CALL_VIEW_ENABLE_VIDEO_HINT" = "Toqueu aquí per activar el vídeo";
|
||||
|
||||
/* Accessibility label for hang up call */
|
||||
"CALL_VIEW_HANGUP_LABEL" = "Finalitza la trucada";
|
||||
|
@ -564,13 +564,13 @@
|
|||
"CONVERSATION_DELETE_CONFIRMATION_ALERT_TITLE" = "Esborrar conversa?";
|
||||
|
||||
/* keyboard toolbar label when no messages match the search string */
|
||||
"CONVERSATION_SEARCH_NO_RESULTS" = "No matches";
|
||||
"CONVERSATION_SEARCH_NO_RESULTS" = "Sense coincidències";
|
||||
|
||||
/* keyboard toolbar label when exactly 1 message matches the search string */
|
||||
"CONVERSATION_SEARCH_ONE_RESULT" = "1 match";
|
||||
"CONVERSATION_SEARCH_ONE_RESULT" = "1 coincidència";
|
||||
|
||||
/* keyboard toolbar label when more than 1 message matches the search string. Embeds {{number/position of the 'currently viewed' result}} and the {{total number of results}} */
|
||||
"CONVERSATION_SEARCH_RESULTS_FORMAT" = "%d of %d matches";
|
||||
"CONVERSATION_SEARCH_RESULTS_FORMAT" = "%d de %d coincidències";
|
||||
|
||||
/* title for conversation settings screen */
|
||||
"CONVERSATION_SETTINGS" = "Configuració del xat";
|
||||
|
@ -624,7 +624,7 @@
|
|||
"CONVERSATION_SETTINGS_NEW_CONTACT" = "Crea un contacte nou";
|
||||
|
||||
/* Table cell label in conversation settings which returns the user to the conversation with 'search mode' activated */
|
||||
"CONVERSATION_SETTINGS_SEARCH" = "Search Conversation";
|
||||
"CONVERSATION_SETTINGS_SEARCH" = "Cerca la conversa";
|
||||
|
||||
/* Label for button that opens conversation settings. */
|
||||
"CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "Toca per canviar";
|
||||
|
@ -1641,13 +1641,13 @@
|
|||
"PHONE_NUMBER_TYPE_WORK_FAX" = "Fax de la feina";
|
||||
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Unable to capture image.";
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "No s'ha pogut capturar la imatge.";
|
||||
|
||||
/* alert title */
|
||||
"PHOTO_CAPTURE_UNABLE_TO_CAPTURE_IMAGE" = "Unable to capture image.";
|
||||
"PHOTO_CAPTURE_UNABLE_TO_CAPTURE_IMAGE" = "No s'ha pogut capturar la imatge.";
|
||||
|
||||
/* alert title */
|
||||
"PHOTO_CAPTURE_UNABLE_TO_INITIALIZE_CAMERA" = "Failed to configure camera.";
|
||||
"PHOTO_CAPTURE_UNABLE_TO_INITIALIZE_CAMERA" = "Ha fallat configurar la càmera.";
|
||||
|
||||
/* label for system photo collections which have no name. */
|
||||
"PHOTO_PICKER_UNNAMED_COLLECTION" = "Àlbum sense nom";
|
||||
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "Telefonades de Vídeo Segures!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "El Signal necessitarà aviat l'iOS 10 o posterior. Actualitzeu-lo a la Configuració del sistema >> General >> Actualitzacions.";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "Actualitzeu l'iOS";
|
||||
|
|
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "Hallo, sichere Videoanrufe!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal wird bald iOS 10 oder neuer erfordern. Bitte aktualisieren über die iOS-Einstellungen: Einstellungen >> Allgemein >> Softwareaktualisierung.";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "iOS aktualisieren";
|
||||
|
|
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "¡Saluda a las vídeollamadas seguras!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal próximamente solo funcionará en iOS 10 o versiones posteriores. Actualiza en Ajustes >> General >> Actualización de software.";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "Actualizar iOS";
|
||||
|
|
|
@ -351,7 +351,7 @@
|
|||
"CALL_VIEW_DECLINE_INCOMING_CALL_LABEL" = "Refuser l’appel entrant";
|
||||
|
||||
/* tooltip label when remote party has enabled their video */
|
||||
"CALL_VIEW_ENABLE_VIDEO_HINT" = "Tap here to turn on your video";
|
||||
"CALL_VIEW_ENABLE_VIDEO_HINT" = "Touchez ici pour activer votre caméra";
|
||||
|
||||
/* Accessibility label for hang up call */
|
||||
"CALL_VIEW_HANGUP_LABEL" = "Raccrocher";
|
||||
|
@ -567,7 +567,7 @@
|
|||
"CONVERSATION_SEARCH_NO_RESULTS" = "Aucune correspondance";
|
||||
|
||||
/* keyboard toolbar label when exactly 1 message matches the search string */
|
||||
"CONVERSATION_SEARCH_ONE_RESULT" = "1 match";
|
||||
"CONVERSATION_SEARCH_ONE_RESULT" = "1 correspondance";
|
||||
|
||||
/* keyboard toolbar label when more than 1 message matches the search string. Embeds {{number/position of the 'currently viewed' result}} and the {{total number of results}} */
|
||||
"CONVERSATION_SEARCH_RESULTS_FORMAT" = "%d sur %dcorrespondances";
|
||||
|
@ -1641,13 +1641,13 @@
|
|||
"PHONE_NUMBER_TYPE_WORK_FAX" = "Télécopieur travail";
|
||||
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Unable to capture image.";
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Impossible de capturer l’image.";
|
||||
|
||||
/* alert title */
|
||||
"PHOTO_CAPTURE_UNABLE_TO_CAPTURE_IMAGE" = "Unable to capture image.";
|
||||
"PHOTO_CAPTURE_UNABLE_TO_CAPTURE_IMAGE" = "Impossible de capturer l’image.";
|
||||
|
||||
/* alert title */
|
||||
"PHOTO_CAPTURE_UNABLE_TO_INITIALIZE_CAMERA" = "Failed to configure camera.";
|
||||
"PHOTO_CAPTURE_UNABLE_TO_INITIALIZE_CAMERA" = "Échec de configuration de l’appareil photo";
|
||||
|
||||
/* label for system photo collections which have no name. */
|
||||
"PHOTO_PICKER_UNNAMED_COLLECTION" = "Album sans nom";
|
||||
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "Bienvenue aux appels vidéo sécurisés !";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Bientôt, Signal exigera iOS 10 ou ultérieure. Veuillez effectuer une mise à niveau dans l’appli Réglage >> Général >> Mise à jour logicielle";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "Mettez iOS à niveau";
|
||||
|
|
|
@ -96,7 +96,7 @@
|
|||
"ATTACHMENT_APPROVAL_CAPTION_PLACEHOLDER" = "הוסף כיתוב...";
|
||||
|
||||
/* Title for 'caption' mode of the attachment approval view. */
|
||||
"ATTACHMENT_APPROVAL_CAPTION_TITLE" = "Caption";
|
||||
"ATTACHMENT_APPROVAL_CAPTION_TITLE" = "כיתוב";
|
||||
|
||||
/* Format string for file extension label in call interstitial view */
|
||||
"ATTACHMENT_APPROVAL_FILE_EXTENSION_FORMAT" = "סוג קובץ: %@";
|
||||
|
@ -351,7 +351,7 @@
|
|||
"CALL_VIEW_DECLINE_INCOMING_CALL_LABEL" = "דחה שיחה נכנסת";
|
||||
|
||||
/* tooltip label when remote party has enabled their video */
|
||||
"CALL_VIEW_ENABLE_VIDEO_HINT" = "Tap here to turn on your video";
|
||||
"CALL_VIEW_ENABLE_VIDEO_HINT" = "הקש כאן כדי להפעיל את הוידיאו שלך";
|
||||
|
||||
/* Accessibility label for hang up call */
|
||||
"CALL_VIEW_HANGUP_LABEL" = "סיים שיחה";
|
||||
|
@ -564,13 +564,13 @@
|
|||
"CONVERSATION_DELETE_CONFIRMATION_ALERT_TITLE" = "למחוק שיחה?";
|
||||
|
||||
/* keyboard toolbar label when no messages match the search string */
|
||||
"CONVERSATION_SEARCH_NO_RESULTS" = "No matches";
|
||||
"CONVERSATION_SEARCH_NO_RESULTS" = "אין התאמות";
|
||||
|
||||
/* keyboard toolbar label when exactly 1 message matches the search string */
|
||||
"CONVERSATION_SEARCH_ONE_RESULT" = "1 match";
|
||||
"CONVERSATION_SEARCH_ONE_RESULT" = "התאמה 1";
|
||||
|
||||
/* keyboard toolbar label when more than 1 message matches the search string. Embeds {{number/position of the 'currently viewed' result}} and the {{total number of results}} */
|
||||
"CONVERSATION_SEARCH_RESULTS_FORMAT" = "%d of %d matches";
|
||||
"CONVERSATION_SEARCH_RESULTS_FORMAT" = "%d מתוך %d התאמות";
|
||||
|
||||
/* title for conversation settings screen */
|
||||
"CONVERSATION_SETTINGS" = "הגדרות שיחה";
|
||||
|
@ -624,7 +624,7 @@
|
|||
"CONVERSATION_SETTINGS_NEW_CONTACT" = "צור איש קשר חדש";
|
||||
|
||||
/* Table cell label in conversation settings which returns the user to the conversation with 'search mode' activated */
|
||||
"CONVERSATION_SETTINGS_SEARCH" = "Search Conversation";
|
||||
"CONVERSATION_SETTINGS_SEARCH" = "חפש שיחה";
|
||||
|
||||
/* Label for button that opens conversation settings. */
|
||||
"CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "הקש כדי לשנות";
|
||||
|
@ -1641,13 +1641,13 @@
|
|||
"PHONE_NUMBER_TYPE_WORK_FAX" = "פקס עבודה";
|
||||
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Unable to capture image.";
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "לא היה ניתן ללכוד תמונה.";
|
||||
|
||||
/* alert title */
|
||||
"PHOTO_CAPTURE_UNABLE_TO_CAPTURE_IMAGE" = "Unable to capture image.";
|
||||
"PHOTO_CAPTURE_UNABLE_TO_CAPTURE_IMAGE" = "לא היה ניתן ללכוד תמונה.";
|
||||
|
||||
/* alert title */
|
||||
"PHOTO_CAPTURE_UNABLE_TO_INITIALIZE_CAMERA" = "Failed to configure camera.";
|
||||
"PHOTO_CAPTURE_UNABLE_TO_INITIALIZE_CAMERA" = "נכשל בתיצור מצלמה.";
|
||||
|
||||
/* label for system photo collections which have no name. */
|
||||
"PHOTO_PICKER_UNNAMED_COLLECTION" = "אלבום ללא שם";
|
||||
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "שלום שיחות וידיאו מאובטחות!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal ידרוש בקרוב iOS 10 ומעלה. אנא שדרג דרך יישום הגדרות >> כללי >> עדכוני תוכנה.";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "שדרג את iOS";
|
||||
|
|
|
@ -1524,7 +1524,7 @@
|
|||
"ONBOARDING_PERMISSIONS_TITLE" = "Signal can let you know when you get a message (and who it is from)";
|
||||
|
||||
/* Title of the 'onboarding phone number' view. */
|
||||
"ONBOARDING_PHONE_NUMBER_TITLE" = "Enter your phone number to get started";
|
||||
"ONBOARDING_PHONE_NUMBER_TITLE" = "masukkan nomor telepon untuk memulai";
|
||||
|
||||
/* Label indicating that the phone number is invalid in the 'onboarding phone number' view. */
|
||||
"ONBOARDING_PHONE_NUMBER_VALIDATION_WARNING" = "Nomor salah";
|
||||
|
@ -1536,7 +1536,7 @@
|
|||
"ONBOARDING_PROFILE_NAME_PLACEHOLDER" = "Your Name";
|
||||
|
||||
/* Title of the 'onboarding profile' view. */
|
||||
"ONBOARDING_PROFILE_TITLE" = "Set up your profile";
|
||||
"ONBOARDING_PROFILE_TITLE" = "Siapkan profil Anda";
|
||||
|
||||
/* Link to the 'terms and privacy policy' in the 'onboarding splash' view. */
|
||||
"ONBOARDING_SPLASH_TERM_AND_PRIVACY_POLICY" = "Syarat & Kebijakan Privasi";
|
||||
|
|
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "Videochiamate sicure!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal presto richiederà iOS 10 o successivo. Ti preghiamo di aggiornare andando nelle Impostazioni >> Generali >> Aggiornamento software.";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "Aggiornare iOS";
|
||||
|
|
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "Sveiki, saugūs vaizdo skambučiai!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal greitu metu reikalaus iOS 10 ar naujesnės. Atsinaujinkite Nustatymų (angl. Settings) programėlėje >> Bendra (angl. General) >> Programinės įrangos atnaujinimas (angl. Software Update).";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "Atnaujinkite iOS";
|
||||
|
|
|
@ -2253,7 +2253,7 @@
|
|||
"SETTINGS_UNIDENTIFIED_DELIVERY_SECTION_TITLE" = "Verzegelde afzender";
|
||||
|
||||
/* switch label */
|
||||
"SETTINGS_UNIDENTIFIED_DELIVERY_SHOW_INDICATORS" = "Indicator tonen";
|
||||
"SETTINGS_UNIDENTIFIED_DELIVERY_SHOW_INDICATORS" = "Toon verzegelde afzender indicator";
|
||||
|
||||
/* table section footer */
|
||||
"SETTINGS_UNIDENTIFIED_DELIVERY_SHOW_INDICATORS_FOOTER" = "Laat een statuspictogram zien wanneer je drukt op ‘Meer informatie’ bij berichten die zijn afgeleverd met een verzegelde afzender.";
|
||||
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "Hallo, beveiligde videogesprekken!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Binnenkort vereist Signal dat je iOS 10 of een latere versie gebruikt. Werk je besturingssysteem bij in Instellingen >> Algemeen >> Software-update.";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "Werk iOS bij";
|
||||
|
|
|
@ -96,7 +96,7 @@
|
|||
"ATTACHMENT_APPROVAL_CAPTION_PLACEHOLDER" = "Dodaj podpis...";
|
||||
|
||||
/* Title for 'caption' mode of the attachment approval view. */
|
||||
"ATTACHMENT_APPROVAL_CAPTION_TITLE" = "Caption";
|
||||
"ATTACHMENT_APPROVAL_CAPTION_TITLE" = "Podpis";
|
||||
|
||||
/* Format string for file extension label in call interstitial view */
|
||||
"ATTACHMENT_APPROVAL_FILE_EXTENSION_FORMAT" = "Typ pliku: %@";
|
||||
|
@ -351,7 +351,7 @@
|
|||
"CALL_VIEW_DECLINE_INCOMING_CALL_LABEL" = "Odrzuć połączenie przychodzące";
|
||||
|
||||
/* tooltip label when remote party has enabled their video */
|
||||
"CALL_VIEW_ENABLE_VIDEO_HINT" = "Tap here to turn on your video";
|
||||
"CALL_VIEW_ENABLE_VIDEO_HINT" = "Dotknij tutaj, aby włączyć wideo";
|
||||
|
||||
/* Accessibility label for hang up call */
|
||||
"CALL_VIEW_HANGUP_LABEL" = "Zakończ rozmowę ";
|
||||
|
@ -564,13 +564,13 @@
|
|||
"CONVERSATION_DELETE_CONFIRMATION_ALERT_TITLE" = "Usunąć konwersację?";
|
||||
|
||||
/* keyboard toolbar label when no messages match the search string */
|
||||
"CONVERSATION_SEARCH_NO_RESULTS" = "No matches";
|
||||
"CONVERSATION_SEARCH_NO_RESULTS" = "Brak wyników";
|
||||
|
||||
/* keyboard toolbar label when exactly 1 message matches the search string */
|
||||
"CONVERSATION_SEARCH_ONE_RESULT" = "1 match";
|
||||
"CONVERSATION_SEARCH_ONE_RESULT" = "1 wynik";
|
||||
|
||||
/* keyboard toolbar label when more than 1 message matches the search string. Embeds {{number/position of the 'currently viewed' result}} and the {{total number of results}} */
|
||||
"CONVERSATION_SEARCH_RESULTS_FORMAT" = "%d of %d matches";
|
||||
"CONVERSATION_SEARCH_RESULTS_FORMAT" = "%d z %d wyników";
|
||||
|
||||
/* title for conversation settings screen */
|
||||
"CONVERSATION_SETTINGS" = "Ustawienia konwersacji";
|
||||
|
@ -624,7 +624,7 @@
|
|||
"CONVERSATION_SETTINGS_NEW_CONTACT" = "Utwórz nowy kontakt";
|
||||
|
||||
/* Table cell label in conversation settings which returns the user to the conversation with 'search mode' activated */
|
||||
"CONVERSATION_SETTINGS_SEARCH" = "Search Conversation";
|
||||
"CONVERSATION_SETTINGS_SEARCH" = "Szukaj w konwersacji";
|
||||
|
||||
/* Label for button that opens conversation settings. */
|
||||
"CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "Dotknij, by zmienić";
|
||||
|
@ -1641,13 +1641,13 @@
|
|||
"PHONE_NUMBER_TYPE_WORK_FAX" = "Fax w pracy";
|
||||
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Unable to capture image.";
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Nie można wykonać zdjęcia.";
|
||||
|
||||
/* alert title */
|
||||
"PHOTO_CAPTURE_UNABLE_TO_CAPTURE_IMAGE" = "Unable to capture image.";
|
||||
"PHOTO_CAPTURE_UNABLE_TO_CAPTURE_IMAGE" = "Nie można wykonać zdjęcia.";
|
||||
|
||||
/* alert title */
|
||||
"PHOTO_CAPTURE_UNABLE_TO_INITIALIZE_CAMERA" = "Failed to configure camera.";
|
||||
"PHOTO_CAPTURE_UNABLE_TO_INITIALIZE_CAMERA" = "Nie można skonfigurować kamery.";
|
||||
|
||||
/* label for system photo collections which have no name. */
|
||||
"PHOTO_PICKER_UNNAMED_COLLECTION" = "Album bez nazwy";
|
||||
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "Szyfrowane wideo rozmowy witają!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal wkrótce będzie wymagał systemu iOS 10 lub nowszego. Zaktualizuj system przechodząc do Ustawienia >> Ogólne >> Aktualizacja oprogramowania.";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "Uaktualnij iOS";
|
||||
|
|
|
@ -684,10 +684,10 @@
|
|||
"DATABASE_VIEW_OVERLAY_TITLE" = "A optimizar a base de dados";
|
||||
|
||||
/* Format string for a relative time, expressed as a certain number of hours in the past. Embeds {{The number of hours}}. */
|
||||
"DATE_HOURS_AGO_FORMAT" = " Há %@h atrás";
|
||||
"DATE_HOURS_AGO_FORMAT" = " Há %@h";
|
||||
|
||||
/* Format string for a relative time, expressed as a certain number of minutes in the past. Embeds {{The number of minutes}}. */
|
||||
"DATE_MINUTES_AGO_FORMAT" = "Há %@min atrás";
|
||||
"DATE_MINUTES_AGO_FORMAT" = "Há %@min";
|
||||
|
||||
/* The present; the current time. */
|
||||
"DATE_NOW" = "Agora";
|
||||
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "Olá videochamadas seguras!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "O Signal brevemente irá requerer o iOS 10 ou superior. Por favor atualize em Definições >> Geral >> Atualização de Software.";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "Atualizar iOS";
|
||||
|
|
|
@ -96,7 +96,7 @@
|
|||
"ATTACHMENT_APPROVAL_CAPTION_PLACEHOLDER" = "Adaugă un titlu...";
|
||||
|
||||
/* Title for 'caption' mode of the attachment approval view. */
|
||||
"ATTACHMENT_APPROVAL_CAPTION_TITLE" = "Caption";
|
||||
"ATTACHMENT_APPROVAL_CAPTION_TITLE" = "Titlu";
|
||||
|
||||
/* Format string for file extension label in call interstitial view */
|
||||
"ATTACHMENT_APPROVAL_FILE_EXTENSION_FORMAT" = "Tip fișier: %@";
|
||||
|
@ -351,7 +351,7 @@
|
|||
"CALL_VIEW_DECLINE_INCOMING_CALL_LABEL" = "Respingeți apelul de intrare";
|
||||
|
||||
/* tooltip label when remote party has enabled their video */
|
||||
"CALL_VIEW_ENABLE_VIDEO_HINT" = "Tap here to turn on your video";
|
||||
"CALL_VIEW_ENABLE_VIDEO_HINT" = "Apăsați aici pentru a porni video-ul tău";
|
||||
|
||||
/* Accessibility label for hang up call */
|
||||
"CALL_VIEW_HANGUP_LABEL" = "Închideți apelul";
|
||||
|
@ -564,13 +564,13 @@
|
|||
"CONVERSATION_DELETE_CONFIRMATION_ALERT_TITLE" = "Șterg conversația?";
|
||||
|
||||
/* keyboard toolbar label when no messages match the search string */
|
||||
"CONVERSATION_SEARCH_NO_RESULTS" = "No matches";
|
||||
"CONVERSATION_SEARCH_NO_RESULTS" = "Nici o potrivire";
|
||||
|
||||
/* keyboard toolbar label when exactly 1 message matches the search string */
|
||||
"CONVERSATION_SEARCH_ONE_RESULT" = "1 match";
|
||||
"CONVERSATION_SEARCH_ONE_RESULT" = "1 potrivire";
|
||||
|
||||
/* keyboard toolbar label when more than 1 message matches the search string. Embeds {{number/position of the 'currently viewed' result}} and the {{total number of results}} */
|
||||
"CONVERSATION_SEARCH_RESULTS_FORMAT" = "%d of %d matches";
|
||||
"CONVERSATION_SEARCH_RESULTS_FORMAT" = "%d din %d potriviri";
|
||||
|
||||
/* title for conversation settings screen */
|
||||
"CONVERSATION_SETTINGS" = "Setări conversație";
|
||||
|
@ -624,7 +624,7 @@
|
|||
"CONVERSATION_SETTINGS_NEW_CONTACT" = "Creează contact nou";
|
||||
|
||||
/* Table cell label in conversation settings which returns the user to the conversation with 'search mode' activated */
|
||||
"CONVERSATION_SETTINGS_SEARCH" = "Search Conversation";
|
||||
"CONVERSATION_SETTINGS_SEARCH" = "Caută conversație";
|
||||
|
||||
/* Label for button that opens conversation settings. */
|
||||
"CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "Apasă pentru a modifica";
|
||||
|
@ -1641,13 +1641,13 @@
|
|||
"PHONE_NUMBER_TYPE_WORK_FAX" = "Fax serviciu";
|
||||
|
||||
/* alert title, generic error preventing user from capturing a photo */
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Unable to capture image.";
|
||||
"PHOTO_CAPTURE_GENERIC_ERROR" = "Imaginea nu a putut fi capturată.";
|
||||
|
||||
/* alert title */
|
||||
"PHOTO_CAPTURE_UNABLE_TO_CAPTURE_IMAGE" = "Unable to capture image.";
|
||||
"PHOTO_CAPTURE_UNABLE_TO_CAPTURE_IMAGE" = "Imaginea nu a putut fi capturată.";
|
||||
|
||||
/* alert title */
|
||||
"PHOTO_CAPTURE_UNABLE_TO_INITIALIZE_CAMERA" = "Failed to configure camera.";
|
||||
"PHOTO_CAPTURE_UNABLE_TO_INITIALIZE_CAMERA" = "Eroare la configurarea camerei.";
|
||||
|
||||
/* label for system photo collections which have no name. */
|
||||
"PHOTO_PICKER_UNNAMED_COLLECTION" = "Album fără nume";
|
||||
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "Bun venit la apeluri video securizate!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal va necesita în curând iOS 10 sau o versiune mai nouă. Vă rugăm să actualizați din aplicația Setări >> General >> Actualizări Software.";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "Actualizează-ți iOS-ul";
|
||||
|
|
|
@ -459,7 +459,7 @@
|
|||
"CONFIRM_LINK_NEW_DEVICE_ACTION" = "Привязать устройство";
|
||||
|
||||
/* Action sheet body presented when a user's SN has recently changed. Embeds {{contact's name or phone number}} */
|
||||
"CONFIRM_SENDING_TO_CHANGED_IDENTITY_BODY_FORMAT" = "%@ мог переустановить Signal или сменить устройство. Сверьте ваши коды безопасности для того, чтобы убедиться в конфиденциальности общения.";
|
||||
"CONFIRM_SENDING_TO_CHANGED_IDENTITY_BODY_FORMAT" = "%@ мог(-ла) переустановить Signal или сменить устройство. Сверьте ваши коды безопасности для того, чтобы убедиться в конфиденциальности общения.";
|
||||
|
||||
/* Action sheet title presented when a user's SN has recently changed. Embeds {{contact's name or phone number}} */
|
||||
"CONFIRM_SENDING_TO_CHANGED_IDENTITY_TITLE_FORMAT" = "Код безопасности с %@ изменился";
|
||||
|
@ -940,7 +940,7 @@
|
|||
"ERROR_MESSAGE_UNKNOWN_ERROR" = "Неизвестная ошибка.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_MESSAGE_WRONG_TRUSTED_IDENTITY_KEY" = "Код безопасности изменился";
|
||||
"ERROR_MESSAGE_WRONG_TRUSTED_IDENTITY_KEY" = "Код безопасности изменился.";
|
||||
|
||||
/* Format string for 'unregistered user' error. Embeds {{the unregistered user's name or signal id}}. */
|
||||
"ERROR_UNREGISTERED_USER_FORMAT" = "Незарегистрированный пользователь: %@";
|
||||
|
@ -1674,7 +1674,7 @@
|
|||
"PRIVACY_UNVERIFY_BUTTON" = "Сбросить проверку";
|
||||
|
||||
/* Alert body when verifying with {{contact name}} */
|
||||
"PRIVACY_VERIFICATION_FAILED_I_HAVE_WRONG_KEY_FOR_THEM" = "Это не код безопасности для %@. Убедитесь, что подтверждаете соединение с верным пользователем.";
|
||||
"PRIVACY_VERIFICATION_FAILED_I_HAVE_WRONG_KEY_FOR_THEM" = "Это не код безопасности для %@. Убедитесь, что вы подтверждаете верного пользователя.";
|
||||
|
||||
/* Alert body */
|
||||
"PRIVACY_VERIFICATION_FAILED_MISMATCHED_SAFETY_NUMBERS_IN_CLIPBOARD" = "Содержимое буфера обмена не является кодом безопасности для данного собеседника.";
|
||||
|
@ -1908,10 +1908,10 @@
|
|||
"SAFETY_NUMBER_CHANGED_CONFIRM_SEND_ACTION" = "Отправить в любом случае";
|
||||
|
||||
/* Snippet to share {{safety number}} with a friend. sent e.g. via SMS */
|
||||
"SAFETY_NUMBER_SHARE_FORMAT" = "Наш код безопасности:\n%@";
|
||||
"SAFETY_NUMBER_SHARE_FORMAT" = "Наш код безопасности Signal:\n%@";
|
||||
|
||||
/* Action sheet heading */
|
||||
"SAFETY_NUMBERS_ACTIONSHEET_TITLE" = "Код безопасности с пользователем %@ изменился. Возможно, вы хотите его подтвердить.";
|
||||
"SAFETY_NUMBERS_ACTIONSHEET_TITLE" = "Код безопасности с %@ изменился. Возможно, вы хотите его подтвердить.";
|
||||
|
||||
/* label presented once scanning (camera) view is visible. */
|
||||
"SCAN_CODE_INSTRUCTIONS" = "Отсканируйте QR-код на устройстве пользователя.";
|
||||
|
@ -2325,7 +2325,7 @@
|
|||
"SUCCESSFUL_VERIFICATION_TITLE" = "Коды безопасности совпадают!";
|
||||
|
||||
/* Label for button to verify a user's safety number. */
|
||||
"SYSTEM_MESSAGE_ACTION_VERIFY_SAFETY_NUMBER" = "Верифицировать код безопасности";
|
||||
"SYSTEM_MESSAGE_ACTION_VERIFY_SAFETY_NUMBER" = "Подтвердить код безопасности";
|
||||
|
||||
/* {{number of days}} embedded in strings, e.g. 'Alice updated disappearing messages expiration to {{5 days}}'. See other *_TIME_AMOUNT strings */
|
||||
"TIME_AMOUNT_DAYS" = "%@ дней";
|
||||
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "Добро пожаловать в видеозвонки!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "В скором времени Signal будет работать только на iOS 10 и выше. Пожалуйста, обновите iOS, перейдя в приложение Настройки >> Основные >> Обновление ПО.";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "Обновите IOS";
|
||||
|
@ -2505,10 +2505,10 @@
|
|||
"VERIFICATION_STATE_CHANGE_GENERIC" = "Состояние проверки изменено.";
|
||||
|
||||
/* Label for button or row which allows users to verify the safety number of another user. */
|
||||
"VERIFY_PRIVACY" = "Посмотреть номер безопасности";
|
||||
"VERIFY_PRIVACY" = "Просмотреть код безопасности";
|
||||
|
||||
/* Label for button or row which allows users to verify the safety numbers of multiple users. */
|
||||
"VERIFY_PRIVACY_MULTIPLE" = "Просмотр кодов безопасности";
|
||||
"VERIFY_PRIVACY_MULTIPLE" = "Проверить коды безопасности";
|
||||
|
||||
/* Indicates how to cancel a voice message. */
|
||||
"VOICE_MESSAGE_CANCEL_INSTRUCTIONS" = "Проведите для отмены";
|
||||
|
|
|
@ -90,7 +90,7 @@
|
|||
"ATTACHMENT" = "Bashkëngjitje";
|
||||
|
||||
/* One-line label indicating the user can add no more text to the attachment caption. */
|
||||
"ATTACHMENT_APPROVAL_CAPTION_LENGTH_LIMIT_REACHED" = "U mbërrrit në kufi përshkrimes.";
|
||||
"ATTACHMENT_APPROVAL_CAPTION_LENGTH_LIMIT_REACHED" = "U mbërrrit në kufi përshkrimesh.";
|
||||
|
||||
/* placeholder text for an empty captioning field */
|
||||
"ATTACHMENT_APPROVAL_CAPTION_PLACEHOLDER" = "Shtoni një përshkrim…";
|
||||
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "Tungjatjeta Thirrjeve Video të Sigurta!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal-i së shpejti do të dojë iOS 10 ose të mëvonshëm. Ju lutemi, përmirësojeni që nga aplikacioni Rregullime >> Të përgjithshme >> Përditësim Software-i.";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "Përmirësoni iOS-in";
|
||||
|
|
|
@ -624,7 +624,7 @@
|
|||
"CONVERSATION_SETTINGS_NEW_CONTACT" = "Yeni Kişi Oluştur";
|
||||
|
||||
/* Table cell label in conversation settings which returns the user to the conversation with 'search mode' activated */
|
||||
"CONVERSATION_SETTINGS_SEARCH" = "Sohbeti Araştır";
|
||||
"CONVERSATION_SETTINGS_SEARCH" = "Sohbette Ara";
|
||||
|
||||
/* Label for button that opens conversation settings. */
|
||||
"CONVERSATION_SETTINGS_TAP_TO_CHANGE" = "Değiştirmek için Dokunun";
|
||||
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "Merhaba Güvenli Görüntülü Aramalar!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal yakında iOS 10 ve sonrasına gereksinim duyacaktır. Lütfen Ayarlar >> Genel >> Yazılım Güncelleme bölümünden yükseltin.";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "iOS'u Güncelle";
|
||||
|
|
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "现推出安全的视频通话!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal 即将仅支持 iOS 10 或更新的系统版本。请到 设置 >> 通用 >> 软件更新 升级 iOS。";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "升级 iOS";
|
||||
|
|
|
@ -2484,7 +2484,7 @@
|
|||
"UPGRADE_EXPERIENCE_VIDEO_TITLE" = "現推出安全的視訊通話!";
|
||||
|
||||
/* Message for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal will soon require iOS 10 or later. Please upgrade in Settings app >> General >> Software Update.";
|
||||
"UPGRADE_IOS_ALERT_MESSAGE" = "Signal 將要求 iOS 10 以上才能使用。請在 \"設定\" >> \"一般\" >> \"軟體更新\" 中升級。";
|
||||
|
||||
/* Title for the alert indicating that user should upgrade iOS. */
|
||||
"UPGRADE_IOS_ALERT_TITLE" = "更新 iOS";
|
||||
|
|
|
@ -101,11 +101,7 @@ class AttachmentApprovalInputAccessoryView: UIView {
|
|||
|
||||
// MARK:
|
||||
|
||||
public var shouldHideControls = false {
|
||||
didSet {
|
||||
updateContents()
|
||||
}
|
||||
}
|
||||
private var shouldHideControls = false
|
||||
|
||||
private func updateContents() {
|
||||
var hasCurrentCaption = false
|
||||
|
@ -124,6 +120,12 @@ class AttachmentApprovalInputAccessoryView: UIView {
|
|||
currentCaptionWrapper.isHidden = isEditingCaptions || !hasCurrentCaption
|
||||
attachmentTextToolbar.isHidden = isEditingCaptions
|
||||
|
||||
updateFirstResponder()
|
||||
|
||||
layoutSubviews()
|
||||
}
|
||||
|
||||
private func updateFirstResponder() {
|
||||
if (shouldHideControls) {
|
||||
if attachmentCaptionToolbar.textView.isFirstResponder {
|
||||
attachmentCaptionToolbar.textView.resignFirstResponder()
|
||||
|
@ -135,17 +137,30 @@ class AttachmentApprovalInputAccessoryView: UIView {
|
|||
if !attachmentCaptionToolbar.textView.isFirstResponder {
|
||||
attachmentCaptionToolbar.textView.becomeFirstResponder()
|
||||
}
|
||||
} else {
|
||||
if attachmentCaptionToolbar.textView.isFirstResponder {
|
||||
attachmentCaptionToolbar.textView.resignFirstResponder()
|
||||
}
|
||||
}
|
||||
// NOTE: We don't automatically make attachmentTextToolbar.textView
|
||||
// first responder;
|
||||
|
||||
layoutSubviews()
|
||||
}
|
||||
|
||||
public func update(isEditingCaptions: Bool,
|
||||
currentAttachmentItem: SignalAttachmentItem?) {
|
||||
currentAttachmentItem: SignalAttachmentItem?,
|
||||
shouldHideControls: Bool) {
|
||||
// De-bounce
|
||||
guard self.isEditingCaptions != isEditingCaptions ||
|
||||
self.currentAttachmentItem != currentAttachmentItem ||
|
||||
self.shouldHideControls != shouldHideControls else {
|
||||
|
||||
updateFirstResponder()
|
||||
return
|
||||
}
|
||||
|
||||
self.isEditingCaptions = isEditingCaptions
|
||||
self.currentAttachmentItem = currentAttachmentItem
|
||||
self.shouldHideControls = shouldHideControls
|
||||
|
||||
updateContents()
|
||||
}
|
||||
|
@ -159,6 +174,12 @@ class AttachmentApprovalInputAccessoryView: UIView {
|
|||
return CGSize.zero
|
||||
}
|
||||
}
|
||||
|
||||
public var hasFirstResponder: Bool {
|
||||
return (isFirstResponder ||
|
||||
attachmentCaptionToolbar.textView.isFirstResponder ||
|
||||
attachmentTextToolbar.textView.isFirstResponder)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: -
|
||||
|
|
|
@ -193,7 +193,6 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC
|
|||
private func updateContents() {
|
||||
updateNavigationBar()
|
||||
updateInputAccessory()
|
||||
updateControlVisibility()
|
||||
|
||||
touchInterceptorView.isHidden = !isEditingCaptions
|
||||
}
|
||||
|
@ -215,7 +214,16 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC
|
|||
currentPageViewController = pageViewControllers.first
|
||||
}
|
||||
let currentAttachmentItem: SignalAttachmentItem? = currentPageViewController?.attachmentItem
|
||||
bottomToolView.update(isEditingCaptions: isEditingCaptions, currentAttachmentItem: currentAttachmentItem)
|
||||
|
||||
let hasPresentedView = self.presentedViewController != nil
|
||||
let isToolbarFirstResponder = bottomToolView.hasFirstResponder
|
||||
if !shouldHideControls, !isFirstResponder, !hasPresentedView, !isToolbarFirstResponder {
|
||||
becomeFirstResponder()
|
||||
}
|
||||
|
||||
bottomToolView.update(isEditingCaptions: isEditingCaptions,
|
||||
currentAttachmentItem: currentAttachmentItem,
|
||||
shouldHideControls: shouldHideControls)
|
||||
}
|
||||
|
||||
public var messageText: String? {
|
||||
|
@ -345,13 +353,6 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC
|
|||
return pageViewController.shouldHideControls
|
||||
}
|
||||
|
||||
private func updateControlVisibility() {
|
||||
if !shouldHideControls, !isFirstResponder {
|
||||
becomeFirstResponder()
|
||||
}
|
||||
bottomToolView.shouldHideControls = shouldHideControls
|
||||
}
|
||||
|
||||
// MARK: - View Helpers
|
||||
|
||||
func remove(attachmentItem: SignalAttachmentItem) {
|
||||
|
@ -428,8 +429,6 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC
|
|||
updateMediaRail()
|
||||
}
|
||||
}
|
||||
|
||||
updateContents()
|
||||
}
|
||||
|
||||
// MARK: - UIPageViewControllerDataSource
|
||||
|
@ -480,6 +479,18 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC
|
|||
return super.viewControllers!.map { $0 as! AttachmentPrepViewController }
|
||||
}
|
||||
|
||||
@objc
|
||||
public override func setViewControllers(_ viewControllers: [UIViewController]?, direction: UIPageViewController.NavigationDirection, animated: Bool, completion: ((Bool) -> Void)? = nil) {
|
||||
super.setViewControllers(viewControllers,
|
||||
direction: direction,
|
||||
animated: animated) { [weak self] (finished) in
|
||||
if let completion = completion {
|
||||
completion(finished)
|
||||
}
|
||||
self?.updateContents()
|
||||
}
|
||||
}
|
||||
|
||||
var currentItem: SignalAttachmentItem! {
|
||||
get {
|
||||
return currentPageViewController.attachmentItem
|
||||
|
@ -703,7 +714,7 @@ extension AttachmentApprovalViewController: AttachmentPrepViewControllerDelegate
|
|||
}
|
||||
|
||||
func prepViewControllerUpdateControls() {
|
||||
updateControlVisibility()
|
||||
updateInputAccessory()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -119,6 +119,11 @@ public class ImageEditorBrushViewController: OWSViewController {
|
|||
return true
|
||||
}
|
||||
|
||||
@objc
|
||||
override public var canBecomeFirstResponder: Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// MARK: - Actions
|
||||
|
||||
@objc func didTapUndo(sender: UIButton) {
|
||||
|
|
|
@ -242,6 +242,11 @@ class ImageEditorCropViewController: OWSViewController {
|
|||
return true
|
||||
}
|
||||
|
||||
@objc
|
||||
override public var canBecomeFirstResponder: Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
private static let desiredCornerSize: CGFloat = 24
|
||||
private static let minCropSize: CGFloat = desiredCornerSize * 2
|
||||
private var cornerSize = CGSize.zero
|
||||
|
@ -407,10 +412,6 @@ class ImageEditorCropViewController: OWSViewController {
|
|||
panGestureRecognizer.shouldBeRequiredToFail(by: pinchGestureRecognizer)
|
||||
}
|
||||
|
||||
override public var canBecomeFirstResponder: Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// MARK: - Gestures
|
||||
|
||||
private class func unitTranslation(oldLocationView: CGPoint,
|
||||
|
|
|
@ -239,6 +239,11 @@ public class ImageEditorTextViewController: OWSViewController, VAlignTextViewDel
|
|||
return true
|
||||
}
|
||||
|
||||
@objc
|
||||
override public var canBecomeFirstResponder: Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// MARK: - Pinch Gesture
|
||||
|
||||
private var pinchFontStart: UIFont?
|
||||
|
|
|
@ -623,7 +623,16 @@ NSError *ContactDiscoveryServiceErrorMakeWithReason(NSInteger code, NSString *re
|
|||
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
||||
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
|
||||
[dateFormatter setTimeZone:timeZone];
|
||||
[dateFormatter setDateFormat:@"yyy-MM-dd'T'HH:mm:ss.SSSSSS"];
|
||||
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSSSS"];
|
||||
|
||||
// Specify parsing locale
|
||||
// from: https://developer.apple.com/library/archive/qa/qa1480/_index.html
|
||||
// Q: I'm using NSDateFormatter to parse an Internet-style date, but this fails for some users in some regions.
|
||||
// I've set a specific date format string; shouldn't that force NSDateFormatter to work independently of the user's
|
||||
// region settings? A: No. While setting a date format string will appear to work for most users, it's not the right
|
||||
// solution to this problem. There are many places where format strings behave in unexpected ways. [...]
|
||||
NSLocale *enUSPOSIXLocale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
|
||||
[dateFormatter setLocale:enUSPOSIXLocale];
|
||||
NSDate *timestampDate = [dateFormatter dateFromString:signatureBodyEntity.timestamp];
|
||||
if (!timestampDate) {
|
||||
OWSFailDebug(@"Could not parse signature body timestamp: %@", signatureBodyEntity.timestamp);
|
||||
|
|
|
@ -315,38 +315,32 @@ static const NSUInteger OWSMessageSchemaVersion = 4;
|
|||
|
||||
// TODO: This method contains view-specific logic and probably belongs in NotificationsManager, not in SSK.
|
||||
- (NSString *)previewTextWithTransaction:(YapDatabaseReadTransaction *)transaction
|
||||
{
|
||||
NSString *_Nullable attachmentDescription = nil;
|
||||
if ([self hasAttachments]) {
|
||||
NSString *attachmentId = self.attachmentIds[0];
|
||||
TSAttachment *attachment = [TSAttachment fetchObjectWithUniqueID:attachmentId transaction:transaction];
|
||||
if ([OWSMimeTypeOversizeTextMessage isEqualToString:attachment.contentType]) {
|
||||
// Handle oversize text attachments.
|
||||
if ([attachment isKindOfClass:[TSAttachmentStream class]]) {
|
||||
TSAttachmentStream *attachmentStream = (TSAttachmentStream *)attachment;
|
||||
NSData *_Nullable data = [NSData dataWithContentsOfFile:attachmentStream.originalFilePath];
|
||||
if (data) {
|
||||
NSString *_Nullable text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
||||
if (text) {
|
||||
return text.filterStringForDisplay;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return @"";
|
||||
} else if (attachment) {
|
||||
attachmentDescription = attachment.description;
|
||||
} else {
|
||||
attachmentDescription = NSLocalizedString(@"UNKNOWN_ATTACHMENT_LABEL",
|
||||
@"In Inbox view, last message label for thread with corrupted attachment.");
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
NSString *_Nullable bodyDescription = nil;
|
||||
if (self.body.length > 0) {
|
||||
bodyDescription = self.body;
|
||||
}
|
||||
|
||||
if (bodyDescription == nil) {
|
||||
TSAttachment *_Nullable oversizeTextAttachment = [self oversizeTextAttachmentWithTransaction:transaction];
|
||||
if ([oversizeTextAttachment isKindOfClass:[TSAttachmentStream class]]) {
|
||||
TSAttachmentStream *oversizeTextAttachmentStream = (TSAttachmentStream *)oversizeTextAttachment;
|
||||
NSData *_Nullable data = [NSData dataWithContentsOfFile:oversizeTextAttachmentStream.originalFilePath];
|
||||
if (data) {
|
||||
NSString *_Nullable text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
||||
if (text) {
|
||||
bodyDescription = text.filterStringForDisplay;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NSString *_Nullable attachmentDescription = nil;
|
||||
TSAttachment *_Nullable mediaAttachment = [self mediaAttachmentsWithTransaction:transaction].firstObject;
|
||||
if (mediaAttachment != nil) {
|
||||
attachmentDescription = mediaAttachment.description;
|
||||
}
|
||||
|
||||
if (attachmentDescription.length > 0 && bodyDescription.length > 0) {
|
||||
// Attachment with caption.
|
||||
if ([CurrentAppContext() isRTL]) {
|
||||
|
|
|
@ -516,7 +516,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|||
}
|
||||
parameters = @{ @"reason": limitedReason };
|
||||
}
|
||||
NSString *path = [NSString stringWithFormat:@"/v1/directory/feedback-v2/%@", status];
|
||||
NSString *path = [NSString stringWithFormat:@"/v1/directory/feedback-v3/%@", status];
|
||||
return [TSRequest requestWithUrl:[NSURL URLWithString:path] method:@"PUT" parameters:parameters];
|
||||
}
|
||||
|
||||
|
|
|
@ -146,8 +146,13 @@ extension SSKWebSocketImpl: WebSocketDelegate {
|
|||
case let wsError as WSError:
|
||||
websocketError = SSKWebSocketError(underlyingError: wsError)
|
||||
case let nsError as NSError:
|
||||
let networkDownCode = 50
|
||||
assert(nsError.domain == "NSPOSIXErrorDomain" && nsError.code == networkDownCode)
|
||||
// Assert that error is either a Starscream.WSError or an OS level networking error
|
||||
if #available(iOS 10, *) {
|
||||
let networkDownCode = 50
|
||||
assert(nsError.domain == "NSPOSIXErrorDomain" && nsError.code == networkDownCode)
|
||||
} else {
|
||||
assert(nsError.domain == kCFErrorDomainCFNetwork as String)
|
||||
}
|
||||
websocketError = error
|
||||
default:
|
||||
assert(error == nil, "unexpected error type: \(String(describing: error))")
|
||||
|
|
|
@ -138,6 +138,7 @@ public class FullTextSearchFinder: NSObject {
|
|||
// This is a hot method, especially while running large migrations.
|
||||
// Changes to it should go through a profiler to make sure large migrations
|
||||
// aren't adversely affected.
|
||||
@objc
|
||||
public class func normalize(text: String) -> String {
|
||||
// 1. Filter out invalid characters.
|
||||
let filtered = text.removeCharacters(characterSet: charactersToRemove)
|
||||
|
|
|
@ -9,6 +9,11 @@ import Foundation
|
|||
@objc(SSKFeatureFlags)
|
||||
public class FeatureFlags: NSObject {
|
||||
|
||||
@objc
|
||||
public static var conversationSearch: Bool {
|
||||
return false
|
||||
}
|
||||
|
||||
/// iOS has long supported sending oversized text as a sidecar attachment. The other clients
|
||||
/// simply displayed it as a text attachment. As part of the new cross-client long-text feature,
|
||||
/// we want to be able to display long text with attachments as well. Existing iOS clients
|
||||
|
|
|
@ -213,11 +213,11 @@ class OWSLinkPreviewTest: SSKBaseTestSwift {
|
|||
let expectation = self.expectation(description: "link download and parsing")
|
||||
|
||||
OWSLinkPreview.tryToBuildPreviewInfo(previewUrl: "https://www.youtube.com/watch?v=tP-Ipsat90c")
|
||||
.done { (draft) in
|
||||
.done { (draft: OWSLinkPreviewDraft) in
|
||||
XCTAssertNotNil(draft)
|
||||
|
||||
XCTAssertEqual(draft.title, "Randomness is Random - Numberphile")
|
||||
XCTAssertNotNil(draft.imageFilePath)
|
||||
XCTAssertNotNil(draft.jpegImageData)
|
||||
|
||||
expectation.fulfill()
|
||||
}.catch { (error) in
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.38.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.38.0.9</string>
|
||||
<string>2.38.0.11</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
|
|
Loading…
Reference in New Issue