X-Git-Url: http://git.sourceforge.jp/view?p=neighbornote%2FNeighborNote.git;a=blobdiff_plain;f=src%2Fcx%2Ffbn%2Fnevernote%2Fgui%2FBrowserWindow.java;h=f47dd85b94a9945d38522a801b6a1d3d3e5bf224;hp=d8f48575b5ea81ed65cc33cf41d7e54909a1be2e;hb=77166e472972f3ed2bb0f33175ef5d8dc5d4d70d;hpb=fe0d78ce4909cf3efcb2c4a2cb3cb212c3b9114d diff --git a/src/cx/fbn/nevernote/gui/BrowserWindow.java b/src/cx/fbn/nevernote/gui/BrowserWindow.java index d8f4857..f47dd85 100644 --- a/src/cx/fbn/nevernote/gui/BrowserWindow.java +++ b/src/cx/fbn/nevernote/gui/BrowserWindow.java @@ -55,6 +55,7 @@ import com.swabunga.spell.event.SpellCheckListener; import com.swabunga.spell.event.SpellChecker; import com.swabunga.spell.event.StringWordTokenizer; import com.trolltech.qt.core.QByteArray; +import com.trolltech.qt.core.QCoreApplication; import com.trolltech.qt.core.QDataStream; import com.trolltech.qt.core.QDateTime; import com.trolltech.qt.core.QEvent; @@ -63,7 +64,9 @@ import com.trolltech.qt.core.QFile; import com.trolltech.qt.core.QFileSystemWatcher; import com.trolltech.qt.core.QIODevice; import com.trolltech.qt.core.QMimeData; +import com.trolltech.qt.core.QTextCodec; import com.trolltech.qt.core.QUrl; +import com.trolltech.qt.core.Qt; import com.trolltech.qt.core.Qt.Key; import com.trolltech.qt.core.Qt.KeyboardModifier; import com.trolltech.qt.core.Qt.KeyboardModifiers; @@ -71,6 +74,7 @@ import com.trolltech.qt.gui.QAction; import com.trolltech.qt.gui.QApplication; import com.trolltech.qt.gui.QCalendarWidget; import com.trolltech.qt.gui.QClipboard; +import com.trolltech.qt.gui.QClipboard.Mode; import com.trolltech.qt.gui.QColor; import com.trolltech.qt.gui.QComboBox; import com.trolltech.qt.gui.QDateEdit; @@ -91,6 +95,8 @@ import com.trolltech.qt.gui.QLineEdit; import com.trolltech.qt.gui.QListWidgetItem; import com.trolltech.qt.gui.QMatrix; import com.trolltech.qt.gui.QMessageBox; +import com.trolltech.qt.gui.QPalette; +import com.trolltech.qt.gui.QPalette.ColorRole; import com.trolltech.qt.gui.QPushButton; import com.trolltech.qt.gui.QShortcut; import com.trolltech.qt.gui.QTimeEdit; @@ -98,6 +104,9 @@ import com.trolltech.qt.gui.QToolButton; import com.trolltech.qt.gui.QToolButton.ToolButtonPopupMode; import com.trolltech.qt.gui.QVBoxLayout; import com.trolltech.qt.gui.QWidget; +import com.trolltech.qt.network.QNetworkAccessManager; +import com.trolltech.qt.network.QNetworkReply; +import com.trolltech.qt.network.QNetworkReply.NetworkError; import com.trolltech.qt.network.QNetworkRequest; import com.trolltech.qt.webkit.QWebPage; import com.trolltech.qt.webkit.QWebPage.WebAction; @@ -108,16 +117,20 @@ import cx.fbn.nevernote.Global; import cx.fbn.nevernote.dialog.EnCryptDialog; import cx.fbn.nevernote.dialog.EnDecryptDialog; import cx.fbn.nevernote.dialog.GeoDialog; +import cx.fbn.nevernote.dialog.InsertLatexImage; import cx.fbn.nevernote.dialog.InsertLinkDialog; import cx.fbn.nevernote.dialog.SpellCheck; import cx.fbn.nevernote.dialog.TableDialog; import cx.fbn.nevernote.dialog.TagAssign; import cx.fbn.nevernote.evernote.EnCrypt; +import cx.fbn.nevernote.filters.FilterEditorTags; import cx.fbn.nevernote.signals.NoteResourceSignal; import cx.fbn.nevernote.signals.NoteSignal; import cx.fbn.nevernote.sql.DatabaseConnection; import cx.fbn.nevernote.utilities.ApplicationLogger; import cx.fbn.nevernote.utilities.FileUtils; +import cx.fbn.nevernote.utilities.Pair; +import cx.fbn.nevernote.xml.HtmlTagModifier; public class BrowserWindow extends QWidget { @@ -154,7 +167,6 @@ public class BrowserWindow extends QWidget { private String saveNoteTitle; private String saveTagList; private boolean insideList; -// private String selectedText; private final DatabaseConnection conn; private final QCalendarWidget createdCalendarWidget; private final QCalendarWidget alteredCalendarWidget; @@ -229,8 +241,16 @@ public class BrowserWindow extends QWidget { SpellDictionary userDictionary; SpellChecker spellChecker; SuggestionListener spellListener; - private final HashMap previewPageList; - + private final HashMap previewPageList; + boolean insertHyperlink = true; + boolean insideTable = false; + boolean insideEncryption = false; + public Signal1 blockApplication; + public Signal0 unblockApplication; + public boolean awaitingHttpResponse; + public long unblockTime; + String latexGuid; // This is set if we are editing an existing LaTeX formula. Useful to track guid. + public static class SuggestionListener implements SpellCheckListener { public boolean abortSpellCheck = false; @@ -244,11 +264,11 @@ public class BrowserWindow extends QWidget { spellCheckDialog = new SpellCheck(checker); } public void spellingError(SpellCheckEvent event) { - System.out.println("**" +event.getInvalidWord()); errorsFound = true; spellCheckDialog.setWord(event.getInvalidWord()); - List suggestions = event.getSuggestions(); + @SuppressWarnings("unchecked") + List suggestions = event.getSuggestions(); spellCheckDialog.clearSuggestions(); if (!suggestions.isEmpty()) { // spellCheckDialog.setCurrentSuggestion(suggestions.get(0).getWord()); @@ -566,6 +586,27 @@ public class BrowserWindow extends QWidget { browser.page().microFocusChanged.connect(this, "microFocusChanged()"); + //Setup colors + + QPalette pal = new QPalette(); + pal.setColor(ColorRole.Text, QColor.black); + titleLabel.setPalette(pal); + authorText.setPalette(pal); + authorLabel.setPalette(pal); + urlLabel.setPalette(pal); + urlText.setPalette(pal); + createdDate.setPalette(pal); + createdTime.setPalette(pal); + alteredDate.setPalette(pal); + alteredTime.setPalette(pal); + subjectDate.setPalette(pal); + subjectTime.setPalette(pal); + tagEdit.setPalette(pal); + notebookBox.setPalette(pal); + + blockApplication = new Signal1(); + unblockApplication = new Signal0(); + logger.log(logger.HIGH, "Browser setup complete"); } @@ -618,7 +659,12 @@ public class BrowserWindow extends QWidget { createdDate.setEnabled(!v); subjectDate.setEnabled(!v); alteredDate.setEnabled(!v); + authorText.setEnabled(!v); + createdTime.setEnabled(!v); + alteredTime.setEnabled(!v); + subjectTime.setEnabled(!v); getBrowser().setEnabled(true); +// getBrowser().setEnabled(!v); } // expose this class to Javascript on the web page @@ -664,7 +710,8 @@ public class BrowserWindow extends QWidget { // New Editor Button private QPushButton newEditorButton(String name, String toolTip) { QPushButton button = new QPushButton(); - QIcon icon = new QIcon(iconPath + name + ".gif"); +// QIcon icon = new QIcon(iconPath + name + ".gif"); + QIcon icon = new QIcon(iconPath + name + ".png"); button.setIcon(icon); button.setToolTip(toolTip); button.clicked.connect(this, name + "Clicked()"); @@ -673,7 +720,8 @@ public class BrowserWindow extends QWidget { // New Editor Button private QToolButton newToolButton(String name, String toolTip) { QToolButton button = new QToolButton(); - QIcon icon = new QIcon(iconPath + name + ".gif"); +// QIcon icon = new QIcon(iconPath + name + ".gif"); + QIcon icon = new QIcon(iconPath + name + ".png"); button.setIcon(icon); button.setToolTip(toolTip); button.clicked.connect(this, name + "Clicked()"); @@ -820,7 +868,15 @@ public class BrowserWindow extends QWidget { @SuppressWarnings("unused") private void linkClicked(QUrl url) { logger.log(logger.EXTREME, "URL Clicked: " +url.toString()); - if (url.toString().substring(0,8).equals("nnres://")) { + if (url.toString().startsWith("latex:")) { + int position = url.toString().lastIndexOf("."); + String guid = url.toString().substring(0,position); + position = guid.lastIndexOf("/"); + guid = guid.substring(position+1); + editLatex(guid); + return; + } + if (url.toString().startsWith("nnres://")) { logger.log(logger.EXTREME, "URL is NN resource"); if (url.toString().endsWith("/vnd.evernote.ink")) { logger.log(logger.EXTREME, "Unable to open ink note"); @@ -1019,11 +1075,40 @@ public class BrowserWindow extends QWidget { if (!mime.hasText()) return; String text = mime.text(); - clipboard.setText(text); + clipboard.clear(); + clipboard.setText(text, Mode.Clipboard); browser.page().triggerAction(WebAction.Paste); - QApplication.clipboard().setMimeData(mime); - browser.setFocus(); + // This is done because pasting into an encryption block + // can cause multiple cells (which can't happen). It + // just goes through the table, extracts the data, & + // puts it back as one table cell. + if (insideEncryption) { + String js = new String( "function fixEncryption() { " + +" var selObj = window.getSelection();" + +" var selRange = selObj.getRangeAt(0);" + +" var workingNode = window.getSelection().anchorNode;" + +" while(workingNode != null && workingNode.nodeName.toLowerCase() != 'table') { " + +" workingNode = workingNode.parentNode;" + +" } " + +" workingNode.innerHTML = window.jambi.fixEncryptionPaste(workingNode.innerHTML);" + +"} fixEncryption();"); + browser.page().mainFrame().evaluateJavaScript(js); + } + } + + // This basically removes all the table tags and returns just the contents. + // This is called by JavaScript to fix encryption pastes. + public String fixEncryptionPaste(String data) { + data = data.replace("", ""); + data = data.replace("", ""); + data = data.replace("", ""); + data = data.replace("", ""); + data = data.replace("", ""); + data = data.replace("", "
"); + data = data.replace("

", "
"); + + return ""+data+""; } // insert date/time @@ -1197,7 +1282,9 @@ public class BrowserWindow extends QWidget { "document.execCommand('insertHtml', false, '"); String script_end = new String("');"); String todo = new String( - ""); + ""); browser.page().mainFrame().evaluateJavaScript( script_start + todo + script_end); browser.setFocus(); @@ -1209,6 +1296,7 @@ public class BrowserWindow extends QWidget { String text = browser.selectedText(); if (text.trim().equalsIgnoreCase("")) return; + text = new String(text.replaceAll("\n", "
")); EnCryptDialog dialog = new EnCryptDialog(); dialog.exec(); @@ -1218,6 +1306,7 @@ public class BrowserWindow extends QWidget { EnCrypt crypt = new EnCrypt(); String encrypted = crypt.encrypt(text, dialog.getPassword().trim(), 64); + String decrypted = crypt.decrypt(encrypted, dialog.getPassword().trim(), 64); if (encrypted.trim().equals("")) { QMessageBox.information(this, tr("Error"), tr("Error Encrypting String")); @@ -1228,7 +1317,6 @@ public class BrowserWindow extends QWidget { + dialog.getHint().replace("'","\\'") + "\" length=\"64\" "); buffer.append("contentEditable=\"false\" alt=\""); buffer.append(encrypted); - // NFC FIXME: should this be a file URL like in handleLocalAttachment and importAttachment? buffer.append("\" src=\"").append(FileUtils.toForwardSlashedPath(Global.getFileManager().getImageDirPath("encrypt.png") +"\"")); Global.cryptCounter++; buffer.append(" id=\"crypt"+Global.cryptCounter.toString() +"\""); @@ -1252,7 +1340,7 @@ public class BrowserWindow extends QWidget { if (text.trim().equalsIgnoreCase("")) return; - InsertLinkDialog dialog = new InsertLinkDialog(); + InsertLinkDialog dialog = new InsertLinkDialog(insertHyperlink); if (currentHyperlink != null && currentHyperlink != "") { dialog.setUrl(currentHyperlink); } @@ -1261,8 +1349,12 @@ public class BrowserWindow extends QWidget { logger.log(logger.EXTREME, "Insert link canceled"); return; } - if (browser.insertLinkAction.text().equalsIgnoreCase("Insert Hyperlink")) { + + // Take care of inserting new links + if (insertHyperlink) { String selectedText = browser.selectedText(); + if (dialog.getUrl().trim().equals("")) + return; logger.log(logger.EXTREME, "Inserting link on text "+selectedText); logger.log(logger.EXTREME, "URL Link " +dialog.getUrl().trim()); String dUrl = StringUtils.replace(dialog.getUrl().trim(), "'", "\\'"); @@ -1272,24 +1364,205 @@ public class BrowserWindow extends QWidget { String script = "document.execCommand('insertHtml', false, '"+url+"');"; browser.page().mainFrame().evaluateJavaScript(script); return; + } + + // Edit existing links + String js = new String( "function getCursorPos() {" + +"var cursorPos;" + +"if (window.getSelection) {" + +" var selObj = window.getSelection();" + +" var selRange = selObj.getRangeAt(0);" + +" var workingNode = window.getSelection().anchorNode.parentNode;" + +" while(workingNode != null) { " + +" if (workingNode.nodeName.toLowerCase()=='a') workingNode.setAttribute('href','" +dialog.getUrl() +"');" + +" workingNode = workingNode.parentNode;" + +" }" + +"}" + +"} getCursorPos();"); + browser.page().mainFrame().evaluateJavaScript(js); + + if (!dialog.getUrl().trim().equals("")) { + contentChanged(); + return; + } + + // Remove URL + js = new String( "function getCursorPos() {" + +"var cursorPos;" + +"if (window.getSelection) {" + +" var selObj = window.getSelection();" + +" var selRange = selObj.getRangeAt(0);" + +" var workingNode = window.getSelection().anchorNode.parentNode;" + +" while(workingNode != null) { " + +" if (workingNode.nodeName.toLowerCase()=='a') { " + +" workingNode.removeAttribute('href');" + +" workingNode.removeAttribute('title');" + +" var text = document.createTextNode(workingNode.innerText);" + +" workingNode.parentNode.insertBefore(text, workingNode);" + +" workingNode.parentNode.removeChild(workingNode);" + +" }" + +" workingNode = workingNode.parentNode;" + +" }" + +"}" + +"} getCursorPos();"); + browser.page().mainFrame().evaluateJavaScript(js); + + contentChanged(); + + + } + + + // Insert a hyperlink + public void insertLatex() { + editLatex(null); + } + public void editLatex(String guid) { + logger.log(logger.EXTREME, "Inserting latex"); + String text = browser.selectedText(); + if (text.trim().equalsIgnoreCase("")) { + InsertLatexImage dialog = new InsertLatexImage(); + if (guid != null) { + String formula = conn.getNoteTable().noteResourceTable.getNoteSourceUrl(guid).replace("http://latex.codecogs.com/gif.latex?", ""); + dialog.setFormula(formula); + } + dialog.exec(); + if (!dialog.okPressed()) { + logger.log(logger.EXTREME, "Edit LaTex canceled"); + return; + } + text = dialog.getFormula().trim(); + } + blockApplication.emit(this); + logger.log(logger.EXTREME, "Inserting LaTeX formula:" +text); + latexGuid = guid; + text = StringUtils.replace(text, "'", "\\'"); + String url = "http://latex.codecogs.com/gif.latex?" +text; + logger.log(logger.EXTREME, "Sending request to codecogs --> " + url); + QNetworkAccessManager manager = new QNetworkAccessManager(this); + manager.finished.connect(this, "insertLatexImageReady(QNetworkReply)"); + unblockTime = new GregorianCalendar().getTimeInMillis()+5000; + awaitingHttpResponse = true; + manager.get(new QNetworkRequest(new QUrl(url))); + } + + public void insertLatexImageReady(QNetworkReply reply) { + logger.log(logger.EXTREME, "Response received from CodeCogs"); + if (reply.error() != NetworkError.NoError) + return; + + unblockTime = -1; + if (!awaitingHttpResponse) + return; + + awaitingHttpResponse = false; + QUrl replyUrl = reply.url(); + QByteArray image = reply.readAll(); + reply.close(); + logger.log(logger.EXTREME, "New image size: " +image.size()); + + Resource newRes = null; + QFile tfile; + String path; + if (latexGuid == null) { + logger.log(logger.EXTREME, "Creating temporary gif"); + path = Global.getFileManager().getResDirPath("latex-temp.gif"); + tfile = new QFile(path); + tfile.open(new QIODevice.OpenMode(QIODevice.OpenModeFlag.WriteOnly)); + logger.log(logger.EXTREME, "File Open: " +tfile.errorString()); + tfile.write(image); + logger.log(logger.EXTREME, "Bytes writtes: "+tfile.size()); + tfile.close(); + logger.log(logger.EXTREME, "Creating resource"); + int sequence = 0; + if (currentNote.getResources() != null || currentNote.getResources().size() > 0) + sequence = currentNote.getResources().size(); + newRes = createResource(path,sequence ,"image/gif", false); + QImage pix = new QImage(); + pix.loadFromData(image); + newRes.setHeight(new Integer(pix.height()).shortValue()); + newRes.setWidth(new Integer(pix.width()).shortValue()); + logger.log(logger.EXTREME, "Renaming temporary file to " +newRes.getGuid()+".gif"); + path = Global.getFileManager().getResDirPath(newRes.getGuid()+".gif"); + tfile.rename(path); } else { - String js = new String( "function getCursorPos() {" - +"var cursorPos;" - +"if (window.getSelection) {" - +" var selObj = window.getSelection();" - +" var selRange = selObj.getRangeAt(0);" - +" var workingNode = window.getSelection().anchorNode.parentNode;" - +" while(workingNode != null) { " - +" if (workingNode.nodeName.toLowerCase()=='a') workingNode.setAttribute('href','" +dialog.getUrl() +"');" - +" workingNode = workingNode.parentNode;" - +" }" - +"}" - +"} getCursorPos();"); - browser.page().mainFrame().evaluateJavaScript(js); - contentChanged(); + newRes = conn.getNoteTable().noteResourceTable.getNoteResource(latexGuid, false); + path = Global.getFileManager().getResDirPath(newRes.getGuid()+".gif"); + tfile = new QFile(path); + tfile.open(new QIODevice.OpenMode(QIODevice.OpenModeFlag.WriteOnly)); + tfile.write(image); + tfile.close(); + newRes.getData().setBody(image.toByteArray()); + // Calculate the new hash value + MessageDigest md; + + logger.log(logger.EXTREME, "Generating MD5"); + try { + md = MessageDigest.getInstance("MD5"); + md.update(image.toByteArray()); + byte[] hash = md.digest(); + newRes.getData().setBodyHash(hash); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + QImage pix = new QImage(); + pix.loadFromData(image); + newRes.setHeight(new Integer(pix.height()).shortValue()); + newRes.setWidth(new Integer(pix.width()).shortValue()); + conn.getNoteTable().noteResourceTable.updateNoteResource(newRes, true); } + + logger.log(logger.EXTREME, "Setting source: " +replyUrl.toString()); + newRes.getAttributes().setSourceURL(replyUrl.toString()); + conn.getNoteTable().noteResourceTable.updateNoteSourceUrl(newRes.getGuid(), replyUrl.toString(), true); + + for(int i=0; i"); + + String script_start = new String("document.execCommand('insertHTML', false, '"); + String script_end = new String("');"); + browser.page().mainFrame().evaluateJavaScript( + script_start + buffer + script_end); + } else { + HtmlTagModifier modifier = new HtmlTagModifier(getContent()); + modifier.modifyLatexTagHash(newRes); + String newContent = modifier.getHtml(); + browser.setContent(new QByteArray(newContent)); + } + + logger.log(logger.EXTREME, "New HTML set\n" +browser.page().currentFrame().toHtml()); + QWebSettings.setMaximumPagesInCache(0); + QWebSettings.setObjectCacheCapacities(0, 0, 0); + + browser.page().mainFrame().setHtml(browser.page().mainFrame().toHtml()); + browser.reload(); + contentChanged(); +// resourceSignal.contentChanged.emit(path); + unblockTime = -1; + unblockApplication.emit(); + return; } + + // Insert a table public void insertTable() { @@ -1370,7 +1643,7 @@ public class BrowserWindow extends QWidget { // First, try to decrypt with any keys we already have for (int i=0; i passwordPair = new Pair(); + passwordPair.setFirst(dialog.getPassword()); + passwordPair.setSecond(dialog.getHint()); + Global.passwordSafe.put(slot, passwordPair); +// removeEncryption(id, plainText.replaceAll("\n", "
"), dialog.permanentlyDecrypt(), slot); removeEncryption(id, plainText, dialog.permanentlyDecrypt(), slot); - if (dialog.rememberPassword()) - Global.passwordRemember.add(dialog.getPassword()); + if (dialog.rememberPassword()) { + Pair pair = new Pair(); + pair.setFirst(dialog.getPassword()); + pair.setSecond(dialog.getHint()); + Global.passwordRemember.add(pair); + } } @@ -1407,7 +1688,7 @@ public class BrowserWindow extends QWidget { // Modify a note's tags @SuppressWarnings("unused") private void modifyTags() { - TagAssign tagWindow = new TagAssign(allTags, currentTags); + TagAssign tagWindow = new TagAssign(allTags, currentTags, !conn.getNotebookTable().isLinked(currentNote.getNotebookGuid())); tagWindow.exec(); if (tagWindow.okClicked()) { currentTags.clear(); @@ -1444,7 +1725,11 @@ public class BrowserWindow extends QWidget { String newTagArray[]; if (!completionText.equals("")) { String before = tagEdit.text().substring(0,tagEdit.cursorPosition()); - before = before.substring(0,before.lastIndexOf(Global.tagDelimeter)); + int lastDelimiter = before.lastIndexOf(Global.tagDelimeter); + if (lastDelimiter > 0) + before = before.substring(0,before.lastIndexOf(Global.tagDelimeter)); + else + before = ""; String after = tagEdit.text().substring(tagEdit.cursorPosition()); newTagArray = (before+Global.tagDelimeter+completionText+Global.tagDelimeter+after).split(Global.tagDelimeter); } @@ -1479,6 +1764,20 @@ public class BrowserWindow extends QWidget { if (!newTagArray[i].trim().equals("")) newTagList.add(newTagArray[i]); + if (conn.getNotebookTable().isLinked(currentNote.getNotebookGuid())) { + for (int i=newTagList.size()-1; i>=0; i--) { + boolean found = false; + for (int j=0; j()); + FilterEditorTags t = new FilterEditorTags(conn, logger); + setAllTags(t.getValidTags(currentNote)); + } currentNote.setNotebookGuid(notebookList.get(i).getGuid()); changed = true; } @@ -1700,7 +2104,6 @@ public class BrowserWindow extends QWidget { buffer.append("\" en-tag=en-media type=\"image/jpeg\"" +" hash=\""+Global.byteArrayToHexString(newRes.getData().getBodyHash()) +"\"" +" guid=\"" +newRes.getGuid() +"\"" -// +" onContextMenu=\"window.jambi.imageContextMenu('" +tfile.fileName() +"');\"" +" onContextMenu=\"window.jambi.imageContextMenu(&." +tfile.fileName() +"&.);\"" + " />"); @@ -1848,7 +2251,6 @@ public class BrowserWindow extends QWidget { PDFPreview pdfPreview = new PDFPreview(); if (pdfPreview.setupPreview(Global.getFileManager().getResDirPath(fileName), "pdf",0)) { - // NFC TODO: should this be a 'file://' url like the ones above? imageURL = file.fileName() + ".png"; } } @@ -1875,14 +2277,17 @@ public class BrowserWindow extends QWidget { if (!urlTest.equals("")) url = urlTest; url = url.replace("/", File.separator); + logger.log(logger.EXTREME, "Reading from file to create resource"); resourceFile = new QFile(url); resourceFile.open(new QIODevice.OpenMode(QIODevice.OpenModeFlag.ReadOnly)); +// logger.log(logger.EXTREME, "Error opening file "+url.toString() +": "+resourceFile.errorString()); byte[] fileData = resourceFile.readAll().toByteArray(); resourceFile.close(); if (fileData.length == 0) return null; MessageDigest md; try { + logger.log(logger.EXTREME, "Generating MD5"); md = MessageDigest.getInstance("MD5"); md.update(fileData); byte[] hash = md.digest(); @@ -1940,6 +2345,7 @@ public class BrowserWindow extends QWidget { r.setAttributes(a); conn.getNoteTable().noteResourceTable.saveNoteResource(r, true); + logger.log(logger.EXTREME, "Resource created"); return r; } catch (NoSuchAlgorithmException e1) { e1.printStackTrace(); @@ -2106,6 +2512,8 @@ public class BrowserWindow extends QWidget { // Strip URL prefix and base dir guid = guid.replace("nnres://", "") .replace(FileUtils.toForwardSlashedPath(Global.getFileManager().getResDirPath()), ""); + guid = guid.replace("file://", "").replace("/", "") + .replace(FileUtils.toForwardSlashedPath(Global.getFileManager().getResDirPath()), ""); pos = guid.lastIndexOf('.'); if (pos > 0) @@ -2130,7 +2538,6 @@ public class BrowserWindow extends QWidget { // * User chose to save an attachment. Pares out the request * // * into a guid & file. Save the result. --- DONE FROM downloadAttachment now!!!!! // ************************************************************ - // NFC TODO: unused? remove public void downloadImage(QNetworkRequest request) { QFileDialog fd = new QFileDialog(this); fd.setFileMode(FileMode.AnyFile); @@ -2177,7 +2584,11 @@ public class BrowserWindow extends QWidget { // ************************************************************* private void removeEncryption(String id, String plainText, boolean permanent, String slot) { if (!permanent) { - plainText = " " +plainText+" "; + plainText = "
" + +plainText+"
"; } String html = browser.page().mainFrame().toHtml(); @@ -2189,10 +2600,12 @@ public class BrowserWindow extends QWidget { endPos = text.indexOf(">", imagePos); String tag = text.substring(imagePos-1,endPos); if (tag.indexOf("id=\""+id+"\"") > -1) { - text = text.substring(0,imagePos) +plainText+text.substring(endPos+1); - - browser.setContent(new QByteArray(text)); - contentChanged(); + text = text.substring(0,imagePos) +plainText+text.substring(endPos+1); + QTextCodec codec = QTextCodec.codecForName("UTF-8"); + QByteArray unicode = codec.fromUnicode(text); + browser.setContent(unicode); + if (permanent) + contentChanged(); } imagePos = text.indexOf("