Target Redump DATs/catalog instead of No-Intro
This commit is contained in:
@@ -3,8 +3,8 @@
|
|||||||

|

|
||||||
|
|
||||||
Native Linux GUI (PySide6) for preserving PSP UMD **games** and **videos** as
|
Native Linux GUI (PySide6) for preserving PSP UMD **games** and **videos** as
|
||||||
`.iso` files. It scans your discs, verifies them against a full catalog
|
`.iso` files. It scans your discs, verifies them against the full Redump catalog
|
||||||
(No-Intro DATs), reports what's missing, and retags/renames discs to a canonical
|
(Redump DATs), reports what's missing, and retags/renames discs to a canonical
|
||||||
scheme. It also fetches cover art and metadata, syncs discs and save-data with a
|
scheme. It also fetches cover art and metadata, syncs discs and save-data with a
|
||||||
real PSP, and can pull missing discs from your own Redump 7z archive collection.
|
real PSP, and can pull missing discs from your own Redump 7z archive collection.
|
||||||
|
|
||||||
@@ -52,8 +52,8 @@ python3 -m app.main
|
|||||||
## First-time setup
|
## First-time setup
|
||||||
|
|
||||||
1. Put your DAT files in `data/dats/`:
|
1. Put your DAT files in `data/dats/`:
|
||||||
- games: No-Intro `Sony - PlayStation Portable`
|
- games: Redump `Sony - PlayStation Portable`
|
||||||
- videos: No-Intro `Sony - PlayStation Portable (UMD Video)`
|
- videos: Redump `Sony - PlayStation Portable (UMD Video)`
|
||||||
2. Ingest them into the local SQLite library:
|
2. Ingest them into the local SQLite library:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -63,7 +63,7 @@ python3 -m app.main
|
|||||||
3. Open the GUI and point **Settings → General → Games/Videos directory** at
|
3. Open the GUI and point **Settings → General → Games/Videos directory** at
|
||||||
your disc folders (or set `PSP_GAMES_ROOTS` / `PSP_VIDEO_ROOTS`).
|
your disc folders (or set `PSP_GAMES_ROOTS` / `PSP_VIDEO_ROOTS`).
|
||||||
|
|
||||||
Discs that aren't in the No-Intro DATs can be added to `data/supplement.json`
|
Discs that aren't in the Redump DATs can be added to `data/supplement.json`
|
||||||
(`name`, `region`, `crc32`, `sha1`, `md5`) so the tool still recognizes them.
|
(`name`, `region`, `crc32`, `sha1`, `md5`) so the tool still recognizes them.
|
||||||
|
|
||||||
## Nomenclature
|
## Nomenclature
|
||||||
@@ -75,7 +75,7 @@ Discs are matched by hash first (most precise), then serial, then filename.
|
|||||||
## Directory layout
|
## Directory layout
|
||||||
|
|
||||||
- `data/dats/` — clrmamepro DAT files (games + videos).
|
- `data/dats/` — clrmamepro DAT files (games + videos).
|
||||||
- `data/supplement.json` — extra discs not in No-Intro.
|
- `data/supplement.json` — extra discs not in Redump.
|
||||||
- `data/credentials.json` — cover/metadata API keys (IGDB, TheMovieDB,
|
- `data/credentials.json` — cover/metadata API keys (IGDB, TheMovieDB,
|
||||||
ScreenScraper). Environment variables take precedence.
|
ScreenScraper). Environment variables take precedence.
|
||||||
- `data/manual_covers/games|videos/` — your own cover images.
|
- `data/manual_covers/games|videos/` — your own cover images.
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
"""Parser for clrmamepro (.dat) files.
|
"""Parser for clrmamepro (.dat) files.
|
||||||
|
|
||||||
Handles the No-Intro / Redump text DAT format::
|
Handles the clrmamepro text DAT format used by Redump and No-Intro::
|
||||||
|
|
||||||
clrmamepro (
|
clrmamepro (
|
||||||
name "Sony - PlayStation Portable"
|
name "Sony - PlayStation Portable"
|
||||||
|
|||||||
+2
-2
@@ -16,7 +16,7 @@ _ARTICLE_RE = re.compile(r"^(.+),\s*(the|a|an)(?:\s+-\s+(.+))?$")
|
|||||||
def _normalize(name):
|
def _normalize(name):
|
||||||
name = name.lower()
|
name = name.lower()
|
||||||
name = re.sub(r"\.(iso|cso|pbp|img|bin)$", "", name) # strip disc extension
|
name = re.sub(r"\.(iso|cso|pbp|img|bin)$", "", name) # strip disc extension
|
||||||
name = re.sub(r"^\s*\d+\s*-\s*", "", name) # leading No-Intro catalog number
|
name = re.sub(r"^\s*\d+\s*-\s*", "", name) # legacy No-Intro "#### - Name" catalog number
|
||||||
name = re.sub(r"\([^)]*\)", " ", name) # parenthetical tags
|
name = re.sub(r"\([^)]*\)", " ", name) # parenthetical tags
|
||||||
name = " ".join(name.split())
|
name = " ".join(name.split())
|
||||||
m = _ARTICLE_RE.match(name)
|
m = _ARTICLE_RE.match(name)
|
||||||
@@ -141,7 +141,7 @@ def match(conn, record):
|
|||||||
if row is not None:
|
if row is not None:
|
||||||
return f"hash:{field}", dict(row)
|
return f"hash:{field}", dict(row)
|
||||||
|
|
||||||
# 2. Local supplement catalog (dumps not present in No-Intro).
|
# 2. Local supplement catalog (dumps not present in the DATs).
|
||||||
for entry in _load_supplement():
|
for entry in _load_supplement():
|
||||||
for field in ("crc32", "sha1", "md5"):
|
for field in ("crc32", "sha1", "md5"):
|
||||||
value = entry.get(field)
|
value = entry.get(field)
|
||||||
|
|||||||
Reference in New Issue
Block a user