Sunday, 26 September 2010

Scrathing Itches

Previously I outlined the roadmap for Gereqi. I've been giving it thought and the feature's I need are more likely to get done i'm narrowing the roadmap for 0.5 to a few things.

  1. Mass Storage support (i.e. Android phone)
  2. iPod support
  3. Transcoding, perhaps with ffmpeg.
There are abnormalities in the program but I can live with them, for now.

Saturday, 11 September 2010

Gereqi 0.4.2 - more fixes

Version 0.4.2 brings minor but 1 very important fix. Previously, any track that had a filename encoding other than Utf8 would not play. This has been fixed (for at least latin1 encoded filenames) in 0.4.2

Here are a couple other fixes:

  • Stopped using sqlite for the applications settings. Now use a .ini-like file at "~/.gereqi/config"
  • The "About" dialog is no longer the Qt boilerplate dialog.
  • If the option to save playlist on close was enabled and mysql was being used, only 1 track would be saved. Now fixed.
  • The configuration dialog was incorrectly formatted, fixed.
For Ubuntu download:  gereqi_0.4.2-1_all.deb
For Fedora download: gereqi-0.4.2-1.noarch.rpm
For everyone else: gereqi-0.4.2.tar.gz

Tuesday, 31 August 2010

Gereqi 0.4.1 - bugfixes

Thanks to a few helpful people bugs were unsurprisingly found in the 0.4.0 release. The bugs that were found and quashed were:
It is recommended to upgrade as your system colour-theme is used for the playlist and vastly improves the appearance of Gereqi in dark-theme setups

Old and Ugly

New and better

For Ubuntu download:  gereqi_0.4.1-1_all.deb
For Fedora download: gereqi-0.4.1-1.noarch.rpm
For everyone else: gereqi-0.4.1.tar.gz

Monday, 30 August 2010

Roadmap for 0.5.0

I have been thinking on where Gereqi should go from here. Feature-wise Gereqi isn't that great but I am finding niggly issues here and there. These issues are what I would like to complete for the 0.5.0 release and if too much time hasn't passed I might have a go at some features.

The list of niggly issues:

  • Drag and drop - from the library/ filesystem-browser to the playlist
  • The playlist table is very rigid. You cannot manually sort your tracks (say just dumping the tracks to the bottom of the list) or dragging tracks around the table.
  • The progressbar does not allow 'click-to-position' interactions.
  • The progressbar is in the wrong location. It should be in the status-bar area.
  • The album-art retrieval is, although more efficient, less capable (the searching api is pretty limited)
  • No capability to remove tracks (from the DB) that have been removed from library directories when the application is not running.
If that lot doesn't take too long the list of features that may get a look at ( most easiest to do first):
  1. .m3u playlist read/write
  2. mass-storage device (Android phones, etc) read support
  3. mtp device read support
  4. ipod read support

In summary: issues and usability comes first. Features come last.

Wednesday, 25 August 2010

Gereqi 0.4.0, Finally

After a bit of a hiatus I have fixed several bugs that were found in the release candidates. As I can not detect any major show stoppers releasing 0.4.0 seems suitable.

This release not only provides what was mentioned previously but also provides proper packages.

Ubuntu >= 9.10 : gereqi_0.4.0-2.deb
Fedora = 13 : gereqi-0.4.0-1.noarch.rpm
Others : gereqi-0.4.0.tar.gz

If you find any bugs or queries contact me in the comments or via e-mail.
Also, check out the FAQ.

Sunday, 25 July 2010

Gereqi 0.4.0 Release Candidate 1

Finally! It's been a long time coming and has taken me many hours to get to a point in that I am satisfied for others to try. Strangely enough the only part I didn't enjoy was trying to create working rpm and deb packages.

There has been a lot of change since version 0.3.9 so here's a list:
  • Sort your media collection alphabetically by Album instead of just Artist,
  • The timed collection search has been fixed,
  • Having multiple directories (recursive or not) as the source for the media collection database is possible,
  • Watching the media collection directories for changes and automatically updating the database is an option made possible by pyinotify,
  • The sqlite backend has been massively sped up
  • Mysql is an option for the database. No prevision to create the database though, that has to be done manually by the user,
  • The album covers are retrieved from and stored locally. This method is a lot quicker and efficient but has fewer results than the old google+amazon method,
  • The random mode has been un-dumbed. Previously the random mode was very random and allowed you to play the same song you just heard. Now the random mode will not allow you to hear a song previously played until all in the playlist are finished.
  • The context browser has been used a bit more. Shows some relevant detail but doesn't allow interaction yet.
  • The system-tray icon is now an option.
  • Audio-cd playback now appears to work flawlessly. I didn't have to do anything, it just appears most distros have updated their gstreamer packages.
  • Addition of many tracks, e.g. all tracks by an artist in your database, has been massively sped up. Previously the program would get the track metadata by looking at each file in the filesystem. That metadata is now stored in the database.
  • The playlist saving is more robust
  • Reloading the last playlist on startup is an option
  • A working "settings" page
  • Sorting tracks by track number in the playlist is no longer dumb; tracks are sorted by track & album.
  • A lot of user interface features have been removed as they were not implemented. Previously I left them in to show my intention of what I aimed to do. In reality it just looked messy and gave an unfinished feel to the program.

To give it a try get the installers or packages from the google-code page. There may be a few caveats on how to install the programme for your distribution. Please leave any issues you have here or at the google-code issues page. If you think you know how to package .rpms or .debs I'd love to hear as I really could do with help there.

To not make this post completely dry here are a couple screenshots:


Saturday, 24 July 2010

Gereqi version 0.4.0 Code Freeze

Things are finally going smoothly for the development of this release. I had several features to complete before getting to this point and now I am 95% happy to leave the application alone and fix bugs.

There remains a stray 5% which is due to my developing habit of refactoring. Finding new methods of doing things and trying to implement them is fun. Bug fixing isn't. The 5% is inserting a small bit of javascript into a html template to save a lot of faff elsewhere in the program. It's not necessary as it isn't fixing a bug that isn't there, just looks nicer.

Hopefully, by the end of the day a release-candidate should be out for testing by the general public. Here's hoping.

Wednesday, 7 July 2010

Useless Widgets

For a long time Gereqi has been looking very alpha; widgets that are disabled or do nothing are the main cause. I've decided that instead of leaving useless widgets in to show future intentions i'm just going to leave them out.

The git tree now reflects this change and from now on if something does nothing it shouldn't be there, so let me know either by creating an issue over at the googlecode site or by dropping me a line.

Monday, 28 June 2010

Gereqi 0.4.0 Setbacks

Things are not going to plan. After the last update it looked like everything was shaping up for release not soon afterwards. In the process of testing the Mysql+sqlite database backends all hell broke loose, mainly due to Unicode issues in Python I have which appear to be near impossible to get around. What worked with the sqlite backend didn't work with the Mysql backend.

To try and solve this issue I am doing what I was supposed to have done a long time ago and forgot, namely using PyQt's QtSql module that has done what I've done so far and a lot better and more complete. In the process of moving everything to this new module a lot of other code has to change elsewhere which is a pain as a lot of it will have been working fine. It has to be done for my future sanity and continuing development of Gereqi.

Thursday, 17 June 2010

Gereqi-0.4.0 Development

Since I described what I expected to get done for version-0.4.0 a lot has been happening. No " just code refactoring". No faffing. Just work. Apart from Podcast support and a complete, working UI everything has been met and a whole lot more.

The list of features and improvements made so far are:

  1. pyinotify support for your collection folders. This includes multiple includes and excludes and specifies the option to perform a recursive watch. By using this package files are automatically added and removed from the database when the user adds and removes files from their watched directories,
  2. MYSQL support. Switch between SQLITE and MYSQL on the fly. Early testing shows MYSQL appears to be massively quicker than SQLITE(when not using the "PRAGMA synchronous = OFF" option),
  3. A settings dialog. It's not feature complete but it's definitely a start. Learning how to use modal dialogs has been a huge gain for this project,
  4. Webkit widget for the information page. The previous method of displaying information was too rigid and hopefully this new method should allow easier modifications and visual improvements. Plus anybody who knows html + css (I barely do) should be able to help out here,
  5. Flac block fixing is not done automatically. Previously Flac files which had multiple comment blocks were automatically fixed. Now, for each file, the user is prompted whether to fix the issue,
  6. System tray icon is an option instead of always being on,
  7. Option to rebuild the database from scratch.
  8. Displaying the collection by Albums or Artists
  9. Chose a cleaner section of the wikipedia result to display
  10. Album art covers are retrieved using the api of and then saved locally in ~/.gereqi/album-art. This is considerably quicker than using a Google "feeling lucky" result and parsing for the album art.
There are a few minor UI features I want to achieve before the release but things are looking good so far.

If you want to try the program there is no installer yet (for obvious reasons) but if you're feeling adventurous the tree at this revision is the most stable it's been in a long time. If you find issues please enter them in the issue tracker.


Webkit infopage showing the all the album covers of the playing artist

Mysql support and a checkboxed fileview.

Some UI options.

Equaliser dialog. It does nothing.

List by album.

List by artist.

Filtering artists.

Wikipedia information about the playing artist.

Monday, 31 May 2010

Filesystem TreeView with Checkboxes

This post isn't about Gereqi specifically but more to do with something I made during recent development. Currently I am trying to copy the Configuration dialog of Amarok to make Gereqi a bit more user friendly.

Amarok's filesystem view looks like this:

Unfortunately, in PyQt4 (or Qt4) there's no easy way to have those checkBoxes so it would like this:

With some clever c++ hackery made by a member of the qtcentre forums I was able to translate that into PyQt4 despite not knowing c++ and some of Qt4 specific features such as QSet, which I still haven't the foggiest about.

This PyQt4 code, for future reference and to help some poor soul dealing with the lack of PyQt4 examples and documentation on the internet, looks exactly like this (one day I might properly explain or comment it:

from PyQt4.QtCore import QDirModel

class MyQDirModel(QDirModel):
checked = []

def data(self, index, role = Qt.DisplayRole):
if index.isValid() and (index.column() == 0) and (role == Qt.CheckStateRole):
# the item is checked only if we have stored its path
if self.filePath(index) in MyQDirModel.checked:
return Qt.Checked
return Qt.Unchecked

return, index, role)

def flags(self, index):
if index.column() == 0: # make the first column checkable
return QDirModel.flags(self, index) | Qt.ItemIsUserCheckable
return QDirModel.flags(self, index)

def setData(self, index, value, role = Qt.EditRole):
if index.isValid() and (index.column() == 0) and role == Qt.CheckStateRole:
# store checked paths, remove unchecked paths
if (value == Qt.Checked):
return True
return True

return QDirModel.setData(self, index, value, role);

Simply put the above creates a "new" QDirModel Class with some custom methods as the default ones don't allow for this behaviour. Just swap where you were going to QDirModel with MyQDirModel.

The result of all this? A filesystem view the same as Amarok's

So that's one of the thing's I've been recently working on for version 0.4.0. Other things include directory watching, equaliser and sessioning (your Ui settings are saved to be loaded on restart).

There's more to come for 0.4.0 so keep your eye's peeled.

Sunday, 18 April 2010

Gereqi 0.3.9 -- now in .deb form

Finally I have got around to the requests and made a .deb for Gereqi!

I tried to use some deb-building guides out there but they seemed needlessly long winded so I created my own process. Now all I need to do to create a .deb is run a custom script where I feed it the location of .deb control file and the final package name; this streamlines thing immensely.

So apart from the .deb what else is new in this release? Well, like usual, not much. Mainly the code has been refactored and tidied up a little in compliance with Pep8 and pylint to make it easier to read. The only addition is that all tracks of an artist can be added at once although it's not ideal. A couple minor visual bugs relating to the track table have been addressed also but that's it.

Get the .deb here. [tested on Ubuntu 9.10 (x86) and 10.04-beta2 (x86+amd64)]
Get the source installer here.

If you are having issues I really want to know as I doubt my testing machines are clean enough.

UPDATE I've updated the packages to include a menu-entry so no more faffing around trying to start the application.

Tuesday, 6 April 2010

Gereqi 0.4.0 roadmap

I have a habit of not planning what I do with regards to Gereqi. Usually I'll jot down a couple of ideas and then loosely follow them if I'm good; typically I lose the piece of paper.

Well, for future reference here are the items I want to get sorted/perform before I release 0.4.0:

  1. Ui elements (excluding the menubar) all must work to some extent. Preferably fully.
  2. Thoroughly debugged
  3. Allow the media-library to be sorted by album/artist
  4. Ignore dynamic playlist support
  5. Podcast support
  6. Ipod support (maybe)
That's the general gist of what to expect in 0.4.0. Nothing amazing but I haven't the time or resources for that.

Tuesday, 30 March 2010

Feature request response

In response to's request of adding all tracks of an artist at once i've put in the feature as of this commit to the Git repository(0.3 branch).

To save you opening a new link to read my commit message(including spelling errors) I'll post it here as I feel it's important.

Adding all tracks from all albums of an artist is possible. I wouldn't
suggest doing so as the sorting of the table is pretty poor. The inbuilt
sort of the table providid by PyQt4 is unaware of what else exists in thetable in different columns.

What does "pretty poor" sorting of a table looks like? Like this:

Notice that the "sort by track#" is dumb. It does that explicitly even though you would expect it to sort by track# per album (I know that's what I think it should be).

However, although it's not guaranteed, you may get this desired sorting if you sort by album like this:

So, the short of it? The feature is there but not as you or I want it.

Monday, 29 March 2010

Gereqi, version 0.3.8 - 1 major bug down

It may seem i'm chucking out these releases a bit fast but the bug that I fixed tonight is a big one. A post over at reddit gave me a bit of encouragement / motivation to tackle this mother of a bug.

In the past you could only add tracks to the playlist-view if it was sorted by filename in ascending order. After that you could sort them however you want. If you added tracks by any other sorting scheme all hell broke loose. Today, after over 5 months, this issue is fixed. If you're wondering, the fix ended up being about an added 6lines.

I've added another feature which i've called "playlist-view history navigation". In essence, whenever you clear the playlist-view and add new stuff you can go back to previous selections, and then forward again. It's not 100% finished (more like 95%) but it's a good place to release it.

Here is a video i've just made.

Apologies for the lack of sound but it's too late in the day to sort that out. Also, note 2 bugs I found whilst doing the video (the date added widget and the moment I save a 2nd playlist). Those are small ones compared to the one I just fixed. Also, the quality, as of now, looks crap. That maybe a youtube processing issue as i've only just uploaded it.

Gereqi 0.3.8 can be found here and an installation guide of sorts is here.

PS: excuse the typos. This is rushed as I want to get some sleep.

Saturday, 27 March 2010

Gereqi Screenshots

I noticed a few days ago that the screenshots I had been using were old. Here are a few I've recently taken on Ubuntu Lucid and Funtoo with KDE-4.4.1


Note the slightly wonky position of the pause icon in its button. That has always been the case in Ubuntu going back to 9.04. I really wished they'd fix bugs for once.


Wednesday, 24 March 2010

Gereqi, version 0.3.7 released

Following on from version 0.3.6 the other day I found the bug that I assumed was entirely random. A few minutes of digging found the culprit. Long story short, when a track was stopped then replayed the audio-backend was not being fed a string as expected.

That is now fixed and along with some feedback from the installer setup is considerably more proper.

Version 0.3.7 can be found here.

Monday, 22 March 2010

Gereqi 0.3.6 - not any old point release!

I've just released version 0.3.6 and with it comes some new features:
  1. Playlist saving, renaming, reusing
  2. Playback of tracks with "#" in them
  3. And most importantly, an installer via the use of distutils!
To install run (whilst in the packages root directory):
python build
sudo python install

There are 2 bugs and feature#2 sort of brought of one of those in:
  • Urllib's pathname2url seems to be a bit flakey and causes exceptions. It's really random as the files it's chucked at work most of the time, just sometimes it doesn't.
  • Adding tracks to the playlist that is not sorted by filename causes blank rows and an unplayable playlist. I might try the PyQt4 mailing list but every time I do it seems to be a waste of time.
Slowly but surely progress is being made and apart from those aforementioned bugs, the program has been rock solid for me. I've only tested on Funtoo amd64/i386 and Ubuntu 9.10-i386.

Get the package from here.

Wednesday, 10 February 2010

Gereqi, version 0.3.5 releases

This release brings a few fixes and 1 minor new-feature.

It appears a lot of files (~3) were missing from the repo's and tarballs. This was a mess up on my end as I had the byte-files in my dev directory so I never saw the errors until I ran the program from the tarball.

The new-feature is that the media collection can be now be filtered by time of addition in conjunction with text-search.

That's all the time I have for now; i'll be lucky if I can find time to figure out the confusing setuptools.

Get the release here.

Sunday, 17 January 2010

Version 0.3.2 released

Due to starting a new job at an Engineering firm my priorities are not with this project right now as I get used to my new situation.

Minor changes between 0.3.1 and 0.3.2.
  • Added experimental support for audio-cd's (it's a Gstreamer issue i'm waiting to be fixed)
  • fixed bugs where menubar actions would double-trigger
  • Removed exceptions where cover-art and wiki info would try to fetch without an internet connection.
Apart from that not much else.

For 0.3.3 I aim to get an installer for this application. It's about time it was done. Just wished I could maybe get some help.

Get the package here.