joachim99@8
|
1 /***************************************************************************
|
joachim99@69
|
2 * Copyright (C) 2003-2006 by Joachim Eibl *
|
joachim99@69
|
3 * joachim.eibl at gmx.de *
|
joachim99@8
|
4 * *
|
joachim99@8
|
5 * This program is free software; you can redistribute it and/or modify *
|
joachim99@8
|
6 * it under the terms of the GNU General Public License as published by *
|
joachim99@8
|
7 * the Free Software Foundation; either version 2 of the License, or *
|
joachim99@8
|
8 * (at your option) any later version. *
|
joachim99@8
|
9 ***************************************************************************/
|
joachim99@8
|
10
|
joachim99@8
|
11 #ifndef FILEACCESS_H
|
joachim99@8
|
12 #define FILEACCESS_H
|
joachim99@8
|
13
|
joachim99@8
|
14 #include <qdialog.h>
|
joachim99@8
|
15 #include <qfileinfo.h>
|
joachim99@8
|
16 #include <kprogress.h>
|
joachim99@8
|
17 #include <kio/job.h>
|
joachim99@8
|
18 #include <kio/jobclasses.h>
|
joachim99@8
|
19 #include <kurldrag.h>
|
joachim99@8
|
20 #include <list>
|
joachim99@8
|
21 #include <qstring.h>
|
joachim99@8
|
22 #include <qdatetime.h>
|
joachim99@8
|
23
|
joachim99@69
|
24 bool wildcardMultiMatch( const QString& wildcard, const QString& testString, bool bCaseSensitive );
|
joachim99@69
|
25
|
joachim99@8
|
26 class t_DirectoryList;
|
joachim99@8
|
27
|
joachim99@8
|
28 class FileAccess
|
joachim99@8
|
29 {
|
joachim99@8
|
30 public:
|
joachim99@8
|
31 FileAccess();
|
joachim99@8
|
32 ~FileAccess();
|
joachim99@8
|
33 FileAccess( const QString& name, bool bWantToWrite=false ); // name: local file or dirname or url (when supported)
|
joachim99@8
|
34 void setFile( const QString& name, bool bWantToWrite=false );
|
joachim99@8
|
35
|
joachim99@8
|
36 bool isValid() const;
|
joachim99@8
|
37 bool isFile() const;
|
joachim99@8
|
38 bool isDir() const;
|
joachim99@8
|
39 bool isSymLink() const;
|
joachim99@8
|
40 bool exists() const;
|
joachim99@8
|
41 long size() const; // Size as returned by stat().
|
joachim99@8
|
42 long sizeForReading(); // If the size can't be determined by stat() then the file is copied to a local temp file.
|
joachim99@8
|
43 bool isReadable() const;
|
joachim99@8
|
44 bool isWritable() const;
|
joachim99@8
|
45 bool isExecutable() const;
|
joachim99@8
|
46 bool isHidden() const;
|
joachim99@8
|
47 QString readLink() const;
|
joachim99@8
|
48
|
joachim99@8
|
49 QDateTime created() const;
|
joachim99@8
|
50 QDateTime lastModified() const;
|
joachim99@8
|
51 QDateTime lastRead() const;
|
joachim99@8
|
52
|
joachim99@8
|
53 QString fileName() const; // Just the name-part of the path, without parent directories
|
joachim99@8
|
54 QString filePath() const; // The path-string that was used during construction
|
joachim99@8
|
55 QString prettyAbsPath() const;
|
joachim99@8
|
56 KURL url() const;
|
joachim99@8
|
57 QString absFilePath() const;
|
joachim99@8
|
58
|
joachim99@8
|
59 bool isLocal() const;
|
joachim99@8
|
60
|
joachim99@8
|
61 bool readFile(void* pDestBuffer, unsigned long maxLength );
|
joachim99@58
|
62 bool writeFile(const void* pSrcBuffer, unsigned long length );
|
joachim99@8
|
63 bool listDir( t_DirectoryList* pDirList, bool bRecursive, bool bFindHidden,
|
joachim99@8
|
64 const QString& filePattern, const QString& fileAntiPattern,
|
joachim99@8
|
65 const QString& dirAntiPattern, bool bFollowDirLinks, bool bUseCvsIgnore );
|
joachim99@8
|
66 bool copyFile( const QString& destUrl );
|
joachim99@8
|
67 bool createBackup( const QString& bakExtension );
|
joachim99@8
|
68
|
joachim99@8
|
69 static QString tempFileName();
|
joachim99@8
|
70 bool removeFile();
|
joachim99@8
|
71 static bool removeFile( const QString& );
|
joachim99@8
|
72 static bool makeDir( const QString& );
|
joachim99@8
|
73 static bool removeDir( const QString& );
|
joachim99@8
|
74 static bool exists( const QString& );
|
joachim99@8
|
75 static QString cleanDirPath( const QString& );
|
joachim99@8
|
76
|
joachim99@8
|
77 //bool chmod( const QString& );
|
joachim99@8
|
78 bool rename( const QString& );
|
joachim99@8
|
79 static bool symLink( const QString& linkTarget, const QString& linkLocation );
|
joachim99@8
|
80
|
joachim99@8
|
81 void addPath( const QString& txt );
|
joachim99@8
|
82 QString getStatusText();
|
joachim99@8
|
83 private:
|
joachim99@8
|
84 void setUdsEntry( const KIO::UDSEntry& e );
|
joachim99@8
|
85 KURL m_url;
|
joachim99@8
|
86 bool m_bLocal;
|
joachim99@8
|
87 bool m_bValidData;
|
joachim99@8
|
88
|
joachim99@8
|
89 unsigned long m_size;
|
joachim99@8
|
90 QDateTime m_modificationTime;
|
joachim99@8
|
91 QDateTime m_accessTime;
|
joachim99@8
|
92 QDateTime m_creationTime;
|
joachim99@8
|
93 bool m_bReadable;
|
joachim99@8
|
94 bool m_bWritable;
|
joachim99@8
|
95 bool m_bExecutable;
|
joachim99@8
|
96 bool m_bExists;
|
joachim99@8
|
97 bool m_bFile;
|
joachim99@8
|
98 bool m_bDir;
|
joachim99@8
|
99 bool m_bSymLink;
|
joachim99@8
|
100 bool m_bHidden;
|
joachim99@8
|
101 long m_fileType; // for testing only
|
joachim99@8
|
102
|
joachim99@8
|
103 QString m_linkTarget;
|
joachim99@8
|
104 QString m_user;
|
joachim99@8
|
105 QString m_group;
|
joachim99@8
|
106 QString m_name;
|
joachim99@8
|
107 QString m_path;
|
joachim99@8
|
108 QString m_absFilePath;
|
joachim99@8
|
109 QString m_localCopy;
|
joachim99@8
|
110 QString m_statusText; // Might contain an error string, when the last operation didn't succeed.
|
joachim99@8
|
111
|
joachim99@8
|
112 friend class FileAccessJobHandler;
|
joachim99@8
|
113 };
|
joachim99@8
|
114
|
joachim99@8
|
115 class t_DirectoryList : public std::list<FileAccess>
|
joachim99@8
|
116 {};
|
joachim99@8
|
117
|
joachim99@8
|
118
|
joachim99@8
|
119 class FileAccessJobHandler : public QObject
|
joachim99@8
|
120 {
|
joachim99@8
|
121 Q_OBJECT
|
joachim99@8
|
122 public:
|
joachim99@8
|
123 FileAccessJobHandler( FileAccess* pFileAccess );
|
joachim99@8
|
124
|
joachim99@8
|
125 bool get( void* pDestBuffer, long maxLength );
|
joachim99@58
|
126 bool put( const void* pSrcBuffer, long maxLength, bool bOverwrite, bool bResume=false, int permissions=-1 );
|
joachim99@8
|
127 bool stat(int detailLevel=2, bool bWantToWrite=false );
|
joachim99@8
|
128 bool copyFile( const QString& dest );
|
joachim99@8
|
129 bool rename( const QString& dest );
|
joachim99@8
|
130 bool listDir( t_DirectoryList* pDirList, bool bRecursive, bool bFindHidden,
|
joachim99@8
|
131 const QString& filePattern, const QString& fileAntiPattern,
|
joachim99@8
|
132 const QString& dirAntiPattern, bool bFollowDirLinks, bool bUseCvsIgnore );
|
joachim99@8
|
133 bool mkDir( const QString& dirName );
|
joachim99@8
|
134 bool rmDir( const QString& dirName );
|
joachim99@8
|
135 bool removeFile( const QString& dirName );
|
joachim99@8
|
136 bool symLink( const QString& linkTarget, const QString& linkLocation );
|
joachim99@8
|
137
|
joachim99@8
|
138 private:
|
joachim99@8
|
139 FileAccess* m_pFileAccess;
|
joachim99@8
|
140 bool m_bSuccess;
|
joachim99@8
|
141
|
joachim99@8
|
142 // Data needed during Job
|
joachim99@8
|
143 long m_transferredBytes;
|
joachim99@8
|
144 char* m_pTransferBuffer; // Needed during get or put
|
joachim99@8
|
145 long m_maxLength;
|
joachim99@8
|
146
|
joachim99@8
|
147 QString m_filePattern;
|
joachim99@8
|
148 QString m_fileAntiPattern;
|
joachim99@8
|
149 QString m_dirAntiPattern;
|
joachim99@8
|
150 t_DirectoryList* m_pDirList;
|
joachim99@8
|
151 bool m_bFindHidden;
|
joachim99@8
|
152 bool m_bRecursive;
|
joachim99@8
|
153 bool m_bFollowDirLinks;
|
joachim99@8
|
154
|
joachim99@8
|
155 bool scanLocalDirectory( const QString& dirName, t_DirectoryList* dirList );
|
joachim99@8
|
156
|
joachim99@8
|
157 private slots:
|
joachim99@8
|
158 void slotStatResult( KIO::Job* );
|
joachim99@8
|
159 void slotSimpleJobResult( KIO::Job* pJob );
|
joachim99@8
|
160 void slotPutJobResult( KIO::Job* pJob );
|
joachim99@8
|
161
|
joachim99@8
|
162 void slotGetData(KIO::Job*,const QByteArray&);
|
joachim99@8
|
163 void slotPutData(KIO::Job*, QByteArray&);
|
joachim99@8
|
164
|
joachim99@8
|
165 void slotListDirInfoMessage( KIO::Job*, const QString& msg );
|
joachim99@8
|
166 void slotListDirProcessNewEntries( KIO::Job *, const KIO::UDSEntryList& l );
|
joachim99@8
|
167
|
joachim99@8
|
168 void slotPercent( KIO::Job* pJob, unsigned long percent );
|
joachim99@8
|
169 };
|
joachim99@8
|
170
|
joachim99@8
|
171 class ProgressDialog : public QDialog
|
joachim99@8
|
172 {
|
joachim99@8
|
173 Q_OBJECT
|
joachim99@8
|
174 public:
|
joachim99@8
|
175 ProgressDialog( QWidget* pParent );
|
joachim99@8
|
176
|
joachim99@8
|
177 void setInformation( const QString& info, bool bRedrawUpdate=true );
|
joachim99@8
|
178 void setInformation( const QString& info, double dCurrent, bool bRedrawUpdate=true );
|
joachim99@66
|
179 void setCurrent( double dCurrent, bool bRedrawUpdate=true );
|
joachim99@66
|
180 void step( bool bRedrawUpdate=true );
|
joachim99@66
|
181 void setMaxNofSteps( int dMaxNofSteps );
|
joachim99@66
|
182 void push();
|
joachim99@66
|
183 void pop(bool bRedrawUpdate=true);
|
joachim99@8
|
184
|
joachim99@8
|
185 // The progressbar goes from 0 to 1 usually.
|
joachim99@8
|
186 // By supplying a subrange transformation the subCurrent-values
|
joachim99@8
|
187 // 0 to 1 will be transformed to dMin to dMax instead.
|
joachim99@8
|
188 // Requirement: 0 < dMin < dMax < 1
|
joachim99@66
|
189 void setRangeTransformation( double dMin, double dMax );
|
joachim99@8
|
190 void setSubRangeTransformation( double dMin, double dMax );
|
joachim99@8
|
191
|
joachim99@8
|
192 void exitEventLoop();
|
joachim99@51
|
193 void enterEventLoop( KIO::Job* pJob, const QString& jobInfo );
|
joachim99@8
|
194
|
joachim99@8
|
195 bool wasCancelled();
|
joachim99@8
|
196 void show();
|
joachim99@8
|
197 void hide();
|
joachim99@66
|
198
|
joachim99@51
|
199 virtual void timerEvent(QTimerEvent*);
|
joachim99@8
|
200 private:
|
joachim99@66
|
201
|
joachim99@66
|
202 struct ProgressLevelData
|
joachim99@66
|
203 {
|
joachim99@66
|
204 ProgressLevelData()
|
joachim99@66
|
205 {
|
joachim99@66
|
206 m_dCurrent=0; m_maxNofSteps=1; m_dRangeMin=0; m_dRangeMax=1;
|
joachim99@66
|
207 m_dSubRangeMin = 0; m_dSubRangeMax = 1;
|
joachim99@66
|
208 }
|
joachim99@66
|
209 double m_dCurrent;
|
joachim99@66
|
210 int m_maxNofSteps; // when step() is used.
|
joachim99@66
|
211 double m_dRangeMax;
|
joachim99@66
|
212 double m_dRangeMin;
|
joachim99@66
|
213 double m_dSubRangeMax;
|
joachim99@66
|
214 double m_dSubRangeMin;
|
joachim99@66
|
215 };
|
joachim99@66
|
216 std::list<ProgressLevelData> m_progressStack;
|
joachim99@69
|
217
|
joachim99@69
|
218 int m_progressDelayTimer;
|
joachim99@66
|
219
|
joachim99@8
|
220 KProgress* m_pProgressBar;
|
joachim99@8
|
221 KProgress* m_pSubProgressBar;
|
joachim99@8
|
222 QLabel* m_pInformation;
|
joachim99@8
|
223 QLabel* m_pSubInformation;
|
joachim99@51
|
224 QLabel* m_pSlowJobInfo;
|
joachim99@51
|
225 QPushButton* m_pAbortButton;
|
joachim99@8
|
226 void recalc(bool bRedrawUpdate);
|
joachim99@8
|
227 QTime m_t1;
|
joachim99@8
|
228 QTime m_t2;
|
joachim99@8
|
229 bool m_bWasCancelled;
|
joachim99@51
|
230 KIO::Job* m_pJob;
|
joachim99@51
|
231 QString m_currentJobInfo; // Needed if the job doesn't stop after a reasonable time.
|
joachim99@8
|
232 protected:
|
joachim99@8
|
233 virtual void reject();
|
joachim99@8
|
234 private slots:
|
joachim99@8
|
235 void delayedHide();
|
joachim99@51
|
236 void slotAbort();
|
joachim99@8
|
237 };
|
joachim99@8
|
238
|
joachim99@66
|
239 // When using the ProgressProxy you need not take care of the push and pop, except when explicit.
|
joachim99@66
|
240 class ProgressProxy
|
joachim99@66
|
241 {
|
joachim99@66
|
242 public:
|
joachim99@66
|
243 ProgressProxy();
|
joachim99@66
|
244 ~ProgressProxy();
|
joachim99@66
|
245
|
joachim99@66
|
246 void setInformation( const QString& info, bool bRedrawUpdate=true );
|
joachim99@66
|
247 void setInformation( const QString& info, double dCurrent, bool bRedrawUpdate=true );
|
joachim99@66
|
248 void setCurrent( double dCurrent, bool bRedrawUpdate=true );
|
joachim99@66
|
249 void step( bool bRedrawUpdate=true );
|
joachim99@66
|
250 void setMaxNofSteps( int dMaxNofSteps );
|
joachim99@66
|
251 bool wasCancelled();
|
joachim99@66
|
252 void setRangeTransformation( double dMin, double dMax );
|
joachim99@66
|
253 void setSubRangeTransformation( double dMin, double dMax );
|
joachim99@66
|
254 private:
|
joachim99@66
|
255 };
|
joachim99@66
|
256
|
joachim99@8
|
257 extern ProgressDialog* g_pProgressDialog;
|
joachim99@8
|
258
|
joachim99@8
|
259
|
joachim99@8
|
260
|
joachim99@8
|
261 #endif
|
joachim99@8
|
262
|