SoK/2020/StatusReport/Abogical
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.
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.
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.