Skip to main content

LeechCraft 0.5.80 is released

Posted in

In this release we've mostly focused on the LMP and NetStoreManager modules, but other modules also got some interesting improvements. Also, it's time to announce the Monocle reader!


LMP, our music player, now has all proper logic for uploading songs to cloud services, playing back uploaded songs, as well as, for example, fetching playlists from such services. Support for exact clouds is added via modules, in accordance with LeechCraft way, and for now only service is supported. Since the foundation is already laid, adding other clouds like Google Music would be much easier.

Much like with device synchronization, one can also transcode the songs before uploading:
Cloud uploadingCloud uploading

As one may see from this screenshot there is now a nice stats label below the playlist, so that one can know exactly how much songs he added and their total play time.

Regarding playlist improvements, there are now different sort modes, so that one can now sort, for example, by file path or disable sorting at all. If the sorting is disabled, then it's possible to move and reorder tracks around with Drag'n'Drop, and the order of tracks addition is preserved as tracks are added.

Among cosmetic changes are fixed background colors in QML elements and optional ignoring of "The " when sorting artists in collection. This way The Autumn Offering will be between August Burns Red and Behold... The Arctopus. And shortcuts for different actions are configurable now, too.

The newer LMP also supports recently released liblastfm-1.0 which broke API compatibility with liblastfm-0.3.


NetStoreManager got initial support for the Google Drive cloud storage service:
Google DriveGoogle Drive

Its core has been reworked so now it can easily support other similar cloud storage services like Yandex.Disk. For now only uploading and fetching the list of already uploaded files works, but in the next milestone it'd have the rest of features, as well as automatic folder synchronization.

Since the original Yandex.Narod doesn't fit the new idea of NetStoreManager, its support will be removed after this milestone and replaced with Yandex.Disk.


Though being available for some months already, this module only matured now enough to be announced. So, meet Monocle: our document reader. It already has quite enough features to use it on a daily basis for most tasks. It supports displaying one page or double-page spread, copying selection to image or text, scaling, width and height fitting, tables of contents, links, paginated navigation and printing. Monocle also integrates with the rest of LeechCraft so that it automatically opens a PDF document after a link to it is clicked, for example, in a browser or Azoth, and the document is downloaded.

PDF documentPDF document
FB2 documentFB2 document

Different formats are supported via different backend moudles, and for now only PDF and fb2 file formats are supported. There are two backends for PDF and one hand-written fb2 implementation.

PDF is supported either via Poppler library or through mupdf library. The later is discouraged, since the mupdf backend supports not all features that are supported by Poppler backend, but that may be fixed some time in the future. And it is built as a static library, so some magic is required to make it work in LeechCraft. For example, see this bugreport.

The main reasoning behind adding mupdf backend is that some claim it renders text much better than Poppler, but that's questionable.


Azoth IM client also got its fair share of improvements.

A new plugin has been added, Azoth BirthdayNotifier, which notifies about birthdays of contacts in user's contact list. The dates are taken from contacts' vCards, so this feature obviously relies on them being properly filled out.

Azoth Xtazy now supports /np and /sharesong commands. /np pastes the name of the currently played song into current chat, while /sharesong uploads the song via plugins like NetStoreManager and pastes a link to it. The former works with both LMP and MPRIS players, the latter requires LMP only. This can be seen as yet one example of profits of LeechCraft architecture and integration.

Azoth now finally displays user's avatar in tooltips:

Moreover, tabs of conferences with unread highlight messages are now marked with a star sign ("*").

QXmpp, the XMPP implementation library forked by us, has been synced with the upstream. And seems like we're a bit closer to integrating our custom patches to QXmpp with the upstream version. Integrating means less mess, more chances to get into Debian repos, and is good and healthy for the Open Source community — why fork when we can cooperate? :)

Other modules

Aggregator now supports exporting feeds to PDF in addition to previously supported fb2. One can adjust the parameters of PDF export, like margins, fonts and font sizes, and paper size. The resulting PDFs are perfect for reading on eBooks like Amazon Kindle.

The issue reporter Dolozhee now supports fetching issue categories from our tracker during issue reporting. This way one can assign a category to the issue being reporterd right from Dolozhee interface.

Of course, there was a bunch of other improvements, so don't forget to check out our development digests if you're interested: #28 and #29.

Packages and builds for supported distros and OSes will be available soon. Watch your package manager or our download page! The source archive is already available.

Development digest #29

Posted in

Since the last development digest we've did a bunch of improvements here or there, and added a couple of new plugins.

The most exciting improvement is that NetStoreManager now supports Google Drive service, and its core was reworked so that now it can easily support other similar cloud storage services like Yandex.Disk. For now only uploading and fetching the list of already uploaded files works. Since the original Yandex.Narod doesn't fit the new idea of NetStoreManager, its support will be removed after this milestone.

The other important module adds support for the service in LMP. Only playlists, transcoding and uploading works, but this module (and corresponding changes in LMP core) lay foundation for other services like Google Music.

The third added plugin is not that exciting, but has been requested quite a lot: it's a birthday notifier module for our Azoth IM client. It takes information about birthdays from contacts' vCards, and one can also configure the desired days on which to notify.

Среди прочих изменений:

  • Core: fallback to using external apps is now optional.
  • Core: fixed showing main window in some WMs.
  • Azoth: autoselect other resources only when a chat message is recieved.
  • Azoth: tooltip is updated on avatar changes.
  • Azoth: added default queries in Service Discovery.
  • Azoth: MUC icon is preserved on MUC tabs on account state change.
  • Azoth: MUCs with unread highlight messages are marked with "*" now.
  • Azoth: more compatibility with full Unicode JIDs.
  • Azoth: fixed a couple of bookmarks-related memory leaks.
  • Azoth ChatHistory: dates with logs for that day are displayed in bold.
  • Azoth ChatHistory: configurable amount of logs to show on one page.
  • Azoth Xoox: synced QXmpp with upstream.
  • Azoth Xoox: added icon for odnoklassniki.
  • Azoth Xoox: birthday field is now editable for self vcards.
  • Azoth Xtazy: added /np and /sharesong commands.
  • BitTorrent: optional flags for peers' countries.
  • Glance: nice Close button right on thumbnails.
  • LMP: support different sorting styles in the playlist.
  • LMP: support Drag'n'Drop and actions for reordering items in the playlist.
  • LMP: all found lyrics can be displayed, not the last found one.
  • LMP: faster prescaler for huge album arts in notifications.
  • LMP: fixed compatibility with taglib built without ASF or MP4.
  • NetStoreManager: other plugins can request uploads now.

Development digest #28

Posted in

Once again, last couple of weeks we mostly worked on LMP, or nice media player. What's also important, we've added some compatibility fixes, so BitTorrent can be built with Boost 1.50 now, and LastFMScrobble can be built with fresh liblastfm-1.0.

Adding support for liblastfm-1.0 revealed that a bunch of changes in it were like renaming a function here or a function there, and it's not clear why upstream did this in the first place: these changes bring no fixes, no new features, no improvements.

Also, small, but nice news is that Azoth now supports displaying avatars in tooltips, like this:

And here's the list of other important changes:

  • Aggregator: support exporting feeds to PDF.
  • Azoth: fixed a segfault when Ctrl+Clicking.
  • Dolozhee: fetch the list of issue categories and assign issues to them.
  • LastFMScrobble: expose some predefined radio stations like neighbour radio or loved tracks.
  • LMP: support adding artists to wishlists to plugins like Otlozhu.
  • LMP: support predefined radio stations from radio plugins.
  • LMP: playlist stats below the playlist.
  • LMP: configurable shortcuts.
  • LMP: close the Album Art display on Esc or mouse click.
  • LMP: added an option to ignore "The " when sorting artists (this way The Autumn Offering will be between August Burns Red and Behold... The Arctopus).
  • LMP: URLs are displayed in playlist instead of just the string "URL".
  • LMP: fixed background in QMLs.
  • LMP: more file types are now supported.
  • Otlozhu: support adding tasks from other plugins.
  • Vrooby: fixed a segfault on startup on some systems.

LeechCraft 0.5.75 is released

Posted in

Today LeechCraft 0.5.75 "This Glorious Nightmare" is released!

Just like in the previous release, we mostly focused on LMP module, which is our collection-oriented music player.

For example, it now supports music collection uploading to portable media players. Files can also be set to converted from lossless formats like FLACs to lossy but much smaller ones (in terms of file size) like Ogg Vorbis. One can also select the desired directory layout and file naming when uploading files. The transcoder is highly parallel: in fact, it can encode as much media files as you have CPU cores, so it makes sense to upload music in big batches. It's also run with minimum possible priority, so one can just continue to do your work while the media files are being converted. All this stuff looks like this:

Uploading progressUploading progress
Transcoding optionsTranscoding options

For now only those media players are supported that don't require any special MTP or i-device-related protocols, but support for the latter ones is planned. By the way we will be glad to get your help here — from writing protocols support and synchronization modules to testing!

Among other significant new features in LMP:

  • Support for social radio stations like Last.FM radio.
  • Obtaining personalized recommendations, recent releases by artists in user's library and biography retrieval.
  • Support for MPRIS.

Implementing collection synchronization support required us to make yet one more plugin: Vrooby. Vrooby is responsible for working with the underlying platform/backend to obtain information about removable storage devices. Other plugins then may query it to know what devices are available and where they are mounted, for example. It also allows the user to mount and unmount them via LeechCraft UI:

Devices popupDevices popup

Several things were optimized a lot, thanks to the Intel VTune profiler being for non-commercial use (it's available in Gentoo's science overlay, BTW). Particularly, startup times were reduced a lot (especially if all the required libraries are already in disk cache), and some places like contact list drawing in Azoth, our IM client, were optimized.

We've also worked hard on a couple of new plugins, one of which is Monocle, a modular document reader. It would be officially announced next time in milestone 0.5.80, though, so stay tuned!

There was a bunch of minor fixes and enhancements in other plugins, so check out our development digests, where all this is listed in more detail: #25, #26 and #27. One can especially highlight two small but highly requested features:

  • First, a nickname can be inserted into current chat tab message edit by Ctrl+clicking it in the roster.
  • Second, Azoth ChatHistory module finally got a small calendar widget to select dates to view history for, and links in chat logs are now clickable.

Packages and builds for supported distros and OSes will be available soon. Watch your package manager or our download page! By the way, the source archive is already available.

Development digest #27

Posted in

We have some good news: finally LMP is able to upload tracks from local music collection to portable media players! For now it supports only basic media players for which no MTP or iPod-related stuff is required. Support for MTP players and i-devices will be added later.

Of course, transcoding is supported, so that you can automatically convert big FLAC files in your local collection to a smaller lossy format like Ogg Vorbis. Anyway, it hardly makes sense to keep these large FLACs on players with such limited memory and typically crappy sound.

For this to work, a new plugin has been introduced: meet Vrooby! It is LeechCraft's removable storage device manager, allowing the user to mount and unmount devices as well as aiding other plugins in working with such devices.

Poshuku WYFV plugin has been removed as obsolete and unsupported.

Among other changes:

  • Core: tab bar can be moved to the bottom.
  • Core: allow to disable resource caching via the new --no-resource-caching flag.
  • Core: lots of optimizations.
  • Core: fixed a possible segfault when there are no handlers for entity.
  • AdvancedNotifications: fixed QML notifier on some multimonitor systems.
  • Azoth: support inserting corresponding nicknames via clicking in the roster.
  • Azoth Herbicide: block authorization requests as well.
  • Azoth p100q: fixed recommending comments.
  • Azoth Xoox: action for modifying self vCard in account menu.
  • Azoth Xoox: fix for client connection handling, and a possible segfault.
  • LastFMScrobble: added support for liblastfm-1.0.
  • LMP: show full-scale album art when requested.
  • LMP: support copying properties from the properties display widget.
  • LMP: properly handle collections with unscannable items.
  • LMP: fixed a segfault on certain loaded plugins combinations.