Summary: | Support for iTunes mobile - REQUEST | ||
---|---|---|---|
Product: | [Applications] amarok | Reporter: | Alphamerik <alphamerik> |
Component: | Collections/iPod iPhone | Assignee: | Amarok Developers <amarok-bugs-dist> |
Status: | RESOLVED FIXED | ||
Severity: | wishlist | CC: | matej |
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Ubuntu | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
Alphamerik
2006-07-28 21:06:59 UTC
This sounds indeed like a reasonable wish. Will have a look at it some time soon. Please test with the ipod plugin from svn - i can't as i don't have an itunes phone. SVN commit 569229 by aumuell: support for using the ipod plugin with itunes phones - however initializing will not work because of the changed directory structure BUG: 131487 M +1 -0 ChangeLog M +2 -1 README M +23 -10 src/mediadevice/ipod/ipodmediadevice.cpp M +1 -0 src/mediadevice/ipod/ipodmediadevice.h --- trunk/extragear/multimedia/amarok/ChangeLog #569228:569229 @@ -7,6 +7,7 @@ VERSION 1.4.2: FEATURES: + * iPod plugin usable with iTunes phones. (BR 131487) * Browse collection by composer. (BR 122452) * New DCOP call "playlist: filenames" returns the filenames of the songs currently in the playlist. Patch by Arash Abedinzadeh --- trunk/extragear/multimedia/amarok/README #569228:569229 @@ -101,9 +101,10 @@ (CD burning support) http://www.k3b.org - * libgpod 0.3.2 + * libgpod 0.3.2 or newer (iPod support) http://www.gtkpod.org/libgpod.html + (libgpod from CVS is recommended because of many bug fixes) * libifp 1.0.0.2 (iRiver iFP support) --- trunk/extragear/multimedia/amarok/src/mediadevice/ipod/ipodmediadevice.cpp #569228:569229 @@ -764,7 +764,7 @@ IpodMediaDevice::createLockFile( bool silent ) { QString lockFilePath; - pathExists( ":iPod_Control:iTunes:iTunesLock", &lockFilePath ); + pathExists( itunesDir( "iTunes:iTunesLock" ), &lockFilePath ); m_lockFile = new QFile( lockFilePath ); QString msg; bool ok = true; @@ -839,7 +839,7 @@ itdb_playlist_add(m_itdb, mpl, 0); QString realPath; - if(!pathExists(":iPod_Control", &realPath) ) + if(!pathExists( itunesDir(), &realPath) ) { dir.setPath(realPath); dir.mkdir(dir.absPath()); @@ -847,7 +847,7 @@ if(!dir.exists()) return false; - if(!pathExists(":iPod_Control:Music", &realPath) ) + if(!pathExists( itunesDir( "Music" ), &realPath) ) { dir.setPath(realPath); dir.mkdir(dir.absPath()); @@ -855,7 +855,7 @@ if(!dir.exists()) return false; - if(!pathExists(":iPod_Control:iTunes", &realPath) ) + if(!pathExists( itunesDir( "iTunes" ), &realPath) ) { dir.setPath(realPath); dir.mkdir(dir.absPath()); @@ -1045,7 +1045,7 @@ { QString real; QString ipod; - ipod.sprintf( ":iPod_Control:Music:f%02d", i ); + ipod.sprintf( itunesDir( "Music:f%02d" ).latin1(), i ); if(!pathExists( ipod, &real ) ) { QDir dir( real ); @@ -1142,7 +1142,8 @@ cur = cur->next; } - QString musicpath = QString(itdb_get_mountpoint(m_itdb)) + "/iPod_Control/Music"; + QString musicpath; + pathExists( itunesDir( "Music" ), &musicpath ); QDir dir( musicpath, QString::null, QDir::Unsorted, QDir::Dirs ); for(unsigned i=0; i<dir.count(); i++) { @@ -1154,7 +1155,7 @@ for(unsigned j=0; j<hashdir.count(); j++) { QString filename = hashpath + "/" + hashdir[j]; - QString ipodPath = ":iPod_Control:Music:" + dir[i] + ":" + hashdir[j]; + QString ipodPath = itunesDir( "Music:" ) + dir[i] + ":" + hashdir[j]; Itdb_Track *track = m_files[ipodPath.lower()]; if(!track) { @@ -1425,6 +1426,18 @@ } QString +IpodMediaDevice::itunesDir(const QString &p) const +{ + QString base( ":iPod_Control" ); + if( m_isMobile ) + base = ":iTunes:iTunes_Control"; + + if( !p.startsWith( ":" ) ) + base += ":"; + return base + p; +} + +QString IpodMediaDevice::realPath(const char *ipodPath) { QString path; @@ -1726,7 +1739,7 @@ int music_dirs = itdb_musicdirs_number(m_itdb) > 0 ? itdb_musicdirs_number(m_itdb) : 20; int dir = num % music_dirs; QString dirname; - dirname.sprintf( ":iPod_Control:Music:f%02d", dir ); + dirname.sprintf( "%s:Music:f%02d", itunesDir().latin1(), dir ); if( !pathExists( dirname ) ) { QString realdir = realPath(dirname.latin1()); @@ -1788,8 +1801,8 @@ return false; #ifdef HAVE_STATVFS - QString path = QFile::decodeName(itdb_get_mountpoint(m_itdb)); - path.append("/iPod_Control"); + QString path; + pathExists( itunesDir(), &path ); struct statvfs buf; if(statvfs(QFile::encodeName(path), &buf) != 0) { --- trunk/extragear/multimedia/amarok/src/mediadevice/ipod/ipodmediadevice.h #569228:569229 @@ -100,6 +100,7 @@ void addPlaylistToView( Itdb_Playlist *playlist ); void playlistFromItem( IpodMediaItem *item ); + QString itunesDir( const QString &path = QString::null ) const; QString realPath( const char *ipodPath ); QString ipodPath( const QString &realPath ); bool pathExists( const QString &ipodPath, QString *realPath=0 ); Thank you very much! There was a small problem getting this to work correctly, which I have detailed in Bug 131910. (should have reopened the bug, apologies) |