Bug 224437

Summary: Track skipped in CD Rip - slash as part of track title
Product: [Applications] amarok Reporter: Valorie Zimmerman <valorie.zimmerman>
Component: Collections/LocalAssignee: Amarok Developers <amarok-bugs-dist>
Status: RESOLVED FIXED    
Severity: minor CC: B.Steinbrink, fdruec1, manu.wagner, myriam, nhn, quazgar
Priority: NOR    
Version: 2.5.0   
Target Milestone: 2.6   
Platform: Ubuntu   
OS: Linux   
Latest Commit: Version Fixed In: 2.6
Sentry Crash Report:

Description Valorie Zimmerman 2010-01-27 08:58:35 UTC
Version:           2.2.2 (using KDE 4.3.4)
Compiler:          gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9) $ gcc -v Using built-in specs. Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.1-4ubuntu9' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.4.1 (Ubuntu 4.4.1-4ubuntu9)
OS:                Linux
Installed from:    Ubuntu Packages

When ripping a newly-purchased CD, I noticed that one track was NOT ripped, probably because of the title: Statues/Shadows (band is Speaker Speaker).

I closed Amarok, and opened a new instance using -d --nofork. This is the output after I asked to have that track added to the collection:

amarok: BEGIN: bool CollectionTreeView::onlyOneCollection(const QModelIndexList&)                                                  
amarok: END__: bool CollectionTreeView::onlyOneCollection(const QModelIndexList&) - Took 0.0002s                                   
amarok: BEGIN: bool CollectionTreeView::onlyOneCollection(const QModelIndexList&)                                                  
amarok: END__: bool CollectionTreeView::onlyOneCollection(const QModelIndexList&) - Took 0.00018s                                  
amarok: BEGIN: bool CollectionTreeView::onlyOneCollection(const QModelIndexList&)                                                  
amarok: END__: bool CollectionTreeView::onlyOneCollection(const QModelIndexList&) - Took 0.00016s                                  
amarok: BEGIN: void CollectionTreeView::copyTracks(const QSet<CollectionTreeItem*>&, Amarok::Collection*, bool) const              
amarok:    starting source->prepareCopy                                                                                            
amarok:   BEGIN: void CollectionLocation::prepareCopy(QueryMaker*, CollectionLocation*)                                            
amarok:   END__: void CollectionLocation::prepareCopy(QueryMaker*, CollectionLocation*) - Took 0.00024s                            
amarok: END__: void CollectionTreeView::copyTracks(const QSet<CollectionTreeItem*>&, Amarok::Collection*, bool) const - Took 0.0012s                                                                                                                                  
amarok: BEGIN: void CollectionLocation::resultReady(const QString&, const Meta::TrackList&)                                        
amarok: END__: void CollectionLocation::resultReady(const QString&, const Meta::TrackList&) - Took 0.00029s                        
amarok: BEGIN: void CollectionLocation::queryDone()                                                                                
amarok:    we were about to copy something, lets proceed                                                                           
amarok:   BEGIN: void CollectionLocation::startWorkflow(const Meta::TrackList&, bool)                                              
amarok:     BEGIN: virtual void AudioCdCollectionLocation::showSourceDialog(const Meta::TrackList&, bool)                          
amarok:     END__: virtual void AudioCdCollectionLocation::showSourceDialog(const Meta::TrackList&, bool) - Took 0.047s            
amarok:   END__: void CollectionLocation::startWorkflow(const Meta::TrackList&, bool) - Took 0.047s                                
amarok: END__: void CollectionLocation::queryDone() - Took 0.047s                                                                  
amarok: BEGIN: void AudioCdCollectionLocation::onFormatSelected(int)                                                               
amarok:   BEGIN: QStringList MountPointManager::collectionFolders()                                                                
amarok:     [MountPointManager] QDesktopServices::MusicLocation:  "/home/valorie/Music"                                            
amarok:   END__: QStringList MountPointManager::collectionFolders() - Took 0.00042s                                                
amarok:   BEGIN: virtual bool Meta::AudioCdAlbum::isCompilation() const                                                            
amarok:   END__: virtual bool Meta::AudioCdAlbum::isCompilation() const - Took 8.8e-05s                                            
amarok:    I'm about to do Amarok::vfatPath( result ), this is result:  "Speaker Speaker"                                          
amarok:    I'm about to do Amarok::vfatPath( result ), this is result:  "Speaker Speaker"                                          
amarok:    I'm about to do Amarok::vfatPath( result ), this is result:  "Speaker Speaker"                                          
amarok:    I'm about to do Amarok::vfatPath( result ), this is result:  "Speaker Speaker"                                          
amarok:    I'm about to do Amarok::vfatPath( result ), this is result:  "Statues/Shadows"                                          
amarok:    I'm about to do Amarok::vfatPath( result ), this is result:  ""                                                         
amarok:    I'm about to do Amarok::vfatPath( result ), this is result:  "Call It Off"                                              
amarok:    I'm about to do Amarok::vfatPath( result ), this is result:  ""                                                         
amarok:    I'm about to do Amarok::vfatPath( result ), this is result:  ""                                                         
amarok: END__: void AudioCdCollectionLocation::onFormatSelected(int) - Took 0.07s                                                  
amarok: BEGIN: virtual bool Meta::AudioCdAlbum::isCompilation() const                                                              
amarok: END__: virtual bool Meta::AudioCdAlbum::isCompilation() const - Took 9.7e-05s                                              
amarok:  I'm about to do Amarok::vfatPath( result ), this is result:  "Speaker Speaker"                                            
amarok:  I'm about to do Amarok::vfatPath( result ), this is result:  "Speaker Speaker"                                            
amarok:  I'm about to do Amarok::vfatPath( result ), this is result:  "Speaker Speaker"                                            
amarok:  I'm about to do Amarok::vfatPath( result ), this is result:  "Speaker Speaker"                                            
amarok:  I'm about to do Amarok::vfatPath( result ), this is result:  "Statues/Shadows"                                            
amarok:  I'm about to do Amarok::vfatPath( result ), this is result:  ""                                                           
amarok:  I'm about to do Amarok::vfatPath( result ), this is result:  "Call It Off"                                                
amarok:  I'm about to do Amarok::vfatPath( result ), this is result:  ""                                                           
amarok:  I'm about to do Amarok::vfatPath( result ), this is result:  ""                                                           
amarok: BEGIN: virtual void AudioCdCollectionLocation::getKIOCopyableUrls(const Meta::TrackList&)                                  
amarok:   BEGIN: bool SqlCollectionLocation::startNextJob()                                                                        
amarok:      copying from  KUrl("audiocd:/Ogg Vorbis/ - 010 - Statues/Shadows.ogg")  to  KUrl("file:///home/valorie/Music/S/Speaker Speaker/Call It Off/10 - Statues-Shadows.ogg")                                                                                    
amarok:     BEGIN: void ProgressBar::setDescription(const QString&)                                                                
amarok:     END__: void ProgressBar::setDescription(const QString&) - Took 9.3e-05s                                                
amarok:     BEGIN: void CompoundProgressBar::addProgressBar(ProgressBar*, QObject*)                                                
amarok:       BEGIN: void ProgressBar::setDescription(const QString&)                                                              
amarok:       END__: void ProgressBar::setDescription(const QString&) - Took 4.7e-05s                                              
amarok:     END__: void CompoundProgressBar::addProgressBar(ProgressBar*, QObject*) - Took 0.00053s                                
amarok:   END__: bool SqlCollectionLocation::startNextJob() - Took 0.0016s                                                         
amarok: END__: virtual void AudioCdCollectionLocation::getKIOCopyableUrls(const Meta::TrackList&) - Took 0.0018s                   
amarok: BEGIN: virtual OrganizeCollectionDialog::~OrganizeCollectionDialog()                                                       
amarok: END__: virtual OrganizeCollectionDialog::~OrganizeCollectionDialog() - Took 0.00011s                                       
X Error: BadWindow (invalid Window parameter) 3                                                                                    
  Major opcode: 20 (X_GetProperty)                                                                                                 
  Resource id:  0x522014c                                                                                                          
amarok:  [WARNING!] An error occurred when copying a file:  "The file or folder /Ogg Vorbis/ - 010 - Statues/Shadows.ogg does not exist."                                                                                                                             
amarok: BEGIN: bool SqlCollectionLocation::startNextJob()                                                                          
amarok: END__: bool SqlCollectionLocation::startNextJob() - Took 0.00018s                                                          
amarok:  Database temporary table setup did not complete due to no directories needing to be processed.
amarok: BEGIN: void CompoundProgressBar::childBarComplete(ProgressBar*)
amarok:   BEGIN: void ProgressBar::setDescription(const QString&)
amarok:   END__: void ProgressBar::setDescription(const QString&) - Took 0.00021s
amarok:   BEGIN: void StatusBar::hideProgress()
amarok:   END__: void StatusBar::hideProgress() - Took 0.00087s
amarok: END__: void CompoundProgressBar::childBarComplete(ProgressBar*) - Took 0.002s
amarok: BEGIN: void ScanManager::startIncrementalScan()
amarok:   BEGIN: void ScanManager::checkTables(bool)
amarok:   END__: void ScanManager::checkTables(bool) - Took 0.00025s
amarok:   BEGIN: QStringList ScanManager::getDirsToScan()
amarok:   END__: QStringList ScanManager::getDirsToScan() - Took 0.094s
amarok:    GOING TO SCAN:
amarok:    (a *lot*)
amarok:   BEGIN: void ScanManager::writeBatchIncrementalInfoFile()
amarok:   END__: void ScanManager::writeBatchIncrementalInfoFile() - Took 0.0037s
amarok:   BEGIN: XmlParseJob::XmlParseJob(ScanManager*, SqlCollection*)
amarok:     BEGIN: void ProgressBar::setDescription(const QString&)
amarok:     END__: void ProgressBar::setDescription(const QString&) - Took 9.5e-05s
amarok:     BEGIN: void CompoundProgressBar::addProgressBar(ProgressBar*, QObject*)
amarok:       BEGIN: void ProgressBar::setDescription(const QString&)
amarok:       END__: void ProgressBar::setDescription(const QString&) - Took 8.7e-05s
amarok:     END__: void CompoundProgressBar::addProgressBar(ProgressBar*, QObject*) - Took 0.00055s
amarok:     BEGIN: ProgressBar* ProgressBar::setAbortSlot(QObject*, const char*)
amarok:        Setting abort slot for  "Scanning music"
amarok:        connecting to  1abort()
amarok:     END__: ProgressBar* ProgressBar::setAbortSlot(QObject*, const char*) - Took 0.00012s
amarok:   END__: XmlParseJob::XmlParseJob(ScanManager*, SqlCollection*) - Took 0.0016s
amarok:   BEGIN: SqlCollectionDBusHandler::SqlCollectionDBusHandler(SqlCollection*)
amarok:      Register object:  true
amarok:   END__: SqlCollectionDBusHandler::SqlCollectionDBusHandler(SqlCollection*) - Took 0.00015s
amarok: END__: void ScanManager::startIncrementalScan() - Took 0.11s
amarok: BEGIN: virtual void XmlParseJob::run()
amarok:    Success. Committing result to database.
amarok:    Database temporary table setup did not complete due to no directories needing to be processed.
amarok: END__: virtual void XmlParseJob::run() - Took 0.12s
amarok: BEGIN: virtual XmlParseJob::~XmlParseJob()
amarok:   BEGIN: void CompoundProgressBar::childBarComplete(ProgressBar*)
amarok:     BEGIN: void ProgressBar::setDescription(const QString&)
amarok:     END__: void ProgressBar::setDescription(const QString&) - Took 0.00024s
amarok:     BEGIN: void StatusBar::hideProgress()
amarok:     END__: void StatusBar::hideProgress() - Took 0.0011s
amarok:   END__: void CompoundProgressBar::childBarComplete(ProgressBar*) - Took 0.0028s
amarok: END__: virtual XmlParseJob::~XmlParseJob() - Took 0.0032s
amarok: BEGIN: void ScanManager::slotFinished()
amarok: END__: void ScanManager::slotFinished() - Took 0.00016s
Comment 1 Maximilian Kossick 2010-01-27 13:05:27 UTC
AudioCDCollectionLocation does not return a valid path where the track can be copied from:

amarok:  [WARNING!] An error occurred when copying a file:  "The file or folder
/Ogg Vorbis/ - 010 - Statues/Shadows.ogg does not exist."

Might be a audiocd kioslave bug as well. Anyway, Nikolaj needs to look at it.
Comment 2 Myriam Schweingruber 2010-02-24 21:21:58 UTC
*** Bug 228358 has been marked as a duplicate of this bug. ***
Comment 3 quazgar 2010-02-24 21:36:24 UTC
(In reply to comment #2)
> *** Bug 228358 has been marked as a duplicate of this bug. ***

Ok, it seems to be not just when there are slashes in a title, possibly also with whitespaces.

In my case the (probably) relevant line from the debugging output was:

copying from  KUrl("audiocd:/Ogg Vorbis/-03-Sting - Fields Of Gold.ogg")  to  KUrl("file:///data/musik/S/Sting_-/Ten_Summoners's_Tales/03_Sting_-_Fields_Of_Gold.ogg")

It's also probably not an kio bug either, since copying the same virtual file from the audiocd: directory in Dolphin to a plain "normal" filesystem directory worked alright for me.
Comment 4 Myriam Schweingruber 2010-02-24 22:04:42 UTC
I just tried myself, and got the following error:

amarok:       BEGIN: float Meta::MediaDeviceHandler::freeSpace() const                                                                                                      
amarok:         BEGIN: virtual float Meta::UmsHandler::totalCapacity() const                                                                                                
amarok:         END__: virtual float Meta::UmsHandler::totalCapacity() const - Took 3.3e-05s                                                                                
amarok:          totalCapacity: 9.83446e+11                                                                                                                                 
amarok:          usedCapacity(): 6.91178e+11                                                                                                                                
amarok:         BEGIN: virtual float Meta::UmsHandler::totalCapacity() const                                                                                                
amarok:         END__: virtual float Meta::UmsHandler::totalCapacity() const - Took 3.1e-05s                                                                                
amarok:       END__: float Meta::MediaDeviceHandler::freeSpace() const - Took 0.00059s                                                                                      
amarok:        Copying  21  tracks                                                                                                                                          
amarok:       BEGIN: void Meta::MediaDeviceHandler::copyNextTrackToDevice()                                                                                                 
amarok:         BEGIN: bool Meta::MediaDeviceHandler::privateCopyTrackToDevice(const Meta::TrackPtr&)                                                                       
amarok:           [UmsHandler] Mountpoint is:  "/MyBook"                                                                                                                    
amarok:           [UmsHandler] Url's path is:  "/MyBook/Barbara/Concerts Musicorama (disc 1_ Olympia 4 février 69, 1ère partie)/21 - Mon grand frisé.ogg"                   
amarok:           [UmsHandler] About to copy from:  "/9WjgEr_C2upU_M_gKfJeqVVuRCM-/21"                                                                                      
amarok:           [UmsHandler] to:  KUrl("file:///MyBook/Barbara/Concerts Musicorama (disc 1_ Olympia 4 février 69, 1ère partie)/21 - Mon grand frisé.ogg")                 
amarok:           BEGIN: virtual bool Meta::UmsHandler::libCopyTrack(const Meta::TrackPtr&, Meta::MediaDeviceTrackPtr&)                                                     
amarok:             BEGIN: bool Meta::UmsHandler::kioCopyTrack(const KUrl&, const KUrl&)                                                                                    
amarok:               [UmsHandler] Copying from * KUrl("file:///9WjgEr_C2upU_M_gKfJeqVVuRCM-/21") * to * KUrl("file:///MyBook/Barbara/Concerts Musicorama (disc 1_ Olympia 4 février 69, 1ère partie)/21 - Mon grand frisé.ogg") *                                                                                                                      
amarok:             END__: bool Meta::UmsHandler::kioCopyTrack(const KUrl&, const KUrl&) - Took 0.012s                                                                      
amarok:           END__: virtual bool Meta::UmsHandler::libCopyTrack(const Meta::TrackPtr&, Meta::MediaDeviceTrackPtr&) - Took 0.012s                                       
amarok:         END__: bool Meta::MediaDeviceHandler::privateCopyTrackToDevice(const Meta::TrackPtr&) - Took 0.012s                                                         
amarok:       END__: void Meta::MediaDeviceHandler::copyNextTrackToDevice() - Took 0.012s                                                                                   
amarok:     END__: void Meta::MediaDeviceHandler::copyTrackListToDevice(Meta::TrackList) - Took 0.015s                                                                      
amarok:   END__: virtual void MediaDeviceCollectionLocation::copyUrlsToCollection(const QMap<KSharedPtr<Meta::Track>, KUrl>&) - Took 0.015s                                 
amarok: END__: virtual void AudioCdCollectionLocation::getKIOCopyableUrls(const Meta::TrackList&) - Took 0.015s                                                             
amarok: BEGIN: virtual OrganizeCollectionDialog::~OrganizeCollectionDialog()                                                                                                
amarok: END__: virtual OrganizeCollectionDialog::~OrganizeCollectionDialog() - Took 6.1e-05s                                                                                
amarok(32353)/kio (KIOJob) KIO::SlaveInterface::dispatch: error  111   "/MyBook/Barbara/Concerts Musicorama (disc 1_ Olympia 4 février 69, 1ère partie)/21 - Mon grand frisé.ogg"                                                                                                                                                                       
amarok(32353)/kio (KIOJob) KIO::SlaveInterface::dispatch: error  111   "/9WjgEr_C2upU_M_gKfJeqVVuRCM-/21"                                                                   
amarok: BEGIN: void Meta::UmsHandler::fileTransferred(KJob*)                                                                                                                
amarok:   [UmsHandler] file transfer failed:  "/9WjgEr_C2upU_M_gKfJeqVVuRCM-/21"                                                                                            
amarok: END__: void Meta::UmsHandler::fileTransferred(KJob*) - Took 6.5e-05s
Comment 5 Myriam Schweingruber 2010-02-27 13:46:31 UTC
*** Bug 211519 has been marked as a duplicate of this bug. ***
Comment 6 Myriam Schweingruber 2010-02-27 13:47:38 UTC
*** Bug 226440 has been marked as a duplicate of this bug. ***
Comment 7 Myriam Schweingruber 2010-02-27 13:48:23 UTC
*** Bug 228725 has been marked as a duplicate of this bug. ***
Comment 8 Myriam Schweingruber 2011-09-26 15:32:42 UTC
Is this still valid with Amarok 2.4.3 or current git?
Comment 9 Myriam Schweingruber 2012-01-01 14:36:27 UTC
The problem is the / in the title, as this is a reserved character in some operating systems it will always fail. Try ripping with a command-line tool and rename the file or disable the CDDB information
Comment 10 Björn Steinbrink 2012-02-01 20:35:38 UTC
I'm seeing this problem with amarok 2.5.0 when there's a question mark in the track title. I don't have any CD with a track with a slash in title, but I suspect both problems to have a common source, namely that the track title is not encoded when it is embedded into the URL.

amarok:     [SqlCollectionLocation] copying from  KUrl("audiocd:/Ogg Vorbis/ - 07 - Where Is The Line?.ogg?device=/dev/sr0")  to  KUrl("file:///home/doener/storage/media/music/Billy Talent/Billy Talent II/07 - Where Is The Line_.ogg") 

I've posted a patch here: https://git.reviewboard.kde.org/r/103841/
Comment 11 Matěj Laitl 2012-02-02 09:47:38 UTC
Git commit 67f5c1ae332f6727f91af346a6b5858fe6e5b285 by Matěj Laitl, on behalf of Björn Steinbrink.
Committed on 02/02/2012 at 10:37.
Pushed by laitl into branch 'master'.

Fix failure to rip CD tracks with special characters in their title

Certain characters such as ? have a special meaning in URLs so they have
to be encoded when used in path component, but the AudioCdCollection
fails to do so and just embeds the raw track title into the URL. Thus it
is impossible to rip tracks that contain such characters in their title,
as the URL passed to the KIO subsystem is invalid.
FIXED-IN: 2.6
REVIEW: 103841

M  +2    -0    ChangeLog
M  +8    -5    src/core-impl/collections/audiocd/AudioCdCollection.cpp

http://commits.kde.org/amarok/67f5c1ae332f6727f91af346a6b5858fe6e5b285