Jump to content

GSoC/2025/StatusReports/holychicken

From KDE Community Wiki

Porting ISO Image Writer GUI to Kirigami and adding some glitter

The current version of ISO Image writer is written in C++ with QT Widgets. Although it does the job of flashing an ISO onto a usb disk theres much room from improvment.

The current version offers:

  • A straightforward interface for selecting ISO files and target USB devices
  • Verification of ISO checksums and digital signatures
  • Safety measures to prevent accidental overwrites of system drives
  • Support for multiple platforms (Linux, Windows, macOS) through various package formats

Despite its functionality, the current implementation has several limitations:

  • Requires manual downloading of ISO images before use
  • Interface is not consistent with modern KDE applications as they move towards using Kirigami, the GUI framework built on top of QML
  • Inconsistencies in the Ul usage

Mentors

Harald Sitter, Nicholas Fella, Tobias Fella

Work report

Week 1:

  • Initial Blog
  • Reviewed Kirigami components and brainstormed different layouts ideas
  • Reviewed Codebase and started with porting frontend to QML

Week 2:

  • Updated Build system to embed QML into executables
  • Reviewed quickemu/quickget
  • Completed first iteration of the UI with placeholder texts and stubs

Week 3 + 4:

  • Refined the UI and added more features like drag-and-drop support, ISO searching.
  • Opened up the initial Merge Request and received feedback
  • Iterating and addressing the feedback
    • As part of the feedback I had to rethink the UI following KDE's design language

Week 5:

  • Addressing more feedback
  • started integrating the backend logic to qml
  • Completed integration of iso-verification
    • Continuing with usb-device listing and flashing

Week 6:

  • Addressing more feedback
  • Reworking control flow for iso-verification
  • Streamlining UI with KDE's design philosophy

Week 7 - Now:

  • Added automatic iso discovery
  • Improving look and feel of the app
  • Switching out qml file dialog with `QFileDialog`

Final Notes

  • Ported entire application from Qt Widgets to QML
  • Implemented automatic ISO fetching system - dynamic fetching from Fedora, Kubuntu, and KDE Neon endpoints
    • Built web scraping and JSON parsing functionality - Created releasefetch.cpp class to automatically get latest release information including checksums
  • Added direct URL download capability - Users can now paste ISO URLs directly into the app for download and flashing
  • Integrated native file dialog - Bridged QFileDialog from C++ to QML for better desktop theme consistency
  • Made flashing process non-blocking - Updated flashcontroller to show real-time progress during USB flashing
  • Implemented drag-and-drop functionality - Users can drop ISO files directly onto the application window

Merge Requests

Links to Blogs