Today LeechCraft 0.6.70 "Severance" is released!
Three months and almost two thousands of commits have passed since the previous release, and we are proud to announce some new plugins and quite a few improvements, optimizations and fixes!
Two thousands of commits brought a lot of new features and changes, so this announce covers them from a bird's eye. Please refer to the changelog if you wish more detailed list of changes.
Let's start with the LMP audio player.
The tracks with the associated rules are marked by a flag colored according to the rule color (that can be set in the Advanced Notifications settings), filled if the rule is enabled and hollow if it is disabled. It is also possible to directly open the rules configuration from the track menu:
That's what we call "modules integration"!
LMP also got support for various filters and effects in the 0.6.65 version, and, as promised, some new effects were added in this release, like FrAdj,a 10-band equalizer effect with presets:
Perhaps the most interesting effect is HttStream — streaming module, allowing one to stream music playing in LMP to other devices via HTTP. It is possible to add many copies of this filter, listening on different interfaces/ports and encoding the stream at different bitrates. This way music can be streamed with maximum quality on a local area network, and two instances, with high-quality and medium-quality encoding, can be exposed to the Internet, for example.
We think of adding a web interface and an RPC API to LMP in nearest releases, which, combined with HttStream, can turn LMP into a small media server.
Another new LMP subplugin added in this release is BrainSlugz, checking the local user's discography for new missed releases:
BrainSlugz uses other first-level plugins like MusicZombie (for MusicBrainz) to query the discographies, thus other information sources can easily be added by merely writing a new module without changing BrainSlugz.
NetStoreManager, our cloud storage manager plugin, has got a submodule for Dropbox support, supporting everything it should support: file uploads, downloads, file listings and so on. Dropbox guys haven't issued a fully working key yet, though.
Also, NetStoreManager now supports parallel mass downloading all selected files from the GUI.
Quite a long-awaited plugin, Eleeminator brings a terminal emulator to LeechCraft:
It supports everything one would expect from a terminal emulator: multiple tabs, configurable color schemes, clipboard, links detection and opening. It integrates well with Advanced Notifications, allowing creation of the notification rules for bells in terminals.
Eleeminator also keeps track of the programs running in each terminal tab, updating the title accordingly. It also shows a warning if one tries to close a tab with something running in either background or foreground:
Eleeminator is based on the QTermWidget library, and some code has been contributed back to that project.
Poshuku is our web browser module, and it has got support for quite a few new plugins and features in this release.
A simple but useful module, DC/AC provides a color invertor working on any site without any custom CSS:
It also supports a thresholded mode, when colors are inverted only when the web page in question is brighter that some given threshold.
SpeedDial supports automatic mode as well as a static list of pages. In the former case two lists are shown: one for most frequently visited pages and another one for most frequently visited hosts. This way if you visit, say, different Slashdot pages quite often from your RSS feed reader, each page would have quite low visits frequency and rating, but Slashdot would still show up in the list.
Allows one to generate a QR code representing the current page. This can be quite handy to send the URL of a page to a smartphone or a tablet.
The core of the Poshuku module has got an SSL badge notifying about the security of the current connection, whether the connection is fully secure, or some elements were loaded via unencrypted connection, or there were some SSL errors. Teh corresponding dialog allows viewing the certificates chain:
and the list of elements loaded via insecure connection:
The OS X-specific notifications module has been refactored out of the Pierre plugin into the Dolle submodule. It now supports showing differently colored badges for different events in the OS X dock, so counters for, say, chat rooms and private messages are shown separately now. Combined with the support for colors in the Advanced Notifications rules added in this release, this can be used to easily distinguish between different event types:
Azoth, the IM client, has been migrated to QtMultimediaKit for the Jingle support. QtMultimediaKit from the QtMobility package provides more solid, stable and glitchless experience than plain QtMultimedia in Qt 4, so the Jingle support can now be considered somewhat completed.
A new module has been added, Azoth MuCommands, providing support for various IRC-like commands, like
/last and so on. This way, mouseless Azoth became much more feasible and usable. The page dedicated to this plugin contains an up-to-date list of the commands.
File transfer notifications have been improved. They now contain buttons for quickly opening the file just transferred, and a persistent notification has also been added, so that a finished file transfer can be seen even if the original notification has been missed.
The tooltips for the entries in the contact list are now generated lazily on hover, saving around 100 KiB of memory per contact. The tooltips themselves have also become a little bit more neat, showing the client and status icons, as well as the contact's time (if available):
The OTR support module now supports question-based and shared secred authentication:
as well as managing fingerprints:
and accounts keys:
The ChatHistory module has got a new improved search box, along with the forward and case-insensitive search (the latter is available only if SQLite is built with ICU):
Monocle now supports redirection backend plugins that merely convert a document from one format to another one, probably supported by another Monocle plugin.
Annotations' contents can now be copied to clipboard, and the actions shortcuts are now configurable.
The Postrus PostScript support module has been rewritten to just call a converter from
Otlozhu, our todo manager, now supports hierarchical tasks:
It has also got a lot of smaller improvements, mostly in GUI. The calendar pane is now resizable, for example, and the comment editing dialog now supports multiline comments.
- LeechCraft as a whole now respects XDG standards a little bit more. Particularly it now stores its non-important data, like browser cache, LMP cache or Azoth avatars, in
- The utility library has been split into multiple smaller almost independent libraries, allowing the plugins to link to only those libraries they use instead of the big single Util blob.
- The Azoth p100q module has been removed since the psto.net microblogging service has been closed quite some time ago in favour of point.im.
- The BitTorrent module now supports adding magnet links via its UI (instead of delegating it from other plugins), and its dialogs became non-modal.
- CSTP module now supports UTF8-encoded content-disposition header.
- HotSensors module has got OS X support.
- HttHare module now supports FreeBSD.
- New Life now supports importing Opera RSS database, though only the feed list is imported for now.
- The SysNotify module, providing notifications via a libnotify daemon, now supports showing images in the notifications if the used daemon supports them.
- The TabSessManager module finally supports multiple windows, recovering the tabs in those windows they were on close.
- Azoth LastSeen now loads and saves the statistics asynchronously, speeding up load times and avoiding short freezes.
- Azoth Xoox now saves the roster much less frequently, ignoring not interesting events like fetching the same VCard as the one already stored or fetching information about a MUC room participant that is not present in roster anyway.
- Azoth Xoox now also saves avatars asynchronously.
- BitTorrent module has been optimized, notifying the UI only about changes in those torrent whose state has been actually changed. This provides quite a big performance and energy efficiency improvement for the cases of having a lot of torrents added.
- LMP now loads album art asynchronously when adding tracks to playlist, speeding up reaction to adding the whole collection, for example, by an order of magnitude.
- LMP now also queues up the changed paths and removes any paths that are children of other already scheduled paths, optimizing a lot for the case when a whole directory tree has been changed at once, for example, as a result of directory unmounting.
- SB2 now got a much more optimized Desaturate effect, at least on x86 and derivatives.
Among the fixes for the nastiest crashes and bugs:
- NetStoreManager GoogleDrive now correctly handles multipage results, showing all available files.
- Fixed a crash in Azoth Xoox when trying to delete an entry that never came online but is present in the roster.
- Fixed a crash in Azoth Xoox when a MUC participant gets the nick of another participant after a rename.
- Fixed a few other crashes in Azoth Xoox related to participant renames.
- Fixed a crash in DeadLyrics on receiving an erroneous reply.
- Fixed a rare crash in LMP on some systems on switching to Devices pane.
- Fixed items filtering in LackMan.
- Fixed validating documents in the LHTR WYSIWYG editor, leading to erroneous LHTR state if the document contained entities not allowed by the XML specification.
- Fixed synchronization issues in LMP MTPSync module which tried to query the device the audiofiles currently being transferred to, screwing up the transfers.
- Fixed crashes when opening PDF documents if Monocle Postrus module is loaded (yes, that was mentioned earlier, but that's quite an important fix worth mentioning here again).
- Fixed a crash in Poshuku when closing a tab with Web Inspector opened.
- Dock widgets like Azoth's one now have a corresponding action in main menu. Before this reopening them after closing was impossible without resorting to SB2.
By the way, this is the first release available in the FreeBSD ports collection. To install, just issue
portmaster x11/leechcraft or
make -C x11/leechcraft install clean. Whole LeechCraft is represented as a single port file for now, please let us know if this seems inconvenient to you!
Today we are proud to announce the release of LeechCraft 0.6.65 "Facepalm Mute"!
Some new tasty features and plugins were introduced in this release, and lot of things were changed under the hood, as well as lots of small behavioral issues were fixed or improved in many different plugins. So, let's get straight to all the new tasty things!
Five new plugins have been added in this release.
This module has seen its inception quite long ago, but only now it became somewhat ready. WebAccess provides a basic web interface for the Aggregator feed reader, so one can read news articles from a mobile device or another machine:
The module is still extremely experimental, but it is already used by some in some scenarios.
CertMgr is the new SSL manager. It supports both managing the SSL exceptions (like accepted or rejected SSL errors), as well as disabling system-wide SSL certificates and loading custom ones:1
CPU load monitoring quark that shows current IO/nice/user/system load in the sidebar and displays a tooltip with the load graphs for each core on hover:
It only supports Linux and Mac OS X systems for now.
A small quark for handling images and text dropped onto it via plugins supporting the data filters concept.
The spell check core has been moved from Azoth Rosenthal to a first-level plugin, losing the Azoth prefix on the way. Now it can be used by any plugin wishing to check spelling, and it also supports multiple dictionaries now.
Most significant change in this release of the LMP audio player is the support for ReplayGain. Now LMP understands the ReplayGain metadata in audio files and adjusts the volume accordingly. Of course, album mode is supported.
We are aware that ReplayGain information is very rarely met in nature, so another ReplayGain-related feature is automatic analysis and RG metadata calculation for audio files in your collection. The calculated metadata is stored in local collection, leaving your files intact, so you can safely continue seeding them in a bittorrent client, for example. One more reason to use collection in LMP, and one more reason to use LMP — as far as we know, almost no other audio players support this.
LMP's internals were upgraded in this release to support various audio filters, so get ready for various equalizers, visual effects and so on in next release!
Also, LMP now works properly on Mac OS X, and the Mac package now contains all required gstreamer plugins, so one can play FLAC or MP3 files or listen to internet radio on Macs now as well. Moreover, proper support for files watching was added: it was impossible to add a directory containing more than 256 files to collection before that. Now the watching backend explicitly uses FSEvents on Mac, supporting unlimited number of files in collection.
The Graffiti submodule for audio tags manipulation now supports canceling directory iteration and has got a few fixes regarding CUE support. We plan to move to
shntool in next releases though.
Among other improvements and fixed issues:
- Played tracks history is now collected (though not available in the UI yet).
- Total duration of selected playlist tracks is now displayed.
- Fixed memory leaks with GStreamer tags messages.
- Fixed interaction of MPRIS implementation with KDE.
- Fixed transcoding of audio files containing embedded album art.
- Added support for Drag-n-Drop of radio items to playlist.
Azoth, the IM client, is probably the most widely-used module and most mature one, but it still gets tons of new features and improvements. For example, Azoth now supports server history (for the protocols that support this concept). So, if you had a conversation on another device or client you still can access it from Azoth and view the messages stored on server. Only XMPP and VKontakte protocols support this feature for now, and XEP-0313 is chosen for XMPP instead of older but way more clumsy XEP-0136. XEP-0313 requires support both from client and server, and as far as we know only Prosody supports it.
The Xoox submodule implementing the XMPP protocol gained support for Message Carbons. That is, a resource may now optionally get all messages from all other resources, including the sent ones. This helps maintaining the conversation flow across different devices somewhat similarly to Skype. Message Carbons are forcefully disabled for some types of messages, though, for example for OTR messages. Of course, this is strictly optional and, moreover, opt-in feature.
A few other smaller fixes and improvements are available in the Xoox module:
- The roster cache now isn't cleared if Xoox haven't managed to fetch the roster during application run time at least once.
- Organization VCard fields are now supported on newer QXmpp.
- VCards and versions requests can now be disabled globally.
VKontakte support (by the Murm module) has been improved as well. Besides supporting server history, Azoth Murm now can rename multiuser chats and invite contacts to multiuser chats. A few issues have been fixed as well, like sending messages containing the < symbol or crashes on some slow connections.
Azoth now also supports sending images via the image data filter plugins, like Imgaste or Blasq. In this case an image is uploaded to an imagebin or a cloud image hosting service respectively, and a link to it is sent to the chat.
Just as with LMP, quite a few improvements were done and issues have been fixed as well:
- Support for text search in chat window has been added:
- A workaround has been found for a long-standing bug in Qt leading to crashes on startup.
- Fixed Drag-n-Drop behavior: now dropping entries to other entries and to chat tabs is handled properly. For example, dropping a user to a conference tab (or vice versa) now suggests inviting the user to the conference.
- Text does not disappear now from the message edit if autopasting has been canceled.
- Better handling for network connectivity issues in Acetamide.
- Depester module now shows a "muted" icon near the ignored contacts in the roster.
- Fixed horizontal scrolling appearing in standard styles on long words.
- Fixed some memory issues in OTR support plugin.
Monocle, the document reader, now supports annotated documents. For now annotations are only supported for PDF documents, and only basic textual annotations are recognized. They are displayed both inline in the document and in a special side panel:
Creating annotations is not supported yet.
PDF backend now also supports threaded rendering if built with Poppler 0.24.0 is newer. Threaded rendering allows both seamless scrolling without freezing the UI and scrolling process as well as uniform CPU cores utilization if multiple pages are shown at once.
The LHTR visual hypertext editor component used primarily by the Blogique module now gained support for the image sources plugins (that Blasq also became in this release), so that images can be inserted easily. First we select the service we want to insert images from:
Also, the HTML editor now supports syntax highlighting.
- Aggregator now supports renaming feeds.
- KBSwitch now shows a menu with all the available layouts after right-clicking the quark.
- LackMan now supports vim-style navigation and using Space key to toggle packages.
- MusicZombie now fetches all information about a single artist in one request instead of issuing one request per each album.
- New Life now supports importing history from Opera.
- Popishu text editor now supports the recoverable tabs concept, so its tabs can be unclosed or saved between restarts now.
- SB2 now supports hiding quarks by default unless user explicitly adds them, so network monitor, CPU load and several other quarks are now hidden by default.
Among significant ones:
- AnHero, the crash handler, now restarts LeechCraft via the
leechcraft --restartswitch instead of an ugly shell kludge.
- A serious bug in CSTP has been fixed that may lead to crashes on some systems on each erroneously finished download.
- Fixed a memory leak in XDG handling code.
/etc/os-releaseis now properly parsed.
Other than that, a lot of smaller issues and rare crashes were fixed in this release.
Also, some Mac OS X-specific issues were fixed. Besides what's been mentioned for LMP:
- Native key symbols like ⌘ or ⌥ are shown in shortcuts manager instead of textual representation, avoiding confusion when configuring shortcuts.
- A memory leak in the Liznoo module has been fixed.
- A crash in the Liznoo module has been fixed on systems that don't have any batteries like desktop iMacs.
- Fixed font drawing on Mac OS X 10.9.
- LeechCraft now supports installing in the standard UNIX layout (with
$PREFIX/shareand all the likes) instead of the installation in the layout suitable for app bundles.
After more than half a year and 4000 commits after previous feature release, 0.5.95, we are proud to announce LeechCraft 0.6.60 "Accelerated Evolution"!
This version introduces a lot of new plugins, new features in existing plugins and, of course, bugfixes. Well, even the brief changelog omitting non-significant changes is around 300 lines long, and this version has 297 tasks on our tracker (stats included), which is almost three times more than the previous record! So let's see what's new.
LeechCraft already had quite a few plugins offering features that are usually a part of a desktop environment, like a power manager or removable storage manager, so we decided to take one step further and turn it into a proper Desktop Environment. This day has finally come, jokes aside!
Desktop mode is a new special mode of LeechCraft which basically turns it into a full-featured desktop environment. For example, the SB2 sidebar (which contains elements like a taskbar or app launcher) turns into a separate always-visible dock panel that covers other applications:
Desktop mode is activated via the
--desktop command line switch, and there are already session files for login managers to offer LeechCraft as a desktop environment.
But desktop mode is not only comprised from customized behavior of existing plugins with hte
--desktop switch, it also relies heavily on a few plugins added in this release, like:
- Fenet plugin is responsible for autostarting a window manager and possibly a compositing manager. It also installs a
.desktopfile for login managers to use to properly start LC.
- KBSwitch serves as keyboard layout configurator. It allows configuring the list of keyboard layouts as well as various options, like the button for groups switching, the compose key, etc.
- Krigstask provides a taskbar and a pager quark for SB2.
- Mellonetray provides a system tray area quark for SB2.
- Laughty is a system-wide desktop notifications daemon fetching event notifications from third-party applications and displaying them via LeechCraft plugins like Kinotify.
Desktop mode is very experimental for now and in its early stages, some things are known to not work, and we are hoping for some feedback about what should be added or changed.
LMP, our social collection-oriented audio player, migrated from Phonon to pure GStreamer, getting proper gapless playback support and compatibility with GStreamer 1.x. Mac OS X builds can also properly play various files now, while LMP on Mac was dumb during Phonon times.
Some other features are now possible because of the migration, like a proper equalizer, ReplayGain support or visualization. They are planned for future releases, though.
LMP now also supports instant queues when one can schedule some tracks in the playlist to be played right after the current one. This is useful, for example, to finish playback of the current album and then move to completely different artist.
There are a lot of smaller changes and improvements, among them:
- Automatic tags recoding.
- Handling power events to automatically pause playback when going to sleep and continue playback on resume.
- Media info is now fetched from the collection (if available) instead of being resolved from the disk, leading to much a couple orders of magnitude faster playlist manipulations.
- LMP now supports notifying the user about the progress of operations like transcoding or tags fetching via Job Holder API thus plugins like TPI or Summary.
- Volume change exponent can be configured now.
- Images in widgets like biography view or similar artists are now cached.
Using LMP as a sound notification backend is broken now, though, and will be fixed shortly after this release. Consider using Dumbeep module for now.
VK messaging support
Murm supports quite a few VKontakte features like friends groups, multiuser chats, and it automatically fetches media content embedded in messages like attached photos, audios, videos and reposts. Murm also offers the audios to be played or queued in media players like LMP:
The messages can also be encrypted via OTR if the corresponding plugin is installed and if the other chat participant supports OTR encryption.
Blasq is our new plugin for cloud image photo albums like Picasa. The exact services are implemented via subplugins, and there are already four of them for Flickr, LiveJournal, Picasa and VKontakte.
The plugin supports collections of photos, uploading (and mass-uploading) new photos and deleting them. Other plugins like Blogique may also use Blasq as the source of images to be inserted into blog posts.
Other new plugins
A few other plugins have also been added in this release, among them:
- Devmon for managing non-mass storage USB devices for plugins like LMP MTPSync (since MTP devices aren't generally mass storage ones).
- Imgaste for uploading images to imagebins. This was previously a part of Auscrie but has moved out to its separate plugin so that other modules like Poshuku or Monocle could benefit from it.
- Xtazy for fetching currently playing tune from MPRIS-compatible players or plugins like LMP. Again, it was a part of Azoth Xtazy before, but has moved out to its own plugin so that, for example, Blogique could also autodetect the current tune.
- Sysnotify, a LeechCraft notification backend using the libnotify D-Bus protocol.
- Scroblibre, a Submissions API 1.2-compliant scrobbler for services like libre.fm supporting this API.
- LMP MTPSync, LMP subplugin for uploading music to devices implementing the MTP protocol.
- VtyuLC, experimental VLC-based video player.
Core and existing plugins
Azoth and subplugins
- Azoth now shows a message in chat log whenever current date changes (at around 00:00).
- Shortcuts for erasing text from cursor to begin/end of line or beginning of the current word were added.
- It is now possible to change permissions of a room participant in all multiuser chat rooms.
- Support for multiple items selection in roster. Some actions like opening a chat or items removal can now be applied to all selected items.
- Old messages separator now appears for messages shown from history or before tab opening as well.
- Azoth Autopaste now supports hastebin.org and paste.org.ru services, and also remembers last used service and highlighting per each entry.
- Azoth StandardStyles now creates hash-based nick colors based on theme background color instead of global application palette leading to way better and more readable nick coloring.
- Blogique now supports service-specific tags in its WYSIWYG editor, like
<lj user="someuser"/>for LiveJournal, properly displaying them in view mode as well.
- Added support for previewing posts.
- Blogs can now be exported to various formats like pdf or fb2.
- Blogique Metida (LiveJournal support submodule) now supports fetching and modifying friends lists as well as sending and receiving messages.
History handling has been optimized a lot. Particularly, it doesn't make LeechCraft freeze for a few seconds each 15 minutes if the history is quite big now.
Poshuku CleanWeb, the ad blocker, has also been heavily optimized. Particularly, filters parsing and loading is now asynchronous and threaded, greatly reducing module load time. Filtering itself is also threaded now, utlizing all available CPU cores, so page loading is much faster now as well. Filters handling has been improved as well, particularly the element hiding logic which now catches more garbage.
It is also able now to automatically save crash logs and backtraces as a bonus. On the other hand, Dolozhee now supports attaching files to the reports and automatically checks for any files left by AnHero upon startup. So, installing both these modules makes crash reporting quite easy: it's enough to just start LeechCraft after a crash, and Dolozhee will automatically pick AnHero's traces and offer the user to create a bugreport. All that's left for the user is to fill in the Steps to reproduce field.
Moreover, AnHero now also works under Mac OS X! If you want to leave crash handling to the default Mac OS X handler, you could just deactivate this plugin.
- Rules in AdvancedNotifications can now be created from other plugins. For example, contact menu in Azoth now contains actions for creating a notification rule about the contact changing state or going online in one click.
- Aggregator has finally got shortcuts for easy navigation to previous/next item (or unread item).
- Cookies management has improved a lot in Core. Such features were added as whitelisting, blacklisting and cookies removal on application exit.
- Tabs now have adaptive width, so scroll buttons never appear in the tab bar.
- Deadlyrics now supports more search engines with better handling of non-unicode encodings and various patterns.
- Liznoo now supports prohibiting the screensaver if other plugins (like a video player) request it.
- Monocle now supports arbitrarily rotating document pages, both all pages in a document and each single page. It has also been optimized quite a lot, especially when navigating by several pages.
- NetStoreManager notifies about upload/download progress via Job Holder API plugins like TPI just like LMP.
- SB2 now supports different per-window and per-launch-mode (desktop or normal) settings. A few issues have also been fixed.
- TouchStreams can now automatically fetch the list of friends and their tracks and offer them as radio stations in LMP. Unfortunately due to VKontakte policies CAPTCHA would occasionally appear in this case.
Probably the most notable issue fixed in this release is a race condition in Qt network disk cache code leading to frequent crashes on some systems. A crash in QML caused by HotSensors under load on some systems is also fixed.
LeechCraft is also quite faster now, particularly during startup, as all plugin checks and initial loading is threaded now, utilizing all available CPU cores. Plugins initialization has also been moved to separate threads where possible. A few algorithmic optimizations have also been performed on loading process.
Saving settings has also been optimized and moved into its own thread, so huge system IO doesn't block LeechCraft if it has to save its state after, say, a group in Azoth roster has been folded or unfolded.
The jabber.ru server has some stability issues lately, so we've decided to move our XMPP discussion to the email@example.com conference. Please update your bookmarks!
Well, not moved, actually. We still will be available at the old jabber.ru server, but all the discussion (hopefully) will happen on the leechcraft.org.
We've finally managed to set up a continious integration server: meet our Jenkins instance!
For now it only uses a Debian Unstable build node to test as full plugins set as the distro supports, but we think of adding a couple of other build nodes to test builds on common distros like recent openSUSE and Ubuntu versions. Seems like we can also perform test builds of GitHub pull requests automatically as well, but that requires some more elaboration.
A CI server also allowed me to migrate to clang as a primary compiler instead of gcc, leading to faster compile times, better error messages and more issues caught in the code thanks to the warnings. If I'd migrate to clang without anything like a CI system I'd have to manually run gcc over the code quite often since gcc has its own quirks. Or maintainers would have quite a lot of build failures.
Less pain for the maintainers, more fun!