You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
amarok/amarok/src/mediadevice/ipod/ipodmediadevice.h

178 lines
7.4 KiB

/***************************************************************************
copyright : (C) 2005, 2006 by Martin Aumueller
email : aumuell@reserv.at
copyright : (C) 2004 by Christian Muehlhaeuser
email : chris@chris.de
***************************************************************************/
/***************************************************************************
* This library is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License version 2 as *
* published by the Free Software Foundation. *
* *
* This library is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this library; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301 USA *
***************************************************************************/
#ifndef AMAROK_IPODMEDIADEVICE_H
#define AMAROK_IPODMEDIADEVICE_H
extern "C" {
#include <gpod/itdb.h>
}
#include "mediabrowser.h"
#include <tqmutex.h>
#include <tqptrlist.h>
#include <tqdict.h>
#include <tdeio/job.h>
class TQCheckBox;
class TQLabel;
class TQLineEdit;
class TQFile;
class TDEAction;
class IpodMediaItem;
class PodcastInfo;
class IpodMediaDevice : public MediaDevice
{
friend class IpodMediaItem;
Q_OBJECT
public:
IpodMediaDevice();
void init( MediaBrowser* parent );
virtual ~IpodMediaDevice();
virtual bool autoConnect() { return m_autoConnect; }
virtual bool asynchronousTransfer() { return false; /* kernel buffer flushes freeze Amarok */ }
TQStringList supportedFiletypes();
bool isConnected();
virtual void addConfigElements( TQWidget *parent );
virtual void removeConfigElements( TQWidget *parent );
virtual void applyConfig();
virtual void loadConfig();
virtual MediaItem*tagsChanged( MediaItem *item, const MetaBundle &bundle );
virtual TDEAction *customAction() { return m_customAction; }
protected:
MediaItem *trackExists( const MetaBundle& bundle );
bool openDevice( bool silent=false );
bool closeDevice();
bool lockDevice(bool tryLock=false ) { if( tryLock ) { return m_mutex.tryLock(); } else { m_mutex.lock(); return true; } }
void unlockDevice() { m_mutex.unlock(); }
void initView();
void detectModel();
virtual MediaItem *copyTrackToDevice( const MetaBundle& bundle );
/**
* Insert track already located on media device into the device's database
* @param pathname Location of file on the device to add to the database
* @param bundle MetaBundle of track
* @param podcastInfo PodcastInfo of track if it is a podcast, 0 otherwise
* @return If successful, the created MediaItem in the media device view, else 0
*/
virtual MediaItem *insertTrackIntoDB( const TQString &pathname,
const MetaBundle &metaBundle, const MetaBundle &propertiesBundle,
const PodcastInfo *podcastInfo );
virtual MediaItem *updateTrackInDB( IpodMediaItem *item, const TQString &pathname,
const MetaBundle &metaBundle, const MetaBundle &propertiesBundle,
const PodcastInfo *podcastInfo );
/**
* Determine the url for which a track should be uploaded to on the device
* @param bundle MetaBundle of track to base pathname creation on
* @return the url to upload the track to
*/
virtual KURL determineURLOnDevice( const MetaBundle& bundle );
void synchronizeDevice();
int deleteItemFromDevice( MediaItem *item, int flags=DeleteTrack );
virtual void deleteFile( const KURL &url );
void addToPlaylist( MediaItem *list, MediaItem *after, TQPtrList<MediaItem> items );
MediaItem *newPlaylist( const TQString &name, MediaItem *list, TQPtrList<MediaItem> items );
bool getCapacity( TDEIO::filesize_t *total, TDEIO::filesize_t *available );
void rmbPressed( TQListViewItem* qitem, const TQPoint& point, int );
bool checkIntegrity();
void updateArtwork();
protected slots:
void renameItem( TQListViewItem *item );
virtual void fileDeleted( TDEIO::Job *job );
private:
bool initializeIpod();
bool writeITunesDB( bool threaded=true );
bool createLockFile( bool silent );
IpodMediaItem *addTrackToView( Itdb_Track *track, IpodMediaItem *item = 0,
bool checkIntegrity = false, bool batchmode = false );
void addPlaylistToView( Itdb_Playlist *playlist );
void playlistFromItem( IpodMediaItem *item );
TQString itunesDir( const TQString &path = TQString() ) const;
TQString realPath( const char *ipodPath );
TQString ipodPath( const TQString &realPath );
bool pathExists( const TQString &ipodPath, TQString *realPath=0 );
// ipod database
Itdb_iTunesDB *m_itdb;
Itdb_Playlist *m_masterPlaylist;
TQDict<Itdb_Track> m_files;
// podcasts
Itdb_Playlist* m_podcastPlaylist;
bool m_isShuffle;
bool m_isMobile;
bool m_isIPhone;
bool m_supportsArtwork;
bool m_supportsVideo;
bool m_rockboxFirmware;
bool m_needsFirewireGuid;
bool m_autoConnect;
IpodMediaItem *getArtist( const TQString &artist );
IpodMediaItem *getAlbum( const TQString &artist, const TQString &album );
IpodMediaItem *getTrack( const TQString &artist, const TQString &album,
const TQString &title,
int discNumber = -1, int trackNumber = -1,
const PodcastEpisodeBundle *peb = 0 );
IpodMediaItem *getTrack( const Itdb_Track *itrack );
bool removeDBTrack( Itdb_Track *track );
bool m_dbChanged;
TQCheckBox *m_syncStatsCheck;
TQCheckBox *m_autoDeletePodcastsCheck;
TQFile *m_lockFile;
TQMutex m_mutex;
TDEAction *m_customAction;
enum { CHECK_INTEGRITY, UPDATE_ARTWORK, SET_IPOD_MODEL };
private slots:
void slotIpodAction( int );
};
#endif