-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathkeneric.cpp
107 lines (79 loc) · 3.25 KB
/
keneric.cpp
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
// Copyright (C) 2015 Rog131 <samrog131@hotmail.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 3 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include "keneric.h"
#include <QDir>
#include <QFile>
#include <QImage>
#include <QProcess>
#include <QMimeType>
#include <QMimeDatabase>
#include <QStandardPaths>
#include <QCryptographicHash>
#include <iostream>
#include <KPluginFactory>
K_PLUGIN_CLASS_WITH_JSON(Keneric, "keneric.json")
Keneric::Keneric(QObject *parent, const QVariantList &args)
: KIO::ThumbnailCreator(parent, args)
{
std::cout << "Keneric CTOR" << std::endl;
}
Keneric::~Keneric()
{
std::cout << "Keneric DTOR" << std::endl;
}
KIO::ThumbnailResult Keneric::create(const KIO::ThumbnailRequest &request)
{
QString path = request.url().toLocalFile();
std::string path_string = path.toStdString();
//const char* path_cstring = path_string.c_str();
int width = request.targetSize().width() * request.devicePixelRatio();
int height = request.targetSize().height() * request.devicePixelRatio();
//std::cout << "Create Width: " << width << std::endl;
//std::cout << "Create Height: " << height << std::endl;
QMimeDatabase db;
QMimeType mime = db.mimeTypeForFile(path);
QString kenericDirectory((QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QString::fromLocal8Bit("/keneric/")));
QByteArray md5Hash = QCryptographicHash::hash(path.toUtf8(),QCryptographicHash::Md5).toHex();
QString protoThumbnail(kenericDirectory);
protoThumbnail.append(QString::fromLocal8Bit(md5Hash));
QDir directory(kenericDirectory);
if (!directory.exists()) {
directory.mkpath(QString::fromLocal8Bit("."));
}
QString program = QString::fromLocal8Bit("kenericProcess");
QStringList arguments;
arguments << path;
arguments << mime.name();
arguments << protoThumbnail;
arguments << QString(QString::fromLocal8Bit("%1")).arg(width);
arguments << QString(QString::fromLocal8Bit("%1")).arg(height);
QProcess *process = new QProcess();
process->start(program, arguments);
process->waitForFinished();
QFile thumbnailFile(protoThumbnail);
if (thumbnailFile.exists()){
QImage preview(protoThumbnail);
preview = preview.scaled(width, height, Qt::KeepAspectRatio, Qt::SmoothTransformation);
QFile::remove(protoThumbnail);
return KIO::ThumbnailResult::pass(preview);
}
else {
std::cout << "File not found: " << protoThumbnail.toStdString() << std::endl;
}
return KIO::ThumbnailResult::fail();
}
#include "keneric.moc"
#include "moc_keneric.cpp"