Data Protocol - Graan/open GitHub Wiki

实现原理

原则

  • 尽量使用GitHub原生功能和数据
  • 尽量降低碎片数据的数量

关系映射

  1. Oauth

    具体实现流程如下:

    (1)创建Oauth APP链接点我去创建OAuth app

    (2)引导用户跳转 github 授权登录页面 webView 页面实现 使用api 参考文档api 1. Request a user's GitHub identity 同意授权后,会回执 code 值。

    (3) 根据(1)中获取的client id client secret 和 (2)中获取的code 实现post 请求api实现获取用户token 2. Users are redirected back to your site by GitHub

    (4) 存储token 作为认证 可实现其他用户相关功能 (3中请求成功会回执token eg:

         {
            "access_token" = 2ee1163deb7f5fd74e101e818805cd7296e7dd68;
             scope = "";
             "token_type" = bearer;
         }     
  1. 遍历仓库 code根目录有.graan/config.json

    基本逻辑:(⚠️当前已优先展示缓存的仓库、笔记、日记、书签,隐式拉取最新第一页数据进行刷新处理 提高展示和交互效率)

   if (用户仓库数为0) { //判断目的:避免空仓库数情况 无法正常操作检索目标文件仓库问题
       创建第一个目标仓库
       创建标识仓库文件
       默认创建出第一条日记
   } else {
       if (存在目标文件仓库集) {
          if (没有默认标签) {
              打好默认标签eg 日记,笔记等
          }
          展示出来仓库,列出日记,笔记等
          if (没有日记) { 
             默认创建出第一条日记
          }
       } else {
           创建第一个目标仓库
           创建标识仓库文件
           默认创建出第一条笔记
       }
   }

相关API:

  • 查询存在目标文件仓库集:
//Get
NSString *url = [NSString stringWithFormat:@"/search/code?q=+user:%@+path:.graan+filename:%@",loginName,FIRGraanConfigFileName];
  1. 如果没有
  • 创建
  • 现有的(不推荐)

label

  • _review 总结
  • _note 笔记
  • _bookmark 书签
  • _delete 删除
  • 自己创建的label

笔记

新建一条issue 自动打上_note label,删除笔记时打上_delete label
显示笔记列表时根据_note查询并去除包含_delete的issue

日记

只使用1条issue记录所有日记. 每条评论就是一天日记, 一天可以记多条. 每条都可以使用reaction表情来记录当时的情绪. 每一个修改都有版本历史. 自动打上_reviewlabel

缺点: 时间无法修改

书签

通过软件或小工具, 将链接内容抓取并存为一条issue, 同时打上_bookmark标签. close这条issue就是将这个书签存档, 同时还可以全文被搜索.

默认第一条comment里缓存原文

  • 通过接口直接拿到可读性更好的内容

同步数据(客户端)

客户端中, 缓存数据可以提高访问速度(书签保存的内容可以选择不同步, 只同步链接/文字内容)

离线时, 添加和修改内容是一个很麻烦的问题, 暂时做只读处理, 这可以作为一个收费的理由

附件存储

直接拖拽附件会生成一个匿名可访问的公开链接, 注意保密