辛宝Otto

辛宝Otto 的玄酒清谈

北漂前端程序员儿 / 探索新事物 / Web Worker 主播之一/内向话痨
xiaoyuzhou
email

從官方 XLOG Obsidian 插件中能學到什麼

image.png

上文提到,最近開發了 sync-to-xlog 這個 obsidian 插件,和官方成員溝通了一波,發現 xlog 官方也在維護一個插件,還在相當原始的 demo 階段,驗證想法中。目標功能更強大完整,厚著臉皮也要到了編輯權限。

那我們就克隆跑一跑。

期待我可以從官方插件裡學到什麼,可以從中看到更多 crossbell/xlog 一些系統設計和用法。

使用介紹#

更友好的登錄鑒權#

設置頁面補充 login 唤起一個登錄頁面,得到相關 token token,體驗那是賊好,不 hack。

發現是個標準的 jwt,也看到了不少優化點。

image.png

上圖一個 SettingsTab

web view 資訊展示#

左側註冊了一個 Robin Icon,點擊之後右側展開一個 web-view,基礎資訊擺一擺。

image.png

看描述想在本地編輯、上傳下載、xlog 網頁打開。

翻源碼#

從入口文件看到

  • AppPlugin 插件核心
  • SampleModal
  • 設置頁面 SettingsTab
  • 註冊右下角的 statusBar
  • 自定義 icon
  • 所有的 web view 是手寫的,那應該就比較累了
  • api 部分維護了 Class Indexer
  • 用戶登錄區分 op 授權和 email 授權
    • newbie 的 token 屬於 email ,原來如此!
    • siwe 的 token 屬於錢包操作,這裡是我的授權方案
    • 對上號了
  • ribbon 圖片是寫死的 svg,也沒黑科技
  • 掛載右側 webview 的時候,用到的是 workspace.revealLeat 看著還是失焦那一套
  • 命令註冊。註冊了一個空 modal
  • 設置頁面註冊 protocolHandler 方便傳遞 token,挺好
  • 維護了 mapping-manager 做本地設置和遠程 post 做關聯,通過簡單的 slug 進行對比
  • 嘗試監聽 metadataCache 的相關事件

這裡 webview 是手搓的,心疼作者一秒,這玩意應該用框架,尤其是想到 list 都是自己手搓 for 循環,就更心疼了... 幸好我已經掌握了。

官方實現資訊的思路#

token#

獲取 token 的部分可以稍後確認,反正都是拿 token,和 swie 的 token 一個效果

獲取 xlog 內容#

這裡走的 crossbell 的 sdk,理論上更舒服更安全。

創建 createIndeer 的啥時候沒有攜帶 token? 那只能獲取公開的只讀的了,那咋操作,存疑。

站點資訊。通過 indexer.character.get(charId) 獲取首頁基本資訊,頭像部分做個回退默認頭像。

獲取所有 Post ,通過 indexer.note.getMany 獲取。

沒了。沒啥黑科技。

展示 ipfs 時候寫死的網站 replace
上傳文件是用的 sdk,應該可以參考借鑒。

有價值的代碼塊#

// 操作 frontmatter
this.plugin.app.fileManager.processFrontMatter

// upload image to ipfs
import { ipfsUploadFile } from 'crossbell/ipfs'

export function uploadFile(file: File | Blob) {
	return ipfsUploadFile(file)
}

// reg protocol
this.plugin.registerObsidianProtocolHandler('xlog-login', async (data) => {}))

// html href 這樣寫
// obsidian://xlog-login?token=xxx&characterId=xx&type=op/

本文通過 sync-to-xlog 插件輕鬆完成同步!

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。