mirror of
https://github.com/grishka/NearDrop.git
synced 2026-04-03 01:36:15 +02:00
Allow sending links
This commit is contained in:
@@ -203,12 +203,16 @@ class NearbyConnection{
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal func sendTransferSetupFrame(_ frame:Sharing_Nearby_Frame) throws{
|
internal func sendTransferSetupFrame(_ frame:Sharing_Nearby_Frame) throws{
|
||||||
|
try sendBytesPayload(data: try frame.serializedData(), id: Int64.random(in: Int64.min...Int64.max))
|
||||||
|
}
|
||||||
|
|
||||||
|
internal func sendBytesPayload(data:Data, id:Int64) throws{
|
||||||
var transfer=Location_Nearby_Connections_PayloadTransferFrame()
|
var transfer=Location_Nearby_Connections_PayloadTransferFrame()
|
||||||
transfer.packetType = .data
|
transfer.packetType = .data
|
||||||
transfer.payloadChunk.offset=0
|
transfer.payloadChunk.offset=0
|
||||||
transfer.payloadChunk.flags=0
|
transfer.payloadChunk.flags=0
|
||||||
transfer.payloadChunk.body=try frame.serializedData()
|
transfer.payloadChunk.body=data
|
||||||
transfer.payloadHeader.id=Int64.random(in: Int64.min...Int64.max)
|
transfer.payloadHeader.id=id
|
||||||
transfer.payloadHeader.type = .bytes
|
transfer.payloadHeader.type = .bytes
|
||||||
transfer.payloadHeader.totalSize=Int64(transfer.payloadChunk.body.count)
|
transfer.payloadHeader.totalSize=Int64(transfer.payloadChunk.body.count)
|
||||||
transfer.payloadHeader.isSensitive=false
|
transfer.payloadHeader.isSensitive=false
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ class OutboundNearbyConnection:NearbyConnection{
|
|||||||
private var totalBytesToSend:Int64=0
|
private var totalBytesToSend:Int64=0
|
||||||
private var totalBytesSent:Int64=0
|
private var totalBytesSent:Int64=0
|
||||||
private var cancelled:Bool=false
|
private var cancelled:Bool=false
|
||||||
|
private var textPayloadID:Int64=0
|
||||||
|
|
||||||
enum State{
|
enum State{
|
||||||
case initial, sentUkeyClientInit, sentUkeyClientFinish, sentPairedKeyEncryption, sentPairedKeyResult, sentIntroduction, sendingFiles
|
case initial, sentUkeyClientInit, sentUkeyClientFinish, sentPairedKeyEncryption, sentPairedKeyResult, sentIntroduction, sendingFiles
|
||||||
@@ -33,6 +34,9 @@ class OutboundNearbyConnection:NearbyConnection{
|
|||||||
init(connection: NWConnection, id: String, urlsToSend:[URL]){
|
init(connection: NWConnection, id: String, urlsToSend:[URL]){
|
||||||
self.urlsToSend=urlsToSend
|
self.urlsToSend=urlsToSend
|
||||||
super.init(connection: connection, id: id)
|
super.init(connection: connection, id: id)
|
||||||
|
if urlsToSend.count==1 && !urlsToSend[0].isFileURL{
|
||||||
|
textPayloadID=Int64.random(in: Int64.min...Int64.max)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
@@ -256,16 +260,16 @@ class OutboundNearbyConnection:NearbyConnection{
|
|||||||
var introduction=Sharing_Nearby_Frame()
|
var introduction=Sharing_Nearby_Frame()
|
||||||
introduction.version = .v1
|
introduction.version = .v1
|
||||||
introduction.v1.type = .introduction
|
introduction.v1.type = .introduction
|
||||||
if urlsToSend.count==1 && urlsToSend[0].scheme != "file"{
|
if urlsToSend.count==1 && !urlsToSend[0].isFileURL{
|
||||||
var meta=Sharing_Nearby_TextMetadata()
|
var meta=Sharing_Nearby_TextMetadata()
|
||||||
meta.type = .url
|
meta.type = .url
|
||||||
meta.textTitle=urlsToSend[0].host ?? "URL"
|
meta.textTitle=urlsToSend[0].host ?? "URL"
|
||||||
meta.size=Int64(urlsToSend[0].absoluteString.utf8.count)
|
meta.size=Int64(urlsToSend[0].absoluteString.utf8.count)
|
||||||
meta.payloadID=Int64.random(in: Int64.min...Int64.max)
|
meta.payloadID=textPayloadID
|
||||||
introduction.v1.introduction.textMetadata.append(meta)
|
introduction.v1.introduction.textMetadata.append(meta)
|
||||||
}else{
|
}else{
|
||||||
for url in urlsToSend{
|
for url in urlsToSend{
|
||||||
guard url.scheme=="file" else {continue}
|
guard url.isFileURL else {continue}
|
||||||
var meta=Sharing_Nearby_FileMetadata()
|
var meta=Sharing_Nearby_FileMetadata()
|
||||||
meta.name=OutboundNearbyConnection.sanitizeFileName(name: url.lastPathComponent)
|
meta.name=OutboundNearbyConnection.sanitizeFileName(name: url.lastPathComponent)
|
||||||
let attrs=try FileManager.default.attributesOfItem(atPath: url.path)
|
let attrs=try FileManager.default.attributesOfItem(atPath: url.path)
|
||||||
@@ -309,7 +313,11 @@ class OutboundNearbyConnection:NearbyConnection{
|
|||||||
case .accept:
|
case .accept:
|
||||||
currentState = .sendingFiles
|
currentState = .sendingFiles
|
||||||
delegate?.outboundConnectionTransferAccepted(connection: self)
|
delegate?.outboundConnectionTransferAccepted(connection: self)
|
||||||
try sendNextFileChunk()
|
if urlsToSend.count==1 && !urlsToSend[0].isFileURL{
|
||||||
|
try sendURL()
|
||||||
|
}else{
|
||||||
|
try sendNextFileChunk()
|
||||||
|
}
|
||||||
case .reject, .unknown:
|
case .reject, .unknown:
|
||||||
delegate?.outboundConnection(connection: self, failedWithError: NearbyError.canceled(reason: .userRejected))
|
delegate?.outboundConnection(connection: self, failedWithError: NearbyError.canceled(reason: .userRejected))
|
||||||
try sendDisconnectionAndDisconnect()
|
try sendDisconnectionAndDisconnect()
|
||||||
@@ -325,8 +333,13 @@ class OutboundNearbyConnection:NearbyConnection{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func sendURL() throws{
|
||||||
|
try sendBytesPayload(data: Data(urlsToSend[0].absoluteString.utf8), id: textPayloadID)
|
||||||
|
delegate?.outboundConnectionTransferFinished(connection: self)
|
||||||
|
try sendDisconnectionAndDisconnect()
|
||||||
|
}
|
||||||
|
|
||||||
private func sendNextFileChunk() throws{
|
private func sendNextFileChunk() throws{
|
||||||
print("SEND NEXT: \(Thread.current)")
|
|
||||||
if cancelled{
|
if cancelled{
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
$extensionItem.attachments,
|
$extensionItem.attachments,
|
||||||
$attachment,
|
$attachment,
|
||||||
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.file-url"
|
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.file-url"
|
||||||
|
OR ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
|
||||||
AND NOT (ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.folder")
|
AND NOT (ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.folder")
|
||||||
).@count == $extensionItem.attachments.@count
|
).@count == $extensionItem.attachments.@count
|
||||||
).@count > 0</string>
|
).@count > 0</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user