Update commit message generation

This commit is contained in:
ShukeBta
2026-05-28 14:52:52 +08:00
parent 32ccb33fed
commit f553674b71
4 changed files with 117 additions and 11 deletions
+1 -1
View File
@@ -1 +1 @@
28604
20380
+18 -7
View File
@@ -49,10 +49,11 @@ func NewEmbyService(cfg *config.Config, log *zap.Logger, repo *repository.Contai
func (e *EmbyService) SystemInfo() map[string]any {
return map[string]any{
"Id": embyServerID,
"ServerId": embyServerID,
"ServerName": "MediaStationGo",
"Version": "10.8.13",
"ProductName": "MediaStationGo",
"OperatingSystem": "Linux",
"ProductName": "Jellyfin Server",
"OperatingSystem": "Windows",
"Architecture": "X64",
"LocalAddress": "",
"WanAddress": "",
@@ -61,6 +62,9 @@ func (e *EmbyService) SystemInfo() map[string]any {
"SupportsLibraryMonitor": true,
"SupportsHttps": false,
"SupportsAutoDiscovery": true,
"HttpServerPortNumber": e.cfg.App.Port,
"HttpsPortNumber": 0,
"PublishedServerUrl": "",
"WebSocketPortNumber": e.cfg.App.Port,
"CompletedInstallations": []any{},
"CanSelfRestart": false,
@@ -72,11 +76,18 @@ func (e *EmbyService) SystemInfo() map[string]any {
// SystemInfoPublic 是不需要认证的精简版(Emby Web 客户端登陆前会拉)。
func (e *EmbyService) SystemInfoPublic() map[string]any {
return map[string]any{
"Id": embyServerID,
"ServerName": "MediaStationGo",
"Version": "10.8.13",
"ProductName": "MediaStationGo",
"OperatingSystem": "Linux",
"Id": embyServerID,
"ServerId": embyServerID,
"ServerName": "MediaStationGo",
"Version": "10.8.13",
"ProductName": "Jellyfin Server",
"OperatingSystem": "Windows",
"LocalAddress": "",
"WanAddress": "",
"HttpServerPortNumber": e.cfg.App.Port,
"HttpsPortNumber": 0,
"SupportsHttps": false,
"SupportsAutoDiscovery": true,
"StartupWizardCompleted": true,
}
}
+98
View File
@@ -219,6 +219,60 @@ func TestReadAdultMovieNFOFallbackInSingleMovieFolder(t *testing.T) {
}
}
func TestReadAdultNFOByCodeForStackedFile(t *testing.T) {
root := t.TempDir()
mediaPath := filepath.Join(root, "SSIS-001-C.mp4")
if err := os.WriteFile(mediaPath, []byte("x"), 0o644); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(root, "SSIS-001.nfo"), []byte(`<movie>
<title>按番号命中的本地 NFO</title>
<originaltitle>SSIS-001</originaltitle>
<art><poster>SSIS-001-poster.jpg</poster><fanart>SSIS-001-fanart.jpg</fanart></art>
</movie>`), 0o644); err != nil {
t.Fatal(err)
}
poster := filepath.Join(root, "SSIS-001-poster.jpg")
fanart := filepath.Join(root, "SSIS-001-fanart.jpg")
if err := os.WriteFile(poster, []byte("jpg"), 0o644); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(fanart, []byte("jpg"), 0o644); err != nil {
t.Fatal(err)
}
got, err := ReadLocalMetadata(mediaPath, root, false)
if err != nil {
t.Fatal(err)
}
if got == nil || got.Title != "按番号命中的本地 NFO" || got.AdultCode != "SSIS-001" || !got.HasNFO {
t.Fatalf("unexpected metadata: %+v", got)
}
if got.PosterURL != poster || got.BackdropURL != fanart {
t.Fatalf("artwork poster=%q fanart=%q", got.PosterURL, got.BackdropURL)
}
}
func TestReadAdultArtworkByCodeWithoutNFO(t *testing.T) {
root := t.TempDir()
mediaPath := filepath.Join(root, "SSIS-001-CD1.mp4")
if err := os.WriteFile(mediaPath, []byte("x"), 0o644); err != nil {
t.Fatal(err)
}
poster := filepath.Join(root, "SSIS-001-poster.jpg")
if err := os.WriteFile(poster, []byte("jpg"), 0o644); err != nil {
t.Fatal(err)
}
got, err := ReadLocalMetadata(mediaPath, root, false)
if err != nil {
t.Fatal(err)
}
if got == nil || got.PosterURL != poster || !got.HasArtwork || got.HasNFO {
t.Fatalf("unexpected artwork metadata: %+v", got)
}
}
func TestScanLibraryUsesLocalMetadata(t *testing.T) {
root := t.TempDir()
seasonDir := filepath.Join(root, "Show", "Season 02")
@@ -277,6 +331,50 @@ func TestScanLibraryUsesLocalMetadata(t *testing.T) {
}
}
func TestScanLibraryDoesNotMarkArtworkOnlyAsMatched(t *testing.T) {
root := t.TempDir()
mediaPath := filepath.Join(root, "SSIS-001-CD1.mp4")
if err := os.WriteFile(mediaPath, []byte("x"), 0o644); err != nil {
t.Fatal(err)
}
poster := filepath.Join(root, "SSIS-001-poster.jpg")
if err := os.WriteFile(poster, []byte("jpg"), 0o644); err != nil {
t.Fatal(err)
}
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
if err != nil {
t.Fatal(err)
}
if err := db.AutoMigrate(&model.Library{}, &model.Media{}, &model.Setting{}); err != nil {
t.Fatal(err)
}
repos := repository.New(db)
lib := model.Library{Name: "Adult", Path: root, Type: "movie", Enabled: true}
if err := repos.Library.Create(t.Context(), &lib); err != nil {
t.Fatal(err)
}
scanner := NewScannerService(&config.Config{}, zap.NewNop(), repos, NewHub(zap.NewNop()), nil, nil)
res, err := scanner.ScanLibrary(t.Context(), lib.ID)
if err != nil {
t.Fatal(err)
}
if res.LocalMetadata != 1 {
t.Fatalf("LocalMetadata = %d, want 1", res.LocalMetadata)
}
var media model.Media
if err := db.First(&media, "path = ?", mediaPath).Error; err != nil {
t.Fatal(err)
}
if media.PosterURL != poster {
t.Fatalf("poster_url = %q, want %q", media.PosterURL, poster)
}
if media.ScrapeStatus == "matched" {
t.Fatalf("artwork-only media should remain enrichable, got status %q", media.ScrapeStatus)
}
}
func TestScanLibraryParsesEpisodesForMovieTypedLibrary(t *testing.T) {
root := t.TempDir()
seasonDir := filepath.Join(root, "哈哈哈哈哈 (2020)", "Season 06")
-3
View File
@@ -261,9 +261,6 @@ func mergeLocalMetadataIntoMatch(match *Match, local *LocalMetadata) {
if local.TMDbID > 0 {
match.TMDbID = local.TMDbID
}
if local.BangumiID > 0 {
match.BangumiID = local.BangumiID
}
if local.Genres != "" {
match.Genres = splitNFOList(local.Genres)
}