forked from baumgarr/nixnote2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy paththumbnailer.cpp
112 lines (91 loc) · 3.18 KB
/
thumbnailer.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
106
107
108
109
110
111
112
/*********************************************************************************
NixNote - An open-source client for the Evernote service.
Copyright (C) 2013 Randy Baumgarte
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.
***********************************************************************************/
#include "thumbnailer.h"
#include <QtWebKit>
#include <QtSql>
#include <QTextDocument>
#include "global.h"
#include "sql/notetable.h"
extern Global global;
/* Generic constructor. */
Thumbnailer::Thumbnailer(DatabaseConnection *db)
{
this->db = db;
page = new QWebPage();
connect(page, SIGNAL(loadFinished(bool)), this, SLOT(pageReady(bool)));
idle = true;
connect(&timer, SIGNAL(timeout()), this, SLOT(generateNextThumbnail()));
minTime = 5;
maxTime = 20;
}
Thumbnailer::~Thumbnailer() {
delete page;
}
void Thumbnailer::render(qint32 lid) {
idle = false;
this->lid = lid;
NoteFormatter formatter;
formatter.thumbnail = true;
NoteTable noteTable(db);
Note n;
noteTable.get(n,lid,false, false);
formatter.setNote(n,false);
QByteArray formattedContent = formatter.rebuildNoteHTML();
page->mainFrame()->setContent(formattedContent);
}
void Thumbnailer::startTimer(int minSeconds, int maxSeconds) {
timer.stop();
minTime = minSeconds*1000;
maxTime = maxSeconds*1000;
timer.start(minTime);
}
void Thumbnailer::pageReady(bool ok) {
if (ok) {
capturePage(page);
}
NoteTable ntable(db);
ntable.setThumbnailNeeded(lid, false);
idle = true;
}
void Thumbnailer::capturePage(QWebPage *page) {
page->mainFrame()->setZoomFactor(3);
page->setViewportSize(QSize(300,300));
page->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
page->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
QImage pix(QSize(300,300), QImage::Format_ARGB32);
QPainter painter;
painter.begin(&pix);
page->mainFrame()->render(&painter);
painter.end();
QString filename = global.fileManager.getThumbnailDirPath()+QString::number(lid) +".png";
pix.save(filename);
NoteTable ntable(db);
ntable.setThumbnail(lid, filename);
}
void Thumbnailer::generateNextThumbnail() {
// If we are connected we are downloading or uploading, so
// we don't want to do this now.
if (global.connected)
return;
timer.stop();
NoteTable noteTable(db);
qint32 lid = noteTable.getNextThumbnailNeeded();
if (lid>0) {
render(lid);
timer.start(minTime);
} else
timer.start(maxTime);
}