44
44
#include <filenameformater.h>
45
45
#include <lib/timeutils.h>
49
50
struct ImporterPrivate {
52
std::auto_ptr<FileNameFormater> mFileNameFormater;
53
std::auto_ptr<KTempDir> mDestImportDir;
55
/* @defgroup reset Should be reset in start()
58
KUrl::List mImportedUrlList;
59
KUrl::List mSkippedUrlList;
67
void emitError(const QString& message) {
68
QMetaObject::invokeMethod(q, "error", Q_ARG(QString, message));
71
bool createImportDir(const KUrl url) {
72
Q_ASSERT(url.isLocalFile());
73
// FIXME: Support remote urls
75
if (!KStandardDirs::makeDir(url.toLocalFile())) {
76
emitError(i18n("Could not create destination folder."));
79
mDestImportDir.reset(new KTempDir(url.toLocalFile() + "/.gwenview_importer-"));
80
mDestImportDir->setAutoRemove(false);
81
if (mDestImportDir->status() != 0) {
82
const QString message = QString::fromLocal8Bit(::strerror(mDestImportDir->status()));
83
emitError(i18n("Could not create temporary upload folder:\n%1", message));
90
if (mUrlList.empty()) {
94
mCurrentUrl = mUrlList.takeFirst();
95
KUrl dst = KUrl(mDestImportDir->name());
96
dst.addPath(mCurrentUrl.fileName());
97
KIO::Job* job = KIO::copy(mCurrentUrl, dst, KIO::HideProgressInfo);
99
job->ui()->setWindow(mAuthWindow);
101
QObject::connect(job, SIGNAL(result(KJob*)),
102
q, SLOT(slotCopyDone(KJob*)));
103
QObject::connect(job, SIGNAL(percent(KJob*, unsigned long)),
104
q, SLOT(slotPercent(KJob*, unsigned long)));
107
void renameImportedUrl(const KUrl& src) {
111
if (mFileNameFormater.get()) {
112
KFileItem item(KFileItem::Unknown, KFileItem::Unknown, src, true /* delayedMimeTypes */);
113
KDateTime dateTime = TimeUtils::dateTimeForFileItem(item);
114
fileName = mFileNameFormater->format(src, dateTime);
116
fileName = src.fileName();
118
dst.setFileName(fileName);
120
FileUtils::RenameResult result = FileUtils::rename(src, dst, mAuthWindow);
122
case FileUtils::RenamedOK:
123
mImportedUrlList << mCurrentUrl;
125
case FileUtils::RenamedUnderNewName:
127
mImportedUrlList << mCurrentUrl;
129
case FileUtils::Skipped:
130
mSkippedUrlList << mCurrentUrl;
132
case FileUtils::RenameFailed:
133
kWarning() << "Rename failed for" << mCurrentUrl;
53
std::auto_ptr<FileNameFormater> mFileNameFormater;
54
std::auto_ptr<KTempDir> mDestImportDir;
56
/* @defgroup reset Should be reset in start()
59
KUrl::List mImportedUrlList;
60
KUrl::List mSkippedUrlList;
68
void emitError(const QString& message)
70
QMetaObject::invokeMethod(q, "error", Q_ARG(QString, message));
73
bool createImportDir(const KUrl url)
75
Q_ASSERT(url.isLocalFile());
76
// FIXME: Support remote urls
78
if (!KStandardDirs::makeDir(url.toLocalFile())) {
79
emitError(i18n("Could not create destination folder."));
82
mDestImportDir.reset(new KTempDir(url.toLocalFile() + "/.gwenview_importer-"));
83
mDestImportDir->setAutoRemove(false);
84
if (mDestImportDir->status() != 0) {
85
const QString message = QString::fromLocal8Bit(::strerror(mDestImportDir->status()));
86
emitError(i18n("Could not create temporary upload folder:\n%1", message));
94
if (mUrlList.empty()) {
98
mCurrentUrl = mUrlList.takeFirst();
99
KUrl dst = KUrl(mDestImportDir->name());
100
dst.addPath(mCurrentUrl.fileName());
101
KIO::Job* job = KIO::copy(mCurrentUrl, dst, KIO::HideProgressInfo);
103
job->ui()->setWindow(mAuthWindow);
105
QObject::connect(job, SIGNAL(result(KJob*)),
106
q, SLOT(slotCopyDone(KJob*)));
107
QObject::connect(job, SIGNAL(percent(KJob*, ulong)),
108
q, SLOT(slotPercent(KJob*, ulong)));
111
void renameImportedUrl(const KUrl& src)
116
if (mFileNameFormater.get()) {
117
KFileItem item(KFileItem::Unknown, KFileItem::Unknown, src, true /* delayedMimeTypes */);
118
KDateTime dateTime = TimeUtils::dateTimeForFileItem(item);
119
fileName = mFileNameFormater->format(src, dateTime);
121
fileName = src.fileName();
123
dst.setFileName(fileName);
125
FileUtils::RenameResult result = FileUtils::rename(src, dst, mAuthWindow);
127
case FileUtils::RenamedOK:
128
mImportedUrlList << mCurrentUrl;
130
case FileUtils::RenamedUnderNewName:
132
mImportedUrlList << mCurrentUrl;
134
case FileUtils::Skipped:
135
mSkippedUrlList << mCurrentUrl;
137
case FileUtils::RenameFailed:
138
kWarning() << "Rename failed for" << mCurrentUrl;
141
145
Importer::Importer(QWidget* parent)
142
146
: QObject(parent)
143
, d(new ImporterPrivate) {
145
d->mAuthWindow = parent;
148
Importer::~Importer() {
152
void Importer::setAutoRenameFormat(const QString& format) {
153
if (format.isEmpty()) {
154
d->mFileNameFormater.reset(0);
156
d->mFileNameFormater.reset(new FileNameFormater(format));
160
void Importer::start(const KUrl::List& list, const KUrl& destination) {
162
d->mImportedUrlList.clear();
163
d->mSkippedUrlList.clear();
164
d->mRenamedCount = 0;
168
emitProgressChanged();
169
maximumChanged(d->mUrlList.count() * 100);
171
if (!d->createImportDir(destination)) {
172
kWarning() << "Could not create import dir";
178
void Importer::slotCopyDone(KJob* _job) {
179
KIO::CopyJob* job = static_cast<KIO::CopyJob*>(_job);
180
KUrl url = job->destUrl();
182
kWarning() << "FIXME: What do we do with failed urls?";
188
d->renameImportedUrl(url);
191
void Importer::finalizeImport() {
192
d->mDestImportDir->unlink();
196
void Importer::advance() {
199
emitProgressChanged();
202
void Importer::slotPercent(KJob*, unsigned long percent) {
203
d->mJobProgress = percent;
204
emitProgressChanged();
207
void Importer::emitProgressChanged() {
208
progressChanged(d->mProgress * 100 + d->mJobProgress);
211
KUrl::List Importer::importedUrlList() const {
212
return d->mImportedUrlList;
215
KUrl::List Importer::skippedUrlList() const {
216
return d->mSkippedUrlList;
219
int Importer::renamedCount() const {
220
return d->mRenamedCount;
147
, d(new ImporterPrivate)
150
d->mAuthWindow = parent;
153
Importer::~Importer()
158
void Importer::setAutoRenameFormat(const QString& format)
160
if (format.isEmpty()) {
161
d->mFileNameFormater.reset(0);
163
d->mFileNameFormater.reset(new FileNameFormater(format));
167
void Importer::start(const KUrl::List& list, const KUrl& destination)
170
d->mImportedUrlList.clear();
171
d->mSkippedUrlList.clear();
172
d->mRenamedCount = 0;
176
emitProgressChanged();
177
maximumChanged(d->mUrlList.count() * 100);
179
if (!d->createImportDir(destination)) {
180
kWarning() << "Could not create import dir";
186
void Importer::slotCopyDone(KJob* _job)
188
KIO::CopyJob* job = static_cast<KIO::CopyJob*>(_job);
189
KUrl url = job->destUrl();
191
kWarning() << "FIXME: What do we do with failed urls?";
197
d->renameImportedUrl(url);
200
void Importer::finalizeImport()
202
d->mDestImportDir->unlink();
206
void Importer::advance()
210
emitProgressChanged();
213
void Importer::slotPercent(KJob*, unsigned long percent)
215
d->mJobProgress = percent;
216
emitProgressChanged();
219
void Importer::emitProgressChanged()
221
progressChanged(d->mProgress * 100 + d->mJobProgress);
224
KUrl::List Importer::importedUrlList() const
226
return d->mImportedUrlList;
229
KUrl::List Importer::skippedUrlList() const
231
return d->mSkippedUrlList;
234
int Importer::renamedCount() const
236
return d->mRenamedCount;