STtools 插件:接入 QQ 邮箱日历演示(实现双向同步)

效果如下,相关交互逻辑和思源事件保持一致,只有在唯一选中 QQ 日历视图的时候,才能创建 QQ 日历事件

由于依托于 QQ 邮箱的 caldav 服务,故需保持网络通畅

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    24569 引用 • 100643 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 太好了,插件的功能越来越完善了!👍

    今天在外面,晚上回家就试。😄

  • 太好了trollface

    若有 BUG 欢迎反馈
    stevehfut
  • veryzhh 6 评论

    不知道为什么,我这里好像不能生成 ics 文件了,在 \SiYuan\data\public\stevetools 下,只有 events.json 文件,没有 ics 文件。

    1 回复
    是不是用了周期事件或者开发者工具里有报错吗
    stevehfut
    @stevehfut 是的,设定了周期事件的,和这个有关吗?
    veryzhh
    @veryzhh 大概率是你的 RRULE 写的有问题 ,或者持续时间没写
    stevehfut 1
    @stevehfut 持续时间确实没写,因为不知道该怎么写,所以空着了。这个指的是什么?
    veryzhh
    @veryzhh 不是有个开始时间吗,结束时间就是开始时间加上持续时间(单位小时)
    stevehfut
    @stevehfut 明白了,我刚刚设置了持续时间后,就能够生成 ics 了,S3 同步也成功了。多谢指点!
    veryzhh
  • 很好的功能,终于找到了,谢谢

  • wenbocn

    非常棒的更新,感谢作者,赞。

    问题 1:当日历内容较多时,新建日程的速度非常非常慢,似乎每次同步都是全量同步?

    问题 2:能正常同步到 QQ 网页邮箱日历中,但不能正常同步到 Foxmail 中。使用其它方式新建的日历同步到 Foxmail 中没有问题。奇怪了

    1 回复
  • stevehfut 1 5 评论

    image.png

    持续时间和重复规则填的有问题(后面我优化一下,填错了给个提示)

    感谢!确实就是持续时间一直未设,全部设上就 OK 了。已经能通过缤纷云 S3-diy,同步到 Outlook 日历,再同步到手机日历了。 这一套流程实在是太棒了!
    veryzhh
    @veryzhh 但是我之前测试 outlook 日历的时候,发现它似乎不会间隔更新订阅日历(虽然微软文档里写了会间隔更新),不过你可以测试一下,万一只是我的 outlook 有问题呢。(在小米日历,thunderbird,苹果日历都能间隔更新订阅))
    stevehfut
    @stevehfut 确实 Outlook 的更新还有点问题,但非纯血鸿蒙现在无法直接接入 ics,其他像 QQ 邮箱日历也不能接入,只能先凑合一下吧。
    veryzhh
    @stevehfut 今天测试了一下,outlook 还是可以更新的,只是间隔时间非常长。按微软客服的说法,Outlook 更新时间,少则 3 小时更新一次,长则 24 小时都有可能。不管怎样,总算能用。
    veryzhh 1
    @veryzhh 感谢测试,我当时隔了好久都没跟新
    stevehfut
  • stevehfut

    1.是的,全量拉取的日历数据,不过我这边 66 个日程加载只要 3 或 4 秒,耗时的地方主要在于网络获取 qq 日历的数据,渲染时间比较短(我这边测试的情况)

    2.可能和我添加的 ics 数据的格式不符合 foxmail 预期的标准吧(手机上还是建议用 QQ 邮箱吧)(其实 qq 邮箱也可以绑定在系统日历里,讲 QQ 邮箱日程同步到手机系统日历里)

    1 回复
  • 你好,感谢创作这么强大的插件。我在试用 qq 日历功能时总报下面的错误,同时会导致“日程数据库选择”栏没有可以选择的库。请问怎么回事?

    plugin:siyuan-steve-tools:664 获取日历事件失败: TypeError: Cannot read properties of undefined (reading 'match') at eval (plugin:siyuan-steve-tools:664:24052) at Array.map (<anonymous>) at Rj.getEvents (plugin:siyuan-steve-tools:664:24029) at async kj.onLayoutReady (plugin:siyuan-steve-tools:678:2282) at async Re.onLayoutReady (plugin:siyuan-steve-tools:748:403)
    启用 QQ 日历前是正常的吗
    stevehfut
    @stevehfut 启用前正常,关闭后也恢复正常。
    lovelife88
    @lovelife88 应该是你的 QQ 邮箱配置有问题,是填授权码,不是 QQ 密码哦,至于无法选择日程数据库的问题下个版本修复,感谢反馈
    stevehfut
    @stevehfut 我填的是授权码,在 Foxmail 上测试也没问题
    lovelife88
    @lovelife88 最新版本你填 QQ 邮箱后有报错提示吗
    stevehfut
  • wenbocn

    请问能否不全量拉取数据?总会有多的时候。如果以前用 QQ 日历的话,数据当前就已经很多了

    1 回复
  • stevehfut via Android

    我开发时也只想单事件拉取数据,但 QQ 邮箱日历的 caldav 没有找到相关文档,api 全是摸索出来的。

    当然全量拉取也可以优化性能(用缓存事件的思路实现)

    但工作量有点大,还没试过效果如何,且对我来说不是必须,所以以后有时间再弄了

  • leobright 12 评论

    楼主,请问添加的 qq 邮箱的事件后边可以做到和之前一样编辑整理和搜索到吗?

    不能,数据全在 qq 的 caldav 服务器里,没保存在思源(为什么这么做?为了能够双向同步事件,且不会产生数据冲突)
    stevehfut
    @stevehfut 有个思路,就是在之前的普通事件加一个同步到 qq 日历的按钮,qq 日历只是起到提醒的作用,而不做双向同步。这样的话,既能编辑,又可以实现多端同步提醒,又不会 qq 日历数据冲突。我觉得如果添加的事件不能进一步反思整理就失去意义了
    leobright
    @stevehfut 体验了一下,qq 日历提醒功能还是很惊艳的。。微信都能收到提醒
    leobright
    @leobright 我也想过,但你不能保证用户不会在 QQ 邮箱里编辑日历,导致数据冲突
    stevehfut
    @leobright 不过,可以这样改进:在创建 QQ 日历事件时,把事件信息存进思源里
    stevehfut
    @stevehfut 就是哈,但是要注意本地修改后能及时同步到 qq 日历中。。我倒是从来不用 qq 日历,但是提醒很棒
    leobright
    @leobright 这个做不到 😭,数据容易冲突,只能单方向在添加 qq 日历事件时,将事件信息复制一份到思源里
    stevehfut
    @stevehfut 也可以,最好是在之前的普通事件加一个同步到 qq 日历的按钮更符合操作或者更简便一些
    leobright
    @leobright 这样不太好,会出现两个重复的事件(当然也可以做判断隐藏,性能开销比较大并且获取思源事件的时间和获取 QQ 邮箱日历事件的时间存在较大的差异),还要舍弃一些属性(思源普通事件有些属性不符合 ics 文件规范的)
    stevehfut
    @stevehfut 确实复杂,要考虑很多
    leobright
    @leobright 要实现思源事件提醒尽量还是用 ics 文件订阅的方式吧
    stevehfut
    @stevehfut ics 对于我来说最大的问题是无法多端提醒。。目前感觉 qq 日历提醒符合我的需求
    leobright
  • wenbocn

    请问大佬能否添加上日历 webdav 同步方式!
    另,期待画板开发!

    🌹🌹🌹

    2 回复
  • wenbocn

    请问能否增加删除日历事件的功能:

    方法 1:将日历事件拖动出日历框后,(例如,上方位置,2025 年 3 月字样所在行的位置),可以删除这条日历?

    方法 2:在日历上方增加一个回收站按钮,拖动日历到回收站时,能够删除这条日历。点击回收站按钮能够看到已经删除的日历。(感觉这个好)

    另,日历开始时间或持续时间,能否自定义默认值?

    谢谢!

    2 回复
  • stevehfut via Android

    webdav 可以通过 alist 挂载 webdav 服务来实现,若你觉得不方便,不想部署 alist,我再弄 webdav 的方式(话说 s3 不是应该更方便吗,难道你思源同步用的 webdav)

    画板开发到能用的状态可能还要很久(预计和实际实现有很大的出入,得重新想实现方案)

    最后,感谢打赏 ❤️(或者我也可以先开始 QQ 邮箱日历的性能优化,毕竟打赏者的需求我会优先考虑)

    2 回复
  • wenbocn 1 评论

    “难道你思源同步用的 webdav”,是的,我思源笔记用的是 webdav 同步,没有发现什么问题,就一直用着。

    如果 QQ 邮箱日历能够不每次都是全量同步的话,QQ 邮箱日历同步是最好的。如果每次都要全量同步,感觉就没有用 ics 文件同步好了

    🌹

    目前只能全量(除非我找到其他方法),但我可以尽量优化体验(用缓存的方式)
    stevehfut
  • stevehfut 1 via Android

    删除日历:目前可以通过双击事件打开块的属性面板,然后删除块的数据库。对于删除操作尽量还是用思源自带的方式删除,因为可以撤回,插件尽量不写删除逻辑,防止后面插件更新产生 bug 时不会误删数据(QQ 邮箱日历事件除外,如果不写就无法在思源里删除)

    回收站的方式可以弄:通过拖动改变事件的一个属性使其不显示在日历中,如果真的要删除这个事件,可以在思源数据库里删了

    开始时间和持续时间默认值自定义,可以弄

  • wenbocn 1 评论
    该回帖仅作者和楼主可见
    当初试过狮子笔记的手写,其实就是我想在思源实现类似它的手写功能,但之前尝试失败了(直接在思源编辑页面上套一层手写体验极差,可能是我实力太菜)。现在我想的是 affine 的方式
    stevehfut
  • wenbocn 14 评论

    如果整个画板视图不好开发,其实将类似 MyScript 等插入到文档中,使其能够合适显示出完整图像,并既能在 PC 上使用手写笔,也能够在 Android 端使用手写笔修改内容就行。

    要插入到文档中,目前思源最好的方式就是通过挂件(静态页面)了(其他方式实现比较困难,目前我看见的就只有叶归的白板插入文档没有使用静态页面),不过感谢你给出相关建议,我再结合你的回复再想想
    stevehfut
    @stevehfut 其实静态也行,只要能正常显示。能在 PC 端和手机端都能够使用手写笔修改编辑就可以(打开文件再编辑也行)。或弄一个可手写的网页插入也行,只要能在 PC 和手机方便修改编辑。
    wenbocn
    @wenbocn 似乎目前已经有这种的插件或挂件了
    stevehfut
    @stevehfut 手机端都不好用,不是专门针对手写笔开发的,至少在华为平板上都不好用,字迹多后卡顿或笔迹优化有问题。
    wenbocn
    @wenbocn 浏览器环境限制比较多,要达到安卓原生的手写体验几乎不可能(也可能我认知有限,没遇到好用的浏览器环境下手写体验好的)
    stevehfut
    @stevehfut 画板还可以参考随手写,saber,butterfly,这些的手写体验都很好。供您参考
    wenbocn
    @wenbocn 它们都是安卓原生开发的吧,这个和纯前端实现完全不一样,技术路线完全不一样,我打算直接用现成的项目了,重零开始一个人写画板,且要体验良好,细节丰富,没有半年不可能搞出来,况且这插件开发还只是我业余学的(我还不是计算机专业的)
    stevehfut
    @stevehfut 那些好像都不好用,Android 上使用时好像还不如用网页做一个最简单的。
    wenbocn
    @stevehfut 一本日记 APP 也有一个很简单但好用的手写画板,不知能否对您有所启发
    wenbocn
    @wenbocn 我刚刚下载使用一下,没看到有画板啊,难道是因为没开会员?
    stevehfut
    @wenbocn 画板最迟可能要九月左右才能搞完,最近在边学相关的库,边写代码(比较费时间),最近学业也开始加重,所以进度很缓慢。日程管理功能当时我也写了快三个月,其中一个月是寒假时间比较充裕,才在三个月内写完基本功能。编程这方面我是菜(毕竟我专业也不是计算机),思源 插件开发是去年暑假现学的。综上:可能要暑假结束才能基本完成,目前在尝试各种相关库
    stevehfut
    @stevehfut 在一本日记中新建一个笔记,点击增加附件照片等用的那个大加号,弹出来的选项中有一个画板功能
    wenbocn
    @stevehfut 赞!有兴趣有想法有行动,肯定会得偿所愿的。
    wenbocn
    @stevehfut 其实还有一个方法,Android 端可以调用平板自带的手写画板功能,就像印象笔记那样,这样就不会出现手写体验不好的情况了
    wenbocn
  • stevehfut

    另,日历开始时间或持续时间,能否自定义默认值?

    开始时间和持续时间,具体是指在什么情况下创建日程的时候

    1 回复
  • stevehfut

    最新版已支持 webdav 同步 ics 文件,

    至于垃圾桶功能,实现为拖拽归档(给事件状态改为归档,可以用视图筛选把归档事件给筛掉),需在设置里打开(个人觉得这个方式不怎么好,增加了性能开销,自己也用不上(不如双击改事件状态),故加了个开关)

    你说的删除事件也可以直接双击,弹出属性面板再删除事件

    1 回复
  • wenbocn 8 评论

    webdav 尝试了多次,都显示 403 错误。请问有可能是我使用的是自定义端口导致的吗?

    image.png

    拖拽归档确实没有想象中的好用,您可以删除这部分内容,抱歉。以前是没有找到好的删除方法。发现启用“事件交互方式”选项后,在属性页面删除事件挺方便的。

    1 回复
    403 说明连上了,但被拒绝了,大概率是权限问题,
    stevehfut
    @stevehfut 请问我能怎样调试一下,找到具体问题吗?思源和 quicker 都是使用的相同配置没有问题
    wenbocn
    @wenbocn 打开开发者工具面板,看下报错(若有隐私记得打码))
    stevehfut
    @stevehfut 运行时,会在自己选中的文件夹后面新建了 public/stevetools 两个文件夹,导致错误。自己在 webdav 端补充上这两个文件夹就好了 。麻烦您修改一下,不要自动创建 public/stevetools 两个文件夹
    wenbocn
    @stevehfut 麻烦大佬有空修复一下,谢谢!
    wenbocn
    @wenbocn ok,(我记得早上看的时候没有最后一句话)建议不要修改链滴的评论,直接新增评论或回复,修改了我收不到通知
    stevehfut
    @stevehfut 是的,我也是意识到了这一点
    wenbocn
    @stevehfut 感觉浅色模式下的农历日期显示可以颜色淡一些或设置一下透明度
    wenbocn
  • wenbocn 1 评论

    新建日程时,默认的开始时间是 8 点,持续 1 个小时。如果工作开始有其他事情要忙,等 9 点以后再去找今天的日程时,这些事件已经变成过期事件了,手机不推送了。因此,个人是想将默认开始时间设置为 9 点;或不改默认开始时间,将持续时间设置为 2 小时。

    在月视图是这样的,在日视图新建你试试,(后面我支持一下月视图的开始时间定义吧))
    stevehfut
  • stevehfut 1 评论

    农历字体颜色我觉得还行,不打算改了,但你可以用代码片段 css 自己改颜色

    .fc-daygrid-day-lunar { color: rgb(246 21 21 / 31%) !important; }
    谢谢!
    wenbocn
  • wenbocn 2 4 评论
    确实可用,不知道华为手机能否使用,感谢分享!(之前我找了好久都没找到这样的工具)
    stevehfut 1
    @stevehfut 我的是华为手机,好用的。但需要在电池管理中设置允许后台运行,以保证能正常后台同步。
    wenbocn 1
    @stevehfut 华为鸿蒙 next 新系统好像自带 ics 同步功能,不需要这个 app
    wenbocn
    太棒了,华为非纯血鸿蒙,可以用 ICSx5 来同步 ICS 日历了,比 Outlook 方便一百倍。感谢!
    veryzhh
请输入回帖内容 ...
stevehfut
望天空云卷云舒,看庭前花开花落 成都

推荐标签 标签

  • Visio
    1 引用 • 2 回帖
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 1 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    409 引用 • 3585 回帖
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 116 关注
  • RemNote
    2 引用 • 16 回帖 • 12 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    116 引用 • 54 回帖 • 1 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 802 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 98 关注
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    128 引用 • 858 回帖 • 1 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 4 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 49 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    27 引用 • 196 回帖 • 26 关注
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 140 回帖
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 76 回帖 • 1 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 46 关注
  • 导航

    各种网址链接、内容导航。

    43 引用 • 177 回帖 • 3 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 546 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    549 引用 • 674 回帖
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 1 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    945 引用 • 1460 回帖 • 1 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 377 关注
  • OpenCV
    15 引用 • 36 回帖