mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-05-25 08:52:45 +02:00
Finish v0.6.14
This commit is contained in:
@@ -38,4 +38,8 @@ Evan Tang <etang110 at gmail.com>
|
||||
|
||||
Joey Watts <joey.watts.96 at gmail.com>
|
||||
* PR #1777 Add support for interactive notifications
|
||||
|
||||
Arash Tabrizian <a.tabriziyan at gmail.com>
|
||||
* PR #1828 Fix issue #1793 Confirmation popup when leaving room
|
||||
* PR #1824 Fix issue #1816 Support specifying kick and ban msgs
|
||||
|
||||
+16
@@ -1,3 +1,19 @@
|
||||
Changes in 0.6.14 (2018-04-20)
|
||||
===============================================
|
||||
|
||||
Improvements:
|
||||
* Upgrade MatrixKit version (v0.7.10).
|
||||
* The minimal iOS version is now 9.0.
|
||||
* Render stickers in the timeline (#1819).
|
||||
* Support specifying kick and ban msgs (#1816), thanks to @atabrizian (PR #1824).
|
||||
* Confirmation popup when leaving room (#1793), thanks to @atabrizian (PR #1828).
|
||||
|
||||
Bug fixes:
|
||||
* Global Messages search: some search results are missing.
|
||||
* Crash on URL like https://riot.im/#/app/register?hs_url=... (#1838).
|
||||
* All rooms showing the same avatar (#1673).
|
||||
* App fails to logout on unknown token (#1839).
|
||||
|
||||
Changes in 0.6.13 (2018-03-30)
|
||||
===============================================
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Uncomment this line to define a global platform for your project
|
||||
platform :ios, "8.0"
|
||||
platform :ios, "9.0"
|
||||
|
||||
# Use frameforks to allow usage of pod written in Swift (like PiwikTracker)
|
||||
use_frameworks!
|
||||
@@ -9,7 +9,7 @@ source 'https://github.com/CocoaPods/Specs.git'
|
||||
|
||||
# Different flavours of pods to MatrixKit
|
||||
# The current MatrixKit pod version
|
||||
$matrixKitVersion = '0.7.9'
|
||||
$matrixKitVersion = '0.7.10'
|
||||
|
||||
# The develop branch version
|
||||
#$matrixKitVersion = 'develop'
|
||||
|
||||
+21
-21
@@ -43,34 +43,34 @@ PODS:
|
||||
- GZIP (1.2.1)
|
||||
- HPGrowingTextView (1.1)
|
||||
- libPhoneNumber-iOS (0.9.13)
|
||||
- MatrixKit (0.7.9):
|
||||
- MatrixKit (0.7.10):
|
||||
- cmark (~> 0.24.1)
|
||||
- DTCoreText (~> 1.6.21)
|
||||
- HPGrowingTextView (~> 1.1)
|
||||
- libPhoneNumber-iOS (~> 0.9.13)
|
||||
- MatrixKit/Core (= 0.7.9)
|
||||
- MatrixSDK (= 0.10.7)
|
||||
- MatrixKit/AppExtension (0.7.9):
|
||||
- MatrixKit/Core (= 0.7.10)
|
||||
- MatrixSDK (= 0.10.8)
|
||||
- MatrixKit/AppExtension (0.7.10):
|
||||
- cmark (~> 0.24.1)
|
||||
- DTCoreText (~> 1.6.21)
|
||||
- DTCoreText/Extension
|
||||
- HPGrowingTextView (~> 1.1)
|
||||
- libPhoneNumber-iOS (~> 0.9.13)
|
||||
- MatrixSDK (= 0.10.7)
|
||||
- MatrixKit/Core (0.7.9):
|
||||
- MatrixSDK (= 0.10.8)
|
||||
- MatrixKit/Core (0.7.10):
|
||||
- cmark (~> 0.24.1)
|
||||
- DTCoreText (~> 1.6.21)
|
||||
- HPGrowingTextView (~> 1.1)
|
||||
- libPhoneNumber-iOS (~> 0.9.13)
|
||||
- MatrixSDK (= 0.10.7)
|
||||
- MatrixSDK (0.10.7):
|
||||
- MatrixSDK/Core (= 0.10.7)
|
||||
- MatrixSDK/Core (0.10.7):
|
||||
- MatrixSDK (= 0.10.8)
|
||||
- MatrixSDK (0.10.8):
|
||||
- MatrixSDK/Core (= 0.10.8)
|
||||
- MatrixSDK/Core (0.10.8):
|
||||
- AFNetworking (~> 3.2.0)
|
||||
- GZIP (~> 1.2.1)
|
||||
- OLMKit (~> 2.2.2)
|
||||
- Realm (~> 3.1.1)
|
||||
- MatrixSDK/JingleCallStack (0.10.7):
|
||||
- Realm (~> 3.3.2)
|
||||
- MatrixSDK/JingleCallStack (0.10.8):
|
||||
- MatrixSDK/Core
|
||||
- WebRTC (= 63.11.20455)
|
||||
- OLMKit (2.2.2):
|
||||
@@ -81,17 +81,17 @@ PODS:
|
||||
- PiwikTracker (4.4.2):
|
||||
- PiwikTracker/Core (= 4.4.2)
|
||||
- PiwikTracker/Core (4.4.2)
|
||||
- Realm (3.1.1):
|
||||
- Realm/Headers (= 3.1.1)
|
||||
- Realm/Headers (3.1.1)
|
||||
- Realm (3.3.2):
|
||||
- Realm/Headers (= 3.3.2)
|
||||
- Realm/Headers (3.3.2)
|
||||
- WebRTC (63.11.20455)
|
||||
|
||||
DEPENDENCIES:
|
||||
- cmark
|
||||
- DTCoreText
|
||||
- GBDeviceInfo (~> 5.1.0)
|
||||
- MatrixKit (= 0.7.9)
|
||||
- MatrixKit/AppExtension (= 0.7.9)
|
||||
- MatrixKit (= 0.7.10)
|
||||
- MatrixKit/AppExtension (= 0.7.10)
|
||||
- MatrixSDK/JingleCallStack
|
||||
- OLMKit
|
||||
- PiwikTracker (from `https://github.com/manuroe/matomo-sdk-ios.git`, branch `feature/CustomVariables`)
|
||||
@@ -115,13 +115,13 @@ SPEC CHECKSUMS:
|
||||
GZIP: 7ee835f989fb3c6ea79005fc90b8fa6af710a70d
|
||||
HPGrowingTextView: 88a716d97fb853bcb08a4a08e4727da17efc9b19
|
||||
libPhoneNumber-iOS: e444379ac18bbfbdefad571da735b2cd7e096caa
|
||||
MatrixKit: 1945e24b20e0ba0853798c347404cdf0efb780e3
|
||||
MatrixSDK: a08af4179df86082affa188b5b2099def9eb2843
|
||||
MatrixKit: 524aa527ce302731ce322f8ab01724c226e538e6
|
||||
MatrixSDK: 9a974388ae38996f639358aea9cc442163012dc7
|
||||
OLMKit: b9d8c0ffee9ea8c45bc0aaa9afb47f93fba7efbd
|
||||
PiwikTracker: 42862c7b13028065c3dfd36b4dc38db8a5765acf
|
||||
Realm: 42d1c38a5b1bbcc828b48a7ce702cb86fc68adf4
|
||||
Realm: d927fbf66df5532cfafc08afb5f7e53ded37b894
|
||||
WebRTC: f2a6203584745fe53532633397557876b5d71640
|
||||
|
||||
PODFILE CHECKSUM: 7abb83aba898f3755b58b5859fd52321f7d97bb2
|
||||
PODFILE CHECKSUM: ebbd8236ca52d1c288efd2a3eb5d5ef0b05ffc1b
|
||||
|
||||
COCOAPODS: 1.4.0
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
02543BAE206E6C59001CDAB2 /* RoomSelectedStickerBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 02543BAB206E6C58001CDAB2 /* RoomSelectedStickerBubbleCell.m */; };
|
||||
02543BAF206E6C59001CDAB2 /* RoomSelectedStickerBubbleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 02543BAC206E6C58001CDAB2 /* RoomSelectedStickerBubbleCell.xib */; };
|
||||
2435179C1F375B9400D0683E /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2466B7551F2F80B800AE27B0 /* Info.plist */; };
|
||||
2435179F1F375C0F00D0683E /* Vector.strings in Resources */ = {isa = PBXBuildFile; fileRef = 327382C01F276AED00356143 /* Vector.strings */; };
|
||||
2439DD621F6BBE760090F42D /* RecentRoomTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2439DD611F6BBE760090F42D /* RecentRoomTableViewCell.m */; };
|
||||
@@ -76,6 +78,9 @@
|
||||
329DCE191F988F8100468420 /* riot_icon_callkit.png in Resources */ = {isa = PBXBuildFile; fileRef = 329DCE161F988F8100468420 /* riot_icon_callkit.png */; };
|
||||
329DCE1A1F988F8100468420 /* riot_icon_callkit@2.png in Resources */ = {isa = PBXBuildFile; fileRef = 329DCE171F988F8100468420 /* riot_icon_callkit@2.png */; };
|
||||
329DCE1B1F988F8100468420 /* riot_icon_callkit@3.png in Resources */ = {isa = PBXBuildFile; fileRef = 329DCE181F988F8100468420 /* riot_icon_callkit@3.png */; };
|
||||
32A9B3BA2089CA410087E7A3 /* Vector.strings in Resources */ = {isa = PBXBuildFile; fileRef = 32A9B3B42089CA400087E7A3 /* Vector.strings */; };
|
||||
32A9B3BB2089CA410087E7A3 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 32A9B3B62089CA400087E7A3 /* Localizable.strings */; };
|
||||
32A9B3BC2089CA410087E7A3 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 32A9B3B82089CA400087E7A3 /* InfoPlist.strings */; };
|
||||
32AE61E41F0A971B007255F4 /* RoomMembershipBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 32AE61E21F0A971B007255F4 /* RoomMembershipBubbleCell.m */; };
|
||||
32AE61E51F0A971B007255F4 /* RoomMembershipBubbleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 32AE61E31F0A971B007255F4 /* RoomMembershipBubbleCell.xib */; };
|
||||
32AE61E91F0CE099007255F4 /* RoomMembershipWithPaginationTitleBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 32AE61E71F0CE099007255F4 /* RoomMembershipWithPaginationTitleBubbleCell.m */; };
|
||||
@@ -656,6 +661,9 @@
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
02543BAB206E6C58001CDAB2 /* RoomSelectedStickerBubbleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomSelectedStickerBubbleCell.m; sourceTree = "<group>"; };
|
||||
02543BAC206E6C58001CDAB2 /* RoomSelectedStickerBubbleCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoomSelectedStickerBubbleCell.xib; sourceTree = "<group>"; };
|
||||
02543BAD206E6C59001CDAB2 /* RoomSelectedStickerBubbleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomSelectedStickerBubbleCell.h; sourceTree = "<group>"; };
|
||||
12AA0005C8B3D8D8162584C5 /* Pods-RiotShareExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotShareExtension.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RiotShareExtension/Pods-RiotShareExtension.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
22D76C11C202B6BC5917A049 /* Pods-RiotPods-RiotShareExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RiotPods-RiotShareExtension.release.xcconfig"; path = "Pods/Target Support Files/Pods-RiotPods-RiotShareExtension/Pods-RiotPods-RiotShareExtension.release.xcconfig"; sourceTree = "<group>"; };
|
||||
23D7292481328A48B8D5D4ED /* Pods_RiotPods_RiotShareExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RiotPods_RiotShareExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
@@ -735,6 +743,9 @@
|
||||
329DCE161F988F8100468420 /* riot_icon_callkit.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = riot_icon_callkit.png; sourceTree = "<group>"; };
|
||||
329DCE171F988F8100468420 /* riot_icon_callkit@2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "riot_icon_callkit@2.png"; sourceTree = "<group>"; };
|
||||
329DCE181F988F8100468420 /* riot_icon_callkit@3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "riot_icon_callkit@3.png"; sourceTree = "<group>"; };
|
||||
32A9B3B52089CA400087E7A3 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = Vector.strings; sourceTree = "<group>"; };
|
||||
32A9B3B72089CA400087E7A3 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
32A9B3B92089CA400087E7A3 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = InfoPlist.strings; sourceTree = "<group>"; };
|
||||
32AE61E11F0A971B007255F4 /* RoomMembershipBubbleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomMembershipBubbleCell.h; sourceTree = "<group>"; };
|
||||
32AE61E21F0A971B007255F4 /* RoomMembershipBubbleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomMembershipBubbleCell.m; sourceTree = "<group>"; };
|
||||
32AE61E31F0A971B007255F4 /* RoomMembershipBubbleCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoomMembershipBubbleCell.xib; sourceTree = "<group>"; };
|
||||
@@ -1621,6 +1632,16 @@
|
||||
path = js;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
32A9B3B32089CA400087E7A3 /* vi.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
32A9B3B42089CA400087E7A3 /* Vector.strings */,
|
||||
32A9B3B62089CA400087E7A3 /* Localizable.strings */,
|
||||
32A9B3B82089CA400087E7A3 /* InfoPlist.strings */,
|
||||
);
|
||||
path = vi.lproj;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
32AE61EB1F0D2183007255F4 /* nl.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -1776,6 +1797,7 @@
|
||||
F083BB0E1E7009EC00A9B29C /* Assets */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
32A9B3B32089CA400087E7A3 /* vi.lproj */,
|
||||
32BB89E7204D86DA002F3AEC /* bg.lproj */,
|
||||
3211717B203ACD32002C16C6 /* ca.lproj */,
|
||||
F0173EAE1FCF346800B5F6A3 /* vi.lproj */,
|
||||
@@ -2428,6 +2450,9 @@
|
||||
F083BCD51E7009EC00A9B29C /* RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.h */,
|
||||
F083BCD61E7009EC00A9B29C /* RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.m */,
|
||||
F083BCD71E7009EC00A9B29C /* RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.xib */,
|
||||
02543BAD206E6C59001CDAB2 /* RoomSelectedStickerBubbleCell.h */,
|
||||
02543BAB206E6C58001CDAB2 /* RoomSelectedStickerBubbleCell.m */,
|
||||
02543BAC206E6C58001CDAB2 /* RoomSelectedStickerBubbleCell.xib */,
|
||||
);
|
||||
path = RoomBubbleList;
|
||||
sourceTree = "<group>";
|
||||
@@ -2947,6 +2972,7 @@
|
||||
F083BD3F1E7009ED00A9B29C /* call_speaker_off_icon.png in Resources */,
|
||||
F083BD3D1E7009ED00A9B29C /* call_hangup_icon@2x.png in Resources */,
|
||||
F083BE551E7009ED00A9B29C /* RoomOutgoingEncryptedTextMsgWithoutSenderNameBubbleCell.xib in Resources */,
|
||||
32A9B3BA2089CA410087E7A3 /* Vector.strings in Resources */,
|
||||
32471CDD1F1373A100BDF50A /* RoomMembershipCollapsedWithPaginationTitleBubbleCell.xib in Resources */,
|
||||
329DCE191F988F8100468420 /* riot_icon_callkit.png in Resources */,
|
||||
3233F7321F31F4BF006ACA81 /* JitsiViewController.xib in Resources */,
|
||||
@@ -3023,6 +3049,7 @@
|
||||
3205ED851E97725E003D65FA /* DirectoryServerTableViewCell.xib in Resources */,
|
||||
F083BD761E7009ED00A9B29C /* e2e_verified@3x.png in Resources */,
|
||||
F083BE181E7009ED00A9B29C /* MediaPickerViewController.xib in Resources */,
|
||||
32A9B3BC2089CA410087E7A3 /* InfoPlist.strings in Resources */,
|
||||
F083BDCE1E7009ED00A9B29C /* selection_untick.png in Resources */,
|
||||
F083BE971E7009ED00A9B29C /* MessagesSearchResultAttachmentBubbleCell.xib in Resources */,
|
||||
F083BD9C1E7009ED00A9B29C /* main_alias_icon@2x.png in Resources */,
|
||||
@@ -3062,6 +3089,7 @@
|
||||
F083BD661E7009ED00A9B29C /* directChatOff@2x.png in Resources */,
|
||||
F083BE011E7009ED00A9B29C /* third_party_licenses.html in Resources */,
|
||||
F083BD751E7009ED00A9B29C /* e2e_verified@2x.png in Resources */,
|
||||
32A9B3BB2089CA410087E7A3 /* Localizable.strings in Resources */,
|
||||
F083BDCD1E7009ED00A9B29C /* selection_tick@3x.png in Resources */,
|
||||
F0E05A311EA0F9EB004B83FB /* tab_favourites_selected@2x.png in Resources */,
|
||||
F083BD741E7009ED00A9B29C /* e2e_verified.png in Resources */,
|
||||
@@ -3217,6 +3245,7 @@
|
||||
F083BD3A1E7009ED00A9B29C /* call_chat_icon@2x.png in Resources */,
|
||||
F083BE711E7009ED00A9B29C /* RoomOutgoingTextMsgBubbleCell.xib in Resources */,
|
||||
F083BD5E1E7009ED00A9B29C /* create_room@3x.png in Resources */,
|
||||
02543BAF206E6C59001CDAB2 /* RoomSelectedStickerBubbleCell.xib in Resources */,
|
||||
F083BE6B1E7009ED00A9B29C /* RoomOutgoingAttachmentBubbleCell.xib in Resources */,
|
||||
F083BD4C1E7009ED00A9B29C /* camera_capture@2x.png in Resources */,
|
||||
F083BD8F1E7009ED00A9B29C /* file_video_icon.png in Resources */,
|
||||
@@ -3635,6 +3664,7 @@
|
||||
F083BE601E7009ED00A9B29C /* RoomIncomingTextMsgBubbleCell.m in Sources */,
|
||||
F083BE2F1E7009ED00A9B29C /* ContactTableViewCell.m in Sources */,
|
||||
F083BE901E7009ED00A9B29C /* RoomTitleView.m in Sources */,
|
||||
02543BAE206E6C59001CDAB2 /* RoomSelectedStickerBubbleCell.m in Sources */,
|
||||
F083BE6E1E7009ED00A9B29C /* RoomOutgoingAttachmentWithPaginationTitleBubbleCell.m in Sources */,
|
||||
3233F7311F31F4BF006ACA81 /* JitsiViewController.m in Sources */,
|
||||
F083BE2A1E7009ED00A9B29C /* UsersDevicesViewController.m in Sources */,
|
||||
@@ -3872,6 +3902,30 @@
|
||||
name = Vector.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
32A9B3B42089CA400087E7A3 /* Vector.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
32A9B3B52089CA400087E7A3 /* vi */,
|
||||
);
|
||||
name = Vector.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
32A9B3B62089CA400087E7A3 /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
32A9B3B72089CA400087E7A3 /* vi */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
32A9B3B82089CA400087E7A3 /* InfoPlist.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
32A9B3B92089CA400087E7A3 /* vi */,
|
||||
);
|
||||
name = InfoPlist.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
32AE61EC1F0D2183007255F4 /* InfoPlist.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
@@ -4009,7 +4063,7 @@
|
||||
DEVELOPMENT_TEAM = 7J4U792NQT;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = RiotShareExtension/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = im.vector.app.shareExtension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
@@ -4032,7 +4086,7 @@
|
||||
DEVELOPMENT_TEAM = 7J4U792NQT;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = RiotShareExtension/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = im.vector.app.shareExtension;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
@@ -4193,7 +4247,7 @@
|
||||
"\"$(PROJECT_DIR)/Riot/libs/jitsi-meet\"",
|
||||
);
|
||||
INFOPLIST_FILE = Riot/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = im.vector.app;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
@@ -4227,7 +4281,7 @@
|
||||
"\"$(PROJECT_DIR)/Riot/libs/jitsi-meet\"",
|
||||
);
|
||||
INFOPLIST_FILE = Riot/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = im.vector.app;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
|
||||
+8
-1
@@ -101,7 +101,14 @@ extern NSString *const kAppDelegateNetworkStatusDidChangeNotification;
|
||||
// Reload all running matrix sessions
|
||||
- (void)reloadMatrixSessions:(BOOL)clearCache;
|
||||
|
||||
- (void)logout;
|
||||
/**
|
||||
Log out all the accounts after asking for a potential confirmation.
|
||||
Show the authentication screen on successful logout.
|
||||
|
||||
@param askConfirmation tell whether a confirmation is required before logging out.
|
||||
@param completion the block to execute at the end of the operation.
|
||||
*/
|
||||
- (void)logoutWithConfirmation:(BOOL)askConfirmation completion:(void (^)(BOOL isLoggedOut))completion;
|
||||
|
||||
#pragma mark - Matrix Accounts handling
|
||||
|
||||
|
||||
+114
-12
@@ -1,6 +1,7 @@
|
||||
/*
|
||||
Copyright 2014 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
Copyright 2018 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -207,6 +208,8 @@ NSString *const kAppDelegateNetworkStatusDidChangeNotification = @"kAppDelegateN
|
||||
|
||||
@property (strong, nonatomic) UIAlertController *mxInAppNotification;
|
||||
|
||||
@property (strong, nonatomic) UIAlertController *logoutConfirmation;
|
||||
|
||||
@property (nonatomic, nullable, copy) void (^registrationForRemoteNotificationsCompletion)(NSError *);
|
||||
|
||||
|
||||
@@ -1587,6 +1590,15 @@ NSString *const kAppDelegateNetworkStatusDidChangeNotification = @"kAppDelegateN
|
||||
else
|
||||
notificationBody = [NSString stringWithFormat:NSLocalizedString(@"USER_INVITE_TO_CHAT", nil), eventSenderName];
|
||||
}
|
||||
else if (event.eventType == MXEventTypeSticker)
|
||||
{
|
||||
NSString *roomDisplayName = room.summary.displayname;
|
||||
|
||||
if (roomDisplayName.length && ![roomDisplayName isEqualToString:eventSenderName])
|
||||
notificationBody = [NSString stringWithFormat:NSLocalizedString(@"MSG_FROM_USER_IN_ROOM", nil), eventSenderName, roomDisplayName];
|
||||
else
|
||||
notificationBody = [NSString stringWithFormat:NSLocalizedString(@"MSG_FROM_USER", nil), eventSenderName];
|
||||
}
|
||||
|
||||
return notificationBody;
|
||||
}
|
||||
@@ -2074,6 +2086,7 @@ NSString *const kAppDelegateNetworkStatusDidChangeNotification = @"kAppDelegateN
|
||||
}];
|
||||
}
|
||||
}
|
||||
// Check whether this is a registration links.
|
||||
else if ([pathParams[0] isEqualToString:@"register"])
|
||||
{
|
||||
NSLog(@"[AppDelegate] Universal link with registration parameters");
|
||||
@@ -2385,7 +2398,7 @@ NSString *const kAppDelegateNetworkStatusDidChangeNotification = @"kAppDelegateN
|
||||
// Logout the app when there is no available account
|
||||
if (![MXKAccountManager sharedManager].accounts.count)
|
||||
{
|
||||
[self logout];
|
||||
[self logoutWithConfirmation:NO completion:nil];
|
||||
}
|
||||
}];
|
||||
|
||||
@@ -2557,8 +2570,90 @@ NSString *const kAppDelegateNetworkStatusDidChangeNotification = @"kAppDelegateN
|
||||
}
|
||||
}
|
||||
|
||||
- (void)logout
|
||||
- (void)logoutWithConfirmation:(BOOL)askConfirmation completion:(void (^)(BOOL isLoggedOut))completion
|
||||
{
|
||||
// Check whether we have to ask confirmation before logging out.
|
||||
if (askConfirmation)
|
||||
{
|
||||
if (self.logoutConfirmation)
|
||||
{
|
||||
[self.logoutConfirmation dismissViewControllerAnimated:NO completion:nil];
|
||||
self.logoutConfirmation = nil;
|
||||
}
|
||||
|
||||
__weak typeof(self) weakSelf = self;
|
||||
|
||||
NSString *message = NSLocalizedStringFromTable(@"settings_sign_out_confirmation", @"Vector", nil);
|
||||
|
||||
// If the user has encrypted rooms, warn he will lose his e2e keys
|
||||
MXSession *session = self.mxSessions.firstObject;
|
||||
for (MXRoom *room in session.rooms)
|
||||
{
|
||||
if (room.state.isEncrypted)
|
||||
{
|
||||
message = [message stringByAppendingString:[NSString stringWithFormat:@"\n\n%@", NSLocalizedStringFromTable(@"settings_sign_out_e2e_warn", @"Vector", nil)]];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Ask confirmation
|
||||
self.logoutConfirmation = [UIAlertController alertControllerWithTitle:NSLocalizedStringFromTable(@"settings_sign_out", @"Vector", nil) message:message preferredStyle:UIAlertControllerStyleAlert];
|
||||
|
||||
[self.logoutConfirmation addAction:[UIAlertAction actionWithTitle:NSLocalizedStringFromTable(@"settings_sign_out", @"Vector", nil)
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
self.logoutConfirmation = nil;
|
||||
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
|
||||
|
||||
[self logoutWithConfirmation:NO completion:completion];
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
[self.logoutConfirmation addAction:[UIAlertAction actionWithTitle:[NSBundle mxk_localizedStringForKey:@"cancel"]
|
||||
style:UIAlertActionStyleCancel
|
||||
handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
self.logoutConfirmation = nil;
|
||||
|
||||
if (completion)
|
||||
{
|
||||
completion(NO);
|
||||
}
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
[self.logoutConfirmation mxk_setAccessibilityIdentifier: @"AppDelegateLogoutConfirmationAlert"];
|
||||
[self showNotificationAlert:self.logoutConfirmation];
|
||||
return;
|
||||
}
|
||||
|
||||
// Display a loading wheel during the logout process
|
||||
id topVC;
|
||||
if (_masterTabBarController && _masterTabBarController == _masterNavigationController.visibleViewController)
|
||||
{
|
||||
topVC = _masterTabBarController.selectedViewController;
|
||||
}
|
||||
else
|
||||
{
|
||||
topVC = _masterNavigationController.visibleViewController;
|
||||
}
|
||||
if (topVC && [topVC respondsToSelector:@selector(startActivityIndicator)])
|
||||
{
|
||||
[topVC startActivityIndicator];
|
||||
}
|
||||
|
||||
self.pushRegistry = nil;
|
||||
isPushRegistered = NO;
|
||||
|
||||
@@ -2577,15 +2672,22 @@ NSString *const kAppDelegateNetworkStatusDidChangeNotification = @"kAppDelegateN
|
||||
#endif
|
||||
|
||||
// Logout all matrix account
|
||||
[[MXKAccountManager sharedManager] logout];
|
||||
|
||||
// Return to authentication screen
|
||||
[_masterTabBarController showAuthenticationScreen];
|
||||
|
||||
// Note: Keep App settings
|
||||
|
||||
// Reset the contact manager
|
||||
[[MXKContactManager sharedManager] reset];
|
||||
[[MXKAccountManager sharedManager] logoutWithCompletion:^{
|
||||
|
||||
if (completion)
|
||||
{
|
||||
completion (YES);
|
||||
}
|
||||
|
||||
// Return to authentication screen
|
||||
[_masterTabBarController showAuthenticationScreen];
|
||||
|
||||
// Note: Keep App settings
|
||||
|
||||
// Reset the contact manager
|
||||
[[MXKContactManager sharedManager] reset];
|
||||
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
|
||||
@@ -2907,7 +3009,7 @@ NSString *const kAppDelegateNetworkStatusDidChangeNotification = @"kAppDelegateN
|
||||
typeof(self) self = weakSelf;
|
||||
self->_errorNotification = nil;
|
||||
|
||||
[self logout];
|
||||
[self logoutWithConfirmation:NO completion:nil];
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
"room_participants_action_start_video_call" = "Започни видео разговор";
|
||||
"room_participants_action_mention" = "Спомени";
|
||||
// Chat
|
||||
"room_jump_to_first_unread" = "Отиди до първото непрочетено съобщение";
|
||||
"room_jump_to_first_unread" = "Виж първото непрочетено съобщение";
|
||||
"room_new_message_notification" = "%d ново съобщение";
|
||||
"room_new_messages_notification" = "%d нови съобщения";
|
||||
"room_one_user_is_typing" = "%@ пише…";
|
||||
@@ -514,3 +514,5 @@
|
||||
"room_details_unset_main_address" = "Премахни задаването като основен адрес";
|
||||
"room_participants_action_set_default_power_level" = "Възвърни към нормален потребител";
|
||||
"settings_config_no_build_info" = "Няма build информация";
|
||||
"room_event_action_kick_prompt_reason" = "Причина за изгонване на потребителя";
|
||||
"room_event_action_ban_prompt_reason" = "Причина за блокиране на потребителя";
|
||||
|
||||
@@ -515,3 +515,5 @@
|
||||
"group_rooms_filter_rooms" = "Filtere Community-Räume";
|
||||
"e2e_room_key_request_message_new_device" = "Du hast ein neues Gerät '%@' hinzugefügt, welches Verschlüsselungs-Schlüssel anfordert.";
|
||||
"room_do_not_have_permission_to_post" = "Du hast keine Berechtigung in diesem Raum zu posten";
|
||||
"room_event_action_kick_prompt_reason" = "Grund für den Rauswurf des Benutzers";
|
||||
"room_event_action_ban_prompt_reason" = "Grund für die Verbannung des Benutzers";
|
||||
|
||||
@@ -256,6 +256,8 @@
|
||||
"room_event_action_view_source" = "View Source";
|
||||
"room_event_action_report" = "Report content";
|
||||
"room_event_action_report_prompt_reason" = "Reason for reporting this content";
|
||||
"room_event_action_kick_prompt_reason" = "Reason for kicking this user";
|
||||
"room_event_action_ban_prompt_reason" = "Reason for banning this user";
|
||||
"room_event_action_report_prompt_ignore_user" = "Do you want to hide all messages from this user?";
|
||||
"room_event_action_save" = "Save";
|
||||
"room_event_action_resend" = "Resend";
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
"auth_reset_password_missing_email" = "Zure kontura gehitutako e-mail helbidea sartu behar da.";
|
||||
"auth_reset_password_missing_password" = "Pasahitz berri bat sartu behar da.";
|
||||
"auth_reset_password_error_unauthorized" = "Huts egin du e-mail helbidearen egiaztaketak, egin klik e-mailean zetorren estekan";
|
||||
"auth_reset_password_success_message" = "Zure pasahitza berrezarri da.\n\nSaiotik atera zaizu gailu guztietan eta ez dituzu jakinarazpenak jasoko. Jakinarazpenak berriro jasotzeko hasi berriro saioa gailu bakoitzean.";
|
||||
"auth_reset_password_success_message" = "Zure pasahitza berrezarri da.\n\nSaioa amaitu da zure gailu guztietan eta ez dituzu jakinarazpenak jasoko. Jakinarazpenak berriro jasotzeko hasi berriro saioa gailu bakoitzean.";
|
||||
// Read Receipts
|
||||
"read_receipts_list" = "Irakurragirien zerrenda";
|
||||
"yesterday" = "Atzo";
|
||||
|
||||
@@ -515,3 +515,5 @@
|
||||
"room_details_flair_invalid_id_prompt_msg" = "%@ n'est pas un identifiant valide pour une communauté";
|
||||
"room_details_fail_to_update_room_communities" = "Échec de la mise à jour des communautés liées";
|
||||
"room_do_not_have_permission_to_post" = "Vous n'avez pas la permission d'envoyer des messages dans ce salon";
|
||||
"room_event_action_kick_prompt_reason" = "Raison de l'exclusion de l'utilisateur";
|
||||
"room_event_action_ban_prompt_reason" = "Raison du bannissement de l'utilisateur";
|
||||
|
||||
@@ -1 +1,15 @@
|
||||
|
||||
// Titles
|
||||
"title_home" = "Kezdőképernyő";
|
||||
"title_favourites" = "Kedvencek";
|
||||
"title_people" = "Emberek";
|
||||
"title_rooms" = "Szobák";
|
||||
"title_groups" = "Közösségek";
|
||||
"warning" = "Figyelmeztetés";
|
||||
// Actions
|
||||
"view" = "Megtekintés";
|
||||
"back" = "Vissza";
|
||||
"continue" = "Folytatás";
|
||||
"create" = "Létrehozás";
|
||||
"leave" = "Elhagyás";
|
||||
"remove" = "Eltávolítás";
|
||||
"invite" = "Meghívás";
|
||||
|
||||
@@ -0,0 +1,355 @@
|
||||
// Titles
|
||||
"title_home" = "Heim";
|
||||
"title_favourites" = "Eftirlæti";
|
||||
"title_people" = "Fólk";
|
||||
"title_rooms" = "Spjallrásir";
|
||||
"title_groups" = "Samfélög";
|
||||
"warning" = "Aðvörun";
|
||||
// Actions
|
||||
"view" = "Skoða";
|
||||
"next" = "Næsta";
|
||||
"back" = "Til baka";
|
||||
"continue" = "Halda áfram";
|
||||
"create" = "Búa til";
|
||||
"start" = "Byrja";
|
||||
"leave" = "Fara út";
|
||||
"remove" = "Fjarlægja";
|
||||
"invite" = "Bjóða";
|
||||
"retry" = "Reyna aftur";
|
||||
"on" = "Kveikt";
|
||||
"off" = "Slökkt";
|
||||
"cancel" = "Hætta við";
|
||||
"save" = "Vista";
|
||||
"join" = "Taka þátt";
|
||||
"decline" = "Hafna";
|
||||
"accept" = "Samþykkja";
|
||||
"preview" = "Forskoðun";
|
||||
"camera" = "Myndavél";
|
||||
"voice" = "Tal";
|
||||
"video" = "Myndmerki";
|
||||
"later" = "Seinna";
|
||||
"rename" = "Endurnefna";
|
||||
"collapse" = "fella saman";
|
||||
"send_to" = "Senda til %@";
|
||||
"sending" = "Sendi";
|
||||
// Authentication
|
||||
"auth_login" = "Innskráning";
|
||||
"auth_register" = "Nýskrá";
|
||||
"auth_submit" = "Senda inn";
|
||||
"auth_skip" = "Sleppa";
|
||||
"auth_user_id_placeholder" = "Tölvupóstfang eða notandanafn";
|
||||
"auth_password_placeholder" = "Lykilorð";
|
||||
"auth_new_password_placeholder" = "Nýtt lykilorð";
|
||||
"auth_user_name_placeholder" = "Notandanafn";
|
||||
"auth_optional_email_placeholder" = "Tölvupóstfang (valfrjálst)";
|
||||
"auth_email_placeholder" = "Tölvupóstfang";
|
||||
"auth_optional_phone_placeholder" = "Símanúmer (valfrjálst)";
|
||||
"auth_phone_placeholder" = "Símanúmer";
|
||||
"auth_repeat_password_placeholder" = "Endurtaka lykilorð";
|
||||
"auth_repeat_new_password_placeholder" = "Staðfestu nýtt lykilorð";
|
||||
"auth_invalid_login_param" = "Rangt notandanafn og/eða lykilorð";
|
||||
"auth_invalid_user_name" = "Notandanöfn mega einungis innihalda bókstafi, tölustafi, punkta, bandstrik eða undirstrik";
|
||||
"auth_invalid_password" = "Lykilorð er of stutt (lágmark 6 stafir)";
|
||||
"auth_missing_password" = "Lykilorð vantar";
|
||||
"auth_missing_email" = "Vantar tölvupóstfang";
|
||||
"auth_missing_phone" = "Vantar símanúmer";
|
||||
"auth_missing_email_or_phone" = "Vantar tölvupóstfang eða símanúmer";
|
||||
"auth_password_dont_match" = "Lykilorðin stemma ekki";
|
||||
"auth_username_in_use" = "Notandanafn er í notkun";
|
||||
"auth_forgot_password" = "Gleymt lykilorð?";
|
||||
"auth_msisdn_validation_title" = "Sannvottun í bið";
|
||||
"room_creation_account" = "Notandaaðgangur";
|
||||
"room_creation_appearance" = "Útlit";
|
||||
"room_creation_appearance_name" = "Heiti";
|
||||
"room_creation_privacy" = "Meðferð persónuupplýsinga";
|
||||
"room_creation_make_private" = "Gera einka";
|
||||
"room_recents_directory_section_network" = "Netkerfi";
|
||||
"room_recents_favourites_section" = "Eftirlæti";
|
||||
"room_recents_people_section" = "FÓLK";
|
||||
"room_recents_conversations_section" = "SPJALLRÁSIR";
|
||||
"room_recents_no_conversation" = "Engar spjallrásir";
|
||||
"room_recents_low_priority_section" = "LÍTILL FORGANGUR";
|
||||
"room_recents_invites_section" = "BOÐSGESTIR";
|
||||
"room_recents_start_chat_with" = "Hefja spjall";
|
||||
"room_recents_create_empty_room" = "Búa til spjallrás";
|
||||
"room_recents_join_room" = "Taka þátt í spjallrás";
|
||||
"room_recents_join_room_title" = "Taka þátt í spjallsvæði";
|
||||
// People tab
|
||||
"people_invites_section" = "BOÐSGESTIR";
|
||||
"people_conversation_section" = "SAMTÖL";
|
||||
"people_no_conversation" = "Engin samtöl";
|
||||
// Groups tab
|
||||
"group_invite_section" = "BOÐSGESTIR";
|
||||
"group_section" = "SAMFÉLÖG";
|
||||
// Search
|
||||
"search_rooms" = "Spjallrásir";
|
||||
"search_messages" = "Skilaboð";
|
||||
"search_people" = "Fólk";
|
||||
"search_files" = "Skrár";
|
||||
"search_default_placeholder" = "Leita";
|
||||
"search_no_result" = "Engar niðurstöður";
|
||||
"search_in_progress" = "Leita…";
|
||||
// Directory
|
||||
"directory_cell_title" = "Vafra í möppu";
|
||||
"directory_cell_description" = "%tu spjallrásir";
|
||||
// Contacts
|
||||
"contacts_address_book_section" = "TENGILIÐIR Á TÆKI";
|
||||
"contacts_address_book_matrix_users_toggle" = "Einungis notendur Matrix";
|
||||
"room_participants_leave_prompt_title" = "Fara af spjallrás";
|
||||
"room_participants_leave_prompt_msg" = "Ertu viss um að þú viljir fara út spjallrásinni?";
|
||||
"room_participants_remove_prompt_title" = "Staðfesting";
|
||||
"room_participants_invite_prompt_title" = "Staðfesting";
|
||||
"room_participants_filter_room_members" = "Sía meðlimi spjallrásar";
|
||||
"room_participants_online" = "Nettengt";
|
||||
"room_participants_offline" = "Ónettengt";
|
||||
"room_participants_unknown" = "Óþekkt";
|
||||
"room_participants_idle" = "Iðjulaust";
|
||||
"room_participants_now" = "núna";
|
||||
"room_participants_ago" = "síðan";
|
||||
"room_participants_action_section_admin_tools" = "Kerfisstjóratól";
|
||||
"room_participants_action_section_direct_chats" = "Beint spjall";
|
||||
"room_participants_action_section_devices" = "Tæki";
|
||||
"room_participants_action_section_other" = "Annað";
|
||||
"room_participants_action_invite" = "Bjóða";
|
||||
"room_participants_action_leave" = "Fara af spjallrás";
|
||||
"room_participants_action_remove" = "Fjarlægja úr þessari spjallrás";
|
||||
"room_participants_action_ban" = "Banna á þessari spjallrás";
|
||||
"room_participants_action_unban" = "Afbanna";
|
||||
"room_participants_action_set_admin" = "Gera að stjórnanda";
|
||||
"room_participants_action_start_new_chat" = "Hefja nýtt spjall";
|
||||
"room_participants_action_start_voice_call" = "Hefja raddsamtal";
|
||||
"room_participants_action_start_video_call" = "Hefja myndsamtal";
|
||||
"room_new_message_notification" = "%d ný skilaboð";
|
||||
"room_new_messages_notification" = "%d ný skilaboð";
|
||||
"room_one_user_is_typing" = "%@ er að skrifa…";
|
||||
"room_two_users_are_typing" = "%@ & %@ eru að skrifa…";
|
||||
"room_many_users_are_typing" = "%@, %@ & fleiri eru að skrifa……";
|
||||
"encrypted_room_message_placeholder" = "Senda dulrituð skilaboð…";
|
||||
"room_ongoing_conference_call_close" = "Loka";
|
||||
"room_prompt_resend" = "Endursenda allt";
|
||||
"room_prompt_cancel" = "hætta við allt";
|
||||
"room_event_action_copy" = "Afrita";
|
||||
"room_event_action_quote" = "Tilvitnun";
|
||||
"room_event_action_redact" = "Ritstýra";
|
||||
"room_event_action_more" = "Meira";
|
||||
"room_event_action_share" = "Deila";
|
||||
"room_event_action_permalink" = "Varanlegur tengill";
|
||||
"room_event_action_view_source" = "Skoða frumkóða";
|
||||
"room_event_action_save" = "Vista";
|
||||
"room_event_action_resend" = "Endursenda";
|
||||
"room_event_action_delete" = "Eyða";
|
||||
"room_event_action_cancel_download" = "Hætta við niðurhal";
|
||||
"unknown_devices_send_anyway" = "Senda samt";
|
||||
"unknown_devices_verify" = "Sannreyna…";
|
||||
// Room Title
|
||||
"room_title_new_room" = "Ný spjallrás";
|
||||
"room_title_multiple_active_members" = "%@/%@ virkir meðlimir";
|
||||
"room_title_one_active_member" = "%@/%@ virkur meðlimur";
|
||||
"room_title_invite_members" = "Bjóða meðlimum";
|
||||
"room_title_members" = "%@ meðlimir";
|
||||
"room_title_one_member" = "1 meðlimur";
|
||||
"room_preview_try_join_an_unknown_room_default" = "spjallrás";
|
||||
// Settings
|
||||
"settings_title" = "Stillingar";
|
||||
"settings_report_bug" = "Tilkynna galla";
|
||||
"settings_config_user_id" = "Skráð inn sem %@";
|
||||
"settings_user_settings" = "STILLINGAR NOTANDA";
|
||||
"settings_notifications_settings" = "STILLINGAR Á TILKYNNINGUM";
|
||||
"settings_calls_settings" = "SAMTÖL";
|
||||
"settings_user_interface" = "NOTANDAVIÐMÓT";
|
||||
"settings_ignored_users" = "HUNSAÐIR NOTENDUR";
|
||||
"settings_contacts" = "TENGILIÐIR Á TÆKI";
|
||||
"settings_advanced" = "ÍTARLEGT";
|
||||
"settings_other" = "ANNAÐ";
|
||||
"settings_devices" = "TÆKI";
|
||||
"settings_cryptography" = "DULRITUN";
|
||||
"settings_sign_out" = "Skrá út";
|
||||
"settings_sign_out_confirmation" = "Ertu viss?";
|
||||
"settings_profile_picture" = "Notandamynd";
|
||||
"settings_display_name" = "Birtingarnafn";
|
||||
"settings_first_name" = "Skírnarnafn";
|
||||
"settings_surname" = "Eftirnafn";
|
||||
"settings_remove_prompt_title" = "Staðfesting";
|
||||
"settings_email_address" = "Tölvupóstfang";
|
||||
"settings_add_email_address" = "Bæta við tölvupóstfangi";
|
||||
"settings_phone_number" = "Símanúmer";
|
||||
"settings_add_phone_number" = "Bæta við símanúmeri";
|
||||
"settings_night_mode" = "Næturhamur";
|
||||
"settings_ui_language" = "Tungumál";
|
||||
"settings_ui_theme" = "Þema";
|
||||
"settings_ui_theme_auto" = "Sjálfvirkt";
|
||||
"settings_ui_theme_light" = "Ljóst";
|
||||
"settings_ui_theme_dark" = "Dökkt";
|
||||
"settings_ui_theme_black" = "Svart";
|
||||
"settings_ui_theme_picker_title" = "Veldu þema";
|
||||
"settings_labs_e2e_encryption" = "Enda-í-enda dulritun";
|
||||
"settings_version" = "Útgáfa %@";
|
||||
"settings_olm_version" = "Útgáfa olm %@";
|
||||
"settings_copyright" = "Höfundarréttur";
|
||||
"settings_copyright_url" = "https://riot.im/copyright";
|
||||
"settings_term_conditions" = "Skilmálar og kvaðir";
|
||||
"settings_term_conditions_url" = "https://riot.im/tac_apple";
|
||||
"settings_privacy_policy" = "Stefna vegna meðferðar persónuupplýsinga";
|
||||
"settings_privacy_policy_url" = "https://riot.im/privacy";
|
||||
"settings_third_party_notices" = "Athugasemdir frá þriðja aðila";
|
||||
"settings_send_crash_report" = "Senda nafnlausar hrunskýrslur og upplýsingar um notkun";
|
||||
"settings_clear_cache" = "Hreinsa skyndiminni";
|
||||
"settings_change_password" = "Breyta lykilorði";
|
||||
"settings_old_password" = "eldra lykilorð";
|
||||
"settings_new_password" = "nýtt lykilorð";
|
||||
"settings_confirm_password" = "staðfestu lykilorð";
|
||||
"settings_fail_to_update_password" = "Mistókst að uppfæra lykilorð";
|
||||
"settings_password_updated" = "Lykilorðið þitt hefur verið uppfært";
|
||||
"settings_crypto_device_name" = "Heiti tækis: ";
|
||||
"settings_crypto_device_id" = "\nAuðkenni tækis: ";
|
||||
"settings_crypto_device_key" = "\nDulritunarlykill tækis: ";
|
||||
"settings_crypto_export" = "Flytja út dulritunarlykla";
|
||||
// Room Details
|
||||
"room_details_title" = "Nánar um spjallrás";
|
||||
"room_details_people" = "Meðlimir";
|
||||
"room_details_files" = "Skrár";
|
||||
"room_details_settings" = "Stillingar";
|
||||
"room_details_photo" = "Mynd spjallrásar";
|
||||
"room_details_room_name" = "Nafn spjallrásar";
|
||||
"room_details_topic" = "Umfjöllunarefni";
|
||||
"room_details_favourite_tag" = "Eftirlæti";
|
||||
"room_details_low_priority_tag" = "Lítill forgangur";
|
||||
"room_details_direct_chat" = "Beint spjall";
|
||||
"room_details_history_section" = "Hver getur lesið ferilskráningu?";
|
||||
"room_details_history_section_anyone" = "Hver sem er";
|
||||
"room_details_history_section_prompt_title" = "Aðvörun vegna gagnaleyndar";
|
||||
"room_details_addresses_section" = "Vistföng";
|
||||
"room_details_new_address" = "Bæta við nýju heimilisfangi";
|
||||
"room_details_flair_invalid_id_prompt_title" = "Ógilt snið";
|
||||
"room_details_banned_users_section" = "Bannaðir notendur";
|
||||
"room_details_advanced_section" = "Ítarlegt";
|
||||
// Group Details
|
||||
"group_details_title" = "Nánar um samfélag";
|
||||
"group_details_home" = "Heim";
|
||||
"group_details_people" = "Fólk";
|
||||
"group_details_rooms" = "Spjallrásir";
|
||||
// Group Home
|
||||
"group_home_one_member_format" = "1 meðlimur";
|
||||
"group_home_multi_members_format" = "%tu meðlimir";
|
||||
"group_home_one_room_format" = "1 spjallrás";
|
||||
"group_home_multi_rooms_format" = "%tu spjallrásir";
|
||||
"group_invitation_format" = "%@ hefur boðið þér að taka þátt í þessu samfélagi";
|
||||
// Group participants
|
||||
"group_participants_add_participant" = "Bæta við þátttakanda";
|
||||
"group_participants_remove_prompt_title" = "Staðfesting";
|
||||
"group_participants_invite_prompt_title" = "Staðfesting";
|
||||
"group_participants_filter_members" = "Sía meðlimi samfélags";
|
||||
"group_participants_invited_section" = "BOÐIÐ";
|
||||
// Group rooms
|
||||
"group_rooms_filter_rooms" = "Sía spjallrásir samfélags";
|
||||
"receipt_status_read" = "Lesið: ";
|
||||
// Media picker
|
||||
"media_picker_library" = "Safn";
|
||||
"media_picker_select" = "Veldu";
|
||||
// Directory
|
||||
"directory_title" = "Mappa";
|
||||
"directory_server_picker_title" = "Veldu möppu";
|
||||
"directory_server_all_rooms" = "Allar spjallrásir á %@ vefþjóninum";
|
||||
"directory_server_all_native_rooms" = "Allar innbyggðar Matrix-spjallrásir";
|
||||
// Others
|
||||
"or" = "eða";
|
||||
"you" = "Þú";
|
||||
"today" = "Í dag";
|
||||
"yesterday" = "Í gær";
|
||||
"network_offline_prompt" = "Internettenging virðist vera ótengd.";
|
||||
"do_not_ask_again" = "Ekki spyrja aftur";
|
||||
"large_badge_value_k_format" = "%.1fK";
|
||||
"room_displayname_two_members" = "%@ og %@";
|
||||
"room_displayname_more_than_two_members" = "%@ og %u til viðbótar";
|
||||
"room_displayname_no_title" = "Tóm spjallrás";
|
||||
// Call
|
||||
"call_incoming_voice_prompt" = "Innhringing raddsamtals frá %@";
|
||||
"call_incoming_video_prompt" = "Innhringing myndsamtals frá %@";
|
||||
"call_incoming_voice" = "Innhringing...";
|
||||
"call_incoming_video" = "Innhringing myndsamtals...";
|
||||
// No VoIP support
|
||||
"no_voip_title" = "Innhringing";
|
||||
// Bug report
|
||||
"bug_report_title" = "Villuskýrsla";
|
||||
"bug_crash_report_title" = "Hrunskýrsla";
|
||||
"bug_report_send_logs" = "Senda atvikaskrá";
|
||||
"bug_report_send_screenshot" = "Senda skjámynd";
|
||||
"bug_report_progress_zipping" = "Safna atvikaskrám";
|
||||
"bug_report_progress_uploading" = "Sendi inn skýrslu";
|
||||
"bug_report_send" = "Senda";
|
||||
"widget_integration_must_be_in_room" = "Þú ert ekki á þessari spjallrás.";
|
||||
"widget_integration_no_permission_in_room" = "Þú hefur ekki réttindi til þess að gera þetta á þessari spjallrás.";
|
||||
"e2e_room_key_request_ignore_request" = "Hunsa beiðni";
|
||||
"active_call" = "Virkt samtal";
|
||||
"unknown_devices_call_anyway" = "hringja samt";
|
||||
"call_already_displayed" = "Þegar er samtal í gangi.";
|
||||
"active_call_details" = "Virkt samtal (%@)";
|
||||
"auth_send_reset_email" = "Senda endurstillingarpóst";
|
||||
"auth_return_to_login" = "Fara aftur í innskráningargluggann";
|
||||
"auth_home_server_placeholder" = "URL-slóð (t.d. https://matrix.org)";
|
||||
"auth_identity_server_placeholder" = "URL-slóð (t.d. https://matrix.org)";
|
||||
"auth_invalid_email" = "Þetta lítur ekki út eins og gilt tölvupóstfang";
|
||||
"auth_invalid_phone" = "Þetta lítur ekki út eins og gilt símanúmer";
|
||||
"auth_email_in_use" = "Þetta tölvupóstfang er nú þegar í notkun";
|
||||
"auth_phone_in_use" = "Þetta símanúmer er nú þegar í notkun";
|
||||
"auth_untrusted_id_server" = "Þessum auðkennisþjóni er ekki treyst";
|
||||
"auth_use_server_options" = "Nota sérsniðna valkosti vefþjóns (ítarlegt)";
|
||||
"auth_email_validation_message" = "Skoðaðu tölvupóstinn þinn til að geta haldið áfram með skráningu";
|
||||
"auth_msisdn_validation_message" = "Við höfum sent SMS-skilaboð með virkjunarkóða. Settu þennan kóða inn hér fyrir neðan.";
|
||||
"auth_msisdn_validation_error" = "Ekki var hægt að sannreyna símanúmer.";
|
||||
// Chat creation
|
||||
"room_creation_title" = "Nýtt spjall";
|
||||
"room_creation_private_room" = "Þetta spjall er einkamál";
|
||||
"room_creation_public_room" = "Þetta spjall er opinbert";
|
||||
"room_creation_make_public" = "Gera opinbert";
|
||||
"room_creation_make_public_prompt_title" = "Gera þetta spjall opinbert?";
|
||||
"room_creation_keep_private" = "Halda einka";
|
||||
// Rooms tab
|
||||
"room_directory_no_public_room" = "Engar opinberar spjallrásir tiltækar";
|
||||
"search_people_placeholder" = "Leita eftir notandauðkenni, nafni eða tölvupóstfangi";
|
||||
"directory_search_fail" = "Ekki tókst að sækja gögn";
|
||||
"contacts_address_book_no_contact" = "Engir tengiliðir á tæki";
|
||||
// Chat participants
|
||||
"room_participants_title" = "Þátttakendur";
|
||||
"room_participants_add_participant" = "Bæta við þátttakanda";
|
||||
"room_participants_one_participant" = "1 þáttakandi";
|
||||
"room_participants_multi_participants" = "%d þátttakendur";
|
||||
"room_participants_action_ignore" = "Fela öll skilaboð frá þessum notanda";
|
||||
"room_participants_action_unignore" = "Sýna öll skilaboð frá þessum notanda";
|
||||
"room_participants_action_set_default_power_level" = "Endurstilla sem venjulegan notanda";
|
||||
"room_participants_action_set_moderator" = "Gera að umsjónarmanni";
|
||||
"room_participants_action_mention" = "Minnst á";
|
||||
// Chat
|
||||
"room_jump_to_first_unread" = "Fara í fyrstu ólesin skilaboð";
|
||||
"room_message_placeholder" = "Senda skilaboð (ódulrituð)…";
|
||||
"room_do_not_have_permission_to_post" = "Þú hefur ekki heimild til að senda skilaboð á þessa spjallrás";
|
||||
"room_message_short_placeholder" = "Senda skilaboð…";
|
||||
"room_offline_notification" = "Tenging við vefþjón hefur rofnað.";
|
||||
"room_resend_unsent_messages" = "Senda aftur ósend skilaboð";
|
||||
"room_delete_unsent_messages" = "Eyða ósendum skilaboðum";
|
||||
"room_event_action_report" = "Klaga efni";
|
||||
"room_event_action_report_prompt_reason" = "Ástæður fyrir tilkynningu um vankanta á þessu efni";
|
||||
"room_event_action_report_prompt_ignore_user" = "Viltu fela öll skilaboð frá þessum notanda?";
|
||||
"room_event_action_cancel_send" = "Hætta við sendingu";
|
||||
"room_event_action_view_encryption" = "Dulritunarupplýsingar";
|
||||
"room_event_failed_to_send" = "Mistókst að senda";
|
||||
// Unknown devices
|
||||
"unknown_devices_alert_title" = "Spjallrás inniheldur óþekkt tæki";
|
||||
"unknown_devices_answer_anyway" = "Svara samt";
|
||||
"unknown_devices_title" = "Óþekkt tæki";
|
||||
// Room Preview
|
||||
"room_preview_invitation_format" = "Þér hefur verið boðið af %@ að taka þátt í þessari spjallrás";
|
||||
"account_logout_all" = "Skrá út af öllum notandaaðgöngum";
|
||||
"settings_config_no_build_info" = "Engar smíðaupplýsingar";
|
||||
"settings_mark_all_as_read" = "Merkja öll skilaboð sem lesin";
|
||||
"settings_config_home_server" = "Heimaþjónn er %@";
|
||||
"settings_config_identity_server" = "Auðkennisþjónn er %@";
|
||||
"settings_labs" = "TILRAUNIR";
|
||||
"settings_flair" = "Sýna hlutverksmerki þar sem það er leyfilegt";
|
||||
"settings_remove_email_prompt_msg" = "Ertu viss um að þú viljir fjarlægja tölvupóstfangið %@?";
|
||||
"settings_remove_phone_prompt_msg" = "Ertu viss um að þú viljir fjarlægja símanúmerið %@?";
|
||||
"settings_email_address_placeholder" = "Settu inn tölvupóstfangið þitt";
|
||||
"settings_enable_push_notif" = "Tilkynningar á þessu tæki";
|
||||
"settings_show_decrypted_content" = "Sýna afkóðað efni";
|
||||
"settings_enable_callkit" = "Innbyggð hringing";
|
||||
"room_details_flair_section" = "Sýna hlutverksmerki fyrir samfélög";
|
||||
@@ -18,82 +18,63 @@
|
||||
|
||||
/* New message from a specific person, not referencing a room */
|
||||
"MSG_FROM_USER" = "Bericht van %@";
|
||||
|
||||
/* New message from a specific person in a named room */
|
||||
"MSG_FROM_USER_IN_ROOM" = "%@ geplaatst in %@";
|
||||
|
||||
/** Single, unencrypted messages (where we can include the content */
|
||||
|
||||
/* New message from a specific person, not referencing a room. Content included. */
|
||||
"MSG_FROM_USER_WITH_CONTENT" = "%@: %@";
|
||||
|
||||
/* New message from a specific person in a named room. Content included. */
|
||||
"MSG_FROM_USER_IN_ROOM_WITH_CONTENT" = "%@ in %@: %@";
|
||||
|
||||
/* New action message from a specific person, not referencing a room. */
|
||||
"ACTION_FROM_USER" = "* %@ %@";
|
||||
|
||||
/* New action message from a specific person in a named room. */
|
||||
"ACTION_FROM_USER_IN_ROOM" = "%@: * %@ %@";
|
||||
|
||||
/** Image Messages **/
|
||||
|
||||
/* New action message from a specific person, not referencing a room. */
|
||||
"IMAGE_FROM_USER" = "%@ heeft je een afbeelding %@ gestuurd";
|
||||
|
||||
/* New action message from a specific person in a named room. */
|
||||
"IMAGE_FROM_USER_IN_ROOM" = "%@ plaatste een afbeelding %@ in %@";
|
||||
|
||||
/** Coalesced messages **/
|
||||
|
||||
/* Multiple unread messages in a room */
|
||||
"UNREAD_IN_ROOM" = "%@ nieuwe berichten in %@";
|
||||
|
||||
/* Multiple unread messages from a specific person, not referencing a room */
|
||||
"MSGS_FROM_USER" = "%@ nieuwe berichten in %@";
|
||||
|
||||
/* Multiple unread messages from two people */
|
||||
"MSGS_FROM_TWO_USERS" = "%@ nieuwe berichten van %@ en %@";
|
||||
|
||||
/* Multiple unread messages from three people */
|
||||
"MSGS_FROM_THREE_USERS" = "%@ nieuwe berichten van %@, %@ en %@";
|
||||
|
||||
/* Multiple unread messages from two plus people (ie. for 4+ people: 'others' replaces the third person) */
|
||||
"MSGS_FROM_TWO_PLUS_USERS" = "%@ nieuwe berichten van %@, %@ en anderen";
|
||||
|
||||
/* Multiple messages in two rooms */
|
||||
"MSGS_IN_TWO_ROOMS" = "%@ nieuwe berichten in %@ en %@";
|
||||
|
||||
/* Look, stuff's happened, alright? Just open the app. */
|
||||
"MSGS_IN_TWO_PLUS_ROOMS" = "%@ nieuwe berichten in %@, %@ en anderen";
|
||||
|
||||
/** Invites **/
|
||||
|
||||
/* A user has invited you to a chat */
|
||||
"USER_INVITE_TO_CHAT" = "%@ heeft je voor een gesprek uitgenodigd";
|
||||
|
||||
/* A user has invited you to an (unamed) group chat */
|
||||
"USER_INVITE_TO_CHAT_GROUP_CHAT" = "%@ heeft je voor een groepsgesprek uitgenodigd";
|
||||
|
||||
/* A user has invited you to a named room */
|
||||
"USER_INVITE_TO_NAMED_ROOM" = "%@ heeft je in %@ uitgenodigd";
|
||||
|
||||
/** Calls **/
|
||||
|
||||
/* Incoming one-to-one voice call */
|
||||
"VOICE_CALL_FROM_USER" = "Oproep van %@";
|
||||
|
||||
/* Incoming one-to-one video call */
|
||||
"VIDEO_CALL_FROM_USER" = "Video-oproep van %@";
|
||||
|
||||
/* Incoming unnamed voice conference invite from a specific person */
|
||||
"VOICE_CONF_FROM_USER" = "Groepsoproep van %@";
|
||||
|
||||
/* Incoming unnamed video conference invite from a specific person */
|
||||
"VIDEO_CONF_FROM_USER" = "Video groepsoproep van %@";
|
||||
|
||||
/* Incoming named voice conference invite from a specific person */
|
||||
"VOICE_CONF_NAMED_FROM_USER" = "Groepsoproep van %@: '%@'";
|
||||
|
||||
/* Incoming named video conference invite from a specific person */
|
||||
"VIDEO_CONF_NAMED_FROM_USER" = "Video groepsoproep van %@: '%@'";
|
||||
/* A single unread message in a room */
|
||||
"SINGLE_UNREAD_IN_ROOM" = "Je hebt een bericht ontvangen in %@";
|
||||
/* A single unread message */
|
||||
"SINGLE_UNREAD" = "Je hebt een bericht ontvangen";
|
||||
|
||||
@@ -503,3 +503,41 @@
|
||||
"e2e_room_key_request_start_verification" = "Start verificatie...";
|
||||
"e2e_room_key_request_share_without_verifying" = "Delen zonder te verifiëren";
|
||||
"e2e_room_key_request_ignore_request" = "Negeer verzoek";
|
||||
"title_groups" = "Gemeenschappen";
|
||||
// Groups tab
|
||||
"group_invite_section" = "UITNODIGINGEN";
|
||||
"group_section" = "GEMEENSCHAPPEN";
|
||||
"room_do_not_have_permission_to_post" = "Je hebt geen toestemming om in deze ruimte te posten";
|
||||
"settings_flair" = "Badge weergeven waar toegestaan";
|
||||
"room_details_flair_section" = "Badge voor gemeenschappen weergeven";
|
||||
"room_details_new_flair_placeholder" = "Voeg nieuw gemeenschaps-ID toe (bv. +foo%@)";
|
||||
"room_details_flair_invalid_id_prompt_title" = "Ongeldig formaat";
|
||||
"room_details_flair_invalid_id_prompt_msg" = "%@ is niet een geldige identificatie voor een gemeenschap";
|
||||
"room_details_fail_to_update_room_communities" = "Niet gelukt om de gerelateerde gemeenschappen te updaten";
|
||||
// Group Details
|
||||
"group_details_title" = "Gemeenschapsdetails";
|
||||
"group_details_home" = "Home";
|
||||
"group_details_people" = "Personen";
|
||||
"group_details_rooms" = "Ruimtes";
|
||||
// Group Home
|
||||
"group_home_one_member_format" = "1 lid";
|
||||
"group_home_multi_members_format" = "%tu leden";
|
||||
"group_home_one_room_format" = "1 ruimte";
|
||||
"group_home_multi_rooms_format" = "%tu ruimtes";
|
||||
"group_invitation_format" = "%@ heeft je uitgenodigd om tot deze gemeenschap toe te treden";
|
||||
// Group participants
|
||||
"group_participants_add_participant" = "Deelnemer toevoegen";
|
||||
"group_participants_leave_prompt_title" = "Groep verlaten";
|
||||
"group_participants_leave_prompt_msg" = "Weet je zeker dat je de groep wilt verlaten?";
|
||||
"group_participants_remove_prompt_title" = "Bevestigen";
|
||||
"group_participants_remove_prompt_msg" = "Weet je zeker dat je %@ van deze groep wilt verwijderen?";
|
||||
"group_participants_invite_prompt_title" = "Bevestiging";
|
||||
"group_participants_invite_prompt_msg" = "Weet je zeker dat je %@ in deze groep wilt uitnodigen?";
|
||||
"group_participants_filter_members" = "Gemeenschapsleden filteren";
|
||||
"group_participants_invite_another_user" = "Zoeken / uitnodigen bij Gebruikers-ID of Naam";
|
||||
"group_participants_invite_malformed_id_title" = "Uitnodigingsfout";
|
||||
"group_participants_invite_malformed_id" = "Misvormd ID. Het moet een Matrix ID zijn, zoals '@localpart:domain'";
|
||||
"group_participants_invited_section" = "UITGENODIGD";
|
||||
// Group rooms
|
||||
"group_rooms_filter_rooms" = "Gemeenschapsruimtes filteren";
|
||||
"e2e_room_key_request_message_new_device" = "Je hebt een nieuwe apparaat '%@' toegevoegd, die een verzoek doet naar versleutelingssleutels.";
|
||||
|
||||
@@ -514,3 +514,7 @@
|
||||
"group_rooms_filter_rooms" = "Фильтр комнат сообщества";
|
||||
"e2e_room_key_request_message_new_device" = "Вы добавили новое устройство '%@', которое запрашивает ключи шифрования.";
|
||||
"room_do_not_have_permission_to_post" = "У вас нет разрешения на публикацию в этой комнате";
|
||||
"settings_flair" = "Покажите настроение, где это разрешено";
|
||||
"room_details_flair_section" = "Показать настроение для сообществ";
|
||||
"room_event_action_kick_prompt_reason" = "Причина по которой этот пользователь будет выкинут";
|
||||
"room_event_action_ban_prompt_reason" = "Причина по которой этот пользователь будет забанен";
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
// Permissions usage explanations
|
||||
"NSCameraUsageDescription" = "Kamera përdoret për të bërë foto dhe regjistruar video, dhe për të bërë thirrje video.";
|
||||
"NSPhotoLibraryUsageDescription" = "Fototeka përdoret për të dërguar foto dhe video.";
|
||||
"NSMicrophoneUsageDescription" = "Mikrofoni përdoret për të regjistruar video, dhe për të bërë thirrje.";
|
||||
"NSContactsUsageDescription" = "Libri i kontakteve përdoret për të kërkuar për përdorues sipas email-i ose numri telefoni në Riot.";
|
||||
@@ -0,0 +1,52 @@
|
||||
/* New message from a specific person, not referencing a room */
|
||||
"MSG_FROM_USER" = "Mesazh prej %@";
|
||||
/* New message from a specific person in a named room */
|
||||
"MSG_FROM_USER_IN_ROOM" = "%@ postuar te %@";
|
||||
/* New message from a specific person, not referencing a room. Content included. */
|
||||
"MSG_FROM_USER_WITH_CONTENT" = "%@: %@";
|
||||
/* New message from a specific person in a named room. Content included. */
|
||||
"MSG_FROM_USER_IN_ROOM_WITH_CONTENT" = "%@ te %@: %@";
|
||||
/* New action message from a specific person, not referencing a room. */
|
||||
"ACTION_FROM_USER" = "* %@ %@";
|
||||
/* New action message from a specific person in a named room. */
|
||||
"ACTION_FROM_USER_IN_ROOM" = "%@: * %@ %@";
|
||||
/* New action message from a specific person, not referencing a room. */
|
||||
"IMAGE_FROM_USER" = "%@ ju dërgoi një foto %@";
|
||||
/* New action message from a specific person in a named room. */
|
||||
"IMAGE_FROM_USER_IN_ROOM" = "%@ postoi një foto %@ në %@";
|
||||
/* A single unread message in a room */
|
||||
"SINGLE_UNREAD_IN_ROOM" = "Morët një mesazh te %@";
|
||||
/* A single unread message */
|
||||
"SINGLE_UNREAD" = "Morët një mesazh";
|
||||
/* Multiple unread messages in a room */
|
||||
"UNREAD_IN_ROOM" = "%@ mesazhe të rinj në %@";
|
||||
/* Multiple unread messages from a specific person, not referencing a room */
|
||||
"MSGS_FROM_USER" = "%@ mesazhe të rinj në %@";
|
||||
/* Multiple unread messages from two people */
|
||||
"MSGS_FROM_TWO_USERS" = "%@ mesazhe të rinj nga %@ dhe %@";
|
||||
/* Multiple unread messages from three people */
|
||||
"MSGS_FROM_THREE_USERS" = "%@ mesazhe të rinj nga %@, %@ dhe %@";
|
||||
/* Multiple unread messages from two plus people (ie. for 4+ people: 'others' replaces the third person) */
|
||||
"MSGS_FROM_TWO_PLUS_USERS" = "%@ mesazhe të rinj nga %@, %@ dhe të tjerë";
|
||||
/* Multiple messages in two rooms */
|
||||
"MSGS_IN_TWO_ROOMS" = "%@ mesazhe të rinj në %@ dhe %@";
|
||||
/* Look, stuff's happened, alright? Just open the app. */
|
||||
"MSGS_IN_TWO_PLUS_ROOMS" = "%@ mesazhe të rinj në %@, %@ dhe të tjerë";
|
||||
/* A user has invited you to a chat */
|
||||
"USER_INVITE_TO_CHAT" = "%@ ju ka ftuar të fjaloseni";
|
||||
/* A user has invited you to an (unamed) group chat */
|
||||
"USER_INVITE_TO_CHAT_GROUP_CHAT" = "%@ ju ka ftuar në një fjalosje në grup";
|
||||
/* A user has invited you to a named room */
|
||||
"USER_INVITE_TO_NAMED_ROOM" = "%@ ju ka ftuar te %@";
|
||||
/* Incoming one-to-one voice call */
|
||||
"VOICE_CALL_FROM_USER" = "Thirrje nga %@";
|
||||
/* Incoming one-to-one video call */
|
||||
"VIDEO_CALL_FROM_USER" = "Thirrje video nga %@";
|
||||
/* Incoming unnamed voice conference invite from a specific person */
|
||||
"VOICE_CONF_FROM_USER" = "Thirrje grupi nga %@";
|
||||
/* Incoming unnamed video conference invite from a specific person */
|
||||
"VIDEO_CONF_FROM_USER" = "Thirrje video në grup nga %@";
|
||||
/* Incoming named voice conference invite from a specific person */
|
||||
"VOICE_CONF_NAMED_FROM_USER" = "Thirrje grupi nga %@: '%@'";
|
||||
/* Incoming named video conference invite from a specific person */
|
||||
"VIDEO_CONF_NAMED_FROM_USER" = "Thirrje video në grup nga %@: '%@'";
|
||||
@@ -0,0 +1,400 @@
|
||||
// Titles
|
||||
"title_home" = "Kreu";
|
||||
"title_people" = "Persona";
|
||||
"title_rooms" = "Dhoma";
|
||||
"title_groups" = "Bashkësi";
|
||||
"warning" = "Sinjalizim";
|
||||
// Actions
|
||||
"view" = "Shiheni";
|
||||
"next" = "Pasuesja";
|
||||
"back" = "Mbrapsht";
|
||||
"continue" = "Vazhdo";
|
||||
"create" = "Krijoje";
|
||||
"start" = "Fillo";
|
||||
"leave" = "Dilni";
|
||||
"remove" = "Hiqe";
|
||||
"invite" = "Ftoje";
|
||||
"retry" = "Riprovo";
|
||||
"off" = "Off";
|
||||
"cancel" = "Anuloje";
|
||||
"save" = "Ruaje";
|
||||
"decline" = "Hidhe poshtë";
|
||||
"accept" = "Pranoje";
|
||||
"preview" = "Paraparje";
|
||||
"camera" = "Kamerë";
|
||||
"voice" = "Zë";
|
||||
"video" = "Video";
|
||||
"active_call" = "Thirrje Aktive";
|
||||
"active_call_details" = "Thirrje Aktive (%@)";
|
||||
"later" = "Më vonë";
|
||||
"rename" = "Riemërtojeni";
|
||||
"collapse" = "tkurre";
|
||||
"send_to" = "Dërgoje te %@";
|
||||
"sending" = "Po dërgohet";
|
||||
// Authentication
|
||||
"auth_login" = "Hyni";
|
||||
"auth_register" = "Regjistrohuni";
|
||||
"auth_submit" = "Parashtroje";
|
||||
"auth_skip" = "Anashkaloje";
|
||||
"auth_send_reset_email" = "Ridërgo Email Ricaktimi";
|
||||
"auth_return_to_login" = "Kthehuni te skena e hyrjeve";
|
||||
"auth_password_placeholder" = "Fjalëkalim";
|
||||
"auth_new_password_placeholder" = "Fjalëkalim i ri";
|
||||
"auth_user_name_placeholder" = "Emër përdoruesi";
|
||||
"auth_optional_email_placeholder" = "Adresë email (opsionale)";
|
||||
"auth_email_placeholder" = "Adresë email";
|
||||
"auth_optional_phone_placeholder" = "Numër telefoni (opsionale)";
|
||||
"auth_phone_placeholder" = "Numër telefoni";
|
||||
"auth_repeat_password_placeholder" = "Rijepeni fjalëkalimin";
|
||||
"auth_repeat_new_password_placeholder" = "Ripohoni fjalëkalimin tuaj të ri";
|
||||
"auth_home_server_placeholder" = "URL (p.sh. https://matrix.org)";
|
||||
"auth_identity_server_placeholder" = "URL (p.sh. https://matrix.org)";
|
||||
"auth_invalid_login_param" = "Emër përdoruesi dhe/ose fjalëkalim i pasaktë";
|
||||
"auth_invalid_password" = "Fjalëkalim shumë i shkurtër (min 6)";
|
||||
"auth_invalid_email" = "Kjo s’duket si adresë email e vlefshme";
|
||||
"auth_invalid_phone" = "Ky s’duket si numër telefoni i vlefshëm";
|
||||
"auth_missing_password" = "Mungon fjalëkalimi";
|
||||
"auth_missing_email" = "Mungon adresa email";
|
||||
"auth_missing_phone" = "Mungon numër telefoni";
|
||||
"auth_missing_email_or_phone" = "Mungon adresa email ose numër telefoni";
|
||||
"auth_email_in_use" = "Kjo adresë email është tashmë në përdorim";
|
||||
"auth_phone_in_use" = "Ky numër telefoni është tashmë në përdorim";
|
||||
"auth_untrusted_id_server" = "Shërbyesi i identiteteve s’është i besuar";
|
||||
"auth_password_dont_match" = "Fjalëkalimet s’përputhen";
|
||||
"auth_username_in_use" = "Emër përdoruesi në përdorim";
|
||||
"auth_forgot_password" = "Harruat fjalëkalimin?";
|
||||
"auth_email_not_found" = "S’u arrit të dërgohej email: Kjo adresë email s’u gjet";
|
||||
"auth_email_validation_message" = "Ju lutemi, që të vazhdojë regjistrimi, kontrolloni email-in tuaj";
|
||||
"auth_msisdn_validation_title" = "Verifikim Në Pritje të Miratimit";
|
||||
"auth_msisdn_validation_error" = "S’arrihet të verifikohet numër telefoni.";
|
||||
"auth_reset_password_message" = "Që të ricaktoni fjalëkalimin, jepni adresën email të lidhur me llogarinë tuaj:";
|
||||
"auth_reset_password_missing_email" = "Duhet dhënë adresa email e lidhur me llogarinë tuaj.";
|
||||
"auth_reset_password_missing_password" = "Duhet dhënë një fjalëkalim i ri.";
|
||||
// Chat creation
|
||||
"room_creation_title" = "Fjalosje e Re";
|
||||
"room_creation_account" = "Llogari";
|
||||
"room_creation_appearance" = "Dukje";
|
||||
"room_creation_appearance_name" = "Emër";
|
||||
"room_creation_privacy" = "Privatësi";
|
||||
"room_creation_private_room" = "Kjo fjalosje është private";
|
||||
"room_creation_public_room" = "Kjo fjalosje është publike";
|
||||
"room_creation_make_public" = "Bëje publike";
|
||||
"room_creation_make_public_prompt_title" = "Të bëhet publike kjo fjalosje?";
|
||||
"room_creation_keep_private" = "Mbaje private";
|
||||
"room_creation_make_private" = "Bëje private";
|
||||
// Room recents
|
||||
"room_recents_directory_section" = "DREJTORI DHOME";
|
||||
"room_recents_directory_section_network" = "Rrjet";
|
||||
"room_recents_people_section" = "PERSONA";
|
||||
"room_recents_conversations_section" = "DHOMA";
|
||||
"room_recents_no_conversation" = "S’ka dhoma";
|
||||
"room_recents_low_priority_section" = "ME PËRPARËSI TË ULËT";
|
||||
"room_recents_invites_section" = "FTESA";
|
||||
"room_recents_start_chat_with" = "Filloni fjalosje";
|
||||
"room_recents_create_empty_room" = "Krijo dhomë";
|
||||
"room_recents_join_room" = "Hyni në dhomë";
|
||||
"room_recents_join_room_prompt" = "Shtypni një ID ose alias dhome";
|
||||
// People tab
|
||||
"people_invites_section" = "FTESA";
|
||||
"people_conversation_section" = "BISEDA";
|
||||
"people_no_conversation" = "S’ka biseda";
|
||||
// Rooms tab
|
||||
"room_directory_no_public_room" = "S’k a dhoma publike";
|
||||
// Groups tab
|
||||
"group_invite_section" = "FTESA";
|
||||
"group_section" = "BASHKËSI";
|
||||
// Search
|
||||
"search_rooms" = "Dhoma";
|
||||
"search_messages" = "Mesazhe";
|
||||
"search_people" = "Persona";
|
||||
"search_files" = "Kartela";
|
||||
"search_default_placeholder" = "Kërko";
|
||||
"search_people_placeholder" = "Kërkoni sipas ID-je Përdoruesi, Emri ose email-i";
|
||||
"search_no_result" = "S’ka përfundime";
|
||||
"search_in_progress" = "Po kërkohet…";
|
||||
// Directory
|
||||
"directory_cell_title" = "Shfletoni në drejtori";
|
||||
"directory_cell_description" = "Dhoma %tu";
|
||||
"directory_search_results_title" = "Shfletoni përfundime drejtorie";
|
||||
"directory_search_results" = "u gjetën %tu përfundime për %@";
|
||||
"directory_search_results_more_than" = "u gjetën >%tu përfundime për %@";
|
||||
"directory_searching_title" = "Po kërkohet në drejtori…";
|
||||
"directory_search_fail" = "S’u arrit të sillen të dhëna";
|
||||
// Contacts
|
||||
"contacts_address_book_section" = "KONTAKTE VENDORE";
|
||||
"contacts_address_book_matrix_users_toggle" = "Vetëm përdorues të Matrix-it";
|
||||
"contacts_address_book_no_contact" = "S’ka kontakte vendore";
|
||||
"contacts_user_directory_section" = "DREJTORI PËRDORUESI";
|
||||
"contacts_user_directory_offline_section" = "DREJTORI PËRDORUESI (jashtë linje)";
|
||||
// Chat participants
|
||||
"room_participants_title" = "Pjesëmarrës";
|
||||
"room_participants_add_participant" = "Shtoni pjesmarrës";
|
||||
"room_participants_one_participant" = "1 pjesmarrës";
|
||||
"room_participants_multi_participants" = "%d pjesëmarrës";
|
||||
"room_participants_leave_prompt_title" = "Dilni nga dhomë";
|
||||
"room_participants_leave_prompt_msg" = "Jeni i sigurt se doni të ikni nga dhoma?";
|
||||
"room_participants_remove_prompt_title" = "Ripohim";
|
||||
"room_participants_remove_prompt_msg" = "Jeni i sigurt se doni të hiqet %@ nga kjo fjalosje?";
|
||||
"room_participants_invite_prompt_title" = "Ripohim";
|
||||
"room_participants_invite_prompt_msg" = "Jeni i sigurt se doni të ftohet %@ te kjo fjalosje?";
|
||||
"room_participants_filter_room_members" = "Filtroni anëtarë dhome";
|
||||
"room_participants_invite_malformed_id_title" = "Gabim Ftim";
|
||||
"room_participants_invited_section" = "TË FTUAR";
|
||||
"room_participants_online" = "Në linjë";
|
||||
"room_participants_offline" = "Jo në linjë";
|
||||
"room_participants_unknown" = "I panjohur";
|
||||
"room_participants_idle" = "I plogësht";
|
||||
"room_participants_now" = "tani";
|
||||
"room_participants_ago" = "më parë";
|
||||
"room_participants_action_section_admin_tools" = "Mjete përgjegjësi";
|
||||
"room_participants_action_section_direct_chats" = "Fjalosje të drejtpërdrejta";
|
||||
"room_participants_action_section_devices" = "Pajisje";
|
||||
"room_participants_action_section_other" = "Të tjera";
|
||||
"room_participants_action_invite" = "Ftoje";
|
||||
"room_participants_action_leave" = "Braktiseni këtë dhomë";
|
||||
"room_participants_action_remove" = "Hiqeni prej kësaj dhome";
|
||||
"room_participants_action_unban" = "Zhdëboje";
|
||||
"room_participants_action_set_default_power_level" = "Riktheje në përdorues normal";
|
||||
"room_participants_action_set_moderator" = "Kaloje moderator";
|
||||
"room_participants_action_set_admin" = "Kalojeni përgjegjës";
|
||||
"room_participants_action_start_new_chat" = "Filloni fjalosje të re";
|
||||
"room_participants_action_start_voice_call" = "Nis thirrje audio";
|
||||
"room_participants_action_start_video_call" = "Nis thirrje video";
|
||||
"room_participants_action_mention" = "Përmendje";
|
||||
// Chat
|
||||
"room_jump_to_first_unread" = "Hidhu te mesazhi i parë i palexuar";
|
||||
"room_new_message_notification" = "%d mesazh i ri";
|
||||
"room_new_messages_notification" = "%d mesazhe të rinj";
|
||||
"room_one_user_is_typing" = "%@ po shtyp…";
|
||||
"room_two_users_are_typing" = "%@ & %@ po shtypin…";
|
||||
"room_many_users_are_typing" = "%@, %@ & të tjerë po shtyin…";
|
||||
"room_message_placeholder" = "Dërgojni një mesazh (të pafshehtëzuar)…";
|
||||
"room_do_not_have_permission_to_post" = "S’keni leje të postoni në këtë dhomë";
|
||||
"encrypted_room_message_placeholder" = "Dërgoni një mesazh të fshehtëzuar…";
|
||||
"room_message_short_placeholder" = "Dërgoni një mesazh…";
|
||||
"room_offline_notification" = "Humbi lidhja me shërbyesin.";
|
||||
"room_unsent_messages_notification" = "Mesazhet s’u dërguan. %@ apo %@ tani?";
|
||||
"room_ongoing_conference_call_close" = "Mbylle";
|
||||
"room_prompt_resend" = "Ridërgoji krejt";
|
||||
"room_prompt_cancel" = "anuloji krejt";
|
||||
"room_delete_unsent_messages" = "Fshi mesazhet e padërguara";
|
||||
"room_event_action_copy" = "Kopjoje";
|
||||
"room_event_action_quote" = "Citim";
|
||||
"room_event_action_more" = "Më tepër";
|
||||
"room_event_action_permalink" = "Permalidhje";
|
||||
"room_event_action_view_source" = "Shihini Burimin";
|
||||
"room_event_action_report" = "Raportoni lëndë";
|
||||
"room_event_action_report_prompt_reason" = "Arsye për raportimin e kësaj lënde";
|
||||
"room_event_action_save" = "Ruaje";
|
||||
"room_event_action_resend" = "Ridërgoje";
|
||||
"room_event_action_delete" = "Fshije";
|
||||
"room_event_action_cancel_send" = "Anuloje Dërgimin";
|
||||
"room_event_action_cancel_download" = "Anuloje Shkarkimin";
|
||||
"room_event_action_view_encryption" = "Të dhëna Fshehtëzimi";
|
||||
"room_event_failed_to_send" = "S’u arrit të dërgohej";
|
||||
"unknown_devices_send_anyway" = "Dërgoje Sido Qoftë";
|
||||
"unknown_devices_call_anyway" = "Thirre Sido Qoftë";
|
||||
"unknown_devices_answer_anyway" = "Përgjigju Sido Qoftë";
|
||||
"unknown_devices_verify" = "Verifikoni…";
|
||||
"unknown_devices_title" = "Pajisje të panjohura";
|
||||
// Room Title
|
||||
"room_title_new_room" = "Dhomë e re";
|
||||
"room_title_multiple_active_members" = "%@/%@ anëtarë aktivë";
|
||||
"room_title_one_active_member" = "%@/%@ anëtar aktiv";
|
||||
"room_title_invite_members" = "Ftoni anëtarë";
|
||||
"room_title_members" = "%@ anëtarë";
|
||||
"room_title_one_member" = "1 anëtar";
|
||||
// Room Preview
|
||||
"room_preview_invitation_format" = "Jeni ftuar të merrni pjesë në këtë dhomë nga %@";
|
||||
"room_preview_try_join_an_unknown_room_default" = "një dhomë";
|
||||
// Settings
|
||||
"settings_title" = "Rregullime";
|
||||
"account_logout_all" = "Bëj dalje nga krejt llogaritë";
|
||||
"settings_config_no_build_info" = "S’ka të dhëna montimi";
|
||||
"settings_mark_all_as_read" = "Vëru shenjë krejt mesazheve si të lexuar";
|
||||
"settings_report_bug" = "Njoftoni një të metë";
|
||||
"settings_config_home_server" = "Shërbyesi home është %@";
|
||||
"settings_config_identity_server" = "Shërbyes identitetesh është %@";
|
||||
"settings_config_user_id" = "I futur si %@";
|
||||
"settings_user_settings" = "RREGULLIME PËRDORUESI";
|
||||
"settings_notifications_settings" = "RREGULLIME NJOFTIMESH";
|
||||
"settings_calls_settings" = "THIRRJE";
|
||||
"settings_user_interface" = "NDËRFAQE PËRDORUESI";
|
||||
"settings_ignored_users" = "PËRDORUES TË SHPËRFILLUR";
|
||||
"settings_contacts" = "KONTAKTE VENDORE";
|
||||
"settings_advanced" = "TË MËTEJSHME";
|
||||
"settings_other" = "TË TJERA";
|
||||
"settings_devices" = "PAJISJE";
|
||||
"settings_cryptography" = "KRIPTOGRAFI";
|
||||
"settings_sign_out" = "Dilni";
|
||||
"settings_sign_out_confirmation" = "Jeni i sigurt?";
|
||||
"settings_profile_picture" = "Foto Profili";
|
||||
"settings_display_name" = "Emër Në Ekran";
|
||||
"settings_first_name" = "Emër";
|
||||
"settings_remove_prompt_title" = "Ripohim";
|
||||
"settings_remove_email_prompt_msg" = "Jeni i sigurt se doni të hiqet adresa email %@?";
|
||||
"settings_remove_phone_prompt_msg" = "Jeni i sigurt se doni të hiqet numri i telefonit %@?";
|
||||
"settings_email_address" = "Email";
|
||||
"settings_email_address_placeholder" = "Jepni adresën tuaj email";
|
||||
"settings_add_email_address" = "Shtoni adresë email";
|
||||
"settings_phone_number" = "Telefon";
|
||||
"settings_add_phone_number" = "Shtoni numër telefoni";
|
||||
"settings_night_mode" = "Mënyra Mbrëmje";
|
||||
"settings_enable_push_notif" = "Njoftime në këtë pajisje";
|
||||
"settings_show_decrypted_content" = "Shfaq lëndë të shfshehtëzuar";
|
||||
"settings_ui_language" = "Gjuhë";
|
||||
"settings_ui_theme" = "Temë";
|
||||
"settings_ui_theme_auto" = "Auto";
|
||||
"settings_ui_theme_light" = "E çelët";
|
||||
"settings_ui_theme_dark" = "E errët";
|
||||
"settings_ui_theme_black" = "E zezë";
|
||||
"settings_ui_theme_picker_title" = "Përzgjidhni temë";
|
||||
"settings_unignore_user" = "Shfaq krejt mesazhet nga %@?";
|
||||
"settings_contacts_phonebook_country" = "Vend libri telefonash";
|
||||
"settings_labs_e2e_encryption" = "Fshehtëzim Skaj-Më-Skaj";
|
||||
"settings_version" = "Version %@";
|
||||
"settings_copyright" = "Të drejta kopjimi";
|
||||
"settings_copyright_url" = "https://riot.im/copyright";
|
||||
"settings_term_conditions" = "Terma & Kushte";
|
||||
"settings_term_conditions_url" = "https://riot.im/tac_apple";
|
||||
"settings_privacy_policy" = "Rregulla Privatësie";
|
||||
"settings_privacy_policy_url" = "https://riot.im/privacy";
|
||||
"settings_third_party_notices" = "Njoftime Palësh të Treta";
|
||||
"settings_clear_cache" = "Pastroje fshehtinën";
|
||||
"settings_change_password" = "Ndryshoni fjalëkalimin";
|
||||
"settings_old_password" = "fjalëkalim i vjetër";
|
||||
"settings_new_password" = "fjalëkalim i ri";
|
||||
"settings_confirm_password" = "ripohoni fjalëkalimin";
|
||||
"settings_password_updated" = "Fjalëkalimi juaj u përditësua";
|
||||
"settings_crypto_device_name" = "Emër pajisjeje: ";
|
||||
"settings_crypto_device_id" = "\nID pajisjeje: ";
|
||||
"settings_crypto_device_key" = "\nKyç pajisjeje: ";
|
||||
"settings_crypto_export" = "Eksporto kyçe";
|
||||
"settings_crypto_blacklist_unverified_devices" = "Fshehtëzoje vetëm për pajisje të verifikuara";
|
||||
// Room Details
|
||||
"room_details_title" = "Hollësi Dhome";
|
||||
"room_details_people" = "Anëtarë";
|
||||
"room_details_files" = "Kartela";
|
||||
"room_details_settings" = "Rregullime";
|
||||
"room_details_photo" = "Foto Dhome";
|
||||
"room_details_room_name" = "Emër Dhome";
|
||||
"room_details_topic" = "Temë";
|
||||
"room_details_favourite_tag" = "E parapëlqyer";
|
||||
"room_details_low_priority_tag" = "Me përparësi të ulët";
|
||||
"room_details_direct_chat" = "Fjalosje e Drejtpërdrejtë";
|
||||
"room_details_access_section" = "Kush mund të hyjë në këtë dhomë?";
|
||||
"room_details_access_section_invited_only" = "Vetëm persona që janë ftuar";
|
||||
"room_details_access_section_directory_toggle" = "Shfaqe këtë dhomë te drejtori dhomash";
|
||||
"room_details_history_section" = "Kush mund të lexojë historikun?";
|
||||
"room_details_history_section_anyone" = "Cilido";
|
||||
"room_details_history_section_members_only_since_invited" = "Vetëm anëtarë (ngaqë janë të ftuar)";
|
||||
"room_details_history_section_members_only_since_joined" = "Vetëm anëtarë (ngaqë janë bërë pjesë)";
|
||||
"room_details_history_section_prompt_title" = "Sinjalizim privatësie";
|
||||
"room_details_addresses_section" = "Adresa";
|
||||
"room_details_no_local_addresses" = "Kjo dhomë s’ka adresë vendore";
|
||||
"room_details_new_address" = "Shtoni adresë të re";
|
||||
"room_details_addresses_invalid_address_prompt_title" = "Format i pavlefshëm aliasesh";
|
||||
"room_details_addresses_invalid_address_prompt_msg" = "%@ s’është format i vlefshëm aliasesh";
|
||||
"room_details_addresses_disable_main_address_prompt_title" = "Sinjalizim adrese kryesore";
|
||||
"room_details_flair_invalid_id_prompt_title" = "Format i pavlefshëm";
|
||||
"room_details_flair_invalid_id_prompt_msg" = "%@ s’është identifikues i vlefshëm për një bashkësi";
|
||||
"room_details_banned_users_section" = "Përdorues të dëbuar";
|
||||
"room_details_advanced_section" = "Të mëtejshme";
|
||||
"room_details_advanced_room_id" = "ID Dhome:";
|
||||
"room_details_advanced_e2e_encryption_enabled" = "Në këtë dhomë është i aktivizuar fshehtëzimi";
|
||||
"room_details_advanced_e2e_encryption_disabled" = "Në këtë dhomë s’është i aktivizuar fshehtëzimi.";
|
||||
"room_details_advanced_e2e_encryption_blacklist_unverified_devices" = "Fshehtëzo vetëm për pajisje të verifikuara";
|
||||
"room_details_fail_to_add_room_aliases" = "S’u arrit të shtoheshin adresa dhome të re";
|
||||
"room_details_save_changes_prompt" = "Doni të ruhen ndryshimet?";
|
||||
"room_details_set_main_address" = "Caktoje si Adresë Kryesore";
|
||||
"room_details_unset_main_address" = "Hiqe Nga Adresë Kryesore";
|
||||
"room_details_copy_room_id" = "Kopjo ID Dhome";
|
||||
"room_details_copy_room_address" = "Kopjo Adresë Dhome";
|
||||
"room_details_copy_room_url" = "Kopjo URL Dhome";
|
||||
// Group Details
|
||||
"group_details_title" = "Hollësi Bashkësie";
|
||||
"group_details_home" = "Kreu";
|
||||
"group_details_people" = "Persona";
|
||||
"group_details_rooms" = "Dhoma";
|
||||
// Group Home
|
||||
"group_home_one_member_format" = "1 anëtar";
|
||||
"group_home_one_room_format" = "1 dhomë";
|
||||
"group_invitation_format" = "%s ju ftoi të bëheni pjesë e kësaj bashkësie";
|
||||
// Group participants
|
||||
"group_participants_add_participant" = "Shtoni pjesmarrës";
|
||||
"group_participants_leave_prompt_title" = "Braktiseni grupin";
|
||||
"group_participants_leave_prompt_msg" = "Jeni i sigurt se doni ta braktisni grupin?";
|
||||
"group_participants_remove_prompt_title" = "Ripohim";
|
||||
"group_participants_remove_prompt_msg" = "Jeni i sigurt se doni të hiqet %@ nga ky grup?";
|
||||
"group_participants_invite_prompt_title" = "Ripohim";
|
||||
"group_participants_invite_prompt_msg" = "Jeni i sigurt se doni të ftohet %@ te ky grup?";
|
||||
"group_participants_filter_members" = "Filtroni anëtarë bashkësie";
|
||||
"group_participants_invite_malformed_id_title" = "Gabim Ftese";
|
||||
"group_participants_invited_section" = "TË FTUAR";
|
||||
// Group rooms
|
||||
"group_rooms_filter_rooms" = "Filtroni dhoma bashkësie";
|
||||
// Read Receipts
|
||||
"read_receipts_list" = "Listë Dëftesash Leximi";
|
||||
"receipt_status_read" = "Të lexuara: ";
|
||||
// Media picker
|
||||
"media_picker_library" = "Mediatekë";
|
||||
"media_picker_select" = "Përzgjidhni";
|
||||
// Directory
|
||||
"directory_title" = "Drejtori";
|
||||
"directory_server_picker_title" = "Përzgjidhni drejtori";
|
||||
"directory_server_all_rooms" = "Krejt dhomat te shërbyesi %@";
|
||||
"directory_server_placeholder" = "matrix.org";
|
||||
// Events formatter
|
||||
"event_formatter_member_updates" = "%tu ndryshime anëtarësie";
|
||||
"event_formatter_jitsi_widget_added" = "Konferencë VoIP e shtuar nga %@";
|
||||
"event_formatter_jitsi_widget_removed" = "Konferencë VoIP e hequr nga %@";
|
||||
"you" = "Ju";
|
||||
"today" = "Sot";
|
||||
"yesterday" = "Dje";
|
||||
"network_offline_prompt" = "Lidhja Internet duket se është jashtë linje.";
|
||||
"public_room_section_title" = "Dhoma Publike (at %@):";
|
||||
"do_not_ask_again" = "Mos pyet sërish";
|
||||
// room display name
|
||||
"room_displayname_invite_from" = "Ftesë nga %@";
|
||||
"room_displayname_room_invite" = "Ftesë Dhome";
|
||||
"room_displayname_more_than_two_members" = "%@ dhe %u të tjerë";
|
||||
"room_displayname_no_title" = "Dhomë e zbrazët";
|
||||
// Call
|
||||
"call_incoming_voice_prompt" = "Thirrje audio ardhëse nga %@";
|
||||
"call_incoming_video_prompt" = "Thirrje video ardhëse nga %@";
|
||||
"call_incoming_voice" = "Thirrje ardhëse…";
|
||||
"call_incoming_video" = "Thirrje video ardhëse…";
|
||||
"call_already_displayed" = "Ka tashmë një thirrje në kryerje e sipër.";
|
||||
// No VoIP support
|
||||
"no_voip_title" = "Thirrje ardhëse";
|
||||
// Bug report
|
||||
"bug_report_title" = "Njoftim të Metash";
|
||||
"bug_crash_report_title" = "Njoftim Vithisjeje";
|
||||
"bug_report_send_logs" = "Dërgo regjistra";
|
||||
"bug_report_send_screenshot" = "Dërgo foto ekrani";
|
||||
"bug_report_progress_zipping" = "Po grumbullohen regjistra";
|
||||
"bug_report_progress_uploading" = "Po ngarkohet raporti";
|
||||
"bug_report_send" = "Dërgoje";
|
||||
"widget_integration_unable_to_create" = "S’arrihet të krijohet widget-i.";
|
||||
"widget_integration_failed_to_send_request" = "S’u arrit të dërgohej kërkesë.";
|
||||
"widget_integration_room_not_recognised" = "Kjo dhomë s’është e pranuar.";
|
||||
"widget_integration_positive_power_level" = "Shkalla e pushtetit duhet të jetë një numër i plotë pozitiv.";
|
||||
"widget_integration_must_be_in_room" = "S’gjendeni në këtë dhomë.";
|
||||
"widget_integration_no_permission_in_room" = "S’keni leje për ta bërë këtë në këtë dhomë.";
|
||||
"widget_integration_missing_room_id" = "Mungon room_id te kërkesa.";
|
||||
"widget_integration_missing_user_id" = "Mungon user_id te kërkesa.";
|
||||
// Room key request dialog
|
||||
"e2e_room_key_request_title" = "Kërkesë kyçi fshehtëzimesh";
|
||||
"e2e_room_key_request_start_verification" = "Fillo verifikimin…";
|
||||
"e2e_room_key_request_share_without_verifying" = "Ndaje pa e verifikuar";
|
||||
"e2e_room_key_request_ignore_request" = "Shpërfille kërkesën";
|
||||
"auth_user_id_placeholder" = "Email ose emër përdoruesi";
|
||||
"auth_invalid_user_name" = "Emri përdoruesi mund të përmban vetëm shkronja, numra, pika, viza lidhëse dhe nënvije";
|
||||
"auth_reset_password_email_validation_message" = "Një e-mail të është dërguar në %@. Pasi ke ndjekur lidhjen që përmban, kliko përfundi.";
|
||||
"auth_reset_password_next_step_button" = "Kam vërtetuar adresën e-mail-i time";
|
||||
"on" = "Aktivizuar";
|
||||
"auth_add_phone_message" = "Shtoja një adresë e-mail-i llogarisë tënde për të mundur përdoruesit të te zbulojnë.";
|
||||
"auth_msisdn_validation_message" = "Kemi dërguar një SMS me një kod aktivizimi. Të lutem fute kodin përposh.";
|
||||
"auth_recaptcha_message" = "Ky server shtëpiak kishte dashur të sigurohet se nuk je robot";
|
||||
"auth_reset_password_error_unauthorized" = "Vërtetimi i adresës e-mail-i dështoi: sigurohu se ke klikuar lidhjen në e-mail";
|
||||
"auth_reset_password_error_not_found" = "Adresa e-mail-i yt nuk duket se është e lidhur me një ID matrix-i në këtë server shtëpiak.";
|
||||
@@ -444,3 +444,48 @@
|
||||
"settings_ui_theme_picker_title" = "选择一个主题";
|
||||
"settings_ui_theme_picker_message" = "“自动”表示使用设备的“反色”设置";
|
||||
"settings_labs_create_conference_with_jitsi" = "使用 jitsi 创建一个会议通话";
|
||||
"title_groups" = "社区";
|
||||
// Groups tab
|
||||
"group_invite_section" = "邀请";
|
||||
"group_section" = "社区";
|
||||
"room_do_not_have_permission_to_post" = "你无权在此聊天室发送消息";
|
||||
"settings_enable_rageshake" = "摇一摇报告 bug";
|
||||
"room_details_direct_chat" = "私聊";
|
||||
// Group Details
|
||||
"group_details_title" = "社区信息";
|
||||
"group_details_home" = "主页";
|
||||
"group_details_people" = "用户";
|
||||
"group_details_rooms" = "聊天室";
|
||||
// Group Home
|
||||
"group_home_one_member_format" = "1 位用户";
|
||||
"group_home_multi_members_format" = "%tu 位用户";
|
||||
"group_home_one_room_format" = "1 个聊天室";
|
||||
"group_home_multi_rooms_format" = "%tu 个聊天室";
|
||||
// Group participants
|
||||
"group_participants_add_participant" = "添加成员";
|
||||
"group_participants_leave_prompt_title" = "退出群组";
|
||||
"group_participants_leave_prompt_msg" = "你确定要退出此群组吗?";
|
||||
"group_participants_remove_prompt_title" = "选项";
|
||||
"group_participants_remove_prompt_msg" = "你确定要从此群组中移除 %@ 吗?";
|
||||
"group_participants_invite_prompt_title" = "选项";
|
||||
"group_participants_invite_prompt_msg" = "你确定要邀请 %@ 加入此群组吗?";
|
||||
"group_participants_filter_members" = "过滤社区成员";
|
||||
"group_participants_invite_another_user" = "按照用户 ID 或昵称搜索/邀请用户";
|
||||
"group_participants_invite_malformed_id_title" = "邀请时出现错误";
|
||||
"group_participants_invited_section" = "已邀请";
|
||||
// Group rooms
|
||||
"group_rooms_filter_rooms" = "过滤社区聊天室";
|
||||
"event_formatter_widget_added" = "小部件 %@ 已被 %@ 添加";
|
||||
"event_formatter_widget_removed" = "小部件 %@ 已被 %@ 移除";
|
||||
"do_not_ask_again" = "不再询问";
|
||||
"call_already_displayed" = "正在通话。";
|
||||
// Widget Integration Manager
|
||||
"widget_integration_need_to_be_able_to_invite" = "你需要有邀请用户的权限才能进行此操作。";
|
||||
"widget_integration_unable_to_create" = "无法创建小部件。";
|
||||
"widget_integration_failed_to_send_request" = "发送请求失败。";
|
||||
"widget_integration_room_not_recognised" = "无法识别此房间。";
|
||||
"widget_integration_positive_power_level" = "权限级别必须是整数。";
|
||||
"widget_integration_must_be_in_room" = "您不在此聊天室中。";
|
||||
"e2e_room_key_request_start_verification" = "开始验证…";
|
||||
"e2e_room_key_request_share_without_verifying" = "在不验证的情况下分享";
|
||||
"e2e_room_key_request_ignore_request" = "忽略请求";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Permissions usage explanations
|
||||
"NSCameraUsageDescription" = "攝影機被用於照片與影片,進行視訊通話。";
|
||||
"NSPhotoLibraryUsageDescription" = "照片庫被用於傳送照片與影片。";
|
||||
"NSMicrophoneUsageDescription" = "麥克風被用於拍攝影片、進行通話。";
|
||||
"NSContactsUsageDescription" = "通訊錄被用於在 Riot 上透過電子郵件或電話號碼搜尋使用者。";
|
||||
"NSCameraUsageDescription" = "相機權限會用來拍攝照片與影片,以及進行視訊通話。";
|
||||
"NSPhotoLibraryUsageDescription" = "照片圖庫的權限會用來傳送照片與影片。";
|
||||
"NSMicrophoneUsageDescription" = "麥克風的權限會用來拍攝影片與進行通話。";
|
||||
"NSContactsUsageDescription" = "聯絡資訊的權限會用來在 Riot 上透過電子郵件或電話號碼搜尋使用者。";
|
||||
|
||||
@@ -1 +1,260 @@
|
||||
|
||||
// Titles
|
||||
"title_home" = "首頁";
|
||||
"title_favourites" = "收藏夾";
|
||||
"title_people" = "聯絡人";
|
||||
"title_rooms" = "聊天室";
|
||||
"title_groups" = "社群";
|
||||
"warning" = "警告";
|
||||
// Actions
|
||||
"view" = "檢視";
|
||||
"next" = "下一步";
|
||||
"back" = "返回";
|
||||
"continue" = "繼續";
|
||||
"create" = "建立";
|
||||
"start" = "開始";
|
||||
"leave" = "離開";
|
||||
"remove" = "移除";
|
||||
"invite" = "邀請";
|
||||
"retry" = "重試";
|
||||
"on" = "開啟";
|
||||
"off" = "關閉";
|
||||
"cancel" = "取消";
|
||||
"save" = "儲存";
|
||||
"join" = "加入";
|
||||
"decline" = "拒絕";
|
||||
"accept" = "接受";
|
||||
"preview" = "預覽";
|
||||
"camera" = "相機";
|
||||
"voice" = "語音";
|
||||
"video" = "視訊";
|
||||
"active_call" = "進行中的通話";
|
||||
"active_call_details" = "進行中的通話 (%@)";
|
||||
"later" = "稍後再說";
|
||||
"rename" = "重新命名";
|
||||
"collapse" = "摺疊";
|
||||
"send_to" = "傳送到 %@";
|
||||
"sending" = "傳送中";
|
||||
// Authentication
|
||||
"auth_login" = "登入";
|
||||
"auth_register" = "註冊";
|
||||
"auth_submit" = "傳送";
|
||||
"auth_skip" = "略過";
|
||||
"auth_send_reset_email" = "發送密碼重設郵件";
|
||||
"auth_return_to_login" = "返回到登入畫面";
|
||||
"auth_user_id_placeholder" = "電子郵件位址或使用者名稱";
|
||||
"auth_password_placeholder" = "密碼";
|
||||
"auth_new_password_placeholder" = "新密碼";
|
||||
"auth_user_name_placeholder" = "使用者名稱";
|
||||
"auth_optional_email_placeholder" = "電子郵件位址(選擇性)";
|
||||
"auth_email_placeholder" = "電子郵件位址";
|
||||
"auth_optional_phone_placeholder" = "電話號碼(選擇性)";
|
||||
"auth_phone_placeholder" = "電話號碼";
|
||||
"auth_repeat_password_placeholder" = "確認密碼";
|
||||
"auth_repeat_new_password_placeholder" = "確認新密碼";
|
||||
"auth_home_server_placeholder" = "URL(例如 https://matrix.org)";
|
||||
"auth_identity_server_placeholder" = "URL(例如 https://matrix.org)";
|
||||
"auth_invalid_login_param" = "使用者名稱或密碼錯誤";
|
||||
"auth_invalid_user_name" = "使用者名稱只能包含英數字、點 (.)、減號 (-) 、底線 (_)";
|
||||
"auth_invalid_password" = "密碼太短(至少需要 6 個字元)";
|
||||
"auth_invalid_email" = "這不像是電子郵件位址";
|
||||
"auth_invalid_phone" = "這不像是電話號碼";
|
||||
"auth_missing_password" = "缺少密碼";
|
||||
"auth_add_email_message" = "輸入電子郵件位址來讓其他人找到您,以及方便您重設密碼。";
|
||||
"auth_add_phone_message" = "輸入電話號碼來讓其他人找到您。";
|
||||
"auth_add_email_phone_message" = "輸入電子郵件位址或電話號碼來讓其他人找到您;電子郵件位址也可以用來重設密碼。";
|
||||
"auth_add_email_and_phone_message" = "輸入電子郵件位址和電話號碼來讓其他人找到您;電子郵件位址也可以用來重設密碼。";
|
||||
"auth_missing_email" = "缺少電子郵件位址";
|
||||
"auth_missing_phone" = "缺少電話號碼";
|
||||
"auth_missing_email_or_phone" = "缺少電子郵件位址或電話號碼";
|
||||
"auth_email_in_use" = "這個電子郵件位址已被使用";
|
||||
"auth_phone_in_use" = "這個電話號碼已被使用";
|
||||
"auth_untrusted_id_server" = "這個驗證伺服器不受信任";
|
||||
"auth_password_dont_match" = "兩次密碼輸入不吻合";
|
||||
"auth_username_in_use" = "使用者名稱已被使用";
|
||||
"auth_forgot_password" = "忘記密碼?";
|
||||
"auth_email_not_found" = "無法傳送電子郵件:找不到該電子郵件信箱";
|
||||
"auth_use_server_options" = "使用自訂的伺服器選項(進階)";
|
||||
"auth_email_validation_message" = "請檢查您的電子郵件信箱以繼續註冊流程";
|
||||
"auth_msisdn_validation_title" = "等待驗證";
|
||||
"auth_msisdn_validation_message" = "簡訊驗證碼已經傳送,請在下方輸入驗證碼。";
|
||||
"auth_msisdn_validation_error" = "無法驗證電話號碼。";
|
||||
"bug_report_progress_zipping" = "收集記錄";
|
||||
"bug_report_progress_uploading" = "上傳報告";
|
||||
"search_default_placeholder" = "搜尋";
|
||||
"today" = "今天";
|
||||
"yesterday" = "昨天";
|
||||
"room_ongoing_conference_call_close" = "關閉";
|
||||
"bug_report_send_logs" = "傳送記錄";
|
||||
"bug_report_send" = "傳送";
|
||||
"room_event_action_resend" = "重新傳送";
|
||||
"room_event_action_view_source" = "檢視來源";
|
||||
"room_event_action_permalink" = "永久連結";
|
||||
"room_event_action_quote" = "引用";
|
||||
"room_participants_online" = "線上";
|
||||
"room_details_favourite_tag" = "我的最愛";
|
||||
"room_details_direct_chat" = "私人聊天";
|
||||
"room_details_people" = "成員";
|
||||
// Directory
|
||||
"directory_title" = "目錄";
|
||||
"auth_recaptcha_message" = "這個家伺服器想要確定您不是機器人";
|
||||
"auth_reset_password_missing_email" = "必須輸入和你帳號關聯的電子郵件地址。";
|
||||
"auth_reset_password_missing_password" = "一個新的密碼必須被輸入。";
|
||||
"auth_reset_password_next_step_button" = "我已經驗證了我的電子郵件地址";
|
||||
"auth_reset_password_error_unauthorized" = "電子郵件地址驗證失敗: 請確保你已點擊郵件中的連結";
|
||||
"auth_reset_password_error_not_found" = "您的電子郵件地址似乎未在此家伺服器上與 Matrix ID 關聯。";
|
||||
"room_creation_account" = "帳號";
|
||||
"room_creation_appearance_name" = "名稱";
|
||||
"room_recents_start_chat_with" = "開始聊天";
|
||||
"search_no_result" = "沒有結果";
|
||||
"room_participants_leave_prompt_title" = "離開聊天室";
|
||||
"room_participants_filter_room_members" = "過濾聊天室成員";
|
||||
"room_participants_offline" = "離線";
|
||||
"room_participants_unknown" = "未知";
|
||||
"room_participants_idle" = "閒置";
|
||||
"room_participants_action_section_direct_chats" = "私聊";
|
||||
"room_participants_action_section_devices" = "裝置列表";
|
||||
"room_participants_action_unban" = "解除封鎖";
|
||||
"room_participants_action_start_new_chat" = "開始新聊天";
|
||||
"room_participants_action_mention" = "提及";
|
||||
"room_message_placeholder" = "傳送訊息(未加密)……";
|
||||
"room_do_not_have_permission_to_post" = "您沒有權限在此房間發言";
|
||||
"encrypted_room_message_placeholder" = "傳送加密的訊息……";
|
||||
"room_offline_notification" = "至伺服器的連線已遺失。";
|
||||
"room_event_action_delete" = "刪除";
|
||||
// Unknown devices
|
||||
"unknown_devices_alert_title" = "包含了未知裝置的房間";
|
||||
"unknown_devices_call_anyway" = "無論如何都通話";
|
||||
"unknown_devices_answer_anyway" = "無論如何都回覆";
|
||||
"unknown_devices_title" = "未知的裝置";
|
||||
"settings_sign_out_confirmation" = "你確定嗎?";
|
||||
"settings_email_address" = "電子郵件";
|
||||
"settings_add_email_address" = "添加郵件地址";
|
||||
"settings_phone_number" = "電話";
|
||||
"settings_add_phone_number" = "添加電話號碼";
|
||||
"room_details_topic" = "主題";
|
||||
"room_details_low_priority_tag" = "低優先度";
|
||||
"room_details_access_section" = "誰可以存取此房間?";
|
||||
"room_details_access_section_invited_only" = "僅有被邀請的夥伴";
|
||||
"room_details_access_section_anyone_apart_from_guest" = "任何知道房間連結的人,但訪客除外";
|
||||
"room_details_access_section_anyone" = "任何知道房間連結的人,包括訪客";
|
||||
"room_details_history_section" = "誰可以讀取歷史紀錄?";
|
||||
"room_details_history_section_anyone" = "任何人";
|
||||
"room_details_history_section_members_only" = "僅成員(自選取此選項開始)";
|
||||
"room_details_history_section_members_only_since_invited" = "僅成員(自他們被邀請開始)";
|
||||
"room_details_history_section_members_only_since_joined" = "僅成員(自他們加入開始)";
|
||||
"room_details_history_section_prompt_title" = "隱私警告";
|
||||
"room_details_addresses_section" = "地址";
|
||||
"room_details_no_local_addresses" = "此房間沒有本機地址";
|
||||
"room_details_addresses_invalid_address_prompt_title" = "別名格式錯誤";
|
||||
"room_details_banned_users_section" = "被封禁的用戶";
|
||||
"room_details_advanced_section" = "高級";
|
||||
"room_details_advanced_e2e_encryption_enabled" = "此房間的加密已啟用";
|
||||
"group_participants_filter_members" = "過濾社群成員";
|
||||
// Group rooms
|
||||
"group_rooms_filter_rooms" = "過濾社群聊天室";
|
||||
// Widget Integration Manager
|
||||
"widget_integration_need_to_be_able_to_invite" = "您需要邀請使用者來做這件事。";
|
||||
"widget_integration_unable_to_create" = "無法建立小工具。";
|
||||
"widget_integration_failed_to_send_request" = "發送請求失敗。";
|
||||
"widget_integration_room_not_recognised" = "此房間不被認可。";
|
||||
"widget_integration_positive_power_level" = "權限等級必需為正整數。";
|
||||
"widget_integration_must_be_in_room" = "您不在這個聊天室內。";
|
||||
"widget_integration_no_permission_in_room" = "您沒有在這個聊天室做這件事的權限。";
|
||||
// Room key request dialog
|
||||
"e2e_room_key_request_title" = "加密金鑰請求";
|
||||
"e2e_room_key_request_share_without_verifying" = "不驗證就分享";
|
||||
"e2e_room_key_request_ignore_request" = "忽略請求";
|
||||
"auth_reset_password_message" = "要重設您的密碼,輸入連結到您的帳號的電子郵件地址:";
|
||||
"auth_reset_password_email_validation_message" = "電子郵件已傳送至 %@。您必須跟隨其中包含了連結,點按下面的連結。";
|
||||
"auth_reset_password_success_message" = "您的密碼已重設。\n\n您已在所有裝置上登出,並且不會再收到推送通知。要重新啟用通知,再次於每個裝置上登入。";
|
||||
"auth_add_email_and_phone_warning" = "直到 API 存在之前,尚不支援同時使用電子郵件地址和電話號碼註冊,因此只有電話號碼會被採用,但您可以在基本資料中新增電子郵件地址。";
|
||||
// Chat creation
|
||||
"room_creation_title" = "新的聊天";
|
||||
"room_creation_appearance" = "外觀";
|
||||
"room_creation_appearance_picture" = "聊天室圖片(選擇性)";
|
||||
"room_creation_privacy" = "隱私";
|
||||
"room_creation_private_room" = "此聊天室為私人聊天室";
|
||||
"room_creation_public_room" = "此聊天室為公開聊天室";
|
||||
"room_creation_make_public" = "設成公開";
|
||||
"room_creation_make_public_prompt_title" = "將此聊天室此設成公開?";
|
||||
"room_creation_make_public_prompt_msg" = "您確定要將聊天室設定成公開聊天室嗎?如此一來所有人都可以閱讀並加入聊天室。";
|
||||
"room_creation_keep_private" = "維持私人";
|
||||
"room_creation_make_private" = "設成公開";
|
||||
"room_creation_wait_for_creation" = "聊天室正在建立,請稍後。";
|
||||
"room_creation_invite_another_user" = "透過使用者ID、名稱、電子郵件地址來搜尋/邀請";
|
||||
// Room recents
|
||||
"room_recents_directory_section" = "聊天室目錄";
|
||||
"room_recents_directory_section_network" = "網路";
|
||||
"room_recents_favourites_section" = "收藏夾";
|
||||
"room_recents_people_section" = "聯絡人";
|
||||
"room_recents_conversations_section" = "聊天室";
|
||||
"room_recents_no_conversation" = "沒有聊天室";
|
||||
"room_recents_low_priority_section" = "低優先度";
|
||||
"room_recents_invites_section" = "邀請";
|
||||
"room_recents_create_empty_room" = "建立新聊天室";
|
||||
"room_recents_join_room" = "加入聊天室";
|
||||
"room_recents_join_room_title" = "加入聊天室";
|
||||
"room_recents_join_room_prompt" = "輸入聊天室 ID 或別名";
|
||||
// People tab
|
||||
"people_invites_section" = "邀請";
|
||||
"people_conversation_section" = "聊天";
|
||||
"people_no_conversation" = "沒有聊天";
|
||||
// Rooms tab
|
||||
"room_directory_no_public_room" = "沒有公開的聊天室";
|
||||
// Groups tab
|
||||
"group_invite_section" = "邀請";
|
||||
"group_section" = "社群";
|
||||
// Search
|
||||
"search_rooms" = "聊天室";
|
||||
"search_messages" = "訊息";
|
||||
"search_people" = "聯絡人";
|
||||
"search_files" = "檔案";
|
||||
"search_people_placeholder" = "透過使用者 ID、名稱、電子郵件地址搜尋";
|
||||
"search_in_progress" = "搜尋中……";
|
||||
// Directory
|
||||
"directory_cell_title" = "瀏覽目錄";
|
||||
"directory_cell_description" = "%tu 個聊天室";
|
||||
"directory_search_results_title" = "聊天室目錄搜尋結果";
|
||||
"directory_search_results" = "搜尋 %@ 有 %tu 個結果";
|
||||
"directory_search_results_more_than" = "搜尋 %@ 有超過 %tu 個結果";
|
||||
"directory_searching_title" = "搜尋聊天室目錄中……";
|
||||
"directory_search_fail" = "無法取得資料";
|
||||
// Contacts
|
||||
"contacts_address_book_section" = "裝置上的聯絡人";
|
||||
"contacts_address_book_matrix_users_toggle" = "只顯示 Matrix 使用者";
|
||||
"contacts_address_book_no_contact" = "沒有裝置上的聯絡人";
|
||||
"contacts_address_book_permission_required" = "取得裝置上的聯絡資訊需要權限";
|
||||
"contacts_address_book_permission_denied" = "您沒有允許 Riot 存取裝置上的聯絡資訊";
|
||||
"contacts_user_directory_section" = "使用者目錄";
|
||||
"contacts_user_directory_offline_section" = "使用者目錄(離線)";
|
||||
// Chat participants
|
||||
"room_participants_title" = "成員";
|
||||
"room_participants_add_participant" = "新增成員";
|
||||
"room_participants_one_participant" = "1 個成員";
|
||||
"room_participants_multi_participants" = "%d 個成員";
|
||||
"room_participants_leave_prompt_msg" = "確定要離開聊天室嗎?";
|
||||
"room_participants_remove_prompt_title" = "確認";
|
||||
"room_participants_remove_prompt_msg" = "確定要從此聊天室踢出 %@ 嗎?";
|
||||
"room_participants_remove_third_party_invite_msg" = "直到 API 存在以前,尚不支援移除第三方邀請";
|
||||
"room_participants_invite_prompt_title" = "確認";
|
||||
"room_participants_invite_prompt_msg" = "確定要邀請 %@ 進入聊天室嗎?";
|
||||
"room_participants_invite_another_user" = "透過使用者ID、名稱或電子郵件地址來搜尋/邀請";
|
||||
"room_participants_invite_malformed_id_title" = "邀請錯誤";
|
||||
"room_participants_invite_malformed_id" = "ID 格式不正確。應為電子郵件地址或 Matrix ID(如 @localpart:domain)";
|
||||
"room_participants_invited_section" = "已邀請";
|
||||
"room_participants_now" = "現在";
|
||||
"room_participants_ago" = "之前";
|
||||
"room_participants_action_section_admin_tools" = "管理者工具";
|
||||
"room_participants_action_section_other" = "其他";
|
||||
"room_participants_action_invite" = "邀請";
|
||||
"room_participants_action_leave" = "離開這個房間";
|
||||
"room_participants_action_remove" = "從此房間踢出";
|
||||
"room_participants_action_ban" = "從此房間封鎖";
|
||||
"room_participants_action_ignore" = "隱藏所有來自此使用者的訊息";
|
||||
"room_participants_action_unignore" = "顯示所有來自此使用者的訊息";
|
||||
"room_participants_action_set_default_power_level" = "恢復到一般使用者";
|
||||
"room_participants_action_set_moderator" = "設定成仲裁者";
|
||||
"room_participants_action_set_admin" = "設定成管理者";
|
||||
"room_participants_action_start_voice_call" = "開始語音通話";
|
||||
"room_participants_action_start_video_call" = "開始視訊通話";
|
||||
"room_event_action_view_encryption" = "加密資訊";
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/*
|
||||
Copyright 2015 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
Copyright 2018 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -57,9 +58,12 @@
|
||||
} failure:^(NSError *error) {
|
||||
|
||||
NSLog(@"[MXRoom+Riot] Failed to update the tag %@ of room (%@)", tag, self.state.roomId);
|
||||
NSString *userId = self.mxSession.myUser.userId;
|
||||
|
||||
// Notify user
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification
|
||||
object:error
|
||||
userInfo:userId ? @{kMXKErrorUserIdKey: userId} : nil];
|
||||
|
||||
if (completion)
|
||||
{
|
||||
|
||||
+2
-2
@@ -17,11 +17,11 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.6.13</string>
|
||||
<string>0.6.14</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>0.6.13</string>
|
||||
<string>0.6.14</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<true/>
|
||||
<key>ITSEncryptionExportComplianceCode</key>
|
||||
|
||||
@@ -391,6 +391,9 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Auto animate the sticker in case of animated gif
|
||||
bubbleCell.isAutoAnimatedGif = (cellData.attachment && cellData.attachment.type == MXKAttachmentTypeSticker);
|
||||
}
|
||||
|
||||
return cell;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/*
|
||||
Copyright 2016 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
Copyright 2018 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -46,8 +47,8 @@
|
||||
MXKRoomDataSource *roomDataSource;
|
||||
if (roomId)
|
||||
{
|
||||
roomDataSource = [roomDataSourceManager roomDataSourceForRoom:roomId create:NO];
|
||||
|
||||
// Check whether the user knows this room to create the room data source if it doesn't exist.
|
||||
roomDataSource = [roomDataSourceManager roomDataSourceForRoom:roomId create:([self.mxSession roomWithRoomId:roomId])];
|
||||
if (roomDataSource)
|
||||
{
|
||||
// Prepare text font used to highlight the search pattern.
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/*
|
||||
Copyright 2016 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
Copyright 2018 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -39,7 +40,7 @@
|
||||
// Check attachment if any
|
||||
if ([searchDataSource.eventFormatter isSupportedAttachment:event])
|
||||
{
|
||||
// Note: event.eventType is equal here to MXEventTypeRoomMessage
|
||||
// Note: event.eventType may be equal here to MXEventTypeRoomMessage or MXEventTypeSticker
|
||||
attachment = [[MXKAttachment alloc] initWithEvent:event andMatrixSession:searchDataSource.mxSession];
|
||||
}
|
||||
|
||||
@@ -101,7 +102,7 @@
|
||||
|
||||
- (BOOL)isAttachmentWithThumbnail
|
||||
{
|
||||
return (attachment && (attachment.type == MXKAttachmentTypeImage || attachment.type == MXKAttachmentTypeVideo));
|
||||
return (attachment && (attachment.type == MXKAttachmentTypeImage || attachment.type == MXKAttachmentTypeVideo || attachment.type == MXKAttachmentTypeSticker));
|
||||
}
|
||||
|
||||
- (UIImage*)attachmentIcon
|
||||
|
||||
@@ -372,13 +372,19 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
NSLog(@"[MasterTabBarController] Universal link: Logout current sessions and open AuthViewController to complete the registration");
|
||||
NSLog(@"[MasterTabBarController] Universal link: Prompt to logout current sessions and open AuthViewController to complete the registration");
|
||||
|
||||
// Keep a ref on the params
|
||||
authViewControllerRegistrationParameters = parameters;
|
||||
|
||||
// And do a logout out. It will then display AuthViewController
|
||||
[[AppDelegate theDelegate] logout];
|
||||
// Prompt to logout. It will then display AuthViewController if the user is logged out.
|
||||
[[AppDelegate theDelegate] logoutWithConfirmation:YES completion:^(BOOL isLoggedOut) {
|
||||
if (!isLoggedOut)
|
||||
{
|
||||
// Reset temporary params
|
||||
authViewControllerRegistrationParameters = nil;
|
||||
}
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/*
|
||||
Copyright 2015 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
Copyright 2018 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -950,45 +951,92 @@
|
||||
{
|
||||
if (editedRoomId)
|
||||
{
|
||||
// Check whether the user didn't leave the room yet
|
||||
MXRoom *room = [self.mainSession roomWithRoomId:editedRoomId];
|
||||
if (room)
|
||||
{
|
||||
[self startActivityIndicator];
|
||||
|
||||
// cancel pending uploads/downloads
|
||||
// they are useless by now
|
||||
[MXMediaManager cancelDownloadsInCacheFolder:room.state.roomId];
|
||||
|
||||
// TODO GFO cancel pending uploads related to this room
|
||||
|
||||
NSLog(@"[RecentsViewController] Leave room (%@)", room.state.roomId);
|
||||
|
||||
[room leave:^{
|
||||
|
||||
[self stopActivityIndicator];
|
||||
|
||||
// Force table refresh
|
||||
[self cancelEditionMode:YES];
|
||||
|
||||
} failure:^(NSError *error) {
|
||||
|
||||
NSLog(@"[RecentsViewController] Failed to leave room (%@)", room.state.roomId);
|
||||
|
||||
// Notify MatrixKit user
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error];
|
||||
|
||||
[self stopActivityIndicator];
|
||||
|
||||
// Leave editing mode
|
||||
[self cancelEditionMode:isRefreshPending];
|
||||
}];
|
||||
}
|
||||
else
|
||||
{
|
||||
// Leave editing mode
|
||||
[self cancelEditionMode:isRefreshPending];
|
||||
}
|
||||
NSString *currentRoomId = editedRoomId;
|
||||
|
||||
__weak typeof(self) weakSelf = self;
|
||||
|
||||
// confirm leave
|
||||
NSString *promptMessage = NSLocalizedStringFromTable(@"room_participants_leave_prompt_msg", @"Vector", nil);
|
||||
currentAlert = [UIAlertController alertControllerWithTitle:NSLocalizedStringFromTable(@"room_participants_leave_prompt_title", @"Vector", nil)
|
||||
message:promptMessage
|
||||
preferredStyle:UIAlertControllerStyleAlert];
|
||||
|
||||
[currentAlert addAction:[UIAlertAction actionWithTitle:[NSBundle mxk_localizedStringForKey:@"cancel"]
|
||||
style:UIAlertActionStyleCancel
|
||||
handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
self->currentAlert = nil;
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
[currentAlert addAction:[UIAlertAction actionWithTitle:NSLocalizedStringFromTable(@"leave", @"Vector", nil)
|
||||
style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
self->currentAlert = nil;
|
||||
|
||||
// Check whether the user didn't leave the room yet
|
||||
// TODO: Handle multi-account
|
||||
MXRoom *room = [self.mainSession roomWithRoomId:currentRoomId];
|
||||
if (room)
|
||||
{
|
||||
[self startActivityIndicator];
|
||||
|
||||
// cancel pending uploads/downloads
|
||||
// they are useless by now
|
||||
[MXMediaManager cancelDownloadsInCacheFolder:room.state.roomId];
|
||||
|
||||
// TODO GFO cancel pending uploads related to this room
|
||||
|
||||
NSLog(@"[RecentsViewController] Leave room (%@)", room.state.roomId);
|
||||
|
||||
[room leave:^{
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
[self stopActivityIndicator];
|
||||
// Force table refresh
|
||||
[self cancelEditionMode:YES];
|
||||
}
|
||||
|
||||
} failure:^(NSError *error) {
|
||||
|
||||
NSLog(@"[RecentsViewController] Failed to leave room");
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
// Notify the end user
|
||||
NSString *userId = room.mxSession.myUser.userId;
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification
|
||||
object:error
|
||||
userInfo:userId ? @{kMXKErrorUserIdKey: userId} : nil];
|
||||
|
||||
[self stopActivityIndicator];
|
||||
|
||||
// Leave editing mode
|
||||
[self cancelEditionMode:isRefreshPending];
|
||||
}
|
||||
|
||||
}];
|
||||
}
|
||||
else
|
||||
{
|
||||
// Leave editing mode
|
||||
[self cancelEditionMode:isRefreshPending];
|
||||
}
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
[currentAlert mxk_setAccessibilityIdentifier:@"LeaveEditedRoomAlert"];
|
||||
[self presentViewController:currentAlert animated:YES completion:nil];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1023,7 +1071,10 @@
|
||||
{
|
||||
if (editedRoomId)
|
||||
{
|
||||
__weak typeof(self) weakSelf = self;
|
||||
|
||||
// Check whether the user didn't leave the room
|
||||
// TODO: handle multi-account
|
||||
MXRoom *room = [self.mainSession roomWithRoomId:editedRoomId];
|
||||
if (room)
|
||||
{
|
||||
@@ -1031,23 +1082,32 @@
|
||||
|
||||
[room setIsDirect:isDirect withUserId:nil success:^{
|
||||
|
||||
[self stopActivityIndicator];
|
||||
|
||||
// Leave editing mode
|
||||
[self cancelEditionMode:isRefreshPending];
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
[self stopActivityIndicator];
|
||||
// Leave editing mode
|
||||
[self cancelEditionMode:isRefreshPending];
|
||||
}
|
||||
|
||||
} failure:^(NSError *error) {
|
||||
|
||||
[self stopActivityIndicator];
|
||||
|
||||
NSLog(@"[RecentsViewController] Failed to update direct tag of the room (%@)", editedRoomId);
|
||||
|
||||
// Notify MatrixKit user
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error];
|
||||
|
||||
// Leave editing mode
|
||||
[self cancelEditionMode:isRefreshPending];
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
[self stopActivityIndicator];
|
||||
|
||||
NSLog(@"[RecentsViewController] Failed to update direct tag of the room (%@)", editedRoomId);
|
||||
|
||||
// Notify the end user
|
||||
NSString *userId = self.mainSession.myUser.userId; // TODO: handle multi-account
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification
|
||||
object:error
|
||||
userInfo:userId ? @{kMXKErrorUserIdKey: userId} : nil];
|
||||
|
||||
// Leave editing mode
|
||||
[self cancelEditionMode:isRefreshPending];
|
||||
}
|
||||
|
||||
}];
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/*
|
||||
Copyright 2016 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
Copyright 2018 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -415,9 +416,7 @@
|
||||
{
|
||||
// Restore the status bar
|
||||
typeof(self) self = weakSelf;
|
||||
|
||||
self->devicesArray = usersDevicesInfoMap.map[userId].allValues;
|
||||
|
||||
// Reload the full table to take into account a potential change on a device status.
|
||||
[super updateMemberInfo];
|
||||
}
|
||||
@@ -425,9 +424,15 @@
|
||||
} failure:^(NSError *error) {
|
||||
|
||||
NSLog(@"[RoomMemberDetailsVC] Crypto failed to download device info for user: %@", userId);
|
||||
|
||||
// Notify MatrixKit user
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error];
|
||||
if (weakSelf)
|
||||
{
|
||||
// Restore the status bar
|
||||
typeof(self) self = weakSelf;
|
||||
// Notify the end user
|
||||
NSString *myUserId = self.mainSession.myUser.userId;
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error userInfo:myUserId ? @{kMXKErrorUserIdKey: myUserId} : nil];
|
||||
}
|
||||
|
||||
}];
|
||||
}
|
||||
|
||||
@@ -938,6 +943,130 @@
|
||||
[self setPowerLevel:kRiotRoomAdminLevel promptUser:YES];
|
||||
break;
|
||||
}
|
||||
case MXKRoomMemberDetailsActionBan:
|
||||
{
|
||||
__weak typeof(self) weakSelf = self;
|
||||
|
||||
// Ban
|
||||
currentAlert = [UIAlertController alertControllerWithTitle:NSLocalizedStringFromTable(@"room_event_action_ban_prompt_reason", @"Vector", nil)
|
||||
message:nil
|
||||
preferredStyle:UIAlertControllerStyleAlert];
|
||||
|
||||
[currentAlert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
|
||||
textField.secureTextEntry = NO;
|
||||
textField.placeholder = nil;
|
||||
textField.keyboardType = UIKeyboardTypeDefault;
|
||||
}];
|
||||
|
||||
[currentAlert addAction:[UIAlertAction actionWithTitle:[NSBundle mxk_localizedStringForKey:@"cancel"]
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
self->currentAlert = nil;
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
[currentAlert addAction:[UIAlertAction actionWithTitle:NSLocalizedStringFromTable(@"ban", @"Vector", nil)
|
||||
style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
self->currentAlert = nil;
|
||||
|
||||
[self startActivityIndicator];
|
||||
|
||||
// kick user
|
||||
UITextField *textField = [self->currentAlert textFields].firstObject;
|
||||
[self.mxRoom banUser:self.mxRoomMember.userId reason:textField.text success:^{
|
||||
|
||||
__strong __typeof(weakSelf)self = weakSelf;
|
||||
[self stopActivityIndicator];
|
||||
|
||||
} failure:^(NSError *error) {
|
||||
|
||||
__strong __typeof(weakSelf)self = weakSelf;
|
||||
[self stopActivityIndicator];
|
||||
|
||||
NSLog(@"[RoomMemberDetailVC] Ban user (%@) failed", self.mxRoomMember.userId);
|
||||
//Alert user
|
||||
[[AppDelegate theDelegate] showErrorAsAlert:error];
|
||||
|
||||
}];
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
[currentAlert mxk_setAccessibilityIdentifier:@"RoomMemberDetailsVCBanAlert"];
|
||||
[self presentViewController:currentAlert animated:YES completion:nil];
|
||||
break;
|
||||
}
|
||||
case MXKRoomMemberDetailsActionKick:
|
||||
{
|
||||
__weak typeof(self) weakSelf = self;
|
||||
|
||||
// Kick
|
||||
currentAlert = [UIAlertController alertControllerWithTitle:NSLocalizedStringFromTable(@"room_event_action_kick_prompt_reason", @"Vector", nil)
|
||||
message:nil
|
||||
preferredStyle:UIAlertControllerStyleAlert];
|
||||
|
||||
[currentAlert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
|
||||
textField.secureTextEntry = NO;
|
||||
textField.placeholder = nil;
|
||||
textField.keyboardType = UIKeyboardTypeDefault;
|
||||
}];
|
||||
|
||||
[currentAlert addAction:[UIAlertAction actionWithTitle:[NSBundle mxk_localizedStringForKey:@"cancel"]
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
self->currentAlert = nil;
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
[currentAlert addAction:[UIAlertAction actionWithTitle:NSLocalizedStringFromTable(@"remove", @"Vector", nil)
|
||||
style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
self->currentAlert = nil;
|
||||
|
||||
[self startActivityIndicator];
|
||||
|
||||
// kick user
|
||||
UITextField *textField = [self->currentAlert textFields].firstObject;
|
||||
[self.mxRoom kickUser:self.mxRoomMember.userId reason:textField.text success:^{
|
||||
|
||||
__strong __typeof(weakSelf)self = weakSelf;
|
||||
[self stopActivityIndicator];
|
||||
|
||||
} failure:^(NSError *error) {
|
||||
|
||||
__strong __typeof(weakSelf)self = weakSelf;
|
||||
[self stopActivityIndicator];
|
||||
|
||||
NSLog(@"[RoomMemberDetailVC] Removing user (%@) failed", self.mxRoomMember.userId);
|
||||
//Alert user
|
||||
[[AppDelegate theDelegate] showErrorAsAlert:error];
|
||||
|
||||
}];
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
[currentAlert mxk_setAccessibilityIdentifier:@"RoomMemberDetailsVCKickAlert"];
|
||||
[self presentViewController:currentAlert animated:YES completion:nil];
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
[super onActionButtonPressed:sender];
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/*
|
||||
Copyright 2014 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
Copyright 2018 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -97,6 +98,8 @@
|
||||
#import "RoomMembershipExpandedBubbleCell.h"
|
||||
#import "RoomMembershipExpandedWithPaginationTitleBubbleCell.h"
|
||||
|
||||
#import "RoomSelectedStickerBubbleCell.h"
|
||||
|
||||
#import "MXKRoomBubbleTableViewCell+Riot.h"
|
||||
|
||||
#import "AvatarGenerator.h"
|
||||
@@ -310,6 +313,8 @@
|
||||
[self.bubblesTableView registerClass:RoomMembershipExpandedBubbleCell.class forCellReuseIdentifier:RoomMembershipExpandedBubbleCell.defaultReuseIdentifier];
|
||||
[self.bubblesTableView registerClass:RoomMembershipExpandedWithPaginationTitleBubbleCell.class forCellReuseIdentifier:RoomMembershipExpandedWithPaginationTitleBubbleCell.defaultReuseIdentifier];
|
||||
|
||||
[self.bubblesTableView registerClass:RoomSelectedStickerBubbleCell.class forCellReuseIdentifier:RoomSelectedStickerBubbleCell.defaultReuseIdentifier];
|
||||
|
||||
// Prepare expanded header
|
||||
expandedHeader = [ExpandedRoomTitleView roomTitleView];
|
||||
expandedHeader.delegate = self;
|
||||
@@ -1760,7 +1765,12 @@
|
||||
{
|
||||
if (bubbleData.isAttachmentWithThumbnail)
|
||||
{
|
||||
if (bubbleData.isPaginationFirstBubble)
|
||||
// Check whether the provided celldata corresponds to a selected sticker
|
||||
if (customizedRoomDataSource.selectedEventId && (bubbleData.attachment.type == MXKAttachmentTypeSticker) && [bubbleData.attachment.eventId isEqualToString:customizedRoomDataSource.selectedEventId])
|
||||
{
|
||||
cellViewClass = RoomSelectedStickerBubbleCell.class;
|
||||
}
|
||||
else if (bubbleData.isPaginationFirstBubble)
|
||||
{
|
||||
cellViewClass = isEncryptedRoom ? RoomIncomingEncryptedAttachmentWithPaginationTitleBubbleCell.class : RoomIncomingAttachmentWithPaginationTitleBubbleCell.class;
|
||||
}
|
||||
@@ -1805,7 +1815,12 @@
|
||||
// Handle here outgoing bubbles
|
||||
if (bubbleData.isAttachmentWithThumbnail)
|
||||
{
|
||||
if (bubbleData.isPaginationFirstBubble)
|
||||
// Check whether the provided celldata corresponds to a selected sticker
|
||||
if (customizedRoomDataSource.selectedEventId && (bubbleData.attachment.type == MXKAttachmentTypeSticker) && [bubbleData.attachment.eventId isEqualToString:customizedRoomDataSource.selectedEventId])
|
||||
{
|
||||
cellViewClass = RoomSelectedStickerBubbleCell.class;
|
||||
}
|
||||
else if (bubbleData.isPaginationFirstBubble)
|
||||
{
|
||||
cellViewClass = isEncryptedRoom ? RoomOutgoingEncryptedAttachmentWithPaginationTitleBubbleCell.class :RoomOutgoingAttachmentWithPaginationTitleBubbleCell.class;
|
||||
}
|
||||
@@ -1909,12 +1924,38 @@
|
||||
[self showEditButtonAlertMenuForEvent:selectedEvent inCell:cell level:0];
|
||||
}
|
||||
}
|
||||
else if ([actionIdentifier isEqualToString:kMXKRoomBubbleCellTapOnAttachmentView]
|
||||
&& ((MXKRoomBubbleTableViewCell*)cell).bubbleData.attachment.eventSentState == MXEventSentStateFailed)
|
||||
else if ([actionIdentifier isEqualToString:kMXKRoomBubbleCellTapOnAttachmentView])
|
||||
{
|
||||
// Shortcut: when clicking on an unsent media, show the action sheet to resend it
|
||||
MXEvent *selectedEvent = [self.roomDataSource eventWithEventId:((MXKRoomBubbleTableViewCell*)cell).bubbleData.attachment.eventId];
|
||||
[self dataSource:dataSource didRecognizeAction:kMXKRoomBubbleCellRiotEditButtonPressed inCell:cell userInfo:@{kMXKRoomBubbleCellEventKey:selectedEvent}];
|
||||
if (((MXKRoomBubbleTableViewCell*)cell).bubbleData.attachment.eventSentState == MXEventSentStateFailed)
|
||||
{
|
||||
// Shortcut: when clicking on an unsent media, show the action sheet to resend it
|
||||
MXEvent *selectedEvent = [self.roomDataSource eventWithEventId:((MXKRoomBubbleTableViewCell*)cell).bubbleData.attachment.eventId];
|
||||
[self dataSource:dataSource didRecognizeAction:kMXKRoomBubbleCellRiotEditButtonPressed inCell:cell userInfo:@{kMXKRoomBubbleCellEventKey:selectedEvent}];
|
||||
}
|
||||
else if (((MXKRoomBubbleTableViewCell*)cell).bubbleData.attachment.type == MXKAttachmentTypeSticker)
|
||||
{
|
||||
// We don't open the attachments viewer when the user taps on a sticker.
|
||||
// We consider this tap like a selection.
|
||||
|
||||
// Check whether a selection already exist or not
|
||||
if (customizedRoomDataSource.selectedEventId)
|
||||
{
|
||||
[self cancelEventSelection];
|
||||
}
|
||||
else
|
||||
{
|
||||
// Highlight this event in displayed message
|
||||
customizedRoomDataSource.selectedEventId = ((MXKRoomBubbleTableViewCell*)cell).bubbleData.attachment.eventId;
|
||||
}
|
||||
|
||||
// Force table refresh
|
||||
[self dataSource:self.roomDataSource didCellChange:nil];
|
||||
}
|
||||
else
|
||||
{
|
||||
// Keep default implementation
|
||||
[super dataSource:dataSource didRecognizeAction:actionIdentifier inCell:cell userInfo:userInfo];
|
||||
}
|
||||
}
|
||||
else if ([actionIdentifier isEqualToString:kRoomEncryptedDataBubbleCellTapOnEncryptionIcon])
|
||||
{
|
||||
@@ -2156,38 +2197,41 @@
|
||||
}]];
|
||||
}
|
||||
|
||||
[currentAlert addAction:[UIAlertAction actionWithTitle:NSLocalizedStringFromTable(@"room_event_action_copy", @"Vector", nil)
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
if (attachment.type != MXKAttachmentTypeSticker)
|
||||
{
|
||||
[currentAlert addAction:[UIAlertAction actionWithTitle:NSLocalizedStringFromTable(@"room_event_action_copy", @"Vector", nil)
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:^(UIAlertAction * action) {
|
||||
|
||||
[self cancelEventSelection];
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
|
||||
[self cancelEventSelection];
|
||||
|
||||
[self startActivityIndicator];
|
||||
|
||||
[attachment copy:^{
|
||||
|
||||
__strong __typeof(weakSelf)self = weakSelf;
|
||||
[self stopActivityIndicator];
|
||||
|
||||
} failure:^(NSError *error) {
|
||||
|
||||
__strong __typeof(weakSelf)self = weakSelf;
|
||||
[self stopActivityIndicator];
|
||||
|
||||
//Alert user
|
||||
[[AppDelegate theDelegate] showErrorAsAlert:error];
|
||||
|
||||
}];
|
||||
|
||||
// Start animation in case of download during attachment preparing
|
||||
[roomBubbleTableViewCell startProgressUI];
|
||||
}
|
||||
|
||||
[self startActivityIndicator];
|
||||
|
||||
[attachment copy:^{
|
||||
|
||||
__strong __typeof(weakSelf)self = weakSelf;
|
||||
[self stopActivityIndicator];
|
||||
|
||||
} failure:^(NSError *error) {
|
||||
|
||||
__strong __typeof(weakSelf)self = weakSelf;
|
||||
[self stopActivityIndicator];
|
||||
|
||||
//Alert user
|
||||
[[AppDelegate theDelegate] showErrorAsAlert:error];
|
||||
|
||||
}];
|
||||
|
||||
// Start animation in case of download during attachment preparing
|
||||
[roomBubbleTableViewCell startProgressUI];
|
||||
}
|
||||
|
||||
}]];
|
||||
}]];
|
||||
}
|
||||
|
||||
// Check status of the selected event
|
||||
if (selectedEvent.sentState == MXEventSentStatePreparing ||
|
||||
@@ -2234,7 +2278,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
if (level == 1)
|
||||
if (level == 1 && (attachment.type != MXKAttachmentTypeSticker))
|
||||
{
|
||||
[currentAlert addAction:[UIAlertAction actionWithTitle:NSLocalizedStringFromTable(@"room_event_action_share", @"Vector", nil)
|
||||
style:UIAlertActionStyleDefault
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/*
|
||||
Copyright 2015 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
Copyright 2018 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
@@ -707,7 +708,8 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
|
||||
[self stopActivityIndicator];
|
||||
|
||||
// Notify user
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error];
|
||||
NSString *myUserId = self.mainSession.myUser.userId; // TODO: Hanlde multi-account
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error userInfo:myUserId ? @{kMXKErrorUserIdKey: myUserId} : nil];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -817,8 +819,8 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
|
||||
{
|
||||
[self stopActivityIndicator];
|
||||
|
||||
// Notify user
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error];
|
||||
NSString *myUserId = self.mainSession.myUser.userId; // TODO: Hanlde multi-account
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error userInfo:myUserId ? @{kMXKErrorUserIdKey: myUserId} : nil];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2446,8 +2448,8 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
|
||||
|
||||
NSLog(@"[SettingsViewController] Unignore %@ failed", ignoredUserId);
|
||||
|
||||
// Notify user
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error];
|
||||
NSString *myUserId = session.myUser.userId;
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error userInfo:myUserId ? @{kMXKErrorUserIdKey: myUserId} : nil];
|
||||
|
||||
}];
|
||||
}
|
||||
@@ -2570,63 +2572,24 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
|
||||
|
||||
- (void)onSignout:(id)sender
|
||||
{
|
||||
[currentAlert dismissViewControllerAnimated:NO completion:nil];
|
||||
|
||||
__weak typeof(self) weakSelf = self;
|
||||
|
||||
NSString *message = NSLocalizedStringFromTable(@"settings_sign_out_confirmation", @"Vector", nil);
|
||||
|
||||
// If the user has encrypted rooms, warn he will lose his e2e keys
|
||||
MXSession* session = [[AppDelegate theDelegate].mxSessions objectAtIndex:0];
|
||||
for (MXRoom *room in session.rooms)
|
||||
{
|
||||
if (room.state.isEncrypted)
|
||||
// Feedback: disable button and run activity indicator
|
||||
UIButton *button = (UIButton*)sender;
|
||||
button.enabled = NO;
|
||||
[self startActivityIndicator];
|
||||
|
||||
__weak typeof(self) weakSelf = self;
|
||||
|
||||
[[AppDelegate theDelegate] logoutWithConfirmation:YES completion:^(BOOL isLoggedOut) {
|
||||
|
||||
if (!isLoggedOut && weakSelf)
|
||||
{
|
||||
message = [message stringByAppendingString:[NSString stringWithFormat:@"\n\n%@", NSLocalizedStringFromTable(@"settings_sign_out_e2e_warn", @"Vector", nil)]];
|
||||
break;
|
||||
typeof(self) self = weakSelf;
|
||||
|
||||
// Enable the button and stop activity indicator
|
||||
button.enabled = YES;
|
||||
[self stopActivityIndicator];
|
||||
}
|
||||
}
|
||||
|
||||
// Ask confirmation
|
||||
currentAlert = [UIAlertController alertControllerWithTitle:NSLocalizedStringFromTable(@"settings_sign_out", @"Vector", nil) message:message preferredStyle:UIAlertControllerStyleAlert];
|
||||
|
||||
[currentAlert addAction:[UIAlertAction actionWithTitle:NSLocalizedStringFromTable(@"settings_sign_out", @"Vector", nil)
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
self->currentAlert = nil;
|
||||
|
||||
// Feedback: disable button and run activity indicator
|
||||
UIButton *button = (UIButton*)sender;
|
||||
button.enabled = NO;
|
||||
[self startActivityIndicator];
|
||||
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
|
||||
|
||||
[[MXKAccountManager sharedManager] logout];
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
[currentAlert addAction:[UIAlertAction actionWithTitle:[NSBundle mxk_localizedStringForKey:@"cancel"]
|
||||
style:UIAlertActionStyleCancel
|
||||
handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
self->currentAlert = nil;
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
[currentAlert mxk_setAccessibilityIdentifier: @"SettingsVCSignoutAlert"];
|
||||
[self presentViewController:currentAlert animated:YES completion:nil];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)onRemove3PID:(NSIndexPath*)path
|
||||
@@ -2724,8 +2687,8 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
|
||||
|
||||
[self stopActivityIndicator];
|
||||
|
||||
// Notify user
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error];
|
||||
NSString *myUserId = self.mainSession.myUser.userId; // TODO: Hanlde multi-account
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error userInfo:myUserId ? @{kMXKErrorUserIdKey: myUserId} : nil];
|
||||
}
|
||||
}];
|
||||
}
|
||||
@@ -2930,7 +2893,7 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
|
||||
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
|
||||
|
||||
[[MXKAccountManager sharedManager] logout];
|
||||
[[AppDelegate theDelegate] logoutWithConfirmation:NO completion:nil];
|
||||
|
||||
});
|
||||
}
|
||||
@@ -3413,7 +3376,8 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
|
||||
}
|
||||
|
||||
// Notify user
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error];
|
||||
NSString *myUserId = session.myUser.userId; // TODO: Hanlde multi-account
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error userInfo:myUserId ? @{kMXKErrorUserIdKey: myUserId} : nil];
|
||||
|
||||
}];
|
||||
}
|
||||
@@ -3515,7 +3479,8 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)();
|
||||
}
|
||||
|
||||
// Notify user
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error];
|
||||
NSString *myUserId = session.myUser.userId;
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error userInfo:myUserId ? @{kMXKErrorUserIdKey: myUserId} : nil];
|
||||
|
||||
}];
|
||||
}
|
||||
|
||||
@@ -21,12 +21,6 @@
|
||||
|
||||
@implementation RoomOutgoingAttachmentBubbleCell
|
||||
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
[super awakeFromNib];
|
||||
self.readReceiptsAlignment = ReadReceiptAlignmentRight;
|
||||
}
|
||||
|
||||
- (void)customizeTableViewCellRendering
|
||||
{
|
||||
[super customizeTableViewCellRendering];
|
||||
|
||||
@@ -21,12 +21,6 @@
|
||||
|
||||
@implementation RoomOutgoingAttachmentWithPaginationTitleBubbleCell
|
||||
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
[super awakeFromNib];
|
||||
self.readReceiptsAlignment = ReadReceiptAlignmentRight;
|
||||
}
|
||||
|
||||
- (void)customizeTableViewCellRendering
|
||||
{
|
||||
[super customizeTableViewCellRendering];
|
||||
|
||||
@@ -21,13 +21,6 @@
|
||||
|
||||
@implementation RoomOutgoingAttachmentWithoutSenderInfoBubbleCell
|
||||
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
[super awakeFromNib];
|
||||
|
||||
self.readReceiptsAlignment = ReadReceiptAlignmentRight;
|
||||
}
|
||||
|
||||
- (void)customizeTableViewCellRendering
|
||||
{
|
||||
[super customizeTableViewCellRendering];
|
||||
|
||||
@@ -21,12 +21,6 @@
|
||||
|
||||
@implementation RoomOutgoingTextMsgBubbleCell
|
||||
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
[super awakeFromNib];
|
||||
self.readReceiptsAlignment = ReadReceiptAlignmentRight;
|
||||
}
|
||||
|
||||
- (void)customizeTableViewCellRendering
|
||||
{
|
||||
[super customizeTableViewCellRendering];
|
||||
|
||||
@@ -21,13 +21,6 @@
|
||||
|
||||
@implementation RoomOutgoingTextMsgWithoutSenderInfoBubbleCell
|
||||
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
[super awakeFromNib];
|
||||
|
||||
self.readReceiptsAlignment = ReadReceiptAlignmentRight;
|
||||
}
|
||||
|
||||
- (void)customizeTableViewCellRendering
|
||||
{
|
||||
[super customizeTableViewCellRendering];
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
Copyright 2018 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
#import "RoomIncomingEncryptedAttachmentWithPaginationTitleBubbleCell.h"
|
||||
|
||||
/**
|
||||
`RoomSelectedStickerBubbleCell` is used to display the current selected sticker if any
|
||||
*/
|
||||
@interface RoomSelectedStickerBubbleCell : RoomIncomingEncryptedAttachmentWithPaginationTitleBubbleCell
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIView *descriptionContainerView;
|
||||
@property (weak, nonatomic) IBOutlet UIView *arrowView;
|
||||
@property (weak, nonatomic) IBOutlet UIView *descriptionView;
|
||||
@property (weak, nonatomic) IBOutlet UILabel *descriptionLabel;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *userNameLabelTopConstraint;
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *attachViewLeadingConstraint;
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *descriptionContainerViewBottomConstraint;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,242 @@
|
||||
/*
|
||||
Copyright 2018 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
#import "RoomSelectedStickerBubbleCell.h"
|
||||
|
||||
#import "RoomEncryptedDataBubbleCell.h"
|
||||
|
||||
#import "RoomIncomingAttachmentBubbleCell.h"
|
||||
#import "RoomIncomingAttachmentWithoutSenderInfoBubbleCell.h"
|
||||
#import "RoomIncomingAttachmentWithPaginationTitleBubbleCell.h"
|
||||
#import "RoomIncomingEncryptedAttachmentBubbleCell.h"
|
||||
#import "RoomIncomingEncryptedAttachmentWithoutSenderInfoBubbleCell.h"
|
||||
|
||||
#import "RiotDesignValues.h"
|
||||
|
||||
@implementation RoomSelectedStickerBubbleCell
|
||||
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
[super awakeFromNib];
|
||||
|
||||
// define arrow mask
|
||||
CAShapeLayer *arrowMaskLayer = [[CAShapeLayer alloc] init];
|
||||
arrowMaskLayer.frame = self.arrowView.bounds;
|
||||
CGSize viewSize = self.arrowView.frame.size;
|
||||
UIBezierPath *path = [[UIBezierPath alloc] init];
|
||||
[path moveToPoint:CGPointMake(0, viewSize.height)]; // arrow left bottom point
|
||||
[path addLineToPoint:CGPointMake(viewSize.width / 2, 0)]; // arrow head
|
||||
[path addLineToPoint:CGPointMake(viewSize.width, viewSize.height)]; // arrow right bottom point
|
||||
[path closePath]; // arrow top side
|
||||
arrowMaskLayer.path = path.CGPath;
|
||||
self.arrowView.layer.mask = arrowMaskLayer;
|
||||
|
||||
self.arrowView.backgroundColor = kRiotSecondaryBgColor;
|
||||
self.descriptionView.backgroundColor = kRiotSecondaryBgColor;
|
||||
[self.descriptionView.layer setCornerRadius:10];
|
||||
}
|
||||
|
||||
- (void)render:(MXKCellData *)cellData
|
||||
{
|
||||
[self prepareRender:cellData];
|
||||
|
||||
if (bubbleData)
|
||||
{
|
||||
// Retrieve the component which stores the sticker (Only one component is handled by the bubble in case of sticker).
|
||||
MXKRoomBubbleComponent *component = bubbleData.bubbleComponents.firstObject;
|
||||
|
||||
// Handle the pagination and the sender information
|
||||
// Look for the original cell class to extract the constraints value.
|
||||
Class<MXKCellRendering> modelCellViewClass = nil;
|
||||
if (bubbleData.shouldHideSenderInformation)
|
||||
{
|
||||
modelCellViewClass = bubbleData.isEncryptedRoom ? RoomIncomingEncryptedAttachmentWithoutSenderInfoBubbleCell.class : RoomIncomingAttachmentWithoutSenderInfoBubbleCell.class;
|
||||
|
||||
self.paginationTitleView.hidden = YES;
|
||||
self.pictureView.hidden = YES;
|
||||
self.userNameLabel.hidden = YES;
|
||||
self.userNameTapGestureMaskView.userInteractionEnabled = NO;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bubbleData.isPaginationFirstBubble)
|
||||
{
|
||||
modelCellViewClass = bubbleData.isEncryptedRoom ? RoomIncomingEncryptedAttachmentWithPaginationTitleBubbleCell.class : RoomIncomingAttachmentWithPaginationTitleBubbleCell.class;
|
||||
|
||||
self.paginationTitleView.hidden = NO;
|
||||
self.paginationLabel.text = [[bubbleData.eventFormatter dateStringFromDate:bubbleData.date withTime:NO] uppercaseString];
|
||||
}
|
||||
else
|
||||
{
|
||||
modelCellViewClass = bubbleData.isEncryptedRoom ? RoomIncomingEncryptedAttachmentBubbleCell.class : RoomIncomingAttachmentBubbleCell.class;
|
||||
|
||||
self.paginationTitleView.hidden = YES;
|
||||
}
|
||||
|
||||
// Hanlde sender avatar
|
||||
self.pictureView.hidden = NO;
|
||||
NSString *avatarThumbURL = nil;
|
||||
if (bubbleData.senderAvatarUrl)
|
||||
{
|
||||
// Suppose this url is a matrix content uri, we use SDK to get the well adapted thumbnail from server
|
||||
avatarThumbURL = [bubbleData.mxSession.matrixRestClient urlOfContentThumbnail:bubbleData.senderAvatarUrl toFitViewSize:self.pictureView.frame.size withMethod:MXThumbnailingMethodCrop];
|
||||
}
|
||||
self.pictureView.enableInMemoryCache = YES;
|
||||
[self.pictureView setImageURL:avatarThumbURL withType:nil andImageOrientation:UIImageOrientationUp previewImage: bubbleData.senderAvatarPlaceholder ? bubbleData.senderAvatarPlaceholder : self.picturePlaceholder];
|
||||
|
||||
// Display sender's name except if the name appears in the displayed text (see emote and membership events)
|
||||
if (bubbleData.shouldHideSenderName == NO)
|
||||
{
|
||||
if (bubbleData.senderFlair)
|
||||
{
|
||||
[self renderSenderFlair];
|
||||
}
|
||||
else
|
||||
{
|
||||
self.userNameLabel.text = bubbleData.senderDisplayName;
|
||||
}
|
||||
|
||||
self.userNameLabel.hidden = NO;
|
||||
self.userNameTapGestureMaskView.userInteractionEnabled = YES;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.userNameLabel.hidden = YES;
|
||||
self.userNameTapGestureMaskView.userInteractionEnabled = NO;
|
||||
}
|
||||
}
|
||||
|
||||
// Retrieve the suitable content size for the attachment thumbnail
|
||||
CGSize contentSize = bubbleData.contentSize;
|
||||
// Update image view frame in order to center loading wheel (if any)
|
||||
CGRect frame = self.attachmentView.frame;
|
||||
frame.size.width = contentSize.width;
|
||||
frame.size.height = contentSize.height;
|
||||
self.attachmentView.frame = frame;
|
||||
// Retrieve the MIME type
|
||||
NSString *mimetype = nil;
|
||||
if (bubbleData.attachment.thumbnailInfo)
|
||||
{
|
||||
mimetype = bubbleData.attachment.thumbnailInfo[@"mimetype"];
|
||||
}
|
||||
else if (bubbleData.attachment.contentInfo)
|
||||
{
|
||||
mimetype = bubbleData.attachment.contentInfo[@"mimetype"];
|
||||
}
|
||||
|
||||
// Display the sticker
|
||||
self.attachmentView.backgroundColor = [UIColor clearColor];
|
||||
self.attachmentView.mediaFolder = bubbleData.roomId;
|
||||
self.attachmentView.enableInMemoryCache = YES;
|
||||
[self.attachmentView setAttachmentThumb:bubbleData.attachment];
|
||||
|
||||
// Set the description
|
||||
NSAttributedString *description = component.attributedTextMessage;
|
||||
if (description.length)
|
||||
{
|
||||
self.descriptionContainerView.hidden = NO;
|
||||
self.descriptionLabel.attributedText = description;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.descriptionContainerView.hidden = YES;
|
||||
}
|
||||
|
||||
// Adjust Attachment width constant
|
||||
self.attachViewWidthConstraint.constant = contentSize.width;
|
||||
|
||||
// Handle the encryption view
|
||||
if (bubbleData.isEncryptedRoom)
|
||||
{
|
||||
// Set the right device info icon
|
||||
self.encryptionStatusView.hidden = NO;
|
||||
self.encryptionStatusView.image = [RoomEncryptedDataBubbleCell encryptionIconForEvent:component.event andSession:bubbleData.mxSession];
|
||||
}
|
||||
else
|
||||
{
|
||||
self.encryptionStatusView.hidden = YES;
|
||||
}
|
||||
|
||||
// Hide by default the info container
|
||||
self.bubbleInfoContainer.hidden = YES;
|
||||
|
||||
// Adjust the layout according to the original cell, the one used to display the sticker unselected.
|
||||
if ([modelCellViewClass nib])
|
||||
{
|
||||
MXKRoomBubbleTableViewCell* cell= (MXKRoomBubbleTableViewCell*)[[modelCellViewClass nib] instantiateWithOwner:nil options:nil].firstObject;
|
||||
|
||||
if (cell.userNameLabel)
|
||||
{
|
||||
frame = cell.userNameLabel.frame;
|
||||
self.userNameLabelTopConstraint.constant = frame.origin.y;
|
||||
}
|
||||
frame = cell.attachmentView.frame;
|
||||
self.attachViewLeadingConstraint.constant = frame.origin.x;
|
||||
self.attachViewTopConstraint.constant = cell.attachViewTopConstraint.constant;
|
||||
self.attachViewBottomConstraint.constant = cell.attachViewBottomConstraint.constant;
|
||||
self.bubbleInfoContainerTopConstraint.constant = cell.bubbleInfoContainerTopConstraint.constant;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+ (CGFloat)heightForCellData:(MXKCellData*)cellData withMaximumWidth:(CGFloat)maxWidth
|
||||
{
|
||||
// Sanity check: accept only object of MXKRoomBubbleCellData classes or sub-classes
|
||||
NSParameterAssert([cellData isKindOfClass:[MXKRoomBubbleCellData class]]);
|
||||
MXKRoomBubbleCellData *bubbleData = (MXKRoomBubbleCellData*)cellData;
|
||||
|
||||
// Look for the original cell class to extract the constraints value.
|
||||
Class modelCellViewClass = nil;
|
||||
if (bubbleData.shouldHideSenderInformation)
|
||||
{
|
||||
modelCellViewClass = bubbleData.isEncryptedRoom ? RoomIncomingEncryptedAttachmentWithoutSenderInfoBubbleCell.class : RoomIncomingAttachmentWithoutSenderInfoBubbleCell.class;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bubbleData.isPaginationFirstBubble)
|
||||
{
|
||||
modelCellViewClass = bubbleData.isEncryptedRoom ? RoomIncomingEncryptedAttachmentWithPaginationTitleBubbleCell.class : RoomIncomingAttachmentWithPaginationTitleBubbleCell.class;
|
||||
}
|
||||
else
|
||||
{
|
||||
modelCellViewClass = bubbleData.isEncryptedRoom ? RoomIncomingEncryptedAttachmentBubbleCell.class : RoomIncomingAttachmentBubbleCell.class;
|
||||
}
|
||||
}
|
||||
|
||||
CGFloat rowHeight = [modelCellViewClass heightForCellData:cellData withMaximumWidth:maxWidth];
|
||||
|
||||
// Finalize the cell height by adding the height of the description.
|
||||
// Retrieve the component which stores the sticker (Only one component is handled by the bubble in case of sticker).
|
||||
MXKRoomBubbleComponent *component = bubbleData.bubbleComponents.firstObject;
|
||||
NSAttributedString *description = component.attributedTextMessage;
|
||||
if (description.length)
|
||||
{
|
||||
RoomSelectedStickerBubbleCell* cell = (RoomSelectedStickerBubbleCell*)[self cellWithOriginalXib];
|
||||
CGRect frame = cell.frame;
|
||||
frame.size.width = maxWidth;
|
||||
frame.size.height = 300;
|
||||
cell.frame = frame;
|
||||
|
||||
cell.descriptionLabel.attributedText = description;
|
||||
[cell layoutIfNeeded];
|
||||
|
||||
rowHeight += cell.descriptionContainerView.frame.size.height + cell.descriptionContainerViewBottomConstraint.constant;
|
||||
}
|
||||
|
||||
return rowHeight;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,209 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
|
||||
<device id="retina4_7" orientation="portrait">
|
||||
<adaptation id="fullscreen"/>
|
||||
</device>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
|
||||
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="WmY-Jw-mqv" customClass="RoomSelectedStickerBubbleCell">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="180"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="WmY-Jw-mqv" id="ef1-Tq-U3Z">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="179.5"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="SFg-55-RF4" userLabel="Pagination Title View">
|
||||
<rect key="frame" x="67" y="10" width="523" height="24"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wkY-7Y-sGw" userLabel="Pagination Label">
|
||||
<rect key="frame" x="0.0" y="0.0" width="513" height="18"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="PaginationLabel"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="18" id="PiZ-Ag-oxc"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
||||
<color key="textColor" red="0.66666666666666663" green="0.66666666666666663" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0kR-4b-Wav" userLabel="Pagination Separator View">
|
||||
<rect key="frame" x="0.0" y="23" width="523" height="1"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="wkY-7Y-sGw" secondAttribute="trailing" constant="10" id="4DU-xA-diS"/>
|
||||
<constraint firstItem="wkY-7Y-sGw" firstAttribute="top" secondItem="SFg-55-RF4" secondAttribute="top" id="6Cz-bj-kUg"/>
|
||||
<constraint firstItem="0kR-4b-Wav" firstAttribute="leading" secondItem="SFg-55-RF4" secondAttribute="leading" id="JnC-Xe-1qa"/>
|
||||
<constraint firstAttribute="bottom" secondItem="0kR-4b-Wav" secondAttribute="bottom" id="PHN-VL-Vv5"/>
|
||||
<constraint firstAttribute="height" constant="24" id="Qo9-cw-LCa"/>
|
||||
<constraint firstItem="0kR-4b-Wav" firstAttribute="top" secondItem="wkY-7Y-sGw" secondAttribute="bottom" constant="5" id="c44-l0-OW4"/>
|
||||
<constraint firstAttribute="trailing" secondItem="0kR-4b-Wav" secondAttribute="trailing" id="i6x-Qa-JZG"/>
|
||||
<constraint firstItem="wkY-7Y-sGw" firstAttribute="leading" secondItem="SFg-55-RF4" secondAttribute="leading" id="uq9-MP-Dmm"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view clipsSubviews="YES" contentMode="scaleAspectFill" translatesAutoresizingMaskIntoConstraints="NO" id="hgp-Z5-rAj" userLabel="Picture View" customClass="MXKImageView">
|
||||
<rect key="frame" x="13" y="54" width="30" height="30"/>
|
||||
<color key="backgroundColor" red="0.66666666666666663" green="0.66666666666666663" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="PictureView"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="30" id="NQk-ck-Lo8"/>
|
||||
<constraint firstAttribute="height" constant="30" id="dNT-QU-CUG"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<imageView userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="e2e_verified.png" translatesAutoresizingMaskIntoConstraints="NO" id="SfO-mO-OOz">
|
||||
<rect key="frame" x="41" y="68" width="28" height="28"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="EncryptionStatusView"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="28" id="AZL-1M-R2e"/>
|
||||
<constraint firstAttribute="height" constant="28" id="P35-h8-egI"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="User name:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="8" translatesAutoresizingMaskIntoConstraints="NO" id="q9c-0p-QyP">
|
||||
<rect key="frame" x="67" y="54" width="448" height="18"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="UserNameLabel"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="18" placeholder="YES" id="5ZO-W1-tS2"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
||||
<color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<view contentMode="scaleAspectFit" translatesAutoresizingMaskIntoConstraints="NO" id="5IE-JS-uf3" userLabel="Attachment View" customClass="MXKImageView">
|
||||
<rect key="frame" x="67" y="75" width="192" height="46.5"/>
|
||||
<color key="backgroundColor" red="0.93725490196078431" green="0.93725490196078431" blue="0.95686274509803926" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="AttachmentView"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="192" id="9zO-jU-qTb"/>
|
||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="34" id="C5F-6D-LZx"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IOg-Kt-8vW">
|
||||
<rect key="frame" x="515" y="54" width="70" height="125.5"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="BubbleInfoContainer"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="70" id="tLr-6k-ArA"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3b7-4a-YL0">
|
||||
<rect key="frame" x="12" y="3" width="576" height="174"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4ru-pn-Aka">
|
||||
<rect key="frame" x="57" y="48" width="458" height="30"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lgz-UT-c2U">
|
||||
<rect key="frame" x="67" y="131.5" width="53.5" height="38"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Bk9-l7-4ug">
|
||||
<rect key="frame" x="10" y="0.0" width="20" height="10"/>
|
||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="10" id="JYF-su-bXV"/>
|
||||
<constraint firstAttribute="width" constant="20" id="o8q-GT-1HB"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lql-N7-aOv">
|
||||
<rect key="frame" x="0.0" y="10" width="53.5" height="28"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PwC-m9-IC3">
|
||||
<rect key="frame" x="8" y="5" width="37.5" height="18"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="15"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="bottom" secondItem="PwC-m9-IC3" secondAttribute="bottom" constant="5" id="9IY-ct-GK4"/>
|
||||
<constraint firstItem="PwC-m9-IC3" firstAttribute="top" secondItem="lql-N7-aOv" secondAttribute="top" constant="5" id="Ptz-mS-jIO"/>
|
||||
<constraint firstAttribute="trailing" secondItem="PwC-m9-IC3" secondAttribute="trailing" constant="8" id="aFv-U3-X8p"/>
|
||||
<constraint firstItem="PwC-m9-IC3" firstAttribute="leading" secondItem="lql-N7-aOv" secondAttribute="leading" constant="8" id="wdB-ZN-l8I"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="lql-N7-aOv" firstAttribute="top" secondItem="Bk9-l7-4ug" secondAttribute="bottom" id="4ls-NU-aG9"/>
|
||||
<constraint firstAttribute="trailing" secondItem="lql-N7-aOv" secondAttribute="trailing" id="80S-HL-oVy"/>
|
||||
<constraint firstItem="Bk9-l7-4ug" firstAttribute="leading" secondItem="lgz-UT-c2U" secondAttribute="leading" constant="10" id="AVi-Mf-7UD"/>
|
||||
<constraint firstItem="lql-N7-aOv" firstAttribute="leading" secondItem="lgz-UT-c2U" secondAttribute="leading" id="BjZ-jz-Xmd"/>
|
||||
<constraint firstAttribute="bottom" secondItem="lql-N7-aOv" secondAttribute="bottom" id="m3I-Ml-oAP"/>
|
||||
<constraint firstItem="Bk9-l7-4ug" firstAttribute="top" secondItem="lgz-UT-c2U" secondAttribute="top" id="qsk-cV-cyd"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="4ru-pn-Aka" firstAttribute="bottom" secondItem="q9c-0p-QyP" secondAttribute="bottom" constant="6" id="0Cl-Or-gY1"/>
|
||||
<constraint firstItem="3b7-4a-YL0" firstAttribute="top" secondItem="ef1-Tq-U3Z" secondAttribute="topMargin" constant="-8" id="10i-70-PDz"/>
|
||||
<constraint firstItem="SfO-mO-OOz" firstAttribute="top" secondItem="SFg-55-RF4" secondAttribute="bottom" constant="34" id="7ug-dI-P4H"/>
|
||||
<constraint firstItem="5IE-JS-uf3" firstAttribute="top" secondItem="ef1-Tq-U3Z" secondAttribute="top" constant="75" id="96U-67-5TP"/>
|
||||
<constraint firstItem="lgz-UT-c2U" firstAttribute="leading" secondItem="5IE-JS-uf3" secondAttribute="leading" id="B0j-24-Z8x"/>
|
||||
<constraint firstAttribute="trailing" secondItem="q9c-0p-QyP" secondAttribute="trailing" constant="85" id="Bkh-h2-JOQ"/>
|
||||
<constraint firstItem="4ru-pn-Aka" firstAttribute="trailing" secondItem="q9c-0p-QyP" secondAttribute="trailing" id="Coe-gt-nwe"/>
|
||||
<constraint firstAttribute="bottom" secondItem="lgz-UT-c2U" secondAttribute="bottom" constant="10" id="IAx-xw-tKp"/>
|
||||
<constraint firstItem="q9c-0p-QyP" firstAttribute="top" secondItem="ef1-Tq-U3Z" secondAttribute="top" constant="54" id="Ixr-7h-f8j"/>
|
||||
<constraint firstItem="4ru-pn-Aka" firstAttribute="top" secondItem="q9c-0p-QyP" secondAttribute="top" constant="-6" id="K0X-dz-PvH"/>
|
||||
<constraint firstItem="lgz-UT-c2U" firstAttribute="top" secondItem="5IE-JS-uf3" secondAttribute="bottom" constant="10" id="MOf-5l-vZU"/>
|
||||
<constraint firstItem="5IE-JS-uf3" firstAttribute="leading" secondItem="ef1-Tq-U3Z" secondAttribute="leading" constant="67" id="Q0k-2f-DNG"/>
|
||||
<constraint firstAttribute="bottom" secondItem="IOg-Kt-8vW" secondAttribute="bottom" id="TPw-iE-nii"/>
|
||||
<constraint firstItem="q9c-0p-QyP" firstAttribute="leading" secondItem="5IE-JS-uf3" secondAttribute="leading" id="UnW-3c-mf6"/>
|
||||
<constraint firstItem="IOg-Kt-8vW" firstAttribute="top" secondItem="ef1-Tq-U3Z" secondAttribute="top" constant="54" id="XSL-TG-m62"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="lgz-UT-c2U" secondAttribute="trailing" constant="15" id="YHV-bx-NYo"/>
|
||||
<constraint firstItem="3b7-4a-YL0" firstAttribute="leading" secondItem="ef1-Tq-U3Z" secondAttribute="leadingMargin" constant="-8" id="aGh-ad-trR"/>
|
||||
<constraint firstAttribute="trailingMargin" secondItem="3b7-4a-YL0" secondAttribute="trailing" constant="-8" id="abE-n9-N8T"/>
|
||||
<constraint firstItem="4ru-pn-Aka" firstAttribute="leading" secondItem="q9c-0p-QyP" secondAttribute="leading" constant="-10" id="djP-gt-Mas"/>
|
||||
<constraint firstAttribute="trailing" secondItem="IOg-Kt-8vW" secondAttribute="trailing" constant="15" id="hQV-lO-7aQ"/>
|
||||
<constraint firstItem="SFg-55-RF4" firstAttribute="leading" secondItem="q9c-0p-QyP" secondAttribute="leading" id="hwY-nq-Oyw"/>
|
||||
<constraint firstAttribute="trailing" secondItem="SFg-55-RF4" secondAttribute="trailing" constant="10" id="jvR-oT-EQF"/>
|
||||
<constraint firstItem="SfO-mO-OOz" firstAttribute="leading" secondItem="ef1-Tq-U3Z" secondAttribute="leading" constant="41" id="nW4-ob-PSQ"/>
|
||||
<constraint firstItem="hgp-Z5-rAj" firstAttribute="leading" secondItem="ef1-Tq-U3Z" secondAttribute="leading" constant="13" id="tuw-aU-ncu"/>
|
||||
<constraint firstItem="SFg-55-RF4" firstAttribute="top" secondItem="ef1-Tq-U3Z" secondAttribute="top" constant="10" id="wJX-7V-bJB"/>
|
||||
<constraint firstAttribute="bottomMargin" secondItem="3b7-4a-YL0" secondAttribute="bottom" constant="-8" id="wpa-8Z-Gy3"/>
|
||||
<constraint firstItem="hgp-Z5-rAj" firstAttribute="top" secondItem="q9c-0p-QyP" secondAttribute="top" id="xVT-Xe-sq0"/>
|
||||
</constraints>
|
||||
</tableViewCellContentView>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="RoomBubbleCell"/>
|
||||
<connections>
|
||||
<outlet property="arrowView" destination="Bk9-l7-4ug" id="mDe-UL-4nb"/>
|
||||
<outlet property="attachViewBottomConstraint" destination="MOf-5l-vZU" id="Xr2-3T-bs2"/>
|
||||
<outlet property="attachViewLeadingConstraint" destination="Q0k-2f-DNG" id="JEV-IK-2NO"/>
|
||||
<outlet property="attachViewMinHeightConstraint" destination="C5F-6D-LZx" id="frk-Ox-WbA"/>
|
||||
<outlet property="attachViewTopConstraint" destination="96U-67-5TP" id="Ugm-cH-32E"/>
|
||||
<outlet property="attachViewWidthConstraint" destination="9zO-jU-qTb" id="fOO-VW-fe1"/>
|
||||
<outlet property="attachmentView" destination="5IE-JS-uf3" id="imT-1z-hR1"/>
|
||||
<outlet property="bubbleInfoContainer" destination="IOg-Kt-8vW" id="TAw-QY-Y9e"/>
|
||||
<outlet property="bubbleInfoContainerTopConstraint" destination="XSL-TG-m62" id="qVf-vJ-4aP"/>
|
||||
<outlet property="bubbleOverlayContainer" destination="3b7-4a-YL0" id="KNb-h4-YHD"/>
|
||||
<outlet property="descriptionContainerView" destination="lgz-UT-c2U" id="Tip-cN-J3S"/>
|
||||
<outlet property="descriptionContainerViewBottomConstraint" destination="IAx-xw-tKp" id="m9G-uX-pnD"/>
|
||||
<outlet property="descriptionLabel" destination="PwC-m9-IC3" id="Xf9-RK-KCJ"/>
|
||||
<outlet property="descriptionView" destination="lql-N7-aOv" id="7Sb-9t-j0p"/>
|
||||
<outlet property="encryptionStatusView" destination="SfO-mO-OOz" id="8BV-oD-e0i"/>
|
||||
<outlet property="paginationLabel" destination="wkY-7Y-sGw" id="9Uh-tX-t0I"/>
|
||||
<outlet property="paginationSeparatorView" destination="0kR-4b-Wav" id="c7x-Sh-aj6"/>
|
||||
<outlet property="paginationTitleView" destination="SFg-55-RF4" id="mbP-6I-gOn"/>
|
||||
<outlet property="pictureView" destination="hgp-Z5-rAj" id="rKM-QG-RJN"/>
|
||||
<outlet property="userNameLabel" destination="q9c-0p-QyP" id="JId-R7-LoM"/>
|
||||
<outlet property="userNameLabelTopConstraint" destination="Ixr-7h-f8j" id="RqB-b5-7D2"/>
|
||||
<outlet property="userNameTapGestureMaskView" destination="4ru-pn-Aka" id="28k-f4-1LY"/>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="e2e_verified.png" width="10" height="12"/>
|
||||
</resources>
|
||||
</document>
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.6.13</string>
|
||||
<string>0.6.14</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>NSExtension</key>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.6.13</string>
|
||||
<string>0.6.14</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>NSExtension</key>
|
||||
|
||||
+3
-1
@@ -30,7 +30,9 @@ rm -r "$tmp"
|
||||
if [ -z "$xcent" ]
|
||||
then
|
||||
echo "$1 has no archived-expanded-entitlements.xcent."
|
||||
exit 2
|
||||
|
||||
# It seems that since Xcode 9.3, this file is no more present (https://forums.developer.apple.com/thread/99923)
|
||||
#exit 2
|
||||
fi
|
||||
|
||||
# Check the aps-environment embedded in the binary.
|
||||
|
||||
Reference in New Issue
Block a user