jellyfin的邏輯是根據網絡刮削器自動命名媒體的,但有時候會出錯,需要自己修改文件名配合程序,但我不想用這個東西,又關不掉。只能想辦法自己修正數據了,還好它用的就是普通是sqlite來存媒體庫數據
import sqlite;
import console;
import fsys;
import fsys.config;
import process;
console.open();
//讀取配置文件
var cfgPath = io.fullpath("./configs");
var cfg = fsys.config(cfgPath)
//結束jellyfin進程
process.kill("jellyfin.exe");
//打開數據庫連接
var db = sqlite(cfg.config.dataBaseFilePath);
//查 - 返回數據表
var dataTable = db.getTable("SELECT `guid`,`Path`,`Name` FROM [TypedBaseItems] WHERE `Path` is not null and `type` != 'MediaBrowser.Controller.Entities.CollectionFolder' ")
for(k,v in dataTable){
if(k=="fields") continue;
var fileName = fsys.getFileName(v["Path"]);
if(fileName == v["Name"]) continue;
console.log(k);
db.exec("UPDATE TypedBaseItems SET Name = @name, CleanName=@name WHERE guid = @guid;",{
name = fileName;
guid = v["guid"];
});
}
db.close()
process.execute(cfg.config.jellyfinPath,cfg.config.params);
//execute("pause")
因為sqlite自帶的sql函數處理字符串太弱了,根本沒辦法在sql內部解決問題,所以只能循環處理每一條數據了,效率太低 有點糟心。
代碼是用aardio編譯的,通過配置文件指定數據庫路徑,看不懂的請自行翻譯成python,應該會更好適配各種情況