thumbnailTimer = new QTimer();
thumbnailTimer.timeout.connect(this, "thumbnailTimer()");
thumbnailTimer();
- thumbnailTimer.setInterval(5*1000); // Thumbnail every 2 min
+ thumbnailTimer.setInterval(60*1000); // Thumbnail every minute
thumbnailTimer.start();
logger.log(logger.EXTREME, "Starting authentication timer");
browserWindow.getBrowser().setContent(unicode);
}
if (save) {
+ thumbnailRunner.addWork("GENERATE "+ guid);
saveNote(guid, browser);
}
private void saveNote() {
if (noteDirty) {
saveNote(currentNoteGuid, browserWindow);
+ thumbnailRunner.addWork("GENERATE "+ currentNoteGuid);
noteDirty = false;
}
}
loadNoteBrowserInformation(browserWindow);
}
+
private void loadNoteBrowserInformation(BrowserWindow browser) {
NoteFormatter formatter = new NoteFormatter(logger, conn, tempFiles);
formatter.setNote(currentNote, Global.pdfPreview());
}
}
private void thumbnailHTMLReady(String guid, QByteArray html, Integer zoom) {
-
logger.log(logger.HIGH, "Entering thumnailHTMLReady()");
logger.log(logger.HIGH, "Thumbnail ready for " +guid);
// Find an idle preview object
}
private void thumbnailTimer() {
- if (Global.enableThumbnails())
+ if (Global.enableThumbnails() && conn.getNoteTable().getThumbnailNeededCount() > 1) {
+ thumbnailTimer.setInterval(10*1000);
thumbnailRunner.addWork("SCAN");
+ } else {
+ thumbnailTimer.setInterval(60*1000);
+ }
}
//**************************************************
import com.trolltech.qt.core.QMutex;\r
import com.trolltech.qt.core.QObject;\r
import com.trolltech.qt.core.QSize;\r
+import com.trolltech.qt.core.Qt.AspectRatioMode;\r
import com.trolltech.qt.core.Qt.Orientation;\r
import com.trolltech.qt.core.Qt.ScrollBarPolicy;\r
-import com.trolltech.qt.gui.QColor;\r
+import com.trolltech.qt.core.Qt.TransformationMode;\r
import com.trolltech.qt.gui.QImage;\r
import com.trolltech.qt.gui.QImage.Format;\r
import com.trolltech.qt.gui.QPainter;\r
import com.trolltech.qt.webkit.QWebPage;\r
\r
+import cx.fbn.nevernote.Global;\r
import cx.fbn.nevernote.sql.DatabaseConnection;\r
import cx.fbn.nevernote.threads.ThumbnailRunner;\r
import cx.fbn.nevernote.utilities.ApplicationLogger;\r
listManager = l;\r
this.conn = conn;\r
size = new QSize(1024,768);\r
+// size = new QSize();\r
+// size.setWidth(Global.largeThumbnailSize.width());\r
+// size.setHeight(Global.largeThumbnailSize.height());\r
image = new QImage(size, Format.Format_ARGB32_Premultiplied);\r
page.setViewportSize(size);\r
page.loadFinished.connect(this, "loadFinished(Boolean)");\r
this.guid = guid;\r
page.mainFrame().setScrollBarPolicy(Orientation.Horizontal, ScrollBarPolicy.ScrollBarAlwaysOff);\r
page.mainFrame().setScrollBarPolicy(Orientation.Vertical, ScrollBarPolicy.ScrollBarAlwaysOff);\r
- page.mainFrame().setContent(html);\r
+ page.mainFrame().setContent(html);\r
}\r
- \r
- \r
- public String loadFinished(Boolean ok) {\r
+\r
+ \r
+ private String loadFinished(Boolean ok) {\r
if (!ok) { \r
mutex.unlock();\r
return null;\r
}\r
+// page.setViewportSize(page.mainFrame().contentsSize());\r
+// image = new QImage(size, Format.Format_ARGB32);\r
logger.log(logger.EXTREME, "Creating painter");\r
painter = new QPainter();\r
- logger.log(logger.EXTREME, "Creating image");\r
- if (image == null) {\r
- image = new QImage(size, Format.Format_ARGB32_Premultiplied);\r
- if (image.isNull()) {\r
- logger.log(logger.EXTREME, "Image is null. Aborting");\r
- mutex.unlock();\r
- return null;\r
- }\r
- }\r
- logger.log(logger.EXTREME, "Filling image");\r
- image.fill(QColor.white.rgb());\r
logger.log(logger.EXTREME, "Beginning painter");\r
painter.begin(image);\r
page.mainFrame().setZoomFactor(new Double(zoom));\r
return null;\r
}\r
logger.log(logger.EXTREME, "Rendering image");\r
- page.mainFrame().render(painter); \r
+ page.mainFrame().render(painter);\r
logger.log(logger.EXTREME, "Closing painter");\r
painter.end();\r
- \r
if (image.isNull()) {\r
logger.log(logger.EXTREME, "Error rendering thumbnail image. Aborting");\r
mutex.unlock();\r
return null;\r
}\r
- logger.log(logger.EXTREME, "Adding to listManager");\r
-// listManager.getThumbnails().remove(guid);\r
-// listManager.getThumbnails().put(guid, image.clone());\r
logger.log(logger.EXTREME, "Saving image isNull=" +image.isNull() +" Size=" +image.size());\r
logger.log(logger.EXTREME, "Adding image to runner");\r
saveImage();\r
}\r
\r
logger.log(logger.EXTREME, "Filling buffer");\r
- if (!image.save(buffer, "PNG")) {\r
+ QImage img = image.scaled(Global.largeThumbnailSize,\r
+ AspectRatioMode.KeepAspectRatio, TransformationMode.SmoothTransformation);\r
+ if (!img.save(buffer, "PNG")) {\r
logger.log(logger.EXTREME, "Failure to write to buffer. Aborting."); \r
mutex.unlock();\r
return;\r
\r
return values; \r
}\r
+ // Get a count of thumbnails needed\r
+ public int getThumbnailNeededCount() {\r
+ \r
+ boolean check;\r
+ NSqlQuery query = new NSqlQuery(db.getConnection());\r
+ \r
+ check = query.prepare("select count(guid) from note where thumbnailneeded=true and isExpunged=false and DATEDIFF('MINUTE',updated,CURRENT_TIMESTAMP)>5 limit 2");\r
+ check = query.exec();\r
+ if (!check) \r
+ logger.log(logger.EXTREME, "Note SQL findThumbnailNeededCount query failed: " +query.lastError().toString());\r
+ \r
+ if (query.next()) {\r
+ return query.valueInteger(0); \r
+ }\r
+\r
+ return 0; \r
+ }\r
+\r
+ \r
\r
// Update a note content's hash. This happens if a resource is edited outside of NN\r
public void updateResourceContentHash(String guid, String oldHash, String newHash) {\r
NSqlQuery query = new NSqlQuery(db.getConnection());\r
logger.log(logger.HIGH, "Creating table Notebook...");\r
if (!query.exec("Create table Notebook (guid varchar primary key, " +\r
- "sequence integer, name varchar, defaultNotebook varchar, "+\r
- "serviceCreated timestamp, serviceUpdated timestamp, published boolean, isDirty boolean, "+\r
- "autoEncrypt boolean, local boolean, archived boolean)")) \r
+ "sequence integer, " +\r
+ "name varchar, "+\r
+ "defaultNotebook varchar, "+\r
+ "serviceCreated timestamp, " +\r
+ "serviceUpdated timestamp, "+\r
+ "published boolean, "+\r
+ "isDirty boolean, "+\r
+ "autoEncrypt boolean, "+\r
+ "local boolean, "+\r
+ "archived boolean)")) \r
logger.log(logger.HIGH, "Table Notebook creation FAILED!!!"); \r
Notebook newnote = new Notebook();\r
newnote.setDefaultNotebook(true);\r
enmedia.setTagName("img");\r
}\r
}\r
- enmedia.setAttribute("src", QUrl.fromLocalFile(tfile.fileName()).toString());\r
+ // Technically, we should do a file:// to have a proper url, but for some reason QWebPage hates\r
+ // them and won't generate a thumbnail image properly if we use them.\r
+// enmedia.setAttribute("src", QUrl.fromLocalFile(tfile.fileName()).toString());\r
+ enmedia.setAttribute("src", tfile.fileName().toString());\r
enmedia.setAttribute("en-tag", "en-media");\r
enmedia.setAttribute("onContextMenu", "window.jambi.imageContextMenu('" +tfile.fileName() +"');");\r
enmedia.setNodeValue("");\r