Live metadata feature (Mixxx)
lunes, 6 de agosto de 2018
Week 12th: 30th July - 5th August
This week I refactored the linked lists in both the ScrobblingManager class and the MetadataBroadcaster into hash maps. This way the code is substantially shorter and more comprensible since there is no longer a need to iterate through linked lists. I also changed some stylistic issues that were demanded. I modified the file encoding combobox to introduce a more button to simplify the choosing of the encoding with two predefined options. This took a while because I had to read on qt's model view system.
lunes, 30 de julio de 2018
Week 11th: 23th July - 29th July
This week I moved MPRIS into a feature on features.py so Mixxx can be compiled in non-linux platforms too. I also finished the MPRIS implementation implementing the core features that were lacking such as the rate property and the seek function. I also implemented the nowPlayingTrack slot so that MPRIS broadcasts the current track even when not in autoDJ. I defined some macros so the code compiles in non-linux platforms. Next week I intend to clean-up all github comments and start with the Last.fm implementation if I have time.
lunes, 23 de julio de 2018
Week 10: 16th July - 22th July
During this week I moved the implementation of the MediaPlayer2.Player interface to a dedicated class and let the QDbusAbstractAdaptor be a proxy object. I implemented almost all of the functions of that interface with the decision that it should only work while Mixxx is in AutoDJ mode. Otherwise functionalities such as Next() or Pause() don't make sense when you have more than one deck playing. This way, an external player can be used in AutoDJ sessions. I also included the necessary ControlObject's in AutoDJProcessor to be able to detect when the AutoDJ is idle and when it is enabled. Next week I will finish the MPRIS implementation.
lunes, 16 de julio de 2018
Week 9: 9th July - 15th July
This week has been a bit staler than usual. Reasons being I spent 2 days just to get MPRIS to work. Turns out Qt's DBus implementation doesn't send the signal org.freedesktop.DBus.Properties.PropertiesChanged when a property changes, you have to notify apps manually. This took a while to realize. But finally I got KDE's media player to reflect the playback status of Mixxx as well as the current track. Next step is to implement MPRIS to use AutoDJ mode. This doesn't really fall into metadata broadcast but it seems like the next logical step. Also, I'll have a look at the beam project to test if split screen works with MPRIS.
lunes, 9 de julio de 2018
Week 8 - 2nd July - 8th July
This week I finished the ListenBrainz interaction. I decided to not emit the now playing switches to ListenBrainz because they don't use it to build their dataset. Full listens do, though, and those are fully implemented. It took a while because first I decided to use custom interfaces to mock the network manager, but I don't know why qDebug didn't work. Second I set up an Apache httpd server to test interactions. After much debugging and log checking, I still had python bugs. Then I decided to drop all the testing and implement the interaction itself and check both the http reply and the website. I got it working after a few refactors to ScrobblingManager and MetadataBroadcaster. I implemented the ListenBrainz options too (it was just an unconnected GUI before).
I also changed again the metadata options tab merging both custom format and predefined format because it is more intuitive and without many known options it doesn't make sense. I got rid of the ListenersFinder singleton because it was preventing objects from being deleted before program shut down and it led to double delete bugs.
I also changed again the metadata options tab merging both custom format and predefined format because it is more intuitive and without many known options it doesn't make sense. I got rid of the ListenersFinder singleton because it was preventing objects from being deleted before program shut down and it led to double delete bugs.
martes, 3 de julio de 2018
Week 7: 25th June - 1st July
This week I changed the metadata file worker class so it uses a dedicated thread instead of using the QtConcurrency run function. I've also modified it so it opens and closes the file just before and after writing to it, in case any other programs rely on the file not being open to read it. I changed the file listener to adapt to these changes.
I started working on the ListenBrainz service, creating a factory method to obtain the JSON the API uses. I also created a service that implements the interface defined previously and communicates with the various mocks I've set up to mock the interaction with the network. I've also included the options to use the ListenBrainz API but still not connected because I need to do further tests with a server mock up.
I've also changed the ScrobblingManager so it uses new connect syntax and lambda functions to avoid using sender() function which is ugly because it defeats the purpose of slots and signals.
Next week I will finish the ListenBrainz interaction and begin implementing the Last.fm one. I decided to switch the milestones because I'm waiting for an e-mail response from Last.fm regarding a license question.
I started working on the ListenBrainz service, creating a factory method to obtain the JSON the API uses. I also created a service that implements the interface defined previously and communicates with the various mocks I've set up to mock the interaction with the network. I've also included the options to use the ListenBrainz API but still not connected because I need to do further tests with a server mock up.
I've also changed the ScrobblingManager so it uses new connect syntax and lambda functions to avoid using sender() function which is ugly because it defeats the purpose of slots and signals.
Next week I will finish the ListenBrainz interaction and begin implementing the Last.fm one. I decided to switch the milestones because I'm waiting for an e-mail response from Last.fm regarding a license question.
martes, 26 de junio de 2018
Week 6: June 18th to June 24th
During this week I moved the file settings from the DlgPrefMetadataDlg class to a separate class so it is easier to mantain (single responsibility principle) and add new settings. Unfortunately, it is not possible to create an interface because the DlgPrefMetadataDlg object needs to know the subclass, which defeats the purpose.
I also deleted the table view from the dialog, because I thought about it and it makes no sense to make it so extensible early. Better to use a working solution and easier solution than thinking 10 steps ahead.
I added a work in progress concurrency solution for the file listener, which needs to be improved to a dedicated thread. Since the new options already give you the metadata format string, there's no longer need for a template and factory pattern so I removed the hierarchy. Now it simply loads the string from settings.
Unfortunately, I'm delayed regarding the original planning. Which means I'll have to put extra hours to compensate.
I also deleted the table view from the dialog, because I thought about it and it makes no sense to make it so extensible early. Better to use a working solution and easier solution than thinking 10 steps ahead.
I added a work in progress concurrency solution for the file listener, which needs to be improved to a dedicated thread. Since the new options already give you the metadata format string, there's no longer need for a template and factory pattern so I removed the hierarchy. Now it simply loads the string from settings.
Unfortunately, I'm delayed regarding the original planning. Which means I'll have to put extra hours to compensate.
Suscribirse a:
Entradas (Atom)