Lagrange [work/v1.10]
iOS: Sharing file content and selected text
c5f9a431f3b42c3a34578f5406b5e39a9eec9cd0
[1mdiff --git a/po/en.po b/po/en.po[m
[1mindex 49f78eb8..425243cc 100644[m
[1m--- a/po/en.po[m
[1m+++ b/po/en.po[m
[36m@@ -858,6 +858,9 @@[m [mmsgstr "Download Linked File"[m
msgid "menu.reveal.macos"[m
msgstr "Show in Finder"[m
[m
[32m+[m[32mmsgid "menu.share"[m
[32m+[m[32mmsgstr "Share"[m
[32m+[m
msgid "link.file.delete"[m
msgstr "Delete File"[m
[m
[1mdiff --git a/res/lang/cs.bin b/res/lang/cs.bin[m
[1mindex 1c30a0a9..47a5496f 100644[m
Binary files a/res/lang/cs.bin and b/res/lang/cs.bin differ
[1mdiff --git a/res/lang/de.bin b/res/lang/de.bin[m
[1mindex bf05a72e..b0967918 100644[m
Binary files a/res/lang/de.bin and b/res/lang/de.bin differ
[1mdiff --git a/res/lang/en.bin b/res/lang/en.bin[m
[1mindex bd858ade..a918af83 100644[m
Binary files a/res/lang/en.bin and b/res/lang/en.bin differ
[1mdiff --git a/res/lang/eo.bin b/res/lang/eo.bin[m
[1mindex cc829562..5f5a056a 100644[m
Binary files a/res/lang/eo.bin and b/res/lang/eo.bin differ
[1mdiff --git a/res/lang/es.bin b/res/lang/es.bin[m
[1mindex f62291f1..91c1a9e6 100644[m
Binary files a/res/lang/es.bin and b/res/lang/es.bin differ
[1mdiff --git a/res/lang/es_MX.bin b/res/lang/es_MX.bin[m
[1mindex f6f88d6c..baf7e294 100644[m
Binary files a/res/lang/es_MX.bin and b/res/lang/es_MX.bin differ
[1mdiff --git a/res/lang/fi.bin b/res/lang/fi.bin[m
[1mindex e69245be..67ed5398 100644[m
Binary files a/res/lang/fi.bin and b/res/lang/fi.bin differ
[1mdiff --git a/res/lang/fr.bin b/res/lang/fr.bin[m
[1mindex 7be665e5..b4ecf798 100644[m
Binary files a/res/lang/fr.bin and b/res/lang/fr.bin differ
[1mdiff --git a/res/lang/gl.bin b/res/lang/gl.bin[m
[1mindex 8c1fdf24..005feca3 100644[m
Binary files a/res/lang/gl.bin and b/res/lang/gl.bin differ
[1mdiff --git a/res/lang/hu.bin b/res/lang/hu.bin[m
[1mindex b06c8676..4f9b6d8b 100644[m
Binary files a/res/lang/hu.bin and b/res/lang/hu.bin differ
[1mdiff --git a/res/lang/ia.bin b/res/lang/ia.bin[m
[1mindex 4c3b403d..d29bcee8 100644[m
Binary files a/res/lang/ia.bin and b/res/lang/ia.bin differ
[1mdiff --git a/res/lang/ie.bin b/res/lang/ie.bin[m
[1mindex 5e431c29..b648a56c 100644[m
Binary files a/res/lang/ie.bin and b/res/lang/ie.bin differ
[1mdiff --git a/res/lang/isv.bin b/res/lang/isv.bin[m
[1mindex 54cc6774..32b2cb39 100644[m
Binary files a/res/lang/isv.bin and b/res/lang/isv.bin differ
[1mdiff --git a/res/lang/pl.bin b/res/lang/pl.bin[m
[1mindex cf6a6b23..20fa1621 100644[m
Binary files a/res/lang/pl.bin and b/res/lang/pl.bin differ
[1mdiff --git a/res/lang/ru.bin b/res/lang/ru.bin[m
[1mindex 87c82a7d..6c2be568 100644[m
Binary files a/res/lang/ru.bin and b/res/lang/ru.bin differ
[1mdiff --git a/res/lang/sk.bin b/res/lang/sk.bin[m
[1mindex 3ac6e18c..0604ebab 100644[m
Binary files a/res/lang/sk.bin and b/res/lang/sk.bin differ
[1mdiff --git a/res/lang/sr.bin b/res/lang/sr.bin[m
[1mindex 5c66460d..38b56ffa 100644[m
Binary files a/res/lang/sr.bin and b/res/lang/sr.bin differ
[1mdiff --git a/res/lang/tok.bin b/res/lang/tok.bin[m
[1mindex 19b6d9df..c8097f29 100644[m
Binary files a/res/lang/tok.bin and b/res/lang/tok.bin differ
[1mdiff --git a/res/lang/tr.bin b/res/lang/tr.bin[m
[1mindex 9a8babc9..587774cc 100644[m
Binary files a/res/lang/tr.bin and b/res/lang/tr.bin differ
[1mdiff --git a/res/lang/uk.bin b/res/lang/uk.bin[m
[1mindex ebcb11be..18707608 100644[m
Binary files a/res/lang/uk.bin and b/res/lang/uk.bin differ
[1mdiff --git a/res/lang/zh_Hans.bin b/res/lang/zh_Hans.bin[m
[1mindex ab4b338a..39024cdc 100644[m
Binary files a/res/lang/zh_Hans.bin and b/res/lang/zh_Hans.bin differ
[1mdiff --git a/res/lang/zh_Hant.bin b/res/lang/zh_Hant.bin[m
[1mindex f166156f..59c4dcea 100644[m
Binary files a/res/lang/zh_Hant.bin and b/res/lang/zh_Hant.bin differ
[1mdiff --git a/src/app.c b/src/app.c[m
[1mindex e5f9a41c..bdc3a733 100644[m
[1m--- a/src/app.c[m
[1m+++ b/src/app.c[m
[36m@@ -3364,25 +3364,32 @@[m [mvoid openInDefaultBrowser_App(const iString *url) {[m
return;[m
}[m
#endif[m
[31m-#if !defined (iPlatformAppleMobile)[m
[32m+[m[32m#if defined (iPlatformAppleMobile)[m
[32m+[m[32m if (equalCase_Rangecc(urlScheme_String(url), "file")) {[m
[32m+[m[32m revealPath_App(collect_String(localFilePathFromUrl_String(url)));[m
[32m+[m[32m }[m
[32m+[m[32m return;[m
[32m+[m[32m#endif[m
iProcess *proc = new_Process();[m
[31m- setArguments_Process(proc,[m
[32m+[m[32m setArguments_Process(proc, iClob(newStringsCStr_StringList([m
#if defined (iPlatformAppleDesktop)[m
[31m- iClob(newStringsCStr_StringList("/usr/bin/env", "open", cstr_String(url), NULL))[m
[32m+[m[32m "/usr/bin/env",[m
[32m+[m[32m "open",[m
[32m+[m[32m cstr_String(url),[m
#elif defined (iPlatformLinux) || defined (iPlatformOther) || defined (iPlatformHaiku)[m
[31m- iClob(newStringsCStr_StringList("/usr/bin/env", "xdg-open", cstr_String(url), NULL))[m
[32m+[m[32m "/usr/bin/env",[m
[32m+[m[32m "xdg-open",[m
[32m+[m[32m cstr_String(url),[m
#elif defined (iPlatformMsys)[m
[31m- iClob(newStringsCStr_StringList([m
[31m- concatPath_CStr(cstr_String(execPath_App()), "../urlopen.bat"),[m
[31m- cstr_String(url),[m
[31m- NULL))[m
[32m+[m[32m concatPath_CStr(cstr_String(execPath_App()), "../urlopen.bat"),[m
[32m+[m[32m cstr_String(url),[m
/* TODO: The prompt window is shown momentarily... */[m
#endif[m
[32m+[m[32m NULL))[m
);[m
start_Process(proc);[m
waitForFinished_Process(proc); /* TODO: test on Windows */[m
iRelease(proc);[m
[31m-#endif[m
}[m
[m
void revealPath_App(const iString *path) {[m
[36m@@ -3392,6 +3399,9 @@[m [mvoid revealPath_App(const iString *path) {[m
proc, iClob(newStringsCStr_StringList("/usr/bin/open", "-R", cstr_String(path), NULL)));[m
start_Process(proc);[m
iRelease(proc);[m
[32m+[m[32m#elif defined (iPlatformAppleMobile)[m
[32m+[m[32m /* Use a share sheet. */[m
[32m+[m[32m openFileActivityView_iOS(path);[m
#elif defined (iPlatformLinux) || defined (iPlatformHaiku)[m
iFileInfo *inf = iClob(new_FileInfo(path));[m
iRangecc target;[m
[1mdiff --git a/src/gmrequest.c b/src/gmrequest.c[m
[1mindex c23e8499..3d5a4aef 100644[m
[1m--- a/src/gmrequest.c[m
[1m+++ b/src/gmrequest.c[m
[36m@@ -694,9 +694,11 @@[m [mvoid submit_GmRequest(iGmRequest *d) {[m
setCStr_String(&resp->meta, "text/gemini");[m
iString *page = collectNew_String();[m
iString *parentDir = collectNewRange_String(dirName_Path(path));[m
[32m+[m[32m#if !defined (iPlatformMobile)[m
appendFormat_String(page, "=> %s " upArrow_Icon " %s" iPathSeparator "\n\n",[m
cstrCollect_String(makeFileUrl_String(parentDir)),[m
cstr_String(parentDir));[m
[32m+[m[32m#endif[m
appendFormat_String(page, "# %s\n", cstr_Rangecc(baseName_Path(path)));[m
/* Make a directory index page. */[m
iPtrArray *sortedInfo = collectNew_PtrArray();[m
[1mdiff --git a/src/ios.h b/src/ios.h[m
[1mindex bf742f1f..9860f7a2 100644[m
[1m--- a/src/ios.h[m
[1m+++ b/src/ios.h[m
[36m@@ -39,6 +39,7 @@[m [mvoid exportDownloadedFile_iOS(const iString *path);[m
void pickFileForOpening_iOS (void);[m
void pickFile_iOS (const char *command); /* ` path:%s` will be appended */[m
void openTextActivityView_iOS(const iString *text);[m
[32m+[m[32mvoid openFileActivityView_iOS(const iString *path);[m
[m
iBool isPhone_iOS (void);[m
void safeAreaInsets_iOS (float *left, float *top, float *right, float *bottom);[m
[1mdiff --git a/src/ios.m b/src/ios.m[m
[1mindex c9e843e4..69e09419 100644[m
[1m--- a/src/ios.m[m
[1m+++ b/src/ios.m[m
[36m@@ -536,15 +536,24 @@[m [mvoid pickFile_iOS(const char *command) {[m
[viewController_(get_Window()) presentViewController:picker animated:YES completion:nil];[m
}[m
[m
[31m-void openTextActivityView_iOS(const iString *text) {[m
[32m+[m[32mstatic void openActivityView_(NSArray *activityItems) {[m
UIActivityViewController *actView =[m
[[UIActivityViewController alloc][m
[31m- initWithActivityItems:@[[m
[31m- [NSString stringWithUTF8String:cstr_String(text)]][m
[32m+[m[32m initWithActivityItems:activityItems[m
applicationActivities:nil];[m
[viewController_(get_Window()) presentViewController:actView animated:YES completion:nil];[m
}[m
[m
[32m+[m[32mvoid openTextActivityView_iOS(const iString *text) {[m
[32m+[m[32m openActivityView_(@[[NSString stringWithUTF8String:cstr_String(text)]]);[m
[32m+[m[32m}[m
[32m+[m
[32m+[m[32mvoid openFileActivityView_iOS(const iString *path) {[m
[32m+[m[32m NSURL *url = [NSURL fileURLWithPath:[[NSString alloc] initWithCString:cstr_String(path)[m
[32m+[m[32m encoding:NSUTF8StringEncoding]];[m
[32m+[m[32m openActivityView_(@[url]);[m
[32m+[m[32m}[m
[32m+[m
/*----------------------------------------------------------------------------------------------*/[m
[m
enum iAVFAudioPlayerState {[m
[1mdiff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c[m
[1mindex 9e5e6ea3..65de157b 100644[m
[1m--- a/src/ui/documentwidget.c[m
[1m+++ b/src/ui/documentwidget.c[m
[36m@@ -3945,7 +3945,14 @@[m [mstatic iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd)[m
/* Full document. */[m
copied = copy_String(source_GmDocument(d->view.doc));[m
}[m
[31m- SDL_SetClipboardText(cstr_String(copied));[m
[32m+[m[32m if (argLabel_Command(cmd, "share")) {[m
[32m+[m[32m#if defined (iPlatformAppleMobile)[m
[32m+[m[32m openTextActivityView_iOS(copied);[m
[32m+[m[32m#endif[m
[32m+[m[32m }[m
[32m+[m[32m else {[m
[32m+[m[32m SDL_SetClipboardText(cstr_String(copied));[m
[32m+[m[32m }[m
delete_String(copied);[m
if (flags_Widget(w) & touchDrag_WidgetFlag) {[m
postCommand_Widget(w, "document.select arg:0");[m
[36m@@ -5227,6 +5234,9 @@[m [mstatic iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e[m
}[m
d->copyMenu = makeMenu_Widget(w, (iMenuItem[]){[m
{ clipCopy_Icon " ${menu.copy}", 0, 0, "copy" },[m
[32m+[m[32m#if defined (iPlatformAppleMobile)[m
[32m+[m[32m { export_Icon " ${menu.share}", 0, 0, "copy share:1" },[m
[32m+[m[32m#endif[m
{ "---" },[m
{ close_Icon " ${menu.select.clear}", 0, 0, "document.select arg:0" },[m
}, 3);[m
[1mdiff --git a/src/ui/mediaui.c b/src/ui/mediaui.c[m
[1mindex 2aec568f..ab88c94a 100644[m
[1m--- a/src/ui/mediaui.c[m
[1m+++ b/src/ui/mediaui.c[m
[36m@@ -262,6 +262,12 @@[m [miBool processEvent_DownloadUI(iDownloadUI *d, const SDL_Event *ev) {[m
0,[m
0,[m
format_CStr("!reveal path:%s", cstr_String(path)) },[m
[32m+[m[32m#endif[m
[32m+[m[32m#if defined (iPlatformAppleMobile)[m
[32m+[m[32m { export_Icon " ${menu.share}",[m
[32m+[m[32m 0,[m
[32m+[m[32m 0,[m
[32m+[m[32m format_CStr("!reveal path:%s", cstr_String(path)) },[m
#endif[m
{ "---" },[m
/* Generic items */[m