riplex 0.2.7__tar.gz → 0.2.9__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.
Files changed (113) hide show
  1. {riplex-0.2.7/src/riplex.egg-info → riplex-0.2.9}/PKG-INFO +1 -1
  2. {riplex-0.2.7 → riplex-0.2.9/src/riplex.egg-info}/PKG-INFO +1 -1
  3. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_app/screens/welcome.py +34 -11
  4. {riplex-0.2.7 → riplex-0.2.9}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  5. {riplex-0.2.7 → riplex-0.2.9}/.github/agents/riplex.agent.md +0 -0
  6. {riplex-0.2.7 → riplex-0.2.9}/.github/copilot-instructions.md +0 -0
  7. {riplex-0.2.7 → riplex-0.2.9}/.github/workflows/publish.yml +0 -0
  8. {riplex-0.2.7 → riplex-0.2.9}/.github/workflows/release.yml +0 -0
  9. {riplex-0.2.7 → riplex-0.2.9}/.gitignore +0 -0
  10. {riplex-0.2.7 → riplex-0.2.9}/MONOREPO_PLAN.md +0 -0
  11. {riplex-0.2.7 → riplex-0.2.9}/PLANNED_FEATURES.md +0 -0
  12. {riplex-0.2.7 → riplex-0.2.9}/README.md +0 -0
  13. {riplex-0.2.7 → riplex-0.2.9}/REFACTOR_PLAN.md +0 -0
  14. {riplex-0.2.7 → riplex-0.2.9}/docs/architecture.md +0 -0
  15. {riplex-0.2.7 → riplex-0.2.9}/docs/changelog.md +0 -0
  16. {riplex-0.2.7 → riplex-0.2.9}/docs/getting-started/configuration.md +0 -0
  17. {riplex-0.2.7 → riplex-0.2.9}/docs/getting-started/installation.md +0 -0
  18. {riplex-0.2.7 → riplex-0.2.9}/docs/guide/lookup.md +0 -0
  19. {riplex-0.2.7 → riplex-0.2.9}/docs/guide/orchestrate.md +0 -0
  20. {riplex-0.2.7 → riplex-0.2.9}/docs/guide/organize.md +0 -0
  21. {riplex-0.2.7 → riplex-0.2.9}/docs/guide/workflow.md +0 -0
  22. {riplex-0.2.7 → riplex-0.2.9}/docs/index.md +0 -0
  23. {riplex-0.2.7 → riplex-0.2.9}/docs/naming-rules.md +0 -0
  24. {riplex-0.2.7 → riplex-0.2.9}/docs/reference/cli.md +0 -0
  25. {riplex-0.2.7 → riplex-0.2.9}/issues/cross-disc-dvdcompare-matching.md +0 -0
  26. {riplex-0.2.7 → riplex-0.2.9}/mkdocs.yml +0 -0
  27. {riplex-0.2.7 → riplex-0.2.9}/plex_naming_rules.md +0 -0
  28. {riplex-0.2.7 → riplex-0.2.9}/pyproject.toml +0 -0
  29. {riplex-0.2.7 → riplex-0.2.9}/setup.cfg +0 -0
  30. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/__init__.py +0 -0
  31. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/cache.py +0 -0
  32. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/config.py +0 -0
  33. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/dedup.py +0 -0
  34. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/detect.py +0 -0
  35. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/disc/__init__.py +0 -0
  36. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/disc/analysis.py +0 -0
  37. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/disc/makemkv.py +0 -0
  38. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/disc/provider.py +0 -0
  39. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/formatter.py +0 -0
  40. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/lookup.py +0 -0
  41. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/manifest.py +0 -0
  42. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/matcher.py +0 -0
  43. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/metadata/__init__.py +0 -0
  44. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/metadata/planner.py +0 -0
  45. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/metadata/provider.py +0 -0
  46. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/metadata/sources/__init__.py +0 -0
  47. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/metadata/sources/tmdb.py +0 -0
  48. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/models.py +0 -0
  49. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/normalize.py +0 -0
  50. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/organizer.py +0 -0
  51. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/scanner.py +0 -0
  52. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/snapshot.py +0 -0
  53. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/splitter.py +0 -0
  54. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/tagger.py +0 -0
  55. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/title.py +0 -0
  56. {riplex-0.2.7 → riplex-0.2.9}/src/riplex/ui.py +0 -0
  57. {riplex-0.2.7 → riplex-0.2.9}/src/riplex.egg-info/SOURCES.txt +0 -0
  58. {riplex-0.2.7 → riplex-0.2.9}/src/riplex.egg-info/dependency_links.txt +0 -0
  59. {riplex-0.2.7 → riplex-0.2.9}/src/riplex.egg-info/entry_points.txt +0 -0
  60. {riplex-0.2.7 → riplex-0.2.9}/src/riplex.egg-info/requires.txt +0 -0
  61. {riplex-0.2.7 → riplex-0.2.9}/src/riplex.egg-info/top_level.txt +0 -0
  62. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_app/__init__.py +0 -0
  63. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_app/main.py +0 -0
  64. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_app/screens/__init__.py +0 -0
  65. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_app/screens/disc_detection.py +0 -0
  66. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_app/screens/done.py +0 -0
  67. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_app/screens/folder_picker.py +0 -0
  68. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_app/screens/metadata.py +0 -0
  69. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_app/screens/organize_done.py +0 -0
  70. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_app/screens/organize_preview.py +0 -0
  71. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_app/screens/progress.py +0 -0
  72. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_app/screens/release.py +0 -0
  73. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_app/screens/selection.py +0 -0
  74. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_app/updater.py +0 -0
  75. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_cli/__init__.py +0 -0
  76. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_cli/commands/__init__.py +0 -0
  77. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_cli/commands/lookup.py +0 -0
  78. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_cli/commands/orchestrate.py +0 -0
  79. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_cli/commands/organize.py +0 -0
  80. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_cli/commands/rip.py +0 -0
  81. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_cli/commands/setup.py +0 -0
  82. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_cli/formatting.py +0 -0
  83. {riplex-0.2.7 → riplex-0.2.9}/src/riplex_cli/main.py +0 -0
  84. {riplex-0.2.7 → riplex-0.2.9}/tests/__init__.py +0 -0
  85. {riplex-0.2.7 → riplex-0.2.9}/tests/fixtures/makemkvcon_frozen_planet_ii_d2.txt +0 -0
  86. {riplex-0.2.7 → riplex-0.2.9}/tests/fixtures/makemkvcon_list.txt +0 -0
  87. {riplex-0.2.7 → riplex-0.2.9}/tests/snapshots/Batman Begins.snapshot.json +0 -0
  88. {riplex-0.2.7 → riplex-0.2.9}/tests/snapshots/Blade Runner (Blu-ray 4k).snapshot.json +0 -0
  89. {riplex-0.2.7 → riplex-0.2.9}/tests/snapshots/Blade Runner The Final Cut.snapshot.json +0 -0
  90. {riplex-0.2.7 → riplex-0.2.9}/tests/snapshots/Seven Worlds One Planet.snapshot.json +0 -0
  91. {riplex-0.2.7 → riplex-0.2.9}/tests/snapshots/The Dark Knight Rises.snapshot.json +0 -0
  92. {riplex-0.2.7 → riplex-0.2.9}/tests/snapshots/The Dark Knight.snapshot.json +0 -0
  93. {riplex-0.2.7 → riplex-0.2.9}/tests/snapshots/Waterworld.snapshot.json +0 -0
  94. {riplex-0.2.7 → riplex-0.2.9}/tests/test_cache.py +0 -0
  95. {riplex-0.2.7 → riplex-0.2.9}/tests/test_cli_utils.py +0 -0
  96. {riplex-0.2.7 → riplex-0.2.9}/tests/test_config.py +0 -0
  97. {riplex-0.2.7 → riplex-0.2.9}/tests/test_dedup.py +0 -0
  98. {riplex-0.2.7 → riplex-0.2.9}/tests/test_detect.py +0 -0
  99. {riplex-0.2.7 → riplex-0.2.9}/tests/test_disc_analysis.py +0 -0
  100. {riplex-0.2.7 → riplex-0.2.9}/tests/test_disc_provider.py +0 -0
  101. {riplex-0.2.7 → riplex-0.2.9}/tests/test_formatter.py +0 -0
  102. {riplex-0.2.7 → riplex-0.2.9}/tests/test_makemkv.py +0 -0
  103. {riplex-0.2.7 → riplex-0.2.9}/tests/test_matcher.py +0 -0
  104. {riplex-0.2.7 → riplex-0.2.9}/tests/test_normalize.py +0 -0
  105. {riplex-0.2.7 → riplex-0.2.9}/tests/test_organizer.py +0 -0
  106. {riplex-0.2.7 → riplex-0.2.9}/tests/test_planner.py +0 -0
  107. {riplex-0.2.7 → riplex-0.2.9}/tests/test_rip_guide.py +0 -0
  108. {riplex-0.2.7 → riplex-0.2.9}/tests/test_scanner.py +0 -0
  109. {riplex-0.2.7 → riplex-0.2.9}/tests/test_snapshot.py +0 -0
  110. {riplex-0.2.7 → riplex-0.2.9}/tests/test_splitter.py +0 -0
  111. {riplex-0.2.7 → riplex-0.2.9}/tests/test_tagger.py +0 -0
  112. {riplex-0.2.7 → riplex-0.2.9}/tests/test_ui.py +0 -0
  113. {riplex-0.2.7 → riplex-0.2.9}/tests/test_updater.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: riplex
3
- Version: 0.2.7
3
+ Version: 0.2.9
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.2.7
3
+ Version: 0.2.9
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
@@ -312,22 +312,45 @@ class WelcomeScreen:
312
312
 
313
313
  try:
314
314
  if system == "Windows":
315
- for pkg in to_install:
316
- self.app.page.run_task(lambda p=pkg: _update_status(f"Installing {p}..."))
317
- subprocess.run(
318
- ["winget", "install", "--accept-source-agreements",
319
- "--accept-package-agreements", pkg],
320
- check=True,
321
- creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == "win32" else 0,
322
- )
315
+ # Build a single winget command string to run elevated
316
+ cmds = " && ".join(
317
+ f'winget install --accept-source-agreements --accept-package-agreements {pkg}'
318
+ for pkg in to_install
319
+ )
320
+ self.app.page.run_task(
321
+ lambda: _update_status(f"Installing {', '.join(to_install)}... (accept the admin prompt)")
322
+ )
323
+ # Run elevated via powershell Start-Process
324
+ result = subprocess.run(
325
+ ["powershell", "-Command",
326
+ f'Start-Process cmd -ArgumentList \'/c {cmds} & pause\' -Verb RunAs -Wait'],
327
+ creationflags=subprocess.CREATE_NO_WINDOW,
328
+ )
329
+ if result.returncode != 0:
330
+ raise subprocess.CalledProcessError(result.returncode, "winget")
323
331
  elif system == "Darwin":
324
- self.app.page.run_task(lambda: _update_status("Installing via brew..."))
325
- subprocess.run(["brew", "install"] + to_install, check=True)
332
+ if shutil.which("brew"):
333
+ self.app.page.run_task(lambda: _update_status("Installing via brew..."))
334
+ subprocess.run(["brew", "install"] + to_install, check=True)
335
+ else:
336
+ # No Homebrew — open download pages in browser
337
+ download_urls = {
338
+ "makemkv": "https://www.makemkv.com/download/",
339
+ "ffmpeg": "https://ffmpeg.org/download.html",
340
+ "mkvtoolnix": "https://mkvtoolnix.download/downloads.html",
341
+ }
342
+ for pkg in to_install:
343
+ if pkg in download_urls:
344
+ webbrowser.open(download_urls[pkg])
345
+ self.app.page.run_task(
346
+ lambda: _update_status("Opened download pages in your browser. Install the tools, then restart the app.")
347
+ )
348
+ return
326
349
 
327
350
  self.app.page.run_task(
328
351
  lambda: _update_status("Done! Restart the app for changes to take effect.")
329
352
  )
330
- except (subprocess.CalledProcessError, FileNotFoundError) as exc:
353
+ except (subprocess.CalledProcessError, FileNotFoundError, OSError) as exc:
331
354
  self.app.page.run_task(
332
355
  lambda: _update_status(f"Install failed: {exc}. Try the manual links above.")
333
356
  )
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