misskey-dev / misskey

🌎 A completely free and open interplanetary microblogging platform 🚀
https://misskey-hub.net/
GNU Affero General Public License v3.0
10.08k stars 1.38k forks source link

Accept files in PWA Web Share Target #8880

Open tamaina opened 2 years ago

tamaina commented 2 years ago

PWAのshare_targetでファイルを受け付けるようにする

Summary

PWAのshare_targetでファイルを受け付けるようにし、画像などの共有ができるようにしたい。

https://w3c.github.io/web-share-target/level-2/
https://web.dev/web-share-target/#accepting-files

実装イメージ

manifest.json

{
    "share_target": {
        "action": "/sw/share",
        "method": "POST",
        "enctype": "multipart/form-data",
        "params": {
            "title": "title",
            "text": "text",
            "url": "url",
            "files": [
                {
                    "name": "file",
                    "accept": "*/*"
                }
            ]
        }
    }
}

sw.ts

onfetchで/sw/shareをPOSTかつmultipart/form-dataで叩かれた場合は良い感じにクエリ生成やファイルアップロードするなどしてself.clients.openWindow(/share?${ii_kanjino_query})

https://web.dev/web-share-target/#processing-post-shares

tamaina commented 1 year ago

アップロード中は通知でアップロードの状態を表示する必要があるかも

tamaina commented 1 year ago

sw.tsでファイルをアップロードする必要があるんだけど、browser-image-resizerはOffscreenCanvasないと多分無理なので画像圧縮は無理か

rinsuki commented 1 year ago

Web Share Target あるなら OffscreenCanvas もあるのでは、というか一回idbあたりにしまっておけばいいのでは

tamaina commented 1 year ago

たしかに

tamaina commented 1 year ago

iOS 16.4からOffscreenCanvas対応した

syuilo commented 1 year ago

うおおおおおおお

tamaina commented 1 year ago

深夜テンションでbrowser-image-resizerをOffscreenCanvasにした

https://github.com/misskey-dev/browser-image-resizer/releases/tag/v2.2.1-misskey.4