Skip to content

[Feature] DiscRipperView + RipperProgressSheet — Disc Ripping UI #3592

@github-actions

Description

@github-actions

Overview

Build DiscRipperView and RipperProgressSheet — SwiftUI views that let users rip a physical disc from a connected USB optical drive directly into Provenance's ROM library.

Depends on: IOUSBOpticalDriveDriver sub-issue (optical drive DriverKit driver).

Goals

  • Detect inserted disc and display disc metadata (TOC, system type detection)
  • One-tap "Rip Disc" action that reads all sectors and writes a disc image to the ROM import folder
  • RipperProgressSheet shows sector-by-sector progress, ETA, speed (MB/s), current track
  • On completion: auto-import the ripped image into the game library
  • Cancel / retry support with resume from last good sector where possible

Screen Designs

DiscRipperView (main screen)

  • Drive status badge (No Drive / No Disc / Disc Ready)
  • Disc info card: detected system, track count, total size
  • "Rip Disc" primary button → presents RipperProgressSheet
  • Recent rips list (last N rips with status)

RipperProgressSheet (modal sheet)

  • Progress ring + percentage
  • Current track / total tracks
  • Sectors read / total sectors
  • Estimated time remaining
  • Speed (MB/s)
  • Cancel button with confirmation

Implementation Notes

  • DiscRipperView lives in PVUI/Sources/PVSwiftUI/DiscRipper/
  • Uses @Observable (RipperViewModel) on iOS 17+
  • RipperViewModel calls through PVCoreLoader / companion app IPC to the IOUSBOpticalDriveDriver
  • Output format: .bin/.cue (most compatible) or .chd via chdman if available
  • Progress updates via AsyncStream<RipProgress> from the driver
  • On tvOS: view is hidden (USB optical drives not practically connectable to Apple TV)

Acceptance Criteria

  • DiscRipperView shows drive/disc status correctly
  • "Rip Disc" triggers sector reads and progress updates in real time
  • Cancel stops the rip and cleans up partial files
  • Completed rip auto-appears in Provenance ROM library
  • View compiles on iOS; no-op / hidden on tvOS

References

Metadata

Metadata

Assignees

Labels

agent-workPR or issue being worked on by the AI agentenhancementimprovements, enhancements, new features, additionsui/uxrelated to user interface and experience

Type

No type

Projects

Status

In Progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions