Summary: | feature request: save playlist changes immediately instead of program quit | ||
---|---|---|---|
Product: | [Applications] juk | Reporter: | Simonics Zsolt <simca> |
Component: | general | Assignee: | Scott Wheeler <wheeler> |
Status: | RESOLVED FIXED | ||
Severity: | wishlist | ||
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Compiled Sources | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: |
Description
Simonics Zsolt
2003-11-06 11:29:18 UTC
really, it's common to quit the desktop without closing apps running in the system tray - and playlists are gone. Hear hear to this...I've lost several hours of work as well. CVS commit by mpyne: Fix bug 67392 (save playlist changes immediately), by auto-saving the playlists every 10 minutes. Backport will follow. CCMAIL:67392@bugs.kde.org M +20 -0 playlistbox.cpp 1.122 M +1 -0 playlistbox.h 1.68 --- kdemultimedia/juk/playlistbox.h #1.67:1.68 @@ -106,4 +106,5 @@ private slots: void slotSetViewMode(int index); void slotPlaylistDestroyed(Playlist*); + void slotSavePlaylists(); void slotAddItem(const QString &tag, unsigned column); --- kdemultimedia/juk/playlistbox.cpp #1.121:1.122 @@ -24,4 +24,5 @@ #include <qpainter.h> #include <qwidgetstack.h> +#include <qtimer.h> #include "playlistbox.h" @@ -144,4 +145,7 @@ PlaylistBox::PlaylistBox(QWidget *parent QTimer::singleShot(0, object(), SLOT(slotScanFolders())); enableDirWatch(true); + + // Auto-save playlists after 10 minutes + QTimer::singleShot(600000, this, SLOT(slotSavePlaylists())); } @@ -338,4 +342,20 @@ void PlaylistBox::slotPlaylistDestroyed( } +void PlaylistBox::slotSavePlaylists() +{ + kdDebug(65432) << "Auto-saving playlists.\n"; + + PlaylistList l; + CollectionList *collection = CollectionList::instance(); + for(QListViewItem *i = firstChild(); i; i = i->nextSibling()) { + Item *item = static_cast<Item *>(i); + if(item->playlist() && item->playlist() != collection) + l.append(item->playlist()); + } + + Cache::savePlaylists(l); + QTimer::singleShot(600000, this, SLOT(slotSavePlaylists())); +} + // For the following two function calls, we can forward the slot*Item calls // to the tree view mode as long as it has already been setup, whether or CVS commit by mpyne: Backport fix for bug 67392 (save playlist changes immediately) to KDE 3.3. The bug is misnamed: Data-loss is a bug, not an RFE. ;-) In this case, data loss would occur if JuK crashed, reverting all of your playlists to the way they were when JuK started. The fix works by auto-saving every 10 minutes in order to avoid thrashing the hard drive with every change. CCMAIL:67392-done@bugs.kde.org M +20 -0 playlistbox.cpp 1.116.2.2 M +1 -0 playlistbox.h 1.66.2.1 --- kdemultimedia/juk/playlistbox.h #1.66:1.66.2.1 @@ -105,4 +105,5 @@ private slots: void slotSetViewMode(int index); void slotPlaylistDestroyed(Playlist*); + void slotSavePlaylists(); void slotAddItem(const QString &tag, unsigned column); --- kdemultimedia/juk/playlistbox.cpp #1.116.2.1:1.116.2.2 @@ -24,4 +24,5 @@ #include <qpainter.h> #include <qwidgetstack.h> +#include <qtimer.h> #include "playlistbox.h" @@ -142,4 +143,7 @@ PlaylistBox::PlaylistBox(QWidget *parent QTimer::singleShot(0, object(), SLOT(slotScanFolders())); + + // Auto-save playlists after 10 minutes + QTimer::singleShot(30000, this, SLOT(slotSavePlaylists())); } @@ -325,4 +329,20 @@ void PlaylistBox::slotPlaylistDestroyed( } +void PlaylistBox::slotSavePlaylists() +{ + kdDebug(65432) << "Auto-saving playlists.\n"; + + PlaylistList l; + CollectionList *collection = CollectionList::instance(); + for(QListViewItem *i = firstChild(); i; i = i->nextSibling()) { + Item *item = static_cast<Item *>(i); + if(item->playlist() && item->playlist() != collection) + l.append(item->playlist()); + } + + Cache::savePlaylists(l); + QTimer::singleShot(600000, this, SLOT(slotSavePlaylists())); +} + // For the following two function calls, we can forward the slot*Item calls // to the tree view mode as long as it has already been setup, whether or What exactly would the problem be with saving the single changes? As far as I know, the Linux kernel caches them anyway, before it writes them to the disk. There is a reason for the "flush" command after all ;-) And I think the changed files would be safer in the kernel cache. That way, if juk crashes, nothing is lost. If the kernel crashes, all is lost anyway... Just a suggestion. Thank you for working on juk :-) To do something like that would require significantly restructuring the way that the cache is organized as it would need to be a "sparse" file and even then there are problems with such. Just to put things in perspective saving the cache takes several seconds. It's not something you want to repeat a lot. Well, I did not know a playlist file was so big it took several seconds to move it from one chache to another... But hey, I have not looked into the source code of juk. So I have no idea how it does those things anyway. I just saw the phrase "thrashing the hard drive", remembered that that should not be a problem, and pointed it out in case it would allow for a better solution. If that is not feasable due to the way juk works: Oh well, nothing more lost than a bit of thought and a few minutes of writing time. :-) > ------- Additional Comments From Icekiss gmx at 2004-09-05 15:20 -------
> Well, I did not know a playlist file was so big it took several seconds to
> move it from one chache to another.
The problem is that there is only one cache, and it includes your entire
Collection List.
If you'd like to save a separate copy of a playlist, there is always the File
-> Save option that you can use. I was going to add that before I realized
it had already been implemented. :-/
|