SoK/2020/StatusReport/Abogical

From KDE Community Wiki

Introduction

[JuK](https://kde.org/applications/multimedia/org.kde.juk), the jukebox music player, is one of the oldest music players out there in the FOSS world. In fact it has actually spanned for more than 17 years, and it is still usable to this day. Compared to [Elisa](https://kde.org/applications/multimedia/org.kde.elisa), JuK focuses mainly on the playlist system, coupled with tag editing support to organize your music files.

However, due to its age, accumulated legacy code and bugs still remain. Thus it is in bad need of modernization and a revamp. JuK has recently been ported to KF5, however this port removed key features and the result is still missing some modern design principles that would improve the community's ability to maintain it (e.g. model/view, threaded I/O).

I submitted a proposal to address this and I'm excited to be part of this year's season of KDE! I love the idea of JuK and wish to take part in reviving this project. I am mentored by Michael Pyne, who is currently the sole maintainer of JuK.

Work done

Not a lot has been done as I was interrupted by my college exams. However, I was still able to complete these tasks:

Switch playlists during drag and drop

This feature was forgotten while JuK was ported to use KF5. Now you can drag and drop tracks on arbitrary positions between playlists and JuK will switch playlists so you can drop the tracks to the right spot in the destination playlist.

Commit: https://invent.kde.org/kde/juk/commit/ce7108fe90adb83982cc3cf9cd2e94b0dc6fbf2a

Replace observer pattern with Qt signals in PlaylistInterface

This is an internal refactor of complicated code that was written with efficiency in mind but is confusing in turn. The observer pattern is a classic software pattern, which PlaylistInterface uses to abstract playlist-related functions using custom subclasses. However Qt's signal/slot mechanism can be used directly for this instead, so I've refactored PlaylistInterface and related code to use Qt signals instead.

Commit: https://invent.kde.org/kde/juk/commit/c5259a6e933fccb34ee9656087db11657a1f617c

What's next

  • Using a proxy model for searching tracks, to replace slow manual filtering of tracks.
  • Convert the list of playlists into a model/view paradigm, to prepare for converting the list of tracks (playlist) into a model/view paradigm.