blob: 430534ce4ee73c33a9f01f1fba89e5091e3f74f6 (
plain)
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
/***************************************************************************
* Copyright (C) 2005 by Joris Guisson *
* joris.guisson@gmail.com *
* *
* 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. *
* *
* This program 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 General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
#ifndef KTTORRENTFILEINTERFACE_H
#define KTTORRENTFILEINTERFACE_H
#include <qobject.h>
#include <qstring.h>
#include <util/constants.h>
namespace kt
{
using bt::Uint32;
using bt::Uint64;
using bt::Priority;
using bt::PREVIEW_PRIORITY;
using bt::FIRST_PRIORITY;
using bt::NORMAL_PRIORITY;
using bt::LAST_PRIORITY;
using bt::EXCLUDED;
/**
* @author Joris Guisson
* @brief Interface for a file in a multifile torrent
*
* This class is the interface for a file in a multifile torrent.
*/
class TorrentFileInterface : public QObject
{
Q_OBJECT
public:
/**
* Constructor, set the path and size.
* @param path The path
* @param size The size
*/
TorrentFileInterface(const QString & path,Uint64 size);
virtual ~TorrentFileInterface();
/// Get the path of the file
QString getPath() const {return path;}
/// Get the size of the file
Uint64 getSize() const {return size;}
/// Get the index of the first chunk in which this file lies
Uint32 getFirstChunk() const {return first_chunk;}
/// Get the last chunk of the file
Uint32 getLastChunk() const {return last_chunk;}
/// See if the TorrentFile is null.
bool isNull() const {return path.isNull();}
/// Set wether we have to not download this file
virtual void setDoNotDownload(bool dnd) = 0;
/// Wether or not we have to not download this file
virtual bool doNotDownload() const = 0;
/// Checks if this file is multimedial
virtual bool isMultimedia() const = 0;
/// Gets the current priority of the torrent
virtual Priority getPriority() const {return priority;}
/// Sets the priority of the torrent
virtual void setPriority(Priority newpriority = NORMAL_PRIORITY) = 0;
/// Wheather to emit signal when dl status changes or not.
virtual void setEmitDownloadStatusChanged(bool show) = 0;
/// Emits signal dlStatusChanged. Use it only with FileSelectDialog!
virtual void emitDownloadStatusChanged() = 0;
/// Did this file exist before the torrent was loaded by KT
bool isPreExistingFile() const {return preexisting;}
/// Set wether this file is preexisting
void setPreExisting(bool pe) {preexisting = pe;}
/// Get the % of the file which is downloaded
float getDownloadPercentage() const;
/// See if preview is available
bool isPreviewAvailable() const {return preview;}
signals:
/**
* Emitted when the download percentage has been changed.
* @param p The new percentage
*/
void downloadPercentageChanged(float p);
/**
* Emitted when the preview becomes available or not.
* @param available
*/
void previewAvailable(bool available);
protected:
QString path;
Uint64 size;
Uint32 first_chunk;
Uint32 last_chunk;
Uint32 num_chunks_downloaded;
Priority priority;
bool preexisting;
bool m_emitDlStatusChanged;
bool preview;
};
}
#endif
|