Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ abstract_target 'iMastShared' do
target 'iMast' do
# Pods for iMast
pod 'Crossroad', '~> 3.0.1'
pod 'Starscream', '~> 3.1.1'
pod 'ReachabilitySwift', '~> 4.3.1'
pod 'Eureka', '~> 5.1'
pod 'EurekaFormBuilder', '~> 0.2.0'
Expand Down
6 changes: 1 addition & 5 deletions Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ PODS:
- libwebp (~> 1.0)
- SDWebImage/Core (~> 5.0)
- SnapKit (5.0.1)
- Starscream (3.1.1)
- SVProgressHUD (2.2.5)
- SwiftLint (0.37.0)
- SwiftyJSON (5.0.0)
Expand Down Expand Up @@ -65,7 +64,6 @@ DEPENDENCIES:
- SDWebImage (~> 5.3.2)
- SDWebImageWebPCoder (~> 0.2.5)
- SnapKit (~> 5.0.1)
- Starscream (~> 3.1.1)
- SVProgressHUD
- SwiftLint (~> 0.37.0)
- SwiftyJSON (~> 5.0.0)
Expand Down Expand Up @@ -93,7 +91,6 @@ SPEC REPOS:
- SDWebImage
- SDWebImageWebPCoder
- SnapKit
- Starscream
- SVProgressHUD
- SwiftLint
- SwiftyJSON
Expand Down Expand Up @@ -131,13 +128,12 @@ SPEC CHECKSUMS:
SDWebImage: 6ac2eb96571bff96ecde31a987172c5934a0eb7d
SDWebImageWebPCoder: 947093edd1349d820c40afbd9f42acb6cdecd987
SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb
Starscream: 4bb2f9942274833f7b4d296a55504dcfc7edb7b0
SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6
SwiftLint: c078a14d7d7ade75e5507795d185e3da41d844d2
SwiftyJSON: 36413e04c44ee145039d332b4f4e2d3e8d6c4db7
XCGLogger: 0434f15e3909cdc450bb63faf638b8792ab782ab
"※ikemen": da47fe6e0acfbe241611221f4d98ade266bf50a2

PODFILE CHECKSUM: 046c4bdcca7f7928751b8b3f5ffa4f10d870b57c
PODFILE CHECKSUM: 1291a9fb9a38dad198546d1788ed410afbbf1f4c

COCOAPODS: 1.8.3
Original file line number Diff line number Diff line change
Expand Up @@ -422,10 +422,6 @@ name: SnapKit, nameSpecified:
body: Copyright (c) 2011-P…
version: 5.0.1

name: Starscream, nameSpecified:
body: …
version: 3.1.1

name: SVProgressHUD, nameSpecified:
body: MIT License

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -194,14 +194,6 @@
<key>Type</key>
<string>PSChildPaneSpecifier</string>
</dict>
<dict>
<key>File</key>
<string>com.mono0926.LicensePlist/Starscream</string>
<key>Title</key>
<string>Starscream (3.1.1)</string>
<key>Type</key>
<string>PSChildPaneSpecifier</string>
</dict>
<dict>
<key>File</key>
<string>com.mono0926.LicensePlist/SVProgressHUD</string>
Expand Down

This file was deleted.

83 changes: 48 additions & 35 deletions Sources/iOS/App/Timelines/TimeLineTableViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -355,47 +355,20 @@ class TimeLineTableViewController: UIViewController, Instantiatable {
guard let webSocketEndpoint = self.websocketEndpoint() else {
return
}
if let socket = socket {
socket.connect()
return
}
environment.getWebSocket(endpoint: webSocketEndpoint).then { socket in
socket.event.connect.on {
self.streamingNavigationItem?.tintColor = nil
}
socket.event.disconnect.on { _ in
self.streamingNavigationItem?.tintColor = UIColor(red: 1, green: 0.3, blue: 0.15, alpha: 1)
}
socket.event.message.on { text in
var object = JSON(parseJSON: text)
if object["event"].string == "update" {
object["payload"] = JSON(parseJSON: object["payload"].string ?? "{}")
self.addNewPosts(posts: [try! MastodonPost.decode(json: object["payload"])])
} else if object["event"].string == "delete" {
let deletedTootID = object["payload"].stringValue
let snapshot = self.diffableDataSource.snapshot()
var deletePosts: [TableBody] = []

for body in snapshot.itemIdentifiers(inSection: .posts) {
if case .post(let id, _) = body {
if id.string == deletedTootID {
deletePosts.append(body)
} else if self.environment.memoryStore.post.container[id]?.repost?.value.id.string == deletedTootID {
deletePosts.append(body)
}
}
}

if deletePosts.count > 0 {
self.diffableDataSource.apply(snapshot, animatingDifferences: true)
}
} else {
print(object)
}
}
socket.delegate = self
socket.connect()
self.socket = socket
}
}

@objc func streamingStatusTapped() {
print("called")
let nowStreamConnected = (socket?.webSocket.isConnected ?? false)
let nowStreamConnected = (socket?.isConnected ?? false)
let alertVC = UIAlertController(
title: R.string.localizable.streaming(),
message: R.string.localizable.streamingStatus(
Expand All @@ -408,6 +381,7 @@ class TimeLineTableViewController: UIViewController, Instantiatable {
alertVC.popoverPresentationController?.barButtonItem = self.streamingNavigationItem
if nowStreamConnected {
alertVC.addAction(UIAlertAction(title: R.string.localizable.disconnect(), style: .default, handler: { (action) in
self.socket?.reconnect = false
self.socket?.disconnect()
}))
} else {
Expand All @@ -416,7 +390,8 @@ class TimeLineTableViewController: UIViewController, Instantiatable {
}))
}
alertVC.addAction(UIAlertAction(title: R.string.localizable.refetch(), style: .default, handler: { (action) in
let isStreamingConnectingNow = self.socket?.webSocket.isConnected ?? false
let isStreamingConnectingNow = self.socket?.isConnected ?? false
self.socket?.reconnect = false
if isStreamingConnectingNow {
self.socket?.disconnect()
}
Expand Down Expand Up @@ -526,3 +501,41 @@ extension TimeLineTableViewController: UITableViewDelegate {
MastodonMemoryStoreContainer[self.environment].post.change(obj: from)
}
}

extension TimeLineTableViewController: WebSocketWrapperDelegate {
func webSocket(_ wrapper: WebSocketWrapper, connected protocol: String?) {
self.streamingNavigationItem?.tintColor = nil
}

func webSocket(_ wrapper: WebSocketWrapper, disconnected error: Error?) {
self.streamingNavigationItem?.tintColor = UIColor(red: 1, green: 0.3, blue: 0.15, alpha: 1)
}

func webSocket(_ wrapper: WebSocketWrapper, received text: String) {
var object = JSON(parseJSON: text)
if object["event"].string == "update" {
object["payload"] = JSON(parseJSON: object["payload"].string ?? "{}")
self.addNewPosts(posts: [try! MastodonPost.decode(json: object["payload"])])
} else if object["event"].string == "delete" {
let deletedTootID = object["payload"].stringValue
let snapshot = self.diffableDataSource.snapshot()
var deletePosts: [TableBody] = []

for body in snapshot.itemIdentifiers(inSection: .posts) {
if case .post(let id, _) = body {
if id.string == deletedTootID {
deletePosts.append(body)
} else if self.environment.memoryStore.post.container[id]?.repost?.value.id.string == deletedTootID {
deletePosts.append(body)
}
}
}

if deletePosts.count > 0 {
self.diffableDataSource.apply(snapshot, animatingDifferences: true)
}
} else {
print(object)
}
}
}
Loading