Skip to content

Commit

Permalink
Merge branch 'release/1.1.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
nuomi1 committed Apr 13, 2021
2 parents c0613e1 + 9b94681 commit 000b701
Show file tree
Hide file tree
Showing 14 changed files with 545 additions and 826 deletions.
28 changes: 14 additions & 14 deletions Example/Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,33 +1,33 @@
PODS:
- NBus/BusHandlers (0.11.0):
- NBus/BusHandlers (1.0.0):
- NBus/QQHandler
- NBus/SystemHandler
- NBus/WechatHandler
- NBus/WeiboHandler
- NBus/Core (0.11.0)
- NBus/QQHandler (0.11.0):
- NBus/Core (1.0.0)
- NBus/QQHandler (1.0.0):
- NBus/Core
- NBus/QQSDK (0.11.0)
- NBus/QQSDKHandler (0.11.0):
- NBus/QQSDK (1.0.0)
- NBus/QQSDKHandler (1.0.0):
- NBus/Core
- NBus/QQSDK
- NBus/SDKHandlers (0.11.0):
- NBus/SDKHandlers (1.0.0):
- NBus/QQSDKHandler
- NBus/SystemHandler
- NBus/WechatSDKHandler
- NBus/WeiboSDKHandler
- NBus/SystemHandler (0.11.0):
- NBus/SystemHandler (1.0.0):
- NBus/Core
- NBus/WechatHandler (0.11.0):
- NBus/WechatHandler (1.0.0):
- NBus/Core
- NBus/WechatSDK (0.11.0)
- NBus/WechatSDKHandler (0.11.0):
- NBus/WechatSDK (1.0.0)
- NBus/WechatSDKHandler (1.0.0):
- NBus/Core
- NBus/WechatSDK
- NBus/WeiboHandler (0.11.0):
- NBus/WeiboHandler (1.0.0):
- NBus/Core
- NBus/WeiboSDK (0.11.0)
- NBus/WeiboSDKHandler (0.11.0):
- NBus/WeiboSDK (1.0.0)
- NBus/WeiboSDKHandler (1.0.0):
- NBus/Core
- NBus/WeiboSDK
- PinLayout (1.9.3)
Expand Down Expand Up @@ -62,7 +62,7 @@ EXTERNAL SOURCES:
:path: "../"

SPEC CHECKSUMS:
NBus: 1523db5c47d0665c2dd3246e1f60495cd1b5e6e9
NBus: e0f623fe47b890a345766f351193cba20359febb
PinLayout: 4d8733121f8687edcc8f00c19bf1379d12808767
RxCocoa: 3f79328fafa3645b34600f37c31e64c73ae3a80e
RxRelay: 8d593be109c06ea850df027351beba614b012ffb
Expand Down
22 changes: 12 additions & 10 deletions NBus.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "NBus"
s.version = "1.0.0"
s.version = "1.1.0"
s.summary = "A short description of NBus."

s.homepage = "https://github.com/nuomi1/NBus"
Expand Down Expand Up @@ -124,6 +124,10 @@ Pod::Spec.new do |s|
ditto -V -x -k --sequesterRsrc --rsrc ${VENDOR_FILE} ${VENDOR_ZIP_DIR}
if [ -n "$(find ${VENDOR_ZIP_DIR} -d 1 -name '*.zip')" ]; then
ditto -V -x -k --sequesterRsrc --rsrc ${VENDOR_ZIP_DIR}/*.zip ${VENDOR_ZIP_DIR}
fi
for file in $(find -E ${VENDOR_ZIP_DIR}/${VENDOR_SEARCH} -d 1 -regex ".*/*.(bundle|framework|a|h)"); do
cp -r ${file} ${VENDOR_SDK_DIR}
done
Expand All @@ -135,18 +139,16 @@ Pod::Spec.new do |s|
cd Vendor
QQ="QQ"
QQ_VER="3.5.1"
QQ_URL="http://d3g.qq.com/qzone/iOS_SDK_${QQ_VER}_Lite.zip"
QQ_SHA1="15976ed9b90cd340818fe3ae3b1e266c67cf02d9"
QQ_SEARCH="Lite/TencentOpenApi(Lite)_3"
QQ_VER="3.5.3"
QQ_URL="https://tangram-1251316161.file.myqcloud.com/qqconnect/OpenSDK_V${QQ_VER}/iOS_V${QQ_VER}_Lite.zip"
QQ_SHA1="2f9871544e5c448b9c0cae129db48ea11fb85053"
QQ_SEARCH="."
download_sdk ${QQ} ${QQ_VER} ${QQ_URL} ${QQ_SHA1} ${QQ_SEARCH}
sed -i "" "s/imoort/import/g" "QQ_SDK/TencentOpenAPI.framework/Headers/TencentOpenApiUmbrellaHeader.h"
WECHAT="Wechat"
WECHAT_VER="1.8.7.1"
WECHAT_URL="https://res.wx.qq.com/op_res/DHI055JVxYur-5c7ss5McQZj2Y9KZQlp24xwD7FYnF88x8LA8rWCzSfdStN5tiCD"
WECHAT_SHA1="5359ec0b4fc707f41fcf458fe4faebb83efd4011"
WECHAT_VER="1.8.9"
WECHAT_URL="https://res.wx.qq.com/op_res/_Q5kJ9eIC1z-APXT9YPj2uWc-8esYianDXmZnbU7nFSxL_YmuvcoREglWUsrwLInpC6oj7QQB7DhLiZnlcfpGg"
WECHAT_SHA1="74a45a045602fde939b1a2d9106377993158639f"
WECHAT_SEARCH="OpenSDK${WECHAT_VER}"
download_sdk ${WECHAT} ${WECHAT_VER} ${WECHAT_URL} ${WECHAT_SHA1} ${WECHAT_SEARCH}
Expand Down
223 changes: 207 additions & 16 deletions NBus/Classes/Core/Bus+Handler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import Foundation
public protocol HandlerType {

var isInstalled: Bool { get }

var isSupported: Bool { get }
}

public protocol ShareHandlerType: HandlerType {
Expand Down Expand Up @@ -53,22 +55,6 @@ extension OauthHandlerType {
}
}

public protocol OpenURLHandlerType: HandlerType {

var appID: String { get }

func openURL(_ url: URL)

func canOpenURL(_ url: URL) -> Bool
}

extension OpenURLHandlerType {

public func canOpenURL(_ url: URL) -> Bool {
appID == url.scheme
}
}

public protocol LaunchHandlerType {

var platform: Platform { get }
Expand All @@ -89,6 +75,22 @@ extension LaunchHandlerType {
}
}

public protocol OpenURLHandlerType: HandlerType {

var appID: String { get }

func openURL(_ url: URL)

func canOpenURL(_ url: URL) -> Bool
}

extension OpenURLHandlerType {

public func canOpenURL(_ url: URL) -> Bool {
appID == url.scheme
}
}

public protocol OpenUserActivityHandlerType: HandlerType {

var universalLink: URL { get }
Expand All @@ -114,3 +116,192 @@ extension OpenUserActivityHandlerType {
return lhs.hasPrefix(rhs)
}
}

protocol BusCheckUniversalLinkHandlerHelper: HandlerType {}

extension BusCheckUniversalLinkHandlerHelper {

fileprivate func checkUniversalLinkSupported() -> Result<Void, Bus.Error> {
guard isInstalled else {
return .failure(.missingApplication)
}

guard isSupported else {
return .failure(.unsupportedApplication)
}

return .success(())
}
}

protocol BusShareHandlerHelper: BusCheckUniversalLinkHandlerHelper {

var supportedMessage: [Endpoint: [Message]] { get }
}

extension BusShareHandlerHelper {

func checkShareSupported(message: MessageType, to endpoint: Endpoint) -> Result<Void, Bus.Error> {
checkUniversalLinkSupported().flatMap { success in
supportedMessage[endpoint]?.contains(message.identifier) ?? false
? .success(success)
: .failure(.unsupportedMessage)
}
}
}

protocol BusOauthHandlerHelper: BusCheckUniversalLinkHandlerHelper {}

extension BusOauthHandlerHelper {

func checkOauthSupported() -> Result<Void, Bus.Error> {
checkUniversalLinkSupported()
}
}

protocol BusLaunchHandlerHelper: BusCheckUniversalLinkHandlerHelper {}

extension BusLaunchHandlerHelper {

func checkLaunchhSupported() -> Result<Void, Bus.Error> {
checkUniversalLinkSupported()
}
}

protocol BusQQHandlerHelper: BusShareHandlerHelper, BusOauthHandlerHelper, BusLaunchHandlerHelper {}

extension BusQQHandlerHelper {

var supportedMessage: [Endpoint: [Message]] {
[
Endpoints.QQ.friend: [
Messages.text,
Messages.image,
Messages.audio,
Messages.video,
Messages.webPage,
Messages.file,
Messages.miniProgram,
],
Endpoints.QQ.timeline: [
Messages.text,
Messages.image,
Messages.audio,
Messages.video,
Messages.webPage,
],
]
}
}

protocol BusWechatHandlerHelper: BusShareHandlerHelper, BusOauthHandlerHelper, BusLaunchHandlerHelper {}

extension BusWechatHandlerHelper {

var supportedMessage: [Endpoint: [Message]] {
[
Endpoints.Wechat.friend: [
Messages.text,
Messages.image,
Messages.audio,
Messages.video,
Messages.webPage,
Messages.file,
Messages.miniProgram,
],
Endpoints.Wechat.timeline: [
Messages.text,
Messages.image,
Messages.audio,
Messages.video,
Messages.webPage,
],
Endpoints.Wechat.favorite: [
Messages.text,
Messages.image,
Messages.audio,
Messages.video,
Messages.webPage,
Messages.file,
],
]
}
}

protocol BusWeiboHandlerHelper: BusShareHandlerHelper, BusOauthHandlerHelper {}

extension BusWeiboHandlerHelper {

var supportedMessage: [Endpoint: [Message]] {
[
Endpoints.Weibo.timeline: [
Messages.text,
Messages.image,
Messages.audio,
Messages.video,
Messages.webPage,
],
]
}
}

protocol BusSystemHandlerHelper: BusShareHandlerHelper, BusOauthHandlerHelper {}

extension BusSystemHandlerHelper {

var supportedMessage: [Endpoint: [Message]] {
[
Endpoints.System.activity: [
Messages.text,
Messages.image,
Messages.audio,
Messages.video,
Messages.webPage,
Messages.file,
],
]
}
}

protocol BusOpenExternalURLHelper: HandlerType {}

extension BusOpenExternalURLHelper {

func open<Success>(
_ url: URL?,
completionHandler: ((Result<Success, Bus.Error>) -> Void)?
) {
guard let url = url else {
busAssertionFailure()
completionHandler?(.failure(.invalidParameter))
return
}

let options: [UIApplication.OpenExternalURLOptionsKey: Any] = url.scheme == "https"
? [.universalLinksOnly: true]
: [:]

UIApplication.shared.open(url, options: options) { result in
if !result {
completionHandler?(.failure(.unknown))
}
}
}
}

protocol BusGetCommonInfoHelper: HandlerType {}

extension BusGetCommonInfoHelper {

var bundleID: String {
Bundle.main.bus.identifier!
}

var displayName: String {
Bundle.main.bus.displayName!
}

var oldText: String? {
UIPasteboard.general.bus.oldText
}
}
22 changes: 21 additions & 1 deletion NBus/Classes/Core/Bus+Helper.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ extension BusWrapper where Base == String {
return data.base64EncodedString()
}

var sha1: String? {
var sha1: String {
let data = Data(base.utf8)

var digest = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH))
Expand All @@ -49,6 +49,26 @@ extension BusWrapper where Base == String {
}
}

extension URLComponents: BusCompatible {}

extension BusWrapper where Base == URLComponents {

func mergingQueryItems(_ other: [String: String?]) -> [URLQueryItem]? {
let oldItems = base.queryItems ?? []
let newItems = other.map { URLQueryItem(name: $0, value: $1) }

let items = newItems + oldItems

var foundNames: Set<String> = []

let queryItems = items.filter {
$0.value != nil && foundNames.insert($0.name).inserted
}

return queryItems.isEmpty ? nil : queryItems
}
}

extension NSObject: BusCompatible {}

extension BusWrapper where Base: Bundle {
Expand Down
Loading

0 comments on commit 000b701

Please sign in to comment.