forked from shadowfacts/Tusker
Add getCurrentUser XCB action, refactor XCB support some more
This commit is contained in:
parent
68300f930b
commit
9a41d44e9f
|
@ -1,58 +1,3 @@
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class Client {
|
|
||||||
func test<A>(_ thing: A) {
|
|
||||||
if var thing = thing as? ClientModel {
|
|
||||||
thing.client = self
|
|
||||||
} else if var arr = thing as? [ClientModel] {
|
|
||||||
arr.client = self
|
|
||||||
}
|
|
||||||
// } else if let arr = thing as? Array<Any> {
|
|
||||||
// for el in arr {
|
|
||||||
// if var el = el as? ClientModel {
|
|
||||||
// el.client = self
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protocol ClientModel {
|
|
||||||
var client: Client! { get set }
|
|
||||||
}
|
|
||||||
|
|
||||||
class Something: ClientModel {
|
|
||||||
var client: Client!
|
|
||||||
}
|
|
||||||
|
|
||||||
extension Array: ClientModel where Element: ClientModel {
|
|
||||||
var client: Client! {
|
|
||||||
get {
|
|
||||||
return first?.client
|
|
||||||
}
|
|
||||||
set {
|
|
||||||
for var el in self {
|
|
||||||
el.client = newValue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//extension Array: ClientModel where Element == ClientModel {
|
|
||||||
// var client: Client! {
|
|
||||||
// get {
|
|
||||||
// return first?.client
|
|
||||||
// }
|
|
||||||
// set {
|
|
||||||
// for var el in self {
|
|
||||||
// el.client = newValue
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
var array = [Something(), Something()]
|
|
||||||
|
|
||||||
let client = Client()
|
|
||||||
client.test(array)
|
|
||||||
array[0].client
|
|
||||||
array[1].client
|
|
||||||
|
|
|
@ -68,6 +68,7 @@
|
||||||
D64D0AAD2128D88B005A6F37 /* LocalData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64D0AAC2128D88B005A6F37 /* LocalData.swift */; };
|
D64D0AAD2128D88B005A6F37 /* LocalData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64D0AAC2128D88B005A6F37 /* LocalData.swift */; };
|
||||||
D64D0AAF2128D954005A6F37 /* Onboarding.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D64D0AAE2128D954005A6F37 /* Onboarding.storyboard */; };
|
D64D0AAF2128D954005A6F37 /* Onboarding.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D64D0AAE2128D954005A6F37 /* Onboarding.storyboard */; };
|
||||||
D64D0AB12128D9AE005A6F37 /* OnboardingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64D0AB02128D9AE005A6F37 /* OnboardingViewController.swift */; };
|
D64D0AB12128D9AE005A6F37 /* OnboardingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64D0AB02128D9AE005A6F37 /* OnboardingViewController.swift */; };
|
||||||
|
D64F80E2215875CC00BEF393 /* XCBActionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64F80E1215875CC00BEF393 /* XCBActionType.swift */; };
|
||||||
D6538945214D6D7500E3CEFC /* TableViewSwipeActionProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6538944214D6D7500E3CEFC /* TableViewSwipeActionProvider.swift */; };
|
D6538945214D6D7500E3CEFC /* TableViewSwipeActionProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6538944214D6D7500E3CEFC /* TableViewSwipeActionProvider.swift */; };
|
||||||
D65A37F321472F300087646E /* SwiftSoup.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6BED16E212663DA00F02DA0 /* SwiftSoup.framework */; };
|
D65A37F321472F300087646E /* SwiftSoup.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6BED16E212663DA00F02DA0 /* SwiftSoup.framework */; };
|
||||||
D663625D2135C74800C9CBA2 /* ConversationMainStatusTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D663625C2135C74800C9CBA2 /* ConversationMainStatusTableViewCell.xib */; };
|
D663625D2135C74800C9CBA2 /* ConversationMainStatusTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D663625C2135C74800C9CBA2 /* ConversationMainStatusTableViewCell.xib */; };
|
||||||
|
@ -228,6 +229,7 @@
|
||||||
D64D0AAC2128D88B005A6F37 /* LocalData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalData.swift; sourceTree = "<group>"; };
|
D64D0AAC2128D88B005A6F37 /* LocalData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalData.swift; sourceTree = "<group>"; };
|
||||||
D64D0AAE2128D954005A6F37 /* Onboarding.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Onboarding.storyboard; sourceTree = "<group>"; };
|
D64D0AAE2128D954005A6F37 /* Onboarding.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Onboarding.storyboard; sourceTree = "<group>"; };
|
||||||
D64D0AB02128D9AE005A6F37 /* OnboardingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingViewController.swift; sourceTree = "<group>"; };
|
D64D0AB02128D9AE005A6F37 /* OnboardingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingViewController.swift; sourceTree = "<group>"; };
|
||||||
|
D64F80E1215875CC00BEF393 /* XCBActionType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCBActionType.swift; sourceTree = "<group>"; };
|
||||||
D6538944214D6D7500E3CEFC /* TableViewSwipeActionProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewSwipeActionProvider.swift; sourceTree = "<group>"; };
|
D6538944214D6D7500E3CEFC /* TableViewSwipeActionProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewSwipeActionProvider.swift; sourceTree = "<group>"; };
|
||||||
D663625C2135C74800C9CBA2 /* ConversationMainStatusTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ConversationMainStatusTableViewCell.xib; sourceTree = "<group>"; };
|
D663625C2135C74800C9CBA2 /* ConversationMainStatusTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ConversationMainStatusTableViewCell.xib; sourceTree = "<group>"; };
|
||||||
D663625E2135C75500C9CBA2 /* ConversationMainStatusTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConversationMainStatusTableViewCell.swift; sourceTree = "<group>"; };
|
D663625E2135C75500C9CBA2 /* ConversationMainStatusTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConversationMainStatusTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
|
@ -578,8 +580,9 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
D6757A7B2157E01900721E32 /* XCBManager.swift */,
|
D6757A7B2157E01900721E32 /* XCBManager.swift */,
|
||||||
D6757A812157E8FA00721E32 /* XCBSession.swift */,
|
|
||||||
D6757A7D2157E02600721E32 /* XCallbackURL.swift */,
|
D6757A7D2157E02600721E32 /* XCallbackURL.swift */,
|
||||||
|
D6757A812157E8FA00721E32 /* XCBSession.swift */,
|
||||||
|
D64F80E1215875CC00BEF393 /* XCBActionType.swift */,
|
||||||
D679C09E215850EF00DA27FE /* XCBActions.swift */,
|
D679C09E215850EF00DA27FE /* XCBActions.swift */,
|
||||||
);
|
);
|
||||||
path = XCallbackURL;
|
path = XCallbackURL;
|
||||||
|
@ -971,6 +974,7 @@
|
||||||
D64D0AB12128D9AE005A6F37 /* OnboardingViewController.swift in Sources */,
|
D64D0AB12128D9AE005A6F37 /* OnboardingViewController.swift in Sources */,
|
||||||
D663626821360E2C00C9CBA2 /* PreferencesTableViewController.swift in Sources */,
|
D663626821360E2C00C9CBA2 /* PreferencesTableViewController.swift in Sources */,
|
||||||
D66362732136FFC600C9CBA2 /* UITextView+Placeholder.swift in Sources */,
|
D66362732136FFC600C9CBA2 /* UITextView+Placeholder.swift in Sources */,
|
||||||
|
D64F80E2215875CC00BEF393 /* XCBActionType.swift in Sources */,
|
||||||
D66362752137068A00C9CBA2 /* Visibility+Helpers.swift in Sources */,
|
D66362752137068A00C9CBA2 /* Visibility+Helpers.swift in Sources */,
|
||||||
D646C95A213B5D0500269FB5 /* LargeImageInteractionController.swift in Sources */,
|
D646C95A213B5D0500269FB5 /* LargeImageInteractionController.swift in Sources */,
|
||||||
D6F953EC212519E700CF0F2B /* TimelineTableViewController.swift in Sources */,
|
D6F953EC212519E700CF0F2B /* TimelineTableViewController.swift in Sources */,
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
//
|
||||||
|
// XCBActionType.swift
|
||||||
|
// Tusker
|
||||||
|
//
|
||||||
|
// Created by Shadowfacts on 9/23/18.
|
||||||
|
// Copyright © 2018 Shadowfacts. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
enum XCBActionType: String {
|
||||||
|
case postStatus
|
||||||
|
case getCurrentUser
|
||||||
|
|
||||||
|
var path: String {
|
||||||
|
return "/\(rawValue)"
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,8 +9,8 @@
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
struct XCBActions {
|
struct XCBActions {
|
||||||
// MARK: - Posts
|
|
||||||
|
|
||||||
|
// MARK: - Posts
|
||||||
static func postStatus(_ url: XCallbackURL, _ session: XCBSession, _ silent: Bool?) {
|
static func postStatus(_ url: XCallbackURL, _ session: XCBSession, _ silent: Bool?) {
|
||||||
let mentioning = url.arguments["mentioning"]
|
let mentioning = url.arguments["mentioning"]
|
||||||
let text = url.arguments["text"]
|
let text = url.arguments["text"]
|
||||||
|
@ -37,4 +37,19 @@ struct XCBActions {
|
||||||
UIApplication.shared.keyWindow!.rootViewController!.present(vc, animated: true)
|
UIApplication.shared.keyWindow!.rootViewController!.present(vc, animated: true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - Accounts
|
||||||
|
static func getCurrentUser(_ url: XCallbackURL, _ session: XCBSession, _ silent: Bool?) {
|
||||||
|
let account = MastodonController.shared.account!
|
||||||
|
session.complete(with: .success, additionalData: [
|
||||||
|
"username": account.acct,
|
||||||
|
"displayName": account.displayName,
|
||||||
|
"locked": account.locked.description,
|
||||||
|
"followers": account.followersCount.description,
|
||||||
|
"following": account.followingCount.description,
|
||||||
|
"url": account.url.absoluteString,
|
||||||
|
"avatarURL": account.avatar.absoluteString,
|
||||||
|
"headerURL": account.header.absoluteString,
|
||||||
|
])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,10 @@ import UIKit
|
||||||
class XCBManager {
|
class XCBManager {
|
||||||
|
|
||||||
static var specs: [XCallbackURLSpec] = [
|
static var specs: [XCallbackURLSpec] = [
|
||||||
XCallbackURLSpec(path: "/postStatus", type: .postStatus, arguments: ["mentioning": true, "text": true], canRunSilently: true, action: XCBActions.postStatus)
|
// Statuses
|
||||||
|
XCallbackURLSpec(type: .postStatus, arguments: ["mentioning": true, "text": true], canRunSilently: true, action: XCBActions.postStatus),
|
||||||
|
// Accounts
|
||||||
|
XCallbackURLSpec(type: .getCurrentUser, arguments: [:], canRunSilently: false, action: XCBActions.getCurrentUser)
|
||||||
]
|
]
|
||||||
|
|
||||||
static var currentSession: XCBSession?
|
static var currentSession: XCBSession?
|
||||||
|
@ -25,7 +28,7 @@ class XCBManager {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
static func createSession(type: XCBSessionType, url: XCallbackURL) -> XCBSession {
|
static func createSession(type: XCBActionType, url: XCallbackURL) -> XCBSession {
|
||||||
let session = XCBSession(type: type, success: url.success, error: url.error, cancel: url.cancel)
|
let session = XCBSession(type: type, success: url.success, error: url.error, cancel: url.cancel)
|
||||||
currentSession = session
|
currentSession = session
|
||||||
return session
|
return session
|
||||||
|
|
|
@ -9,12 +9,12 @@
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class XCBSession {
|
class XCBSession {
|
||||||
let type: XCBSessionType
|
let type: XCBActionType
|
||||||
let success: URL?
|
let success: URL?
|
||||||
let error: URL?
|
let error: URL?
|
||||||
let cancel: URL?
|
let cancel: URL?
|
||||||
|
|
||||||
init(type: XCBSessionType, success: URL?, error: URL?, cancel: URL?) {
|
init(type: XCBActionType, success: URL?, error: URL?, cancel: URL?) {
|
||||||
self.type = type
|
self.type = type
|
||||||
self.success = success
|
self.success = success
|
||||||
self.error = error
|
self.error = error
|
||||||
|
@ -38,10 +38,6 @@ class XCBSession {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum XCBSessionType {
|
|
||||||
case postStatus
|
|
||||||
}
|
|
||||||
|
|
||||||
enum XCBSessionResult {
|
enum XCBSessionResult {
|
||||||
case success, error, cancel
|
case success, error, cancel
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,13 +13,13 @@ typealias XCBAction = (_ url: XCallbackURL, _ session: XCBSession, _ silent: Boo
|
||||||
struct XCallbackURLSpec {
|
struct XCallbackURLSpec {
|
||||||
|
|
||||||
let path: String
|
let path: String
|
||||||
let type: XCBSessionType
|
let type: XCBActionType
|
||||||
let arguments: [String: Bool]
|
let arguments: [String: Bool]
|
||||||
let canRunSilently: Bool
|
let canRunSilently: Bool
|
||||||
let action: XCBAction
|
let action: XCBAction
|
||||||
|
|
||||||
init(path: String, type: XCBSessionType, arguments: [String: Bool], canRunSilently: Bool, action: @escaping XCBAction) {
|
init(type: XCBActionType, arguments: [String: Bool], canRunSilently: Bool, action: @escaping XCBAction) {
|
||||||
self.path = path
|
self.path = type.path
|
||||||
self.type = type
|
self.type = type
|
||||||
self.canRunSilently = canRunSilently
|
self.canRunSilently = canRunSilently
|
||||||
self.action = action
|
self.action = action
|
||||||
|
|
Loading…
Reference in New Issue