15th February 2009by Danny Allen
One of the most challenging parts of the transition to Amarok 2 was refactoring the innards of the application to make it more scalable, robust, and flexible for future improvements. In many ways, this was one of the biggest technical problems of the 1.4 series - it did not scale well to new features.
Following the release of Amarok 2.0, we received mixed reviews from critics and users alike. Many writers praised the user interface overhaul and infrastructure changes, such as Ryan Paul in his article over at Ars Technica:
"After extensive testing, I'm convinced that Amarok 2 is a major improvement."
Jeremy LaCroix of linux.com gave a fair review and noted many aspects of Amarok 2.0 that left much improvement to be desired. As a team, we've concentrated on many of the concerns that have been raised in reviews and in forum posts by evaluating importance and relative cost of implementation. Examples of requests which we have brought back for the 2.1 release of Amarok include: track queueing, replay gain support, playlist searching and playlist layouts.
We were well aware that with the release of Amarok 2.0, it would be impossible to match the feature set precedent that had been set so high by us in previous releases. To put it simply, we felt that Amarok as a project would have been detrimentally affected by indefinitely waiting to reach feature parity with the 1.4 releases. We were forced to take a stand and simply tell ourselves to wait to implement them. Trying to incorporate the features that are the most useful and important is a difficult task when there are often twelve different responses between five people in a discussion - one man's garbage is another man's treasure. That said, we did elect to remove some features from Amarok entirely, mainly for technical reasons (multiple database support for example), some for lack of developer resources (Moodbar), and also some for usability reasons (such as the tabular playlist design - remember, we're the experts!).
Initially, the responses to the announcements of dropping features was exactly what we expected - there would be outcry. We expected this for a number of reasons: only the disgruntled speak up, and most readers wouldn't initially understand how they could adapt to new paradigms. We dealt with this by trying the best we could to deal with the fallout by responding to each individual complaint or worry, but obviously we couldn't get to all of them (and some were not worth wasting time on). I feel that we've managed the community quite well, and that the community has been good to us too by mostly understanding our position and being patient with the developments. Honest communication through blogs of missing features that would return was appreciated by users, and we've done our best to bring back the most requested for 2.1.
Many users have decided to stick with Amarok 1.4 for the time being until they see a better set of features implemented. And quite frankly, that's okay with us. On the other hand, there are users who are keen to try out newer development features but are uncomfortable messing with their system compiling unstable development versions. Neon, our nightly build package service has been praised and is exceptionally useful to give users cutting edge builds with no hassle.
Finally, it seems to us that most of our users have noticed the rough edges of the graphics which are being used in the application (specifically the context view). We realise that this does need some work and are trying hard to work with artists to develop some great visuals. We've also tried to improve the usability and performance of the context view by providing only a single containment rather than four, and better widgets to use.
If you're interested in seeing a tour of some of the new (and revisited) features which are coming to Amarok 2.1, take a look at this great overview.
|Commits||3301 by 290 developers, 8450 lines modified, 1715 new files|
|Bugs Opened||718 in the last 7 days|
|Bugs Closed||482 in the last 7 days|
|Kevin Patrick Scannell||
Internationalization (i18n) Status
|Low Saxon (nds)||
|Brazilian Portuguese (pt_BR)||
Bug Killers and Buzz
|Aaron J. Seigo||
|Adriaan de Groot||
There are 116 selections this week
Heuristic added to only show inline differences if the number of differences is less than half the length of the longest line
Fixes differences at the beginning of the line.
Silly oversight from my sight, both variables x and y do not have to be 0 at the same time when leaving the loop
fix crash in okular - I am not sure why this didn't happen before
(the fix comes from msdn <a href="http://msdn.microsoft.com/en-us/library/aa366589.aspx">http://msdn.microsoft.com/en-us/library/aa366589.aspx</a> - look at the example)
Massive refactoring of extender drag&drop handling.
This should avoid bugs with the old way of doing things (toplevel view on an offscreen widget can lose mouse events while dragging), and is generally shorter and cleaner.
There are still some regressions I'll be working on fixing, but it basically works, avoids crashes and is even faster.
Using nested event loops to achieve synchronous call behavior while doing Akonadi jobs has created way to many issues due to unexpected re-entrancy.
This is basically backport of a series of changes in trunk which replace this form of blocking with real blocking of the caller and delegating the Akonadi job execution to a worker thread.
This should fix all the bugs this is sent to. If they remain with 4.2.1 once it is released, please re-open.
Darío, in case I missed some of the eventloop related bugs, please feel free to close them as well.
Fixes a problem in kpilot where events that recur on a specific weekday each month (e.g., 3rd Thursday) were not synced properly.
This also fixes a problem where recurring events specified as a weekday from the end of the month (e.g., 2nd to the last Wednesday) are handled in a reasonable (though not entirely correct) fashion.
(The palm cannot handle events specified like this, so this patch attempts to convert the "from end of month" recurring event to a "from the beginning of month" event.)
Actually use correct sampling weights for scaling. This introduces some transparency along all edges.
Duplicate edge pixel as source of sampling, which fixes that transparency just introduced.
Also use correct width of dest image which was the main cause of the bug.
All in all it solves bug 169736.
The following check is an attempt to fix bug 180339 and other issues with Phonon.
It has been observed that Phonon will sometimes emit a stateChanged() with _both_ oldState and newState == 0, which makes little sense. After that it goes berserk, until you restart Amarok.
Now we try to detect this weird state, and then try to destroy and recreate all Phonon objects, in the hope of fixing the situation.
Fix bug causing trackers to be retried continuously when hostname can not be resolved because the network isn't up yet.
- Add a new convenience feature to create slots.
When trying to connect some signal to a slot in the local class, always offer a "Create Slot" option to automatically create a slot that exactly matches the signals signature and the typed text in the editor within the local class.
When the item is executed, the slot is declared within the class, and is added to connect(..) call like a picked slot. (this is not perfect yet, but works ok)
- Fix several bugs in the code-completion
- Only show builtin types in type-completion mode, instead of also showing other keywords
- Allow completing types behind "const "
- Allow non-type completion behind "for(; a < |".
- Propose implementing non-class functions using the implementation-helpers
- Implement a central manager that can manage multiple tooltips at the same time.
A priority can given when showing a tooltip, that can be used to either force the showing of only one specific tooltip, or to define the order of the vertically stacked tooltips.
- Fix a slight flicker that could happen when showing the tooltip
Add consistent keyboard shortcuts for all KIPI import/export plugins:
- Alt-<letter> - menu shortcut
- Alt-Shift-<letter> - export
- Alt-Shift-Ctrl-<letter> - import
The following <letter> is used:
F - Facebook
R - Flickr
P - Picasa Web Albums
S - SmugMug
G - Gallery
L - Flash (simpleviewer)
H - HTML
I - iPod
Tested both for Digikam and Gwenview.
Note: in Gwenview you need to open Plugin menu first to load plugins and make shortcut work (this may confuse users)
Adding a signal to ksmserver, that notifies DBus when KDE is about to logout.
This can be useful for some applications, in that case for PowerDevil, as related to bug #183273.
PowerDevil should be notified when a logout operation is in progress, so that it won't trigger a suspension while the pc is actually shutting down. This behavior is (was) really annoying.
I'm CC-ing the list since I don't know who the maintainer of ksm is, and also, should I backport this?
Obviously, a commit in PowerDevil for taking advantage of this is coming very soon
Adding a timeout feature to inhibition.
This can be useful both in case of cleaning up, both for some use cases.
I have just added the infrastructure as an overload, as I don't know what effect this could have on Solid API.
I'd use ::inhibit(QString,QString, int = <default>), but I still fear this could break something.
Kevin, I'd really like your opinion on this, I think this feature is really needed and can be useful.
I am also planning to add a check through DBus, for that, wouldn't it be smarter if we passed a KAboutData to inhibit?
So we would have the application friendly name for the notification and the service name we need for DBus.
I'd like your opinion on that too.
We could deprecate the current inhibit, but my main concern is DBus and if we are actually forced to keep some kind of API compatibility.
From now on, solid will check if hybrid suspension is available.
If that is the case, it will automatically trigger hybrid instead of standard suspension to ram.
So there won't be extra options in PowerDevil and/or Solid: Hybrid will be made default if available
Rework the Akonadi engine in preparation for Contacts
- Fetch collections on demand only, should save us some startup time when loading the akonadi engine (no queries run until you actually use it)
- Link in KABC
- Some plumbing for Akonadi Contacts
- Renaming the keys for Emails and collections to:
EmailCollections to retrieve all emailcollections
ContactCollections to retrieve all contactcollections
Email-<id> to retrieve specific emails
Contact-<id> to retrieve specific contact (no workee atm)
Rework of dim screen for administration mode effect.
Now it changes brightness and saturation of all windows instead of painting a semi-transparent area on the screen.
And it works nicely with fullscreen effects.
So the windows are not dimmed in e.g. coverswitch.
It lives! First successful (well, mostly) spell checking of text containing sentences in more than language.
Apart from that:
- language guesser also returns info about how reliable detection was. Will be needed for fallbacks
- fixed copyrights
- more tests
GUI: "Show Original File" (or "Show Original Directory") in the RMB popup for a symlink that points to an item in another directory.
Starting to implement KWallet support for user account details.
Both KWalletManager and akonadi's imap resource were useful to discover how KWallet API works.
Right now the user account and its password is stored in kwallet.
Next: retrieve the user account details from kwallet.
various svg import improvements:
- better handling of stroke types
- basic support for embedded svg fragments
- support for pattern viewBox attribute
- some fixes for parsing of stroke dashes
- display attribute is now managed by the svg context
- x and y attribute of use and text elements are parsed separately now
o add a way to store temporary images not part of the image collection to the store on saving.
This should be used only for temporary images e.g. a pixmap representation of a draw:frame.
The code is untested but should work.
Here is the functionality to save the qimage for the frame.
Can you please check if it works.
Allow choosing between album and track replay gain modes, or even disabling replay gain altogether.
I put the option in the Settings menu, as that seemed the most appropriate place (we don't want to pollute Amarok, and it's not a Playlist option).
The other option is to put it in the configuration dialog, but users may want to change it when changing random mode between track and album, or when changing playlists.
There are no icons for the different modes in the menu yet.
add filter for date added to collection.
you can add a string like "added:today" or "added:<1m3d" to the filter textedit.
there is no GUI for it at the moment, but this at least provides the backend support.
yes, this as a discoverability of -1000, but i need some UI ideas (and i think Dan has plans to redo the edit filter dialog completely, so i'm somewhat holding off).
Another large amount of changes...
* New implementation for RecordSettingsPage, increased support in LinTVRecord for the record options.
* Screenshot support slighly enhanced.
* When in fullscreen, the cursor is automatically hidden after 3 seconds.
* Initial support for cropping video in LinTVPlay and LinTVRecord.
Add KNS ("Get New Stuff") support to deKorator
Frank (of openDesktop.org fame) was kind enough to add the GNS provider entries to kde-look.org for deKorator themes, and I quickly tested it with some themes.
Unfortunately, many themes are not following the guidelines for archive names or contents, so after installing them, they do not show up in the theme list.
I will improve "broken" theme file detection in the future.
Resources were being loaded 3 times (apptsummary, todosummary and in korganizer's kpart).
Now apptsummary and todosummary, instead of loading the resources, they just create korganizer's kpart (in case it doesn't exist yet), which loads the resources only once.
This also eliminates the "graphical bug" when switching to Summary, in which the agenda items disappeared right before the switch (because the second resource load closed the calendar).
Fixup of the authors:
Moved Matt to the credits section as he doesn't actively work on kdevelop4 source code.
Separated credits into two sections, the first part lists people that contributed to kdevelop4, the rest is separated by an "old contributors" entry and lists anybody who has been in the list but worked only on kdev3.
If anybody reading this feels he should be
a) moved from author to credits or vice versa
b) added to either of the sections as he isn't listed just let me know by replying to this mail.
committing python script to test what exactly the panormaio plugin has been trying to do, this can also act as generic data feeder for plugin if possible...
anyways this file right now is for reference, i need to correct the way json is being parsed... instead of being converted to dict and unicode it need to dict and list
Facebook application type has changed to Desktop (was wrongly set as Web before).
This requires slightly different way of authenticating/signing API requests and will therefore break Facebook import/export for all users that will not upgrade to new code.
Since Release Candidate 2 is this weekend, this should not be for too long. SVN users should just rebuild.
Disable application keypad support in the default key bindings file as, although it produces the correct key codes as tested using 'vttest', it breaks Vim - which enables application key pad by default.
Make it once again possible to compile KOffice with KOXML_USE_QDOM defined; this is not defined by default because it breaks kpresenter, kchart and kplato and it is slower, but it should be definable so we can check for errors in our dom implementation.
(And I'm sure there is one, since if I define KOXML_USE_QDOM, krita loads its documents with Qt45 again, which is broken if it's undefined, but I can now start to debug the problem again).
Note well: KoXmlNode has never been meant as a class you can extend with convenience methods.
Its API should be completely identical with the correspoding Qt class!
Convenience methods should be defined outside this class!
Also note: I have marked all places where applications use the aforementioned convenience methods with XXX!!!
Disable Box, Mitchell,Lanczos3, BSpline,Bell scaling methods
Rename Triangle to Biliniar
Implement Bicubic (test shows it to be as good as photoshops), but it has a bug which gives some nasty sideeffect sometimes.
Solid requires a networking backend to be installed for Solid::Networking to not be useless.
The only backend currently is networkmanager.
Because theirs no Solid::Networking::isUseless() method, only enable the automagic adding/removing of service if networkmanager is found.
This is so not futureproof.
"And now for something completely different..." Set a style-sheet on the TabBar widget in the CurrentTrack applet.
You will notice that it looks _very_ different now; much less blocky than before.
But it also still has some issues (at the bottom e.g.), which might be solvable with some tweaking, or not.
Initial import: a kioslave listing the network from a device centric point of view, WIP
Includes a rudimentary library solidnetwork which might become part of solid very later on.
It contains objects which represent the current topic of the network and gets updated as the topic changes.
The backends might be the service discovery services (DNSSD,SLP,...), user/admin edited data, and whatever else helps to know about what is/should be in reach of this computer over the net.
Currently DNSSD as delivered by KDNSSD is used to feed some data to play with.
Note: If you play with this version of networkkio, press reload after entering network:/ the first time, because the cache is only filled after the first call to the kioslave.
Do not use the old protocol anymore, use XMPP1.0
This means you don't need anymore to configure something special for SSL
Because we now use srv, being able to change the host is usless
Some servers resuire session to be used with XMPP1.0
Also the google server change the resource and doesn't allow us to send a wrong resource in the from field, so don't fill that field
rework pause mode
- game is now paused if the board loses focus (e.g. if a menu is opened or the application itself loses focus)
- game can now be resumed by clicking the board
There is a strange timer issue that needs to be resolved.
If you pause the game and then choose to play a new game, the timer has the negative pause time. o.O
But that's a different matter and the timers are on my list anyway. Too many type casts... :)