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

本贴最后更新于 295 天前,其中的信息可能已经事过景迁

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

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

  • 思源笔记

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

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

    28444 引用 • 119764 回帖

相关帖子

欢迎来到这里!

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

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

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

  • 太好了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 回复
  • lovelife88 5 评论

    你好,感谢创作这么强大的插件。我在试用 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

    我开发时也只想单事件拉取数据,但 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

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

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

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

    2 回复
  • wenbocn 1 评论

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

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

    🌹

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

    删除日历:目前可以通过双击事件打开块的属性面板,然后删除块的数据库。对于删除操作尽量还是用思源自带的方式删除,因为可以撤回,插件尽量不写删除逻辑,防止后面插件更新产生 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 5 评论

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

    在月视图是这样的,在日视图新建你试试,(后面我支持一下月视图的开始时间定义吧))
    stevehfut
    @stevehfut 请问能否增加持续时间的自定义设置,谢谢!
    wenbocn
    @wenbocn 额,我之前就加了呀,你打开设置看看
    stevehfut 1
    @wenbocn 为什么都不看更新日志啊 😭(可能因为打不开)
    stevehfut
    @stevehfut 看到了 😂 谢谢!
    wenbocn
  • 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
  • theozjj 1 评论

    请问有没有可能实现在日程里添加项目以后,QQ 邮箱日历也被同步到一份日程,就是说日程和 QQ 邮箱日历联动起来

    麻烦看下此贴的评论区,谢谢
    stevehfut
  • wenbocn 3 评论

    思源 3.1.25 版本的日历同步功能好像有问题。PC 端没测试,Android 平板端是不能同步日历的

    什么和什么同步
    stevehfut
    @stevehfut webdav 同步
    wenbocn
    @wenbocn 插件的 webdav 同步 ics 吗
    stevehfut
  • FlyingY 2 评论

    QQ 邮箱同步是不是出问题了?怎么配置都提示:QQ 日历登录失败,请检查网络,QQ 邮箱配置 v3.1.32

    我今晚排查一下
    stevehfut 1 1 赞同
    @stevehfut 感谢
    FlyingY
请输入回帖内容 ...
stevehfut
望天空云卷云舒,看庭前花开花落 成都

推荐标签 标签

  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 444 关注
  • gRpc
    11 引用 • 9 回帖 • 116 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 770 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 633 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 517 关注
  • OpenCV
    15 引用 • 36 回帖 • 1 关注
  • Kubernetes

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

    119 引用 • 54 回帖
  • OpenResty

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

    17 引用 • 51 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    105 引用 • 908 回帖 • 1 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 56 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    51 引用 • 200 回帖 • 2 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    151 引用 • 257 回帖 • 1 关注
  • Openfire

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

    6 引用 • 7 回帖 • 133 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 1 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 299 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 660 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 430 关注
  • WebClipper

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

    3 引用 • 9 回帖 • 3 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    78 引用 • 37 回帖
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 668 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    89 引用 • 1251 回帖 • 376 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    176 引用 • 544 回帖
  • 工具

    子曰:“工欲善其事,必先利其器。”

    308 引用 • 773 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    35 引用 • 468 回帖 • 768 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    386 引用 • 1892 回帖 • 1 关注