NodeJS support
linonetwo opened this issue · 28 comments
Hi, I'd like to add a process that will start a nodejs wiki (using some nodejs package) that will serve a selected folder in the /media , where would you recommend I modify it?
If you think this is too heavy for Tiddloid, I can make a forked version in the https://github.com/tiddly-gittly instead of PR. I just start learning Java and Android, so I may need some help from you, maybe in the Discord channel?
As you can see from my TidGi app, I'm a nodejs wiki user, so I hope I can use nodejs wiki cross platform, thanks!
It's not necessary to serve node.js inside the Tiddloid. Instead you can install Termux, which can be found on F-Droid, and deploy TiddlyWiki using npm. Then you can access it by http://localhost:<port>/
(you can't use 80 without root) and add it to Tiddloid by sharing the page.
话说你也是国人吧(´▽`ʃƪ)
你准备用Java File 还是 Storage Access Framework?前者兼容性最好但要用户端手动提权,后者。。当初加SAF目录模式时几乎把核心逻辑重写了一遍。。另外最近安卓11出现了写入文件时残留上一版本末尾内容的恶性bug。。不得已搞了WebDAV支持,又双叒叕重写一遍(ಠ .̫.̫ ಠ)
可以去release看看测试版的2.2.0,初步支持WebDAV(゚∀゚)
你好!那可以 QQ 群里聊,你没加 Q 群吗 946052860
我准备用 SAF,然后数据就存 media 文件夹里,应该可以吧,我觉得这个还可以接受?我只简单研究过这个 CleverRaven/Cataclysm-DDA#49310
「手动提权」指的是弹个框允许一下就行?好像 Android11 之后不行了吧,非特定应用,连弹框的机会都没有了。
我想加内置 nodejs 支持是因为希望非技术用户也能一键使用,就像早期我分享的 nodejs 桌面部署文章也被吐槽很复杂,后来我做了太记才有了更多用户。
WebDAV 我应该暂时用不上了,毕竟我都是多文件 nodejs 版的,这个没法适配 webdav 吧?如果可以的话那就好了。
或者通过 webdav 将多文件版同步到本地文件夹后,在这个文件夹上启动 nodejs?
我用 nodejs 版的一大原因是:方便用子wiki来保存隐私信息在本地,然后发布公开信息到博客,模拟 notion 发布博客的用法~
提醒一下,SAF是无法实现File方式的目录结构的。。你要弄的话只能自己实现一个或者魔改现有的nodejs库。。
有一点你说对了,SAF目录模式和WebDAV都是先同步到/data/user/0/top.donmor.tiddloid/cache/<id>
下面再加载的,所以。。话说SAF在安卓11上有bug这个还没解决呢。。
话说太微这个fork从一开始就去掉了单文件支持的吗😂我保存首页结果打不开了
11还是可以申请权限的,API29及以下的应用直接弹窗,升30要改一下代码,申请权限时直接弹出应用设置页面
太微这个fork指啥?我的太记吗?那个用了 lazy image ,好像导致没法直接用按钮保存单文件版,只能用 ghaction 里写的脚本保存 HTML 了
SAF是无法实现File方式的目录结构
这个我晕了,所以没法直接把文件夹用 git 或者 syncthing 之类的完整同步到 /media/xxx 里,然后用 SAF 获取整个文件夹权限,提供给 nodejs 进程读取吗… Android 比桌面端真是麻烦不少呀
先同步到
/data/user
话说不应该是 /media 文件夹吗
看来我要做的:
- 新建wiki时,设置文件夹、端口号等
- 想办法通过 SAF 让一个进程能完整读取这个文件夹
- 创建一个 nodejs 进程,在该文件夹里启动
- 加载端口号对应的 localhost 网页
/media是什么年代的事了。。反正我开始接触安卓开发时,内部存储空间就是/storage/emulated/0/的了。。现在的安卓早就沙箱化了,我们用的内部存储在代码里算外部存储,划出/storage/emulated/0/Android/data/<包名>/给应用,/data/user/0/<包名>这个才是内部存储,这两个不需要申请权限而且可以随着卸载自动删除,其他目录才需要申请权限或者调SAF
一般我缓存文件都搞内部,免得被一些申请了存储的app扫盘。。除了SAF单文件备份和failsafe为了能直接拷出来放在外部存储里
端口号自己取一个就行,除非和别的冲突,可以通过使用配置tiddler指定一个;
node模板的话官方版我只知道可以从npm部署出来 只添加现有目录的话可以不考虑
SAF或者WebDAV需要同步到内部,最好放在内部存储,然后可以直接访问无需申请权限
node部分能不造轮子就不造
http一定要只监听localhost(127.0.0.1)不然同一个wifi甚至ipv6的移动网络都能连上
如果你足够牛叉可以魔改node库的话也许可以砍掉http直接把bytearray拿给WebView渲染,类似nw.js那种
这一波预计工程量很大而且以你为主导(我比较懒,要不是安卓11的bug我都懒得搞WebDAV😂),一旦完成足够把Tiddloid直接推上到3.x版本号了
大致了解了,还有一个同步方案的问题得一起讨论下,我是希望把 tw 搞成跨平台无缝同步的,与 ob 对标(还有我最近也很想能在移动端用我的多文件wik)。
而目前太记是通过 git 同步,以利用 git 的 diff 能力,简化同步算法。我可以给太记加一个 webdav 服务端功能,来让离开公司电脑出门的时候,可以 tiddloid 上点一下从内网拉取最新内容,然后出门用,回家后再WiFi内网同步到家里电脑上的太记webdav上。
感觉这样可能有覆盖掉家里电脑wiki上的内容的风险,例如昨晚家里写了点儿忘同步github,然后公司写了点儿也没同步,这样来自公司的就会覆盖掉家里的内容了……
不过webdav或许可以选择性同步,根据多文件版各文件文件修改日期只同步公司里改过的文件和路上手机上记的内容?不覆盖昨晚写的tid文件?这个你了解吗?
不然的话或许还是支持 git 同步最好,配一下git的https地址,然后电脑端和手机端都往这个github同步。
如果通过webdav或者git和电脑端同步的话,那的确不需要考虑存储权限了。我之前考虑存储权限是因为想要不要用 syncthing 和电脑端同步。
然后 media 那个我是看官方文档看的,可能他们观念比较老吧。
那我先在内部存储搞,用webdav把wiki拉过来。
ok~可能的话尽量无缝集成,以免影响正常功能,毕竟不少人是直接用单文件的
举个栗子,一些基于file://的文件管理器可以分享目录,没试过不知道intent里面是什么数据,如果能提取到路径的话可以用来在legacy模式添加目录;目前的master上的测试版2.2.0的WebDAV选择器支持单文件和目录;2.x支持SAF目录模式。
这些模式里面加入代码判断一下目录结构,如果是node结构就跳转node部分执行,否则尝试按单文件加载,加载失败则报错;属性页里标识出node以及一些信息,然后备份系统我是为单文件设计的,兼容TiddlyDesktop,node的版本控制没接触过,可能完全不一样需要绕过去
老兄,我想了想还是开发一个 p2p 同步插件简单点儿,也更节能,毕竟在手机上跑 nodejs 可能太耗电了,详见 https://talk.tiddlywiki.org/t/what-will-happen-if-you-use-two-sync-method-together/2813
如果不好做,我感觉也有可能让手机端扫桌面码获取桌面 ip,然后把打开的网页保存覆盖一个本地wiki来实现桌面同步给手机。然后或许桌面app可以提供一个自定义的POST接口接受手机端推动的HTML来实现手机同步给桌面…
我最近主要在写所见即所得编辑器,不过我感觉多端同步也很重要,要是能在手机上复习钓鱼插件的复习卡就好了,所以也顺便思考了一下。
嗯扫码的话其实已经可以了的,随便个浏览器扫码打开wiki页面然后点分享把url推给Tiddloid,然后直接保存新文件或者覆盖
不过要是覆盖的话又绕不开安卓11的bug。。😂
要是自己有服务器可以架设node的话可以把node版开起来然后网址推过来打开,然后右上角保存按钮里会多出一个保存为链接的选项,这样就把node站点固定在主页上了,缺点是全程联网而且需要服务器
太记App是会在本地启动一个服务器,我现在手机上临时用就是扫太记上的二维码浏览器打开。这样的确就是走到地铁里就不好使了,而且回家之后家里的 ip 肯定跟公司里的不一样,就没法同步给家里。所以保存为链接应该不适用于这个场景。
所以我才希望能把 url 先覆盖到Tiddloid本地变成HTML版,等到家了再把HTML推给家里的太记App…
我先看看能不能搞出 p2p 同步插件,如果能的话就只需要第一步「直接保存新文件」,之后就能靠p2p在手机电脑之间同步了。
后续从电脑往手机同步,如果不方便覆盖的话,或许 Saver 插件可以把一个 url 里的 wiki 内容直接覆盖到本地 wiki 里?不知道 saver 能不能做到这一点。
只要是用到SAF就完犊子。。除非搞一个legacy的wiki用来同步
准备用插件来和太记同步了,不搞移动端nodejs了,先开发完插件用一段时间看看