FlandreDaisuki/dmhy-subscribe

一些建議

Closed this issue · 19 comments

RT

  1. dmhy config 的功能可以調整一些預設設定,像是 dmhy download XXX --client 的預設值。(已新增)
    我建議是可以用 dmhy config [key] [value](setter) 和 dmhy config [key](getter) 的格式
  2. 不一定只能用 dmhy 來刷新列表,或是 dmhy 指令可以只刷新不下載 (使用dmhy update)
  3. dmhy search 搖曳露營 這樣的指令能用,可以檢查這個 keyword 適不適合 (已新增)
  4. fakedb.json 移到其他位置去,不然每次更新資料都會消失(已新增)
  1. dmhy config 的功能可以調整一些預設設定,像是 dmhy download XXX --client 的預設值。我建議是可以用 dmhy config [key] [value](setter)dmhy config [key](getter) 的格式

這感覺不錯,就放到 Database.prototype.config 裡面好了,也讓 Database.prototype.save() 存起來

  1. 不一定只能用 dmhy 來刷新列表,或是 dmhy 指令可以只刷新不下載

多一個 dmhy updatedmhy refresh 感覺可以,原本的留著應該還好

  1. dmhy search 搖曳露營 這樣的指令能用,可以檢查這個 keyword 適不適合

不太清楚這個是什麼意思,是指爬完比較字串相似度?

不太清楚這個是什麼意思,是指爬完比較字串相似度?

不是,就是直接把在動漫花園網站上的搜尋結果的 title 直接在 console 輸出出來

像是我想訂閱搖曳露營就先用搜尋搖曳露營
看了一下搜尋結果發現很雜,然後再搜尋搖曳露營,DHR
就像這樣多做幾次就能找出適合的關鍵字來add

像是我想訂閱搖曳露營就先用搜尋搖曳露營
看了一下搜尋結果發現很雜,然後再搜尋搖曳露營,DHR
就像這樣多做幾次就能找出適合的關鍵字來add

也就是原本在網頁做的事情拿來 cli 做的意思,好像可以

剛看了一下 code ,感覺稍微把 crawler.js 裡的 parseThreads 拆分開來就差不多了
如果需要的話我明天應該能發一個關於這個的 PR

好阿,感謝 😀

  1. fakedb.json 移到其他位置去,不然每次更新資料都會消失

位置就放到 ~/.dmhy-subscribe/fakedb.json 應該就可以了

腳本部份你有想法嘛
我想到的問題是第一次安裝跟升級(有沒有dmhy ls -s可以用的差別),根據 npm-scripts,好像都是用 (pre|post)install 來做,腳本放在 scripts/*.js

$ ls ~/.dmhy-subscribe
fakedb.json
config.json #給dmhy config用(有的話)
old_package.json #第一次先檢查有沒有,沒有就把檔案複製到這邊

然後在postinstall執行一個 script,像是檢查之前的版本之類的

postinstall.js
const os = require('os')
const fs = require('fs')
const semver = require('semver')
const { version } = require('../package.json')
const { Database } = require('../fakedb')

const projectDataDir = `${os.homedir()}/.dmhy-subscribe`
const fakedbFile = `${projectDataDir}/fakedb.json`
const versionFile = `${projectDataDir}/.version`

if (!fs.existsSync(projectDataDir)) {
  fs.mkdirSync(projectDataDir)
}

if (!fs.existsSync(versionFile)) {
  fs.writeFileSync(versionFile, version)
}

const upgradeDatabaseFunctions = []

const oldVersion = fs.readFileSync(versionFile, { encoding: 'utf-8' })

if (semver.lt(oldVersion, version)) {
  if (fs.existsSync(fakedbFile)) {
    const dbObject = JSON.parse(fs.readFileSync(fakedbFile, { encoding: 'utf-8' }))
    const upgraded = upgradeDatabaseFunctions.reduce((prev, cur) => {
      return cur(prev)
    }, dbObject)
    fs.writeFileSync(fakedbFile, upgraded)
  } else {
    (new Database({ dbfile: fakedbFile })).save()
  }
}

大概長這樣
之後要增加就往 upgradeDatabaseFunctions 塞就好了
config 等寫好再一起 commit

upgradeDatabaseFunctions 感覺不太好,像是 0.1->1.0 0.7.3->2.5.1,不童的版本要更改的地方都不一樣
而且更新不一定代表 db 格式有改變,可能還要有個 db schema validator,來檢查目前的 db 檔案是否 ok

所以我才用 reduce 來滾動更新
如果有兩個 function 在裡面
那麼一定是第一個 function 先執行並回傳第二個 function 可以理解的格式再處理
這樣可以保證不管任何一個版本都可以更新到最新 (當然 install 速度會被檢查拉下來)
而且 function 內一樣用 semver 來檢查,就可以知道該 function 主要更新的對象是第幾版到第幾版

v0.4.7 Fix 第4點

不過不是每個版本都能轉換吧,像是目前的 episode 是數字,未來可能是一個 class,這種無法轉換吧

目前的 episode 是數字,未來可能是一個 class

因為這個最後還是要 JSON.stringifyfakedb.json 去,
那麼就是單純轉換 object 的事

也就是說即使一個版本之內從數字轉換到有 20 個 attribute 的 class
寫到 fakedb.json 去在讀回來轉換也就只是去改 class Episodeconstructor 而已

這還真的是我搞錯,我忘記 thread.title 有存下來,到時候如果 parser 更新之後就再重新 parse 就好...

然後有辦法能排除特定關鍵字嗎?看起來這沒辦法在搜尋的時候做,但是可以在 client 端弄
範例,像是看看能不能把 合集版本 給去掉:

dmhy search "蒼之彼方,繁體,DHR"
【DHR動研字幕組&茉語星夢】[蒼之彼方的四重奏_Ao no Kanata no Four Rhythm][01-12全][繁體][720P][MP4](合集版本)
【DHR動研字幕組&茉語星夢】[蒼之彼方的四重奏_Ao no Kanata no Four Rhythm][12完][繁體][720P][MP4]
【DHR動研字幕組&茉語星夢】[蒼之彼方的四重奏_Ao no Kanata no Four Rhythm][11][繁體][720P][MP4]
【DHR動研字幕組&茉語星夢】[蒼之彼方的四重奏_Ao no Kanata no Four Rhythm][10][繁體][720P][MP4]
【DHR動研字幕組&茉語星夢】[蒼之彼方的四重奏_Ao no Kanata no Four Rhythm][09][繁體][720P][MP4]
【DHR動研字幕組&茉語星夢】[蒼之彼方的四重奏_Ao no Kanata no Four Rhythm][08][繁體][720P][MP4]
【DHR動研字幕組&茉語星夢】[蒼之彼方的四重奏_Ao no Kanata no Four Rhythm][07][繁體][720P][MP4]
【DHR動研字幕組&茉語星夢】[蒼之彼方的四重奏_Ao no Kanata no Four Rhythm][06][繁體][720P][MP4]
【DHR動研字幕組&茉語星夢】[蒼之彼方的四重奏_Ao no Kanata no Four Rhythm][04-05][繁體][720P][MP4]
【DHR動研字幕組&茉語星夢】[蒼之彼方的四重奏_Ao no Kanata no Four Rhythm][03][繁體][720P][MP4]
【DHR動研字幕組&茉語星夢】[蒼之彼方的四重奏_Ao no Kanata no Four Rhythm][02][繁體][720P][MP4]
【DHR動研字幕組&茉語星夢】[蒼之彼方的四重奏_Ao no Kanata no Four Rhythm][01][繁體][720P][MP4]
找到 12 個結果

去關鍵字是有想過,但還不急著實作

你上面那個情況基本上不太會發生
因為我預設就是拿來 "追番" 用的,很少情況會追完了還留在清單裡 (我能想到的情況是 12完 等 SP12)

小bug,執行dmhy rm --all時會有 error

sids = [...db].map(s => s.sid)

這行應該是sids = [...db.subscriptions].map(s => s.sid)才對

馬上來改

@maple3142 看到一個很棒的東西來做 config/init
https://github.com/terkelg/prompts
不過我沒用過不知道會不會踩到什麼雷

我是比較傾向 config 有個預設值,然後要改自己改

不然就是在第一次執行指令時發現沒有 config 時再 init