wip
This commit is contained in:
parent
7666b71ef9
commit
36d030b696
|
@ -8,9 +8,10 @@ enum FileAction: Stateable {
|
|||
case createAttachmentThumbnail(messageId: String, localName: String)
|
||||
case attachmentThumbnailCreated(messageId: String, thumbnailName: String)
|
||||
|
||||
case copyGalleryItemsForUploading(items: [SharingGalleryItem])
|
||||
case galleryItemsCopiedForUploading(newMessageIds: [String], localNames: [String])
|
||||
|
||||
case fetchItemsFromGallery
|
||||
case itemsFromGalleryFetched(items: [SharingGalleryItem])
|
||||
|
||||
case copyGalleryItemsForUploading(items: [SharingGalleryItem])
|
||||
case copyCameraCapturedForUploading(media: Data, type: SharingCameraMediaType)
|
||||
case itemsCopiedForUploading(newMessageIds: [String], localNames: [String])
|
||||
}
|
||||
|
|
|
@ -16,5 +16,5 @@ enum SharingAction: Stateable {
|
|||
case galleryItemsUpdated(items: [SharingGalleryItem])
|
||||
|
||||
case cameraCaptured(media: Data, type: SharingCameraMediaType)
|
||||
case flushCameraCaptured
|
||||
// case flushCameraCaptured
|
||||
}
|
||||
|
|
|
@ -136,6 +136,26 @@ final class FileProcessing {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This function also creates new id for file from camera capturing
|
||||
func copyCameraCapturedForUploading(media: Data, type: SharingCameraMediaType) -> (String, String)? {
|
||||
let newMessageId = UUID().uuidString
|
||||
let fileId = UUID().uuidString
|
||||
let localName: String
|
||||
switch type {
|
||||
case .photo:
|
||||
localName = "\(newMessageId)_\(fileId).jpg"
|
||||
case .video:
|
||||
localName = "\(newMessageId)_\(fileId).mov"
|
||||
}
|
||||
let localUrl = FileProcessing.fileFolder.appendingPathComponent(localName)
|
||||
do {
|
||||
try media.write(to: localUrl)
|
||||
return (newMessageId, localName)
|
||||
} catch {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private extension FileProcessing {
|
||||
|
|
|
@ -104,7 +104,17 @@ final class FileMiddleware {
|
|||
case .fileAction(.copyGalleryItemsForUploading(let items)):
|
||||
return Future { promise in
|
||||
let ids = FileProcessing.shared.copyGalleryItemsForUploading(items: items)
|
||||
promise(.success(.fileAction(.galleryItemsCopiedForUploading(newMessageIds: ids.map { $0.0 }, localNames: ids.map { $0.1 }))))
|
||||
promise(.success(.fileAction(.itemsCopiedForUploading(newMessageIds: ids.map { $0.0 }, localNames: ids.map { $0.1 }))))
|
||||
}
|
||||
.eraseToAnyPublisher()
|
||||
|
||||
case .fileAction(.copyCameraCapturedForUploading(let media, let type)):
|
||||
return Future { promise in
|
||||
if let (id, localName) = FileProcessing.shared.copyCameraCapturedForUploading(media: media, type: type) {
|
||||
promise(.success(.fileAction(.itemsCopiedForUploading(newMessageIds: [id], localNames: [localName]))))
|
||||
} else {
|
||||
promise(.success(.empty))
|
||||
}
|
||||
}
|
||||
.eraseToAnyPublisher()
|
||||
|
||||
|
|
|
@ -64,11 +64,7 @@ final class SharingMiddleware {
|
|||
}
|
||||
.eraseToAnyPublisher()
|
||||
|
||||
case .sharingAction(.cameraCaptured(let media, let type)):
|
||||
print("Camera captured: \(media.count)")
|
||||
return Empty().eraseToAnyPublisher()
|
||||
|
||||
case .fileAction(.galleryItemsCopiedForUploading(let newMessageIds, let localNames)):
|
||||
case .fileAction(.itemsCopiedForUploading(let newMessageIds, let localNames)):
|
||||
if let chat = state.conversationsState.currentChat {
|
||||
return Just(.conversationAction(.sendMediaMessages(
|
||||
from: chat.account,
|
||||
|
@ -81,6 +77,17 @@ final class SharingMiddleware {
|
|||
return Empty().eraseToAnyPublisher()
|
||||
}
|
||||
|
||||
case .sharingAction(.cameraCaptured(let media, let type)):
|
||||
return Future { promise in
|
||||
if let (id, localName) = FileProcessing.shared.copyCameraCapturedForUploading(media: media, type: type) {
|
||||
promise(.success(.fileAction(.itemsCopiedForUploading(newMessageIds: [id], localNames: [localName])))
|
||||
)
|
||||
} else {
|
||||
promise(.success(.empty))
|
||||
}
|
||||
}
|
||||
.eraseToAnyPublisher()
|
||||
|
||||
case .sharingAction(.shareLocation(let lat, let lon)):
|
||||
if let chat = state.conversationsState.currentChat {
|
||||
let msg = "geo:\(lat),\(lon)"
|
||||
|
|
|
@ -12,13 +12,13 @@ extension SharingState {
|
|||
case .setGalleryAccess(let granted):
|
||||
state.isGalleryAccessGranted = granted
|
||||
|
||||
case .cameraCaptured(let media, let type):
|
||||
state.cameraCapturedMedia = media
|
||||
state.cameraCapturedMediaType = type
|
||||
|
||||
case .flushCameraCaptured:
|
||||
state.cameraCapturedMedia = Data()
|
||||
state.cameraCapturedMediaType = .photo
|
||||
// case .cameraCaptured(let media, let type):
|
||||
// state.cameraCapturedMedia = media
|
||||
// state.cameraCapturedMediaType = type
|
||||
//
|
||||
// case .flushCameraCaptured:
|
||||
// state.cameraCapturedMedia = Data()
|
||||
// state.cameraCapturedMediaType = .photo
|
||||
|
||||
case .galleryItemsUpdated(let items):
|
||||
state.galleryItems = items
|
||||
|
|
|
@ -17,8 +17,8 @@ struct SharingState: Stateable {
|
|||
var isCameraAccessGranted: Bool
|
||||
var isGalleryAccessGranted: Bool
|
||||
|
||||
var cameraCapturedMedia: Data
|
||||
var cameraCapturedMediaType: SharingCameraMediaType
|
||||
// var cameraCapturedMedia: Data
|
||||
// var cameraCapturedMediaType: SharingCameraMediaType
|
||||
|
||||
var galleryItems: [SharingGalleryItem]
|
||||
}
|
||||
|
@ -30,8 +30,8 @@ extension SharingState {
|
|||
isCameraAccessGranted = false
|
||||
isGalleryAccessGranted = false
|
||||
|
||||
cameraCapturedMedia = Data()
|
||||
cameraCapturedMediaType = .photo
|
||||
// cameraCapturedMedia = Data()
|
||||
// cameraCapturedMediaType = .photo
|
||||
|
||||
galleryItems = []
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue