Version: (using KDE KDE 3.5.5)
Installed from: Ubuntu Packages
Currently, all tracks seem to be written to the device and it's synced at the end (and/or) when Disconnect is called. Which takes forever if your device isn't very fast and you got a lot of RAM available for cache. I therefore propose to call sync() after each track so one gets a much more reliable indication of the progress the transfer has made so far.
Oh and happy new year, keep up the good work!
I think that this would slow down the process of transferring the files. So I'm not sure if this is actually a good idea.
I'm not entirely sure if it would really slow down the process as opposed to
make it reflect the progress much closer.
When I think of it, MP3 are maybe 4mb per file or so, calling sync once every
few MB shouldn't really kill performance very much. You do have to call it at
the end of the process anyway (resulting in exactly the same amount of
traffic to the device). Right now it looks like it's stuck on my machine when
transfering say 500mb: the data is all stored in the cache very quickly then
I have to wait forever for the "last" file to make it...
i rarely use mediadevices with amarok, but i would prefer more useful progress bar over performace gain...
maybe it is possible to make some temporary option in svn version so people with mediadevices could test the change (unfortunately, i won't be able to not test it myself) ?
Not sure if this makes sense...
It makes a *ton* of sense. Right now, Amarok's GUI often freezes entirely during file copy, and the progress bar jumps all over the place. Why bother having a progress bar if it's going to jump from 6% to 29% to done?
I definitely support this so-called 'feature request'. Frankly, it's not just that; it's a bug, because the application's usability is substantially affected.
*** Bug 215728 has been marked as a duplicate of this bug. ***
I definitely agree with Peter. Amarok's progress bar will stop three times while transferring a 12 song album. While running in debug mode, I notice the below indications. Something needs to be done to increase the amount of knowledge I have about what Amarok is doing relative to portable media transfer. As of now, I will run in debug mode whenever I transfer media.
amarok: [IpodHandler] Adding "The Pietasters" - "Drunken Master"
amarok: END__: virtual void Meta::IpodHandler::addTrackInDB(const Meta::MediaDeviceTrackPtr&) - Took 0.00042s
amarok: BEGIN: void Meta::MediaDeviceHandler::addMediaDeviceTrackToCollection(Meta::MediaDeviceTrackPtr&)
amarok: BEGIN: void Meta::MediaDeviceHandler::setupReadCapability()
amarok: END__: void Meta::MediaDeviceHandler::setupReadCapability() - Took 0.0002s
amarok: END__: void Meta::MediaDeviceHandler::addMediaDeviceTrackToCollection(Meta::MediaDeviceTrackPtr&) - Took 0.0013s
amarok: Tracks left to copy after this one is now done: 0
amarok: END__: void Meta::MediaDeviceHandler::slotFinalizeTrackCopy(const Meta::TrackPtr&) - Took 0.0025s
amarok: END__: void Meta::IpodHandler::slotCopyingDone(KIO::Job*, KUrl, KUrl, time_t, bool, bool) - Took 0.0031s
amarok: BEGIN: void CollectionLocation::slotFinishCopy()
amarok: END__: void CollectionLocation::slotFinishCopy() - Took 0.00031s
amarok: BEGIN: void Meta::IpodHandler::fileTransferred(KJob*)
amarok: [IpodHandler] Tracks to copy still remain
amarok: [IpodHandler] Jobs: 0
amarok: BEGIN: void Meta::MediaDeviceHandler::copyNextTrackToDevice()
amarok: END__: void Meta::MediaDeviceHandler::copyNextTrackToDevice() - Took 0.00021s
I think of implementing this for Amarok 2.6. There will be no performance penalty, fsync() will be called on individual files, and waiting for fsync() will be in a separate thread, so no regression shall be introduced.
Git commit 9bfe431375630655047ea8681a12ff6bd5422839 by Matěj Laitl.
Committed on 15/04/2012 at 12:24.
Pushed by laitl into branch 'master'.
Complete iPod collection rewrite (also supports iPad, iPhone)
This is a result of 3-month effort to make Amarok iPod-like device
support future-proof and less buggy by using more modern MemoryMeta
framework to manage tracks internally.
The new plugin still uses libgpod  to access the devices and
supports all devices supported by it. The newest models may need the
infamous libashab.so library.
* Small configuration dialog for iPods that shows troubleshooting information
and allows to change iPod name.
* Improved usability of iPod playlists: iPod collection automatically transfers
tracks dropped to iPod playlists to iPod when it is needed.
* Tracks can now be transcoded when transferring them to iPod.
* optional libgpod dependency raised to 0.8.2 to support newest iPods.
* Amarok now prevents accidental unmounting of iPods in (small) time-frames
when iTunes database on iPod is not yet updated.
* Amarok detects when iPod is to be ejected from system and gracefully
disconnects it when it occurs.
* Hitting the eject button on iPod collection ejects it also from the system.
* iPod collection now detects whether iPod is safe to write and marks iPod
as read-only if not. This prevents "iPod shows 0 tracks" problem.
* Correct progress bar advancement when transferring tracks to iPod.
* iPod Collection supports multiple simultaneous cancellable transfers.
* Improved dialog to initialize iPod.
* Detection and elimination of stale and orphaned iPod tracks now works
correctly; users are notified about these when iPod is plugged in.
* iPod playlists now work correctly.
* Show correct error when transferring unsupported files to iPod.
Related: bug 291722, bug 219963, bug 279797, bug 289304, bug 234876
DIGEST: Amarok's iPod support is completely rewritten fixing many bugs
and adding features
M +3 -2 CMakeLists.txt
M +21 -0 ChangeLog
M +2 -2 README
M +1 -1 src/core-impl/collections/CMakeLists.txt
A +80 -0 src/core-impl/collections/ipodcollection/CMakeLists.txt
A +642 -0 src/core-impl/collections/ipodcollection/IpodCollection.cpp [License: GPL (v2+)]
A +260 -0 src/core-impl/collections/ipodcollection/IpodCollection.h [License: GPL (v2+)]
A +259 -0 src/core-impl/collections/ipodcollection/IpodCollectionFactory.cpp [License: GPL (v2+)]
A +93 -0 src/core-impl/collections/ipodcollection/IpodCollectionFactory.h [License: GPL (v2+)]
A +119 -0 src/core-impl/collections/ipodcollection/IpodCollectionLocation.cpp [License: GPL (v2+)]
A +74 -0 src/core-impl/collections/ipodcollection/IpodCollectionLocation.h [License: GPL (v2+)]
A +845 -0 src/core-impl/collections/ipodcollection/IpodMeta.cpp [License: GPL (v2+)]
A +327 -0 src/core-impl/collections/ipodcollection/IpodMeta.h [License: GPL (v2+)]
A +141 -0 src/core-impl/collections/ipodcollection/IpodMetaEditCapability.cpp [License: GPL (v2+)]
A +63 -0 src/core-impl/collections/ipodcollection/IpodMetaEditCapability.h [License: GPL (v2+)]
A +248 -0 src/core-impl/collections/ipodcollection/IpodPlaylist.cpp [License: GPL (v2+)]
A +113 -0 src/core-impl/collections/ipodcollection/IpodPlaylist.h [License: GPL (v2+)]
A +496 -0 src/core-impl/collections/ipodcollection/IpodPlaylistProvider.cpp [License: GPL (v2+)]
A +114 -0 src/core-impl/collections/ipodcollection/IpodPlaylistProvider.h [License: GPL (v2+)]
A +24 -0 src/core-impl/collections/ipodcollection/amarok_collection-ipodcollection.desktop
A +1 -0 src/core-impl/collections/ipodcollection/config-ipodcollection.h.cmake
A +414 -0 src/core-impl/collections/ipodcollection/jobs/IpodCopyTracksJob.cpp [License: GPL (v2+)]
A +108 -0 src/core-impl/collections/ipodcollection/jobs/IpodCopyTracksJob.h [License: GPL (v2+)]
A +69 -0 src/core-impl/collections/ipodcollection/jobs/IpodDeleteTracksJob.cpp [License: GPL (v2+)]
A +46 -0 src/core-impl/collections/ipodcollection/jobs/IpodDeleteTracksJob.h [License: GPL (v2+)]
A +83 -0 src/core-impl/collections/ipodcollection/jobs/IpodParseTracksJob.cpp [License: GPL (v2+)]
A +49 -0 src/core-impl/collections/ipodcollection/jobs/IpodParseTracksJob.h [License: GPL (v2+)]
A +33 -0 src/core-impl/collections/ipodcollection/jobs/IpodWriteDatabaseJob.cpp [License: GPL (v2+)]
A +37 -0 src/core-impl/collections/ipodcollection/jobs/IpodWriteDatabaseJob.h [License: GPL (v2+)]
A +205 -0 src/core-impl/collections/ipodcollection/support/IphoneMountPoint.cpp [License: GPL (v2+)]
A +53 -0 src/core-impl/collections/ipodcollection/support/IphoneMountPoint.h [License: GPL (v2+)]
A +229 -0 src/core-impl/collections/ipodcollection/support/IpodConfiguration.ui
A +466 -0 src/core-impl/collections/ipodcollection/support/IpodDeviceHelper.cpp [License: GPL (v2+)]
A +102 -0 src/core-impl/collections/ipodcollection/support/IpodDeviceHelper.h [License: GPL (v2+)]
A +58 -0 src/core-impl/collections/ipodcollection/support/IpodTranscodeCapability.cpp [License: GPL (v2+)]
A +49 -0 src/core-impl/collections/ipodcollection/support/IpodTranscodeCapability.h [License: GPL (v2+)]