|  |  |  | @ -369,7 +369,7 @@ public final class PublicChatAPI : DotNetAPI { | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     static func updateProfileIfNeeded(for channel: UInt64, on server: String, from info: PublicChatInfo) { | 
		
	
		
			
				|  |  |  |  |     static func updateProfileIfNeeded(for channel: UInt64, on server: String, from info: PublicChatInfo, token: String, serverPublicKey: String) { | 
		
	
		
			
				|  |  |  |  |         let storage = OWSPrimaryStorage.shared() | 
		
	
		
			
				|  |  |  |  |         let publicChatID = "\(server).\(channel)" | 
		
	
		
			
				|  |  |  |  |         try! Storage.writeSync { transaction in | 
		
	
	
		
			
				
					|  |  |  | @ -388,27 +388,26 @@ public final class PublicChatAPI : DotNetAPI { | 
		
	
		
			
				|  |  |  |  |             if oldProfilePictureURL != info.profilePictureURL || groupModel.groupImage == nil { | 
		
	
		
			
				|  |  |  |  |                 storage.setProfilePictureURL(info.profilePictureURL, forPublicChatWithID: publicChatID, in: transaction) | 
		
	
		
			
				|  |  |  |  |                 if let profilePictureURL = info.profilePictureURL { | 
		
	
		
			
				|  |  |  |  |                     let configuration = URLSessionConfiguration.default | 
		
	
		
			
				|  |  |  |  |                     let manager = AFURLSessionManager.init(sessionConfiguration: configuration) | 
		
	
		
			
				|  |  |  |  |                     let url = URL(string: "\(server)\(profilePictureURL)")! | 
		
	
		
			
				|  |  |  |  |                     let request = URLRequest(url: url) | 
		
	
		
			
				|  |  |  |  |                     let task = manager.downloadTask(with: request, progress: nil, | 
		
	
		
			
				|  |  |  |  |                         destination: { (targetPath: URL, response: URLResponse) -> URL in | 
		
	
		
			
				|  |  |  |  |                             let tempFilePath = URL(fileURLWithPath: OWSTemporaryDirectoryAccessibleAfterFirstAuth()).appendingPathComponent(UUID().uuidString) | 
		
	
		
			
				|  |  |  |  |                             return tempFilePath | 
		
	
		
			
				|  |  |  |  |                         }, | 
		
	
		
			
				|  |  |  |  |                         completionHandler: { (response: URLResponse, filePath: URL?, error: Error?) in | 
		
	
		
			
				|  |  |  |  |                             if let error = error { | 
		
	
		
			
				|  |  |  |  |                                 print("[Loki] Couldn't download profile picture for public chat channel with ID: \(channel) on server: \(server).") | 
		
	
		
			
				|  |  |  |  |                                 return | 
		
	
		
			
				|  |  |  |  |                             } | 
		
	
		
			
				|  |  |  |  |                             if let filePath = filePath, let avatarData = try? Data.init(contentsOf: filePath) { | 
		
	
		
			
				|  |  |  |  |                                 let attachmentStream = TSAttachmentStream(contentType: OWSMimeTypeImageJpeg, byteCount: UInt32(avatarData.count), sourceFilename: nil, caption: nil, albumMessageId: nil) | 
		
	
		
			
				|  |  |  |  |                                 try! attachmentStream.write(avatarData) | 
		
	
		
			
				|  |  |  |  |                                 groupThread.updateAvatar(with: attachmentStream) | 
		
	
		
			
				|  |  |  |  |                             } | 
		
	
		
			
				|  |  |  |  |                     }) | 
		
	
		
			
				|  |  |  |  |                     task.resume() | 
		
	
		
			
				|  |  |  |  |                     var error: NSError? | 
		
	
		
			
				|  |  |  |  |                     let url = "\(server)/loki/v1\(profilePictureURL)" | 
		
	
		
			
				|  |  |  |  |                     let request = AFHTTPRequestSerializer().request(withMethod: "GET", urlString: url, parameters: nil, error: &error) | 
		
	
		
			
				|  |  |  |  |                     request.allHTTPHeaderFields = [ "Content-Type" : "application/json", | 
		
	
		
			
				|  |  |  |  |                                                     "Authorization" : "Bearer \(token)", | 
		
	
		
			
				|  |  |  |  |                                                     "Accept-Ranges" : "bytes"] | 
		
	
		
			
				|  |  |  |  |                     if let error = error { | 
		
	
		
			
				|  |  |  |  |                         print("[Loki] Couldn't download open group avatar due to error: \(error).") | 
		
	
		
			
				|  |  |  |  |                         return | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                     OnionRequestAPI.sendOnionRequest(request, to: server, using: serverPublicKey, isJSONRequired: false).map{ json in | 
		
	
		
			
				|  |  |  |  |                         guard let body = json["body"] as? JSON, let dataArray = body["data"] as? [UInt8] else { | 
		
	
		
			
				|  |  |  |  |                             print("[Loki] Couldn't download open group avatar.") | 
		
	
		
			
				|  |  |  |  |                             return | 
		
	
		
			
				|  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  |                         let avatarData = Data(dataArray) | 
		
	
		
			
				|  |  |  |  |                         let attachmentStream = TSAttachmentStream(contentType: OWSMimeTypeImageJpeg, byteCount: UInt32(avatarData.count), sourceFilename: nil, caption: nil, albumMessageId: nil) | 
		
	
		
			
				|  |  |  |  |                         try! attachmentStream.write(avatarData) | 
		
	
		
			
				|  |  |  |  |                         groupThread.updateAvatar(with: attachmentStream) | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
	
		
			
				
					|  |  |  | @ -444,7 +443,7 @@ public final class PublicChatAPI : DotNetAPI { | 
		
	
		
			
				|  |  |  |  |                             storage.setUserCount(memberCount, forPublicChatWithID: "\(server).\(channel)", in: transaction) | 
		
	
		
			
				|  |  |  |  |                         } | 
		
	
		
			
				|  |  |  |  |                         let publicChatInfo = PublicChatInfo(displayName: displayName, profilePictureURL: profilePictureURL, memberCount: memberCount) | 
		
	
		
			
				|  |  |  |  |                         updateProfileIfNeeded(for: channel, on: server, from: publicChatInfo) | 
		
	
		
			
				|  |  |  |  |                         updateProfileIfNeeded(for: channel, on: server, from: publicChatInfo, token: token, serverPublicKey: serverPublicKey) | 
		
	
		
			
				|  |  |  |  |                         return publicChatInfo | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
	
		
			
				
					|  |  |  | 
 |