1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
/***************************************************************************
* copyright : (C) 2006 Andy Kelk <andy@mopoke.co.uk> *
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
/**
* Rio Karma media device
* @author Andy Kelk <andy@mopoke.co.uk>
* @see http://linux-karma.sourceforge.net/
*/
#ifndef AMAROK_RIOKARMAMEDIADEVICE_H
#define AMAROK_RIOKARMAMEDIADEVICE_H
#include "mediabrowser.h"
#include <tqptrlist.h>
#include <tqmutex.h>
#include "libkarma/lkarma.h"
class RioKarmaMediaDevice;
class RioKarmaMediaItem;
class RioKarmaTrack {
friend class MediaItem;
public:
RioKarmaTrack( int Fid );
~RioKarmaTrack();
bool operator==( const RioKarmaTrack &second ) const { return m_id == second.m_id; }
public:
unsigned int id() const { return m_id; }
MetaBundle *bundle() { return new MetaBundle( m_bundle ); }
void setBundle( MetaBundle &bundle );
void setId( int id ) { m_id = id; }
void readMetaData();
void addItem( const RioKarmaMediaItem *item );
bool removeItem( const RioKarmaMediaItem *item );
private:
unsigned int m_id;
MetaBundle m_bundle;
TQPtrList<RioKarmaMediaItem> m_itemList;
};
class RioKarmaMediaItem : public MediaItem
{
public:
RioKarmaMediaItem( TQListView *parent, TQListViewItem *after = 0 ) : MediaItem( parent, after )
{}
RioKarmaMediaItem( TQListViewItem *parent, TQListViewItem *after = 0 ) : MediaItem( parent, after )
{}
~RioKarmaMediaItem()
{
//m_track->removeItem(this);
}
void setTrack( RioKarmaTrack *track ) { m_track = track; m_track->addItem( this ); }
RioKarmaTrack *track() { return m_track; }
TQString filename() { return m_track->bundle()->url().path(); }
private:
RioKarmaTrack *m_track;
};
class RioKarmaMediaDevice : public MediaDevice
{
Q_OBJECT
public:
RioKarmaMediaDevice();
virtual bool autoConnect() { return true; }
virtual bool asynchronousTransfer() { return false; }
bool isConnected();
int current_id();
void setDisconnected();
virtual void rmbPressed( TQListViewItem *qitem, const TQPoint &point, int arg1 );
virtual void init( MediaBrowser *parent );
virtual TQStringList supportedFiletypes();
protected:
MediaItem* trackExists( const MetaBundle &bundle );
bool openDevice( bool silent );
bool closeDevice();
bool lockDevice( bool tryLock=false ) { if( tryLock ) { return m_mutex.tryLock(); } else { m_mutex.lock(); return true; } }
void unlockDevice() { m_mutex.unlock(); }
virtual MediaItem *copyTrackToDevice( const MetaBundle &bundle );
void synchronizeDevice();
int deleteItemFromDevice( MediaItem *item, int flags=DeleteTrack );
void addToPlaylist( MediaItem *list, MediaItem *after, TQPtrList<MediaItem> items );
RioKarmaMediaItem *newPlaylist( const TQString &name, MediaItem *list, TQPtrList<MediaItem> items );
bool getCapacity( TDEIO::filesize_t *total, TDEIO::filesize_t *available );
virtual void updateRootItems() {};
private:
RioKarmaMediaItem *addTrackToView( RioKarmaTrack *track, RioKarmaMediaItem *item=0 );
int readKarmaMusic( void );
void clearItems();
int deleteRioTrack( RioKarmaMediaItem *trackItem );
int m_rio;
TQMutex m_mutex;
TQMap<TQString,RioKarmaMediaItem *> m_fileNameToItem;
};
#endif
|