feat(android, ios): remove files field from files response
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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],
|
||||
|
||||
@@ -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}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user