Skip to content

雲端儲存

雲端主目錄是使用者已擁有儲存空間中的一個位置。每個提供者都透過 coven 中相同的儲存介面驅動;各提供者不同的是登入、設定,以及其他人與裝置如何抵達它。

提供者登入你自己的新裝置你邀請的人
S3-compatibleAccess key + secret還原碼,加上在 QR 碼中隨它一併攜帶的存取金鑰為對方建立的存取金鑰
DropboxOAuth,由 coven 保管還原碼,然後登入你的 Dropbox資料庫的共用資料夾分享給對方的帳號
OneDriveOAuth,由 coven 保管還原碼,然後登入你的 OneDrive資料庫的資料夾分享給對方的帳號
iCloud (CloudKit)Apple Account,無需登入還原碼,也可從 iCloud 鑰匙圈選取資料庫的 CloudKit 區域分享給對方的 Apple Account

S3-compatible 涵蓋 AWS、Backblaze B2、Cloudflare R2、Wasabi,以及任何使用該 API 的服務。設定表單只詢問 bucket、region、endpoint 與存取金鑰;coven 會依 endpoint 的主機辨識已知服務,並補上與它們溝通的方式。進階 中有選用的 key prefix 與服務設定檔選項,預設為自動。對於 coven 不認識的服務,偵測設定 會用該金鑰探測 bucket 並顯示它找到的結果。設定會在儲存任何內容前檢查提供者,讓打字錯誤在設定時失敗,而不是第一次同步時才失敗,bae 也會用淺白的文字說明 coven 給出的原因。Dropbox、OneDrive 與 iCloud 只存在於完整 bae 版本;baeium 建置會把它們編譯出去。

coven 自行完成 Dropbox 與 OneDrive 的登入,因此沒有任何 token 經過 bae。桌面端由瀏覽器開啟提供者頁面,本機監聽器接收那一次 redirect;行動端則由平台的登入畫面處理。coven 把 token 保存在 OS 鑰匙圈中,並在提供者拒絕某個 token 時更新一次;更新失敗會在同步狀態中顯示為 登入 動作,而不是無聲重試迴圈。

登入後,使用者選擇資料庫放在哪裡。在 Dropbox 上是共用資料夾,因為家庭資料庫要分享給其他人的帳號;為此 bae 使用完整 Dropbox 存取權,而不是 App 資料夾。如果還沒有共用資料夾,bae 會提示先在 Dropbox 中分享一個資料夾,再重新尋找。在 OneDrive 上可以是任何資料夾,從最上層開始瀏覽,也能在那裡建立新資料夾。

CloudKit 完全不需要 flow:coven 在 Apple 平台上以已登入的 Apple Account 驅動它。

在主目錄內,每個物件路徑都以資料庫的 store id 開頭:coven 的編號變更序列、它的 snapshot、加入請求與已儲存的檔案。多個資料庫可以共用同一個 Dropbox 或 OneDrive 資料夾,而不會碰到彼此的物件。

每個物件都會加密並以隨機名稱儲存;沒有明文模式。bae 的檔案是 coven 檔案,由四個同步表的列引用:release_files、covers、artist_images,以及每個 people 列上的頭像。檔案路徑在暫存時就已固定,因此重新命名專輯永遠不會移動它。請見加密。

播放讀取會使用範圍請求:播放器抓取它需要的加密區塊,而不是整個檔案,並在依序播放檔案時預先抓取。速率限制與暫時性提供者錯誤會依同一個退避計畫重試,並在提供者給出 retry-after 時遵守。上傳佇列會跨重啟保留:結束 App 中斷的上傳會接續進行,而不是重新開始,已暫停的上傳也會維持暫停。