@ -83,7 +83,7 @@ public final class LokiPublicChatAPI : LokiDotNetAPI {
}
let url = URL ( string : " \( server ) /channels/ \( channel ) /messages? \( queryParameters ) " ) !
let request = TSRequest ( url : url )
return TSNetworkManager . shared ( ) . makePromise( request : request ) . map { $0 . responseObject } . map { rawResponse in
return TSNetworkManager . shared ( ) . perform( request , withCompletionQueue : DispatchQueue . global ( ) ) . map { $0 . responseObject } . map { rawResponse in
guard let json = rawResponse as ? JSON , let rawMessages = json [ " data " ] as ? [ JSON ] else {
print ( " [Loki] Couldn't parse messages for public chat channel with ID: \( channel ) on server: \( server ) from: \( rawResponse ) . " )
throw Error . parsingFailed
@ -136,14 +136,14 @@ public final class LokiPublicChatAPI : LokiDotNetAPI {
public static func sendMessage ( _ message : LokiPublicChatMessage , to channel : UInt64 , on server : String ) -> Promise < LokiPublicChatMessage > {
guard let signedMessage = message . sign ( with : userKeyPair . privateKey ) else { return Promise ( error : Error . signingFailed ) }
return getAuthToken ( for : server ) . then { token -> Promise < LokiPublicChatMessage > in
return getAuthToken ( for : server ) . then ( on : DispatchQueue . global ( ) ) { token -> Promise < LokiPublicChatMessage > in
print ( " [Loki] Sending message to public chat channel with ID: \( channel ) on server: \( server ) . " )
let url = URL ( string : " \( server ) /channels/ \( channel ) /messages " ) !
let parameters = signedMessage . toJSON ( )
let request = TSRequest ( url : url , method : " POST " , parameters : parameters )
request . allHTTPHeaderFields = [ " Content-Type " : " application/json " , " Authorization " : " Bearer \( token ) " ]
let displayName = userDisplayName
return TSNetworkManager . shared ( ) . makePromise( request : request ) . map { $0 . responseObject } . map { rawResponse in
return TSNetworkManager . shared ( ) . perform( request , withCompletionQueue : DispatchQueue . global ( ) ) . map { $0 . responseObject } . map { rawResponse in
// I S O 8 6 0 1 D a t e F o r m a t t e r d o e s n ' t s u p p o r t m i l l i s e c o n d s b e f o r e i O S 1 1
let dateFormatter = DateFormatter ( )
dateFormatter . dateFormat = " yyyy-MM-dd'T'HH:mm:ss.SSSZ "
@ -155,7 +155,7 @@ public final class LokiPublicChatAPI : LokiDotNetAPI {
let timestamp = UInt64 ( date . timeIntervalSince1970 ) * 1000
return LokiPublicChatMessage ( serverID : serverID , hexEncodedPublicKey : userHexEncodedPublicKey , displayName : displayName , body : body , type : publicChatMessageType , timestamp : timestamp , quote : signedMessage . quote , attachments : signedMessage . attachments , signature : signedMessage . signature )
}
} . recover { error -> Promise < LokiPublicChatMessage > in
} . recover ( on : DispatchQueue . global ( ) ) { error -> Promise < LokiPublicChatMessage > in
if let error = error as ? NetworkManagerError , error . statusCode = = 401 {
print ( " [Loki] Group chat auth token for: \( server ) expired; dropping it. " )
storage . dbReadWriteConnection . removeObject ( forKey : server , inCollection : authTokenCollection )
@ -164,7 +164,7 @@ public final class LokiPublicChatAPI : LokiDotNetAPI {
} . retryingIfNeeded ( maxRetryCount : maxRetryCount ) . map { message in
Analytics . shared . track ( " Group Message Sent " )
return message
} . recover { error -> Promise < LokiPublicChatMessage > in
} . recover ( on : DispatchQueue . global ( ) ) { error -> Promise < LokiPublicChatMessage > in
Analytics . shared . track ( " Failed to Send Group Message " )
throw error
}
@ -180,7 +180,7 @@ public final class LokiPublicChatAPI : LokiDotNetAPI {
}
let url = URL ( string : " \( server ) /loki/v1/channel/ \( channel ) /deletes? \( queryParameters ) " ) !
let request = TSRequest ( url : url )
return TSNetworkManager . shared ( ) . makePromise( request : request ) . map { $0 . responseObject } . map { rawResponse in
return TSNetworkManager . shared ( ) . perform( request , withCompletionQueue : DispatchQueue . global ( ) ) . map { $0 . responseObject } . map { rawResponse in
guard let json = rawResponse as ? JSON , let deletions = json [ " data " ] as ? [ JSON ] else {
print ( " [Loki] Couldn't parse deleted messages for public chat channel with ID: \( channel ) on server: \( server ) from: \( rawResponse ) . " )
throw Error . parsingFailed
@ -198,14 +198,14 @@ public final class LokiPublicChatAPI : LokiDotNetAPI {
}
public static func deleteMessage ( with messageID : UInt , for channel : UInt64 , on server : String , isSentByUser : Bool ) -> Promise < Void > {
return getAuthToken ( for : server ) . then { token -> Promise < Void > in
return getAuthToken ( for : server ) . then ( on : DispatchQueue . global ( ) ) { token -> Promise < Void > in
let isModerationRequest = ! isSentByUser
print ( " [Loki] Deleting message with ID: \( messageID ) for public chat channel with ID: \( channel ) on server: \( server ) (isModerationRequest = \( isModerationRequest ) ). " )
let urlAsString = isSentByUser ? " \( server ) /channels/ \( channel ) /messages/ \( messageID ) " : " \( server ) /loki/v1/moderation/message/ \( messageID ) "
let url = URL ( string : urlAsString ) !
let request = TSRequest ( url : url , method : " DELETE " , parameters : [ : ] )
request . allHTTPHeaderFields = [ " Content-Type " : " application/json " , " Authorization " : " Bearer \( token ) " ]
return TSNetworkManager . shared ( ) . makePromise( request : request ) . done { result -> Void in
return TSNetworkManager . shared ( ) . perform( request , withCompletionQueue : DispatchQueue . global ( ) ) . done ( on : DispatchQueue . global ( ) ) { result -> Void in
print ( " [Loki] Deleted message with ID: \( messageID ) on server: \( server ) . " )
} . retryingIfNeeded ( maxRetryCount : maxRetryCount )
}
@ -214,7 +214,7 @@ public final class LokiPublicChatAPI : LokiDotNetAPI {
public static func getModerators ( for channel : UInt64 , on server : String ) -> Promise < Set < String > > {
let url = URL ( string : " \( server ) /loki/v1/channel/ \( channel ) /get_moderators " ) !
let request = TSRequest ( url : url )
return TSNetworkManager . shared ( ) . makePromise( request : request ) . map { $0 . responseObject } . map { rawResponse in
return TSNetworkManager . shared ( ) . perform( request , withCompletionQueue : DispatchQueue . global ( ) ) . map { $0 . responseObject } . map { rawResponse in
guard let json = rawResponse as ? JSON , let moderators = json [ " moderators " ] as ? [ String ] else {
print ( " [Loki] Couldn't parse moderators for public chat channel with ID: \( channel ) on server: \( server ) from: \( rawResponse ) . " )
throw Error . parsingFailed
@ -236,12 +236,12 @@ public final class LokiPublicChatAPI : LokiDotNetAPI {
public static func setDisplayName ( to newDisplayName : String ? , on server : String ) -> Promise < Void > {
print ( " [Loki] Updating display name on server: \( server ) . " )
return getAuthToken ( for : server ) . then { token -> Promise < Void > in
return getAuthToken ( for : server ) . then ( on : DispatchQueue . global ( ) ) { token -> Promise < Void > in
let parameters : JSON = [ " name " : ( newDisplayName ? ? " " ) ]
let url = URL ( string : " \( server ) /users/me " ) !
let request = TSRequest ( url : url , method : " PATCH " , parameters : parameters )
request . allHTTPHeaderFields = [ " Content-Type " : " application/json " , " Authorization " : " Bearer \( token ) " ]
return TSNetworkManager . shared ( ) . makePromise( request : request ) . map { _ in } . recover { error in
return TSNetworkManager . shared ( ) . perform( request , withCompletionQueue : DispatchQueue . global ( ) ) . map { _ in } . recover ( on : DispatchQueue . global ( ) ) { error in
print ( " Couldn't update display name due to error: \( error ) . " )
throw error
}
@ -251,7 +251,7 @@ public final class LokiPublicChatAPI : LokiDotNetAPI {
public static func getInfo ( for channel : UInt64 , on server : String ) -> Promise < LokiPublicChatInfo > {
let url = URL ( string : " \( server ) /channels/ \( channel ) ?include_annotations=1 " ) !
let request = TSRequest ( url : url )
return TSNetworkManager . shared ( ) . makePromise( request : request ) . map { $0 . responseObject } . map { rawResponse in
return TSNetworkManager . shared ( ) . perform( request , withCompletionQueue : DispatchQueue . global ( ) ) . map { $0 . responseObject } . map { rawResponse in
guard let json = rawResponse as ? JSON ,
let data = json [ " data " ] as ? JSON ,
let annotations = data [ " annotations " ] as ? [ JSON ] ,