Skip to content
This repository was archived by the owner on Jun 7, 2020. It is now read-only.

Commit ad49809

Browse files
authored
Merge pull request #698 from RocketChat/beta
[RELEASE] Merge beta into master
2 parents 775f482 + 324b0c0 commit ad49809

30 files changed

+376
-155
lines changed

Podfile.lock

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,21 @@ PODS:
3131
- GoogleToolboxForMac/Defines (= 2.1.1)
3232
- GoogleToolboxForMac/NSString+URLArguments (= 2.1.1)
3333
- GoogleToolboxForMac/NSString+URLArguments (2.1.1)
34-
- GTMOAuth2 (1.1.4):
34+
- GTMOAuth2 (1.1.5):
3535
- GTMSessionFetcher (~> 1.1)
3636
- GTMSessionFetcher (1.1.11):
3737
- GTMSessionFetcher/Full (= 1.1.11)
3838
- GTMSessionFetcher/Core (1.1.11)
3939
- GTMSessionFetcher/Full (1.1.11):
4040
- GTMSessionFetcher/Core (= 1.1.11)
4141
- MobilePlayer (1.2.0)
42-
- RCMarkdownParser (3.0.2)
43-
- ReachabilitySwift (3)
44-
- Realm (2.10.0):
45-
- Realm/Headers (= 2.10.0)
46-
- Realm/Headers (2.10.0)
47-
- RealmSwift (2.10.0):
48-
- Realm (= 2.10.0)
42+
- RCMarkdownParser (3.0.3)
43+
- ReachabilitySwift (4.0-beta1)
44+
- Realm (2.10.1):
45+
- Realm/Headers (= 2.10.1)
46+
- Realm/Headers (2.10.1)
47+
- RealmSwift (2.10.1):
48+
- Realm (= 2.10.1)
4949
- SDWebImage (3.8.2):
5050
- SDWebImage/Core (= 3.8.2)
5151
- SDWebImage/Core (3.8.2)
@@ -96,7 +96,7 @@ EXTERNAL SOURCES:
9696

9797
CHECKOUT OPTIONS:
9898
ReachabilitySwift:
99-
:commit: 64f043787090610169c5069b70c8c58a5bfeb491
99+
:commit: 6451cd109ef2e88a0763387de44668e17cb1b49e
100100
:git: https://github.com/ashleymills/Reachability.swift.git
101101
semver:
102102
:commit: a8ad3f3c1b168dfa6a8f1f7de2e5cae59239d9bf
@@ -127,13 +127,13 @@ SPEC CHECKSUMS:
127127
Google: 98da4b1a60ed0beb80a290387a28333406a1eb90
128128
GoogleSignIn: 8c599fc10d25b2af86a3f82fd9631e863f2b1400
129129
GoogleToolboxForMac: 8e329f1b599f2512c6b10676d45736bcc2cbbeb0
130-
GTMOAuth2: 7fc9c10f5c745f4d9850419ea88889fe3baa6b7d
130+
GTMOAuth2: be83fd28d63ae3087e7d351b1f39c1a7e24ab6e7
131131
GTMSessionFetcher: 5ad62e8200fa00ed011fe5e08d27fef72c5b1429
132132
MobilePlayer: 069b13482499f14c25b6ce53f63a91e17975b073
133-
RCMarkdownParser: a3f2de30108a6090c6e98784445789447c73b03f
134-
ReachabilitySwift: f5b9bb30a0777fac8f09ce8b067e32faeb29bb64
135-
Realm: 98b3a25643cf6b3e07d2b99fb43fe0eb9c801dec
136-
RealmSwift: 34073ad3a31232bbaf7c0db898c037940284cba2
133+
RCMarkdownParser: 062a5f014134dffe7cf1b0d0dc34c3abb4b0f203
134+
ReachabilitySwift: fa4416f5356466392a733d21b41873ebe052bf40
135+
Realm: fc7a317a5c2c9ba91f5f235ede4e2ea76e9eba0c
136+
RealmSwift: 505ed6c15942a2e76f5cfa78a8667cfa997ee75b
137137
SDWebImage: 098e97e6176540799c27e804c96653ee0833d13c
138138
semver: df3895a55a097c7a819a80e7375e95b29e136157
139139
SideMenuController: 44670bc1e1c58d9460fc028e246926227edefec0

Rocket.Chat.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@
175175
925FF74E1E8EFB3E00982043 /* SettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 925FF74D1E8EFB3E00982043 /* SettingsViewModel.swift */; };
176176
925FF7511E8EFCAD00982043 /* SettingsViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 925FF7501E8EFCAD00982043 /* SettingsViewModelTests.swift */; };
177177
A0FFC1611E8A9D8D00A1B5EA /* TintedTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0FFC1601E8A9D8D00A1B5EA /* TintedTextField.swift */; };
178+
B5893BF41F6C4A5F00365768 /* UserReviewManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5893BF31F6C4A5E00365768 /* UserReviewManager.swift */; };
179+
B5893BF61F6C4B1D00365768 /* UserReviewManagerSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5893BF51F6C4B1D00365768 /* UserReviewManagerSpec.swift */; };
178180
D10E9C1A1F643457007F1796 /* Channel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D10E9C191F643457007F1796 /* Channel.swift */; };
179181
D10E9C1E1F643474007F1796 /* ChannelModelMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = D10E9C1D1F643474007F1796 /* ChannelModelMapping.swift */; };
180182
D10E9C201F6434A7007F1796 /* NSRangeExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D10E9C1F1F6434A7007F1796 /* NSRangeExtensions.swift */; };
@@ -390,6 +392,8 @@
390392
925FF74D1E8EFB3E00982043 /* SettingsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewModel.swift; sourceTree = "<group>"; };
391393
925FF7501E8EFCAD00982043 /* SettingsViewModelTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewModelTests.swift; sourceTree = "<group>"; };
392394
A0FFC1601E8A9D8D00A1B5EA /* TintedTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TintedTextField.swift; path = Views/Subscriptions/TintedTextField.swift; sourceTree = "<group>"; };
395+
B5893BF31F6C4A5E00365768 /* UserReviewManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = UserReviewManager.swift; path = Managers/UserReviewManager.swift; sourceTree = "<group>"; };
396+
B5893BF51F6C4B1D00365768 /* UserReviewManagerSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = UserReviewManagerSpec.swift; path = Managers/UserReviewManagerSpec.swift; sourceTree = "<group>"; };
393397
BCF38696E8EC385488688390 /* Pods-Rocket.Chat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Rocket.Chat.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Rocket.Chat/Pods-Rocket.Chat.debug.xcconfig"; sourceTree = "<group>"; };
394398
D10E9C191F643457007F1796 /* Channel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Channel.swift; path = Models/Channel.swift; sourceTree = "<group>"; };
395399
D10E9C1D1F643474007F1796 /* ChannelModelMapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ChannelModelMapping.swift; path = Models/Mapping/ChannelModelMapping.swift; sourceTree = "<group>"; };
@@ -517,6 +521,7 @@
517521
4147CE801F5EE03300C322C3 /* ServerManagerSpec.swift */,
518522
41FE55521F6038D60071E97A /* DatabaseManagerSpec.swift */,
519523
411119B71F6825C30019854B /* NetworkManagerSpec.swift */,
524+
B5893BF51F6C4B1D00365768 /* UserReviewManagerSpec.swift */,
520525
);
521526
name = Managers;
522527
sourceTree = "<group>";
@@ -664,6 +669,7 @@
664669
D1C536CB1F688B2F00EBA8D9 /* MarkdownManager.swift */,
665670
4174CB1B1D2DB2080086DAC8 /* LogManager.swift */,
666671
415DC7F51F67F5D30039FB4F /* NetworkManager.swift */,
672+
B5893BF31F6C4A5E00365768 /* UserReviewManager.swift */,
667673
597ECBA31E3708B10041C5C5 /* PushManager.swift */,
668674
415066871EB8B541003AEA1C /* MessageTextCacheManager.swift */,
669675
41499C8E1F2A116900790EA7 /* ServerManager.swift */,
@@ -1492,6 +1498,7 @@
14921498
41ADDD491E9DBB100007A458 /* LoaderView.swift in Sources */,
14931499
411F7D941F5179A50080E8AD /* ChatChannelHeaderCell.swift in Sources */,
14941500
41F167E91DAC4D4300775CCA /* ChatTitleView.swift in Sources */,
1501+
B5893BF41F6C4A5F00365768 /* UserReviewManager.swift in Sources */,
14951502
41552F661D30308C0081438D /* AuthManager.swift in Sources */,
14961503
D10E9C1A1F643457007F1796 /* Channel.swift in Sources */,
14971504
415972101D3DBDA0002258F4 /* RealmExtension.swift in Sources */,
@@ -1625,6 +1632,7 @@
16251632
41ADDD4B1E9E787E0007A458 /* LoaderViewSpec.swift in Sources */,
16261633
41DC7A221D386B4700896FC0 /* StringExtensionSpec.swift in Sources */,
16271634
68D186DF1ED9714F0030EE8C /* MessageURLSpec.swift in Sources */,
1635+
B5893BF61F6C4B1D00365768 /* UserReviewManagerSpec.swift in Sources */,
16281636
4151807C1EAE249F0000A039 /* ChatMessageTextViewModelSpec.swift in Sources */,
16291637
411119B81F6825C30019854B /* NetworkManagerSpec.swift in Sources */,
16301638
416296F91F41B42B00BCCEDD /* UploadHelperSpec.swift in Sources */,

Rocket.Chat/Base.lproj/Main.storyboard

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="17A360a" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13196" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
33
<device id="retina4_7" orientation="portrait">
44
<adaptation id="fullscreen"/>
55
</device>
66
<dependencies>
77
<deployment identifier="iOS"/>
8-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
8+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13173"/>
99
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
1010
</dependencies>
1111
<scenes>

Rocket.Chat/Controllers/Auth/AuthViewController.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ final class AuthViewController: BaseViewController {
1616
internal var connecting = false
1717
var serverURL: URL!
1818
var serverPublicSettings: AuthSettings?
19+
var temporary2FACode: String?
1920

2021
@IBOutlet weak var viewFields: UIView! {
2122
didSet {
@@ -81,6 +82,7 @@ final class AuthViewController: BaseViewController {
8182
if let controller = segue.destination as? TwoFactorAuthenticationViewController {
8283
controller.username = textFieldUsername.text ?? ""
8384
controller.password = textFieldPassword.text ?? ""
85+
controller.token = temporary2FACode ?? ""
8486
}
8587
}
8688
}
@@ -218,6 +220,7 @@ final class AuthViewController: BaseViewController {
218220

219221
self?.textFieldUsername.text = login?[AppExtensionUsernameKey] as? String
220222
self?.textFieldPassword.text = login?[AppExtensionPasswordKey] as? String
223+
self?.temporary2FACode = login?[AppExtensionTOTPKey] as? String
221224
self?.authenticateWithUsernameOrEmail()
222225
}
223226
}

Rocket.Chat/Controllers/Auth/ConnectServerViewController.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,23 @@ final class ConnectServerViewController: BaseViewController {
125125
guard let socketURL = url.socketURL() else { return alertInvalidURL() }
126126
guard let validateURL = url.validateURL() else { return alertInvalidURL() }
127127

128+
if let servers = DatabaseManager.servers {
129+
let sameServerIndex = servers.index(where: {
130+
if let stringServerUrl = $0[ServerPersistKeys.serverURL],
131+
let serverUrl = URL(string: stringServerUrl) {
132+
133+
return serverUrl == socketURL
134+
} else {
135+
return false
136+
}
137+
})
138+
139+
if let sameServerIndex = sameServerIndex {
140+
MainChatViewController.shared?.changeSelectedServer(index: sameServerIndex)
141+
return
142+
}
143+
}
144+
128145
connecting = true
129146
textFieldServerURL.alpha = 0.5
130147
activityIndicator.startAnimating()

Rocket.Chat/Controllers/Auth/TwoFactorAuthenticationViewController.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ final class TwoFactorAuthenticationViewController: BaseViewController {
1515

1616
var username: String = ""
1717
var password: String = ""
18+
var token: String = ""
1819

1920
@IBOutlet weak var viewFields: UIView! {
2021
didSet {
@@ -32,6 +33,11 @@ final class TwoFactorAuthenticationViewController: BaseViewController {
3233
NotificationCenter.default.removeObserver(self)
3334
}
3435

36+
override func viewWillAppear(_ animated: Bool) {
37+
super.viewWillAppear(animated)
38+
textFieldCode.text = token
39+
}
40+
3541
override func viewDidAppear(_ animated: Bool) {
3642
super.viewDidAppear(animated)
3743

@@ -49,7 +55,11 @@ final class TwoFactorAuthenticationViewController: BaseViewController {
4955
object: nil
5056
)
5157

52-
textFieldCode.becomeFirstResponder()
58+
if token.isEmpty {
59+
textFieldCode.becomeFirstResponder()
60+
} else {
61+
authenticate()
62+
}
5363
}
5464

5565
func startLoading() {
@@ -67,7 +77,7 @@ final class TwoFactorAuthenticationViewController: BaseViewController {
6777

6878
// MARK: Keyboard Handlers
6979
override func keyboardWillShow(_ notification: Notification) {
70-
if let keyboardSize = ((notification as NSNotification).userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
80+
if let keyboardSize = ((notification as NSNotification).userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
7181
visibleViewBottomConstraint.constant = keyboardSize.height
7282
}
7383
}

Rocket.Chat/Controllers/Chat/ChatViewController.swift

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ final class ChatViewController: SLKTextViewController {
4040
var closeSidebarAfterSubscriptionUpdate = false
4141

4242
var isRequestingHistory = false
43+
var isAppendingMessages = false
4344

4445
let socketHandlerToken = String.random(5)
4546
var messagesToken: NotificationToken!
@@ -289,12 +290,11 @@ final class ChatViewController: SLKTextViewController {
289290

290291
SubscriptionManager.sendTextMessage(message) { response in
291292
Realm.executeOnMainThread({ (realm) in
292-
realm.delete(message)
293-
294-
let message = Message()
293+
message.temporary = false
295294
message.map(response.result["result"], realm: realm)
295+
realm.add(message, update: true)
296+
296297
MessageTextCacheManager.shared.update(for: message)
297-
realm.add(message)
298298
})
299299
}
300300
}
@@ -366,15 +366,20 @@ final class ChatViewController: SLKTextViewController {
366366
case .initial: break
367367
case .update(_, _, let insertions, let modifications):
368368
if insertions.count > 0 {
369+
if insertions.count > 1 && self.isRequestingHistory {
370+
return
371+
}
372+
369373
var newMessages: [Message] = []
370374
for insertion in insertions {
371375
let newMessage = Message(value: self.messagesQuery[insertion])
372376
newMessages.append(newMessage)
373377
}
374378

375379
self.messages.append(contentsOf: newMessages)
376-
self.appendMessages(messages: newMessages, completion: nil)
377-
self.markAsRead()
380+
self.appendMessages(messages: newMessages, completion: {
381+
self.markAsRead()
382+
})
378383
}
379384

380385
if modifications.count == 0 {
@@ -426,6 +431,7 @@ final class ChatViewController: SLKTextViewController {
426431
DispatchQueue.main.async {
427432
self?.activityIndicator.stopAnimating()
428433
self?.isRequestingHistory = false
434+
self?.loadMoreMessagesFrom(date: date, loadRemoteHistory: false)
429435

430436
if messages.count == 0 {
431437
self?.dataController.loadedAllMessages = true
@@ -477,8 +483,11 @@ final class ChatViewController: SLKTextViewController {
477483
}
478484

479485
fileprivate func appendMessages(messages: [Message], completion: VoidCompletion?) {
486+
guard !isAppendingMessages else { return }
480487
guard let collectionView = self.collectionView else { return }
481488

489+
isAppendingMessages = true
490+
482491
var tempMessages: [Message] = []
483492
for message in messages {
484493
tempMessages.append(Message(value: message))
@@ -513,6 +522,7 @@ final class ChatViewController: SLKTextViewController {
513522
// No new data? Don't update it then
514523
if objs.count == 0 {
515524
DispatchQueue.main.async {
525+
self.isAppendingMessages = false
516526
completion?()
517527
}
518528

@@ -525,6 +535,7 @@ final class ChatViewController: SLKTextViewController {
525535
collectionView.insertItems(at: indexPaths)
526536
collectionView.deleteItems(at: removedIndexPaths)
527537
}, completion: { _ in
538+
self.isAppendingMessages = false
528539
completion?()
529540
})
530541
}

0 commit comments

Comments
 (0)