jellyfin的逻辑是根据网络刮削器自动命名媒体的,但有时候会出错,需要自己修改文件名配合程序。\n 我不想用刮削器这个东西,但又关不掉。只能想办法自己修正数据了,还好它用的就是普通是 sqlite 来存媒体库数据

以下是 aardio 代码 适用于windows环境

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 版本

import os  
import platform  
import subprocess  
import sqlite3  
  
dataFile = 'D:\library.db'  
  
# 首先要结束 jellyfin 的进程  
os_type = platform.system()  
  
# 判断操作系统类型并执行相应操作  
if os_type == 'Windows':  
    # 执行Windows命令  
    subprocess.call('taskkill /IM jellyfin.exe /F', shell=True)  
elif os_type == 'Linux':  
    # 执行Linux命令 根据具体情况调整 这里只是一个示例 并不能直接使用  
    subprocess.call('killall jellyfin', shell=True)  
else:  
    print("不支持的操作系统类型")  
  
# 建立连接 选择jellyfin的数据库文件  
db = sqlite3.connect(dataFile)  
cursor = db.cursor()  
cursor.execute("SELECT `guid`,`Path`,`Name` FROM [TypedBaseItems] WHERE `Path` is not null and `type` != 'MediaBrowser.Controller.Entities.CollectionFolder'")  
results = cursor.fetchall()  
for row in results:  
    fileName = os.path.basename(row[1])  
    if row[2] in ['Media Folders','电视直播','Playlists']:  
        continue  
    if fileName == row[2]:  
        continue  
    else:  
        # 在这里做更新操作  
        cursor.execute('UPDATE TypedBaseItems SET Name = ?, CleanName = ? WHERE guid = ?',(fileName, fileName, row[0]))  
  
db.commit()    
cursor.close()    
db.close()

这个版本我把数据库路径写死了,还有linux 根据情况不同需要单独做适配,只是暂时留个记录,有需要的还需要自己进一步修改代码。