riplex 0.9.6__tar.gz → 0.9.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {riplex-0.9.6/src/riplex.egg-info → riplex-0.9.7}/PKG-INFO +1 -1
- {riplex-0.9.6 → riplex-0.9.7/src/riplex.egg-info}/PKG-INFO +1 -1
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex.egg-info/SOURCES.txt +1 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex.egg-info/scm_file_list.json +1 -0
- riplex-0.9.7/src/riplex.egg-info/scm_version.json +8 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/metadata.py +11 -1
- riplex-0.9.7/tests/test_metadata_screen.py +56 -0
- riplex-0.9.6/src/riplex.egg-info/scm_version.json +0 -8
- {riplex-0.9.6 → riplex-0.9.7}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/.github/ISSUE_TEMPLATE/crash_report.yml +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/.github/agents/riplex.agent.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/.github/copilot-instructions.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/.github/workflows/publish.yml +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/.github/workflows/release.yml +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/.gitignore +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/.vscode/settings.json +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/CONTRIBUTORS.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/LICENSE +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/README.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/docs/architecture.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/docs/changelog.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/docs/cli-guide/lookup.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/docs/cli-guide/orchestrate.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/docs/cli-guide/organize.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/docs/cli-guide/workflow.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/docs/getting-started/configuration.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/docs/getting-started/installation.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/docs/gui-guide/gui-walkthrough.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/docs/index.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/docs/naming-rules.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/docs/reference/cli.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/docs/troubleshooting.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/issues/debug-artifacts-consolidation.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/issues/manual-rip-and-organize-escape-hatch.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/issues/orchestrate-dvdcompare-fallback.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/issues/planned-features.md +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/mkdocs.yml +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/pyproject.toml +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/screenshots/0_Rip_Flow_BTTF.gif +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/screenshots/1_Welcome_Screen.png +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/screenshots/2_Disc_Detection_BTTF.png +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/screenshots/3_Metadata_Lookup_BTTF.png +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/screenshots/4_Disc_Release_BTTF.png +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/screenshots/5_Multi_Disc_Overview_BTTF.png +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/screenshots/5_Select_Title_to_RIP_BTTF.png +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/setup.cfg +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/__init__.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/cache.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/config.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/dedup.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/detect.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/disc/__init__.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/disc/analysis.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/disc/makemkv.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/disc/provider.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/formatter.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/lookup.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/manifest.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/matcher.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/metadata/__init__.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/metadata/planner.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/metadata/provider.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/metadata/sources/__init__.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/metadata/sources/tmdb.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/models.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/normalize.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/organizer.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/scanner.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/snapshot.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/splitter.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/tagger.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/title.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/ui.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex/updater.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex.egg-info/dependency_links.txt +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex.egg-info/entry_points.txt +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex.egg-info/requires.txt +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex.egg-info/top_level.txt +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/__init__.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/bug_report.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/crash_dump.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/keep_awake.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/main.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/__init__.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/disc_detection.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/disc_overview.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/disc_swap.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/done.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/folder_picker.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/orchestrate_done.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/organize_done.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/organize_preview.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/progress.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/release.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/selection.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/update.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_app/screens/welcome.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_cli/__init__.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_cli/commands/__init__.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_cli/commands/lookup.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_cli/commands/orchestrate.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_cli/commands/organize.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_cli/commands/rip.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_cli/commands/setup.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_cli/formatting.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/src/riplex_cli/main.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/__init__.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/fixtures/chernobyl_disc1.json +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/fixtures/makemkvcon_frozen_planet_ii_d2.txt +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/fixtures/makemkvcon_list.txt +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/snapshots/Batman Begins.snapshot.json +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/snapshots/Blade Runner (Blu-ray 4k).snapshot.json +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/snapshots/Blade Runner The Final Cut.snapshot.json +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/snapshots/Seven Worlds One Planet.snapshot.json +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/snapshots/The Dark Knight Rises.snapshot.json +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/snapshots/The Dark Knight.snapshot.json +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/snapshots/Waterworld.snapshot.json +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_app_main.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_cache.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_cli_utils.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_config.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_dedup.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_detect.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_disc_analysis.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_disc_detection_screen.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_disc_fixtures.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_disc_provider.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_formatter.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_lookup.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_makemkv.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_matcher.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_normalize.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_organizer.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_planner.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_release_screen.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_rip_guide.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_scanner.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_snapshot.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_splitter.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_tagger.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_tmdb_provider.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_ui.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_updater.py +0 -0
- {riplex-0.9.6 → riplex-0.9.7}/tests/test_welcome_screen.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: riplex
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.7
|
|
4
4
|
Summary: Automates the tedious manual work around MakeMKV: figuring out what to rip, which MKV files are actually what, and organizing everything into Plex-compatible folder structures.
|
|
5
5
|
License: MIT
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: riplex
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.7
|
|
4
4
|
Summary: Automates the tedious manual work around MakeMKV: figuring out what to rip, which MKV files are actually what, and organizing everything into Plex-compatible folder structures.
|
|
5
5
|
License: MIT
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -238,8 +238,18 @@ class MetadataScreen:
|
|
|
238
238
|
idx = int(self.radio_group.value)
|
|
239
239
|
selected = self.tmdb_results[idx]
|
|
240
240
|
self.app.state["tmdb_match"] = selected
|
|
241
|
-
#
|
|
241
|
+
# A new TMDb match invalidates any prior dvdcompare selection. The
|
|
242
|
+
# release screen reuses state["release"]/state["dvdcompare_discs"] when
|
|
243
|
+
# present (to avoid re-querying on back-navigation), so leaving stale
|
|
244
|
+
# values here would make a freshly chosen film silently reuse the
|
|
245
|
+
# previous film's disc structure — e.g. starting "The Patriot" right
|
|
246
|
+
# after ripping "The Last Reef" in the same app session showed the
|
|
247
|
+
# Last Reef discs. Clear them so the lookup re-runs for this film.
|
|
242
248
|
self.app.state.pop("dvdcompare_title_override", None)
|
|
249
|
+
self.app.state["release"] = None
|
|
250
|
+
self.app.state["dvdcompare_discs"] = []
|
|
251
|
+
self.app.state.pop("_dvdcompare_film", None)
|
|
252
|
+
self.app.state.pop("_dvdcompare_error", None)
|
|
243
253
|
|
|
244
254
|
# For movies, fetch full detail to get runtime before proceeding
|
|
245
255
|
if selected.media_type == "movie":
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
from riplex.metadata.provider import MetadataSearchResult
|
|
2
|
+
from riplex_app.screens.metadata import MetadataScreen
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class _App:
|
|
6
|
+
def __init__(self, state):
|
|
7
|
+
self.state = state
|
|
8
|
+
self.navigated_to = None
|
|
9
|
+
|
|
10
|
+
def navigate(self, screen):
|
|
11
|
+
self.navigated_to = screen
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class _RadioGroup:
|
|
15
|
+
def __init__(self, value):
|
|
16
|
+
self.value = value
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _result(title, media_type="tv", year=2000):
|
|
20
|
+
return MetadataSearchResult(
|
|
21
|
+
source_id=f"{media_type}:1",
|
|
22
|
+
title=title,
|
|
23
|
+
year=year,
|
|
24
|
+
media_type=media_type,
|
|
25
|
+
overview="",
|
|
26
|
+
popularity=1.0,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class TestMetadataNextClearsStaleDvdcompare:
|
|
31
|
+
def test_new_match_clears_previous_release_and_discs(self):
|
|
32
|
+
# Simulate stale dvdcompare selection left over from a prior film in
|
|
33
|
+
# the same app session (e.g. just finished "The Last Reef").
|
|
34
|
+
app = _App({
|
|
35
|
+
"title": "The Patriot",
|
|
36
|
+
"release": object(),
|
|
37
|
+
"dvdcompare_discs": [object(), object()],
|
|
38
|
+
"_dvdcompare_film": object(),
|
|
39
|
+
"_dvdcompare_error": "stale error",
|
|
40
|
+
"dvdcompare_title_override": "The Last Reef",
|
|
41
|
+
})
|
|
42
|
+
screen = MetadataScreen(app)
|
|
43
|
+
screen.tmdb_results = [_result("The Patriot")]
|
|
44
|
+
screen.radio_group = _RadioGroup("0")
|
|
45
|
+
|
|
46
|
+
screen._next(None)
|
|
47
|
+
|
|
48
|
+
# The freshly chosen film must not inherit the previous film's discs.
|
|
49
|
+
assert app.state["release"] is None
|
|
50
|
+
assert app.state["dvdcompare_discs"] == []
|
|
51
|
+
assert "_dvdcompare_film" not in app.state
|
|
52
|
+
assert "_dvdcompare_error" not in app.state
|
|
53
|
+
assert "dvdcompare_title_override" not in app.state
|
|
54
|
+
assert app.state["tmdb_match"].title == "The Patriot"
|
|
55
|
+
# A TV match navigates straight to the release lookup.
|
|
56
|
+
assert app.navigated_to == "release"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|