feat(android, ios): remove files field from files response

This commit is contained in:
ksenia312
2024-02-05 12:28:49 +01:00
parent d6840a4313
commit 1741ee3458
9 changed files with 203 additions and 134 deletions
+26 -19
View File
@@ -58,57 +58,64 @@ class NearbyMessageTextContent : NearbyMessageContent {
class NearbyMessageFilesContent : NearbyMessageContent {
init(files: Array<String>, id: String, type: MessageContentType) {
self.files = files
init(id: String, type: MessageContentType) {
self.id = id
super.init(type: type)
}
static func fromJsonRaw(type: MessageContentType, json: [String: Any]) -> NearbyMessageFilesContent? {
if let filesObjects: Array = json["files"] as? Array<Dictionary<String, AnyObject>> {
let files : [String]? = filesObjects.map({ $0["path"] as? String }).compactMap({$0})
if let id: String = json["id"] as? String{
if let requireFiles = files {
return NearbyMessageFilesContent(files: requireFiles, id: id, type: type)
}
}
if let id: String = json["id"] as? String{
return NearbyMessageFilesContent(id: id, type: type)
}
return nil;
}
override func toJson() -> [String : Any] {
return [
"files": files.map{["path": $0]},
"id": id,
].merging( super.toJson()) { (current, _) in current}
}
let files: Array<String>
let id: String
}
class NearbyMessageFilesRequest : NearbyMessageFilesContent {
init(files: Array<String>, id: String) {
super.init(files: files, id: id, type: MessageContentType.filesRequest)
self.files = files
super.init(id: id, type: MessageContentType.filesRequest)
}
static func fromJson( json: [String: Any]) -> NearbyMessageFilesRequest? {
static func fromJson(json: [String: Any]) -> NearbyMessageFilesRequest? {
let message = NearbyMessageFilesContent.fromJsonRaw(type: MessageContentType.filesRequest, json: json)
if let requireMessage = message {
return NearbyMessageFilesRequest(files: requireMessage.files, id: requireMessage.id)
if let filesObjects: Array = json["files"] as? Array<Dictionary<String, AnyObject>> {
let files : [String]? = filesObjects.map({ $0["path"] as? String }).compactMap({$0})
if let requireMessage = message {
if let requireFiles = files {
return NearbyMessageFilesRequest(files: requireFiles, id: requireMessage.id)
}
}
}
return nil
return nil;
}
let files: Array<String>
override func toJson() -> [String : Any] {
return [
"files": files.map{["path": $0]},
].merging( super.toJson()) { (current, _) in current}
}
}
class NearbyMessageFilesResponse : NearbyMessageFilesContent {
init(files: Array<String>, id: String, response: Bool) {
init(id: String, response: Bool) {
self.response = response
super.init(files: files, id: id, type: MessageContentType.filesResponse)
super.init(id: id, type: MessageContentType.filesResponse)
}
static func fromJson( json: [String: Any]) -> NearbyMessageFilesResponse? {
let message = NearbyMessageFilesContent.fromJsonRaw(type: MessageContentType.filesResponse, json: json)
if let requireMessage = message,
let response = json["response"] as? Bool {
return NearbyMessageFilesResponse(files: requireMessage.files, id: requireMessage.id, response: response)
return NearbyMessageFilesResponse(id: requireMessage.id, response: response)
}
return nil
}
+4
View File
@@ -107,6 +107,10 @@ class NearbyManager: NSObject {
do {
if let requireDevice = device {
let message = NearbyMessage(content: content, senderName: self.device.name, senderPeerID: self.device.peerID)
if (content is NearbyMessageFilesRequest) {
NearbyRequestsStore.instance.add(request: message.content as! NearbyMessageFilesRequest)
}
try requireDevice.session?.session?.send(
try JSONSerialization.data(withJSONObject: message.toDictionary()),
toPeers: [requireDevice.peerID],
+6 -4
View File
@@ -9,18 +9,21 @@ import Foundation
import Flutter
extension NearbyServicePlugin {
@objc func onMessageReceived(notification: Notification) {
DispatchQueue.main.async {
if let userInfo = NearbyUserInfo.fromDictionary(userInfo: notification.userInfo) {
if let message = NearbyMessage.fromUserInfo(userInfo: userInfo) {
if message.content is NearbyMessageFilesResponse {
let response = message.content as! NearbyMessageFilesResponse
if (response.response) {
let cachedRequest = NearbyRequestsStore.instance.find(for: response.id)
if (response.response && cachedRequest != nil) {
self.manager.sendFiles(
id: response.id,
paths: response.files,
id: cachedRequest!.id,
paths: cachedRequest!.files,
with: message.senderPeerID.displayName
)
NearbyRequestsStore.instance.remove(for: cachedRequest!.id)
}
}
self.channel.invokeMethod(DART_COMMAND_MESSAGE_RECEIVED, arguments: message.toDartFormat())
@@ -33,7 +36,6 @@ extension NearbyServicePlugin {
}
@objc func onResourceReceived(notification: Notification) {
DispatchQueue.main.async {
if let userInfo = NearbyUserInfo.fromDictionary(userInfo: notification.userInfo) {
@@ -0,0 +1,29 @@
//
// NearbyRequestsStore.swift
// nearby_service
//
// Created by Kseniia Nikitina on 5/2/24.
//
import Foundation
class NearbyRequestsStore {
static let instance = NearbyRequestsStore()
private var requests : [NearbyMessageFilesRequest] = []
func add(request: NearbyMessageFilesRequest) {
requests.append(request)
}
func find(for id: String) -> NearbyMessageFilesRequest? {
return requests.first { request in
return request.id == id
}
}
func remove(for id: String) {
self.requests = requests.filter{$0.id != id}
}
}