Skip to content
This repository has been archived by the owner on Dec 2, 2022. It is now read-only.

Add conversations.[open|create|archive] #202

Merged
merged 4 commits into from
Oct 19, 2021
Merged
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
47 changes: 26 additions & 21 deletions SKWebAPI/Sources/Endpoint.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,34 +26,30 @@ public enum Endpoint: String {
case authRevoke = "auth.revoke"
case authTest = "auth.test"
case channelsHistory = "channels.history"
case channelsInfo = "channels.info"
case channelsList = "channels.list"
case channelsMark = "channels.mark"
case channelsCreate = "channels.create"
case channelsInvite = "channels.invite"
case channelsJoin = "channels.join"
case channelsKick = "channels.kick"
case channelsLeave = "channels.leave"
case channelsArchive = "channels.archive"
case channelsUnarchive = "channels.unarchive"
case channelsRename = "channels.rename"
case channelsKick = "channels.kick"
case channelsSetPurpose = "channels.setPurpose"
case channelsSetTopic = "channels.setTopic"
case channelsUnarchive = "channels.unarchive"
case chatDelete = "chat.delete"
case chatPostMessage = "chat.postMessage"
case chatPostEphemeral = "chat.postEphemeral"
case chatMeMessage = "chat.meMessage"
case chatPostEphemeral = "chat.postEphemeral"
case chatPostMessage = "chat.postMessage"
case chatUpdate = "chat.update"
case conversationsArchive = "conversations.archive"
case conversationsCreate = "conversations.create"
case conversationsHistory = "conversations.history"
case conversationsList = "conversations.list"
case conversationsReplies = "conversations.replies"
case conversationsMembers = "conversations.members"
case conversationsHistory = "conversations.history"
case conversationsOpen = "conversations.open"
case conversationsReplies = "conversations.replies"
case dndInfo = "dnd.info"
case dndTeamInfo = "dnd.teamInfo"
case emojiList = "emoji.list"
case filesCommentsAdd = "files.comments.add"
case filesCommentsEdit = "files.comments.edit"
case filesCommentsDelete = "files.comments.delete"
case filesCommentsEdit = "files.comments.edit"
case filesDelete = "files.delete"
case filesInfo = "files.info"
case filesUpload = "files.upload"
Expand All @@ -69,34 +65,43 @@ public enum Endpoint: String {
case imHistory = "im.history"
case imList = "im.list"
case imMark = "im.mark"
case imOpen = "im.open"
case mpimClose = "mpim.close"
case mpimHistory = "mpim.history"
case mpimList = "mpim.list"
case mpimMark = "mpim.mark"
case mpimOpen = "mpim.open"
case oauthAccess = "oauth.v2.access"
case pinsList = "pins.list"
case pinsAdd = "pins.add"
case pinsList = "pins.list"
case pinsRemove = "pins.remove"
case reactionsAdd = "reactions.add"
case reactionsGet = "reactions.get"
case reactionsList = "reactions.list"
case reactionsRemove = "reactions.remove"
case rtmStart = "rtm.start"
case rtmConnect = "rtm.connect"
case rtmStart = "rtm.start"
case searchAll = "search.all"
case searchFiles = "search.files"
case searchMessages = "search.messages"
case starsAdd = "stars.add"
case starsRemove = "stars.remove"
case teamInfo = "team.info"
case usersConversations = "users.conversations"
case usersGetPresence = "users.getPresence"
case usersInfo = "users.info"
case usersList = "users.list"
case usersConversations = "users.conversations"
case usersLookupByEmail = "users.lookupByEmail"
case usersProfileSet = "users.profile.set"
case usersSetActive = "users.setActive"
case usersSetPresence = "users.setPresence"
case searchAll = "search.all"
case searchFiles = "search.files"
case searchMessages = "search.messages"

// MARK: - Deprecated endpoints
case channelsArchive = "channels.archive"
case channelsCreate = "channels.create"
case channelsInfo = "channels.info"
case channelsInvite = "channels.invite"
case channelsJoin = "channels.join"
case channelsList = "channels.list"
case channelsMark = "channels.mark"
case imOpen = "im.open"
}
169 changes: 114 additions & 55 deletions SKWebAPI/Sources/WebAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -172,56 +172,11 @@ extension WebAPI {
failure?(error)
}
}

public func channelInfo(id: String, success: ChannelClosure?, failure: FailureClosure?) {
info(.channelsInfo, type:.channel, id: id, success: {(channel) in
success?(channel)
}) {(error) in
failure?(error)
}
}

public func channelsList(
excludeArchived: Bool = false,
excludeMembers: Bool = false,
success: ((_ channels: [[String: Any]]?) -> Void)?,
failure: FailureClosure?
) {
list(.channelsList, type:.channel, excludeArchived: excludeArchived, excludeMembers: excludeMembers, success: {(channels) in
success?(channels)
}) {(error) in
failure?(error)
}
}

public func markChannel(channel: String, timestamp: String, success: ((_ ts: String) -> Void)?, failure: FailureClosure?) {
mark(.channelsMark, channel: channel, timestamp: timestamp, success: {(ts) in
success?(ts)
}) {(error) in
failure?(error)
}
}

public func createChannel(channel: String, success: ChannelClosure?, failure: FailureClosure?) {
create(.channelsCreate, name: channel, success: success, failure: failure)
}

public func inviteToChannel(_ channel: String, user: String, success: SuccessClosure?, failure: FailureClosure?) {
invite(.channelsInvite, channel: channel, user: user, success: success, failure: failure)
}

public func channelsJoin(_ name: String, validate: Bool, success: ChannelClosure?, failure: FailureClosure?) {
join(.channelsJoin, name: name, validate: validate, success: success, failure: failure)
}

public func channelsLeave(_ channel: String, success: SuccessClosure?, failure: FailureClosure?) {
leave(.channelsLeave, channel: channel, success: success, failure: failure)
}

public func channelsArchive(_ channel: String, success: SuccessClosure?, failure: FailureClosure?) {
archive(.channelsArchive, channel: channel, success: success, failure: failure)
}

public func channelsUnarchive(_ channel: String, success: SuccessClosure?, failure: FailureClosure?) {
unarchive(.channelsUnarchive, channel: channel, success: success, failure: failure)
}
Expand Down Expand Up @@ -682,16 +637,6 @@ extension WebAPI {
failure?(error)
}
}

public func openIM(userID: String, success: ((_ imID: String?) -> Void)?, failure: FailureClosure?) {
let parameters = ["user": userID]
networkInterface.request(.imOpen, accessToken: token, parameters: parameters, successClosure: {(response) in
let group = response["channel"] as? [String: Any]
success?(group?["id"] as? String)
}) {(error) in
failure?(error)
}
}
}

// MARK: - MPIM
Expand Down Expand Up @@ -1224,6 +1169,35 @@ extension WebAPI {

// MARK: - Conversations
extension WebAPI {
public func conversationsArchive(channel: String, success: (() -> Void)?, failure: FailureClosure?) {
let parameters = ["channel": channel]
networkInterface.request(.conversationsArchive, accessToken: token, parameters: parameters, successClosure: {_ in }) {(error) in
failure?(error)
}
}

public func conversationsCreate(
name: String,
isPrivate: Bool = false,
success: ((_ id: String?, _ name: String?, _ creator: String?) -> Void)?,
failure: FailureClosure?
) {
let parameters = [
"name": name,
"is_private": isPrivate
] as [String : Any]
networkInterface.request(.conversationsOpen, accessToken: token, parameters: parameters, successClosure: {(response) in
let group = response["channel"] as? [String: Any]
success?(
group?["id"] as? String,
group?["name"] as? String,
group?["creator"] as? String
)
}) {(error) in
failure?(error)
}
}

public func conversationsList(
excludeArchived: Bool = false,
cursor: String? = nil,
Expand Down Expand Up @@ -1327,6 +1301,22 @@ extension WebAPI {
failure?(error)
}
}

public func conversationsOpen(
userIDs: [String],
success: ((_ imID: String?) -> Void)?,
failure: FailureClosure?
) {
let parameters = [
"users": userIDs.joined(separator: ",")
]
networkInterface.request(.conversationsOpen, accessToken: token, parameters: parameters, successClosure: {(response) in
let group = response["channel"] as? [String: Any]
success?(group?["id"] as? String)
}) {(error) in
failure?(error)
}
}
}

// MARK: - Search
Expand Down Expand Up @@ -1678,3 +1668,72 @@ extension WebAPI {
}
}
}

// MARK: - Deprecated
extension WebAPI {

// MARK: channels.*
@available(*, deprecated, message: "Use conversationsArchive instead.")
public func channelsArchive(_ channel: String, success: SuccessClosure?, failure: FailureClosure?) {
archive(.channelsArchive, channel: channel, success: success, failure: failure)
}

@available(*, deprecated, message: "Use conversationsCreate instead.")
public func createChannel(channel: String, success: ChannelClosure?, failure: FailureClosure?) {
create(.channelsCreate, name: channel, success: success, failure: failure)
}

@available(*, deprecated)
public func channelInfo(id: String, success: ChannelClosure?, failure: FailureClosure?) {
info(.channelsInfo, type:.channel, id: id, success: {(channel) in
success?(channel)
}) {(error) in
failure?(error)
}
}

@available(*, deprecated)
public func inviteToChannel(_ channel: String, user: String, success: SuccessClosure?, failure: FailureClosure?) {
invite(.channelsInvite, channel: channel, user: user, success: success, failure: failure)
}

@available(*, deprecated)
public func channelsJoin(_ name: String, validate: Bool, success: ChannelClosure?, failure: FailureClosure?) {
join(.channelsJoin, name: name, validate: validate, success: success, failure: failure)
}

@available(*, deprecated)
public func channelsList(
excludeArchived: Bool = false,
excludeMembers: Bool = false,
success: ((_ channels: [[String: Any]]?) -> Void)?,
failure: FailureClosure?
) {
list(.channelsList, type:.channel, excludeArchived: excludeArchived, excludeMembers: excludeMembers, success: {(channels) in
success?(channels)
}) {(error) in
failure?(error)
}
}

@available(*, deprecated)
public func markChannel(channel: String, timestamp: String, success: ((_ ts: String) -> Void)?, failure: FailureClosure?) {
mark(.channelsMark, channel: channel, timestamp: timestamp, success: {(ts) in
success?(ts)
}) {(error) in
failure?(error)
}
}

// MARK: im.*
@available(*, deprecated, message: "Use conversationsOpen instead.")
public func openIM(userID: String, success: ((_ imID: String?) -> Void)?, failure: FailureClosure?) {
let parameters = ["user": userID]
networkInterface.request(.imOpen, accessToken: token, parameters: parameters, successClosure: {(response) in
let group = response["channel"] as? [String: Any]
success?(group?["id"] as? String)
}) {(error) in
failure?(error)
}
}
}