@@ -10,7 +10,7 @@ import Social
10
10
import SwiftData
11
11
import CoreHaptics
12
12
13
- class ShareViewController : UIViewController , UITextFieldDelegate , URLSessionTaskDelegate {
13
+ class ShareViewController : UIViewController , UITextFieldDelegate , URLSessionTaskDelegate , UITextViewDelegate {
14
14
var sharedModelContainer : ModelContainer = {
15
15
let schema = Schema ( [
16
16
DjangoFilesSession . self,
@@ -31,6 +31,7 @@ class ShareViewController: UIViewController, UITextFieldDelegate, URLSessionTask
31
31
@IBOutlet weak var availableServers : UIButton !
32
32
@IBOutlet weak var activityIndicator : UIActivityIndicatorView !
33
33
@IBOutlet weak var shortTextLabel : UILabel !
34
+ @IBOutlet weak var textView : UITextView !
34
35
@IBOutlet weak var shortText : UITextField !
35
36
@IBOutlet weak var shareLabel : UILabel !
36
37
@@ -45,6 +46,7 @@ class ShareViewController: UIViewController, UITextFieldDelegate, URLSessionTask
45
46
self . activityIndicator. hidesWhenStopped = true
46
47
47
48
shortText. delegate = self
49
+ textView. delegate = self
48
50
49
51
NotificationCenter . default. addObserver ( self , selector: #selector( keyboardWillShow) , name: UIResponder . keyboardWillShowNotification, object: nil )
50
52
NotificationCenter . default. addObserver ( self , selector: #selector( keyboardWillHide) , name: UIResponder . keyboardWillHideNotification, object: nil )
@@ -126,6 +128,36 @@ class ShareViewController: UIViewController, UITextFieldDelegate, URLSessionTask
126
128
loaded = true
127
129
break
128
130
}
131
+ else if itemProvider. hasItemConformingToTypeIdentifier ( " public.text " ) || itemProvider. hasItemConformingToTypeIdentifier ( " public.plain-text " ) {
132
+ itemProvider. loadItem ( forTypeIdentifier: itemProvider. registeredTypeIdentifiers [ 0 ] , options: nil , completionHandler: { ( item, error) in
133
+ DispatchQueue . main. async {
134
+ self . shortText. isHidden = true
135
+ self . shortTextLabel. isHidden = true
136
+ self . textView. isHidden = false
137
+
138
+ if let text = item as? String {
139
+ // Show the text preview
140
+ self . textView. text = text
141
+
142
+ // Create a temporary file to store the text
143
+ let tempDirectoryURL = NSURL . fileURL ( withPath: NSTemporaryDirectory ( ) , isDirectory: true )
144
+ let targetURL = tempDirectoryURL. appendingPathComponent ( " \( UUID . init ( ) . uuidString) .txt " )
145
+ do {
146
+ try text. write ( to: targetURL, atomically: true , encoding: . utf8)
147
+ self . isTempFile = true
148
+ self . shareURL = targetURL
149
+ self . shareLabel. text = " Upload Text "
150
+ } catch {
151
+ self . showMessageAndDismiss ( message: " Could not share text. " )
152
+ }
153
+ }
154
+ self . activityIndicator. stopAnimating ( )
155
+ self . shareButton. isEnabled = true
156
+ }
157
+ } )
158
+ loaded = true
159
+ break
160
+ }
129
161
else {
130
162
itemProvider. loadItem ( forTypeIdentifier: " public.data " , options: nil , completionHandler: { ( item, error) in
131
163
DispatchQueue . main. async {
@@ -219,6 +251,16 @@ class ShareViewController: UIViewController, UITextFieldDelegate, URLSessionTask
219
251
self . progressBar. isHidden = false
220
252
self . progressBar. progress = 0
221
253
254
+ // If we're sharing text and it's been edited, update the file content
255
+ if let text = textView. text, !textView. isHidden {
256
+ do {
257
+ try text. write ( to: shareURL!, atomically: true , encoding: . utf8)
258
+ } catch {
259
+ self . showMessageAndDismiss ( message: " Could not update text content. " )
260
+ return
261
+ }
262
+ }
263
+
222
264
let api = DFAPI ( url: URL ( string: session. url) !, token: session. token)
223
265
Task {
224
266
let task = await api. uploadFileStreamed ( url: shareURL!, taskDelegate: self )
0 commit comments