Sat, 24 Mar 2012 17:57:55 +0100
Added code to record the timestamp a bookmark was added and visited.
--- a/APIs/Python3/eric5.api Sat Mar 24 16:10:48 2012 +0100 +++ b/APIs/Python3/eric5.api Sat Mar 24 17:57:55 2012 +0100 @@ -1768,6 +1768,9 @@ eric5.Helpviewer.Bookmarks.BookmarkNode.BookmarkNode.Folder?7 eric5.Helpviewer.Bookmarks.BookmarkNode.BookmarkNode.Root?7 eric5.Helpviewer.Bookmarks.BookmarkNode.BookmarkNode.Separator?7 +eric5.Helpviewer.Bookmarks.BookmarkNode.BookmarkNode.TsAdded?7 +eric5.Helpviewer.Bookmarks.BookmarkNode.BookmarkNode.TsModified?7 +eric5.Helpviewer.Bookmarks.BookmarkNode.BookmarkNode.TsVisited?7 eric5.Helpviewer.Bookmarks.BookmarkNode.BookmarkNode.add?4(child, offset=-1) eric5.Helpviewer.Bookmarks.BookmarkNode.BookmarkNode.children?4() eric5.Helpviewer.Bookmarks.BookmarkNode.BookmarkNode.parent?4() @@ -1856,6 +1859,7 @@ eric5.Helpviewer.Bookmarks.BookmarksManager.BookmarksManager.reload?4() eric5.Helpviewer.Bookmarks.BookmarksManager.BookmarksManager.removeBookmark?4(node) eric5.Helpviewer.Bookmarks.BookmarksManager.BookmarksManager.save?4() +eric5.Helpviewer.Bookmarks.BookmarksManager.BookmarksManager.setTimestamp?4(node, timestampType, timestamp) eric5.Helpviewer.Bookmarks.BookmarksManager.BookmarksManager.setTitle?4(node, newTitle) eric5.Helpviewer.Bookmarks.BookmarksManager.BookmarksManager.setUrl?4(node, newUrl) eric5.Helpviewer.Bookmarks.BookmarksManager.BookmarksManager.toolbar?4()
--- a/Documentation/Help/source.qhp Sat Mar 24 16:10:48 2012 +0100 +++ b/Documentation/Help/source.qhp Sat Mar 24 17:57:55 2012 +0100 @@ -1418,6 +1418,7 @@ <keyword name="BookmarksManager.reload" id="BookmarksManager.reload" ref="eric5.Helpviewer.Bookmarks.BookmarksManager.html#BookmarksManager.reload" /> <keyword name="BookmarksManager.removeBookmark" id="BookmarksManager.removeBookmark" ref="eric5.Helpviewer.Bookmarks.BookmarksManager.html#BookmarksManager.removeBookmark" /> <keyword name="BookmarksManager.save" id="BookmarksManager.save" ref="eric5.Helpviewer.Bookmarks.BookmarksManager.html#BookmarksManager.save" /> + <keyword name="BookmarksManager.setTimestamp" id="BookmarksManager.setTimestamp" ref="eric5.Helpviewer.Bookmarks.BookmarksManager.html#BookmarksManager.setTimestamp" /> <keyword name="BookmarksManager.setTitle" id="BookmarksManager.setTitle" ref="eric5.Helpviewer.Bookmarks.BookmarksManager.html#BookmarksManager.setTitle" /> <keyword name="BookmarksManager.setUrl" id="BookmarksManager.setUrl" ref="eric5.Helpviewer.Bookmarks.BookmarksManager.html#BookmarksManager.setUrl" /> <keyword name="BookmarksManager.toolbar" id="BookmarksManager.toolbar" ref="eric5.Helpviewer.Bookmarks.BookmarksManager.html#BookmarksManager.toolbar" />
--- a/Documentation/Source/eric5.Helpviewer.Bookmarks.BookmarkNode.html Sat Mar 24 16:10:48 2012 +0100 +++ b/Documentation/Source/eric5.Helpviewer.Bookmarks.BookmarkNode.html Sat Mar 24 17:57:55 2012 +0100 @@ -49,7 +49,7 @@ object <h3>Class Attributes</h3> <table> -<tr><td>Bookmark</td></tr><tr><td>Folder</td></tr><tr><td>Root</td></tr><tr><td>Separator</td></tr> +<tr><td>Bookmark</td></tr><tr><td>Folder</td></tr><tr><td>Root</td></tr><tr><td>Separator</td></tr><tr><td>TsAdded</td></tr><tr><td>TsModified</td></tr><tr><td>TsVisited</td></tr> </table> <h3>Class Methods</h3> <table>
--- a/Documentation/Source/eric5.Helpviewer.Bookmarks.BookmarksManager.html Sat Mar 24 16:10:48 2012 +0100 +++ b/Documentation/Source/eric5.Helpviewer.Bookmarks.BookmarksManager.html Sat Mar 24 17:57:55 2012 +0100 @@ -149,6 +149,9 @@ <td><a href="#BookmarksManager.save">save</a></td> <td>Public method to save the bookmarks.</td> </tr><tr> +<td><a href="#BookmarksManager.setTimestamp">setTimestamp</a></td> +<td>Public method to set the URL of a bookmark.</td> +</tr><tr> <td><a href="#BookmarksManager.setTitle">setTitle</a></td> <td>Public method to set the title of a bookmark.</td> </tr><tr> @@ -371,7 +374,24 @@ <b>save</b>(<i></i>) <p> Public method to save the bookmarks. -</p><a NAME="BookmarksManager.setTitle" ID="BookmarksManager.setTitle"></a> +</p><a NAME="BookmarksManager.setTimestamp" ID="BookmarksManager.setTimestamp"></a> +<h4>BookmarksManager.setTimestamp</h4> +<b>setTimestamp</b>(<i>node, timestampType, timestamp</i>) +<p> + Public method to set the URL of a bookmark. +</p><dl> +<dt><i>node</i></dt> +<dd> +reference to the node to be changed (BookmarkNode) +</dd><dt><i>timestampType</i></dt> +<dd> +type of the timestamp to set (BookmarkNode.TsAdded, + BookmarkNode.TsModified, BookmarkNode.TsVisited) +</dd><dt><i>timestamp</i></dt> +<dd> +timestamp to set (QDateTime) +</dd> +</dl><a NAME="BookmarksManager.setTitle" ID="BookmarksManager.setTitle"></a> <h4>BookmarksManager.setTitle</h4> <b>setTitle</b>(<i>node, newTitle</i>) <p>
--- a/Helpviewer/Bookmarks/BookmarkNode.py Sat Mar 24 16:10:48 2012 +0100 +++ b/Helpviewer/Bookmarks/BookmarkNode.py Sat Mar 24 17:57:55 2012 +0100 @@ -7,6 +7,8 @@ Module implementing the bookmark node. """ +from PyQt4.QtCore import QDateTime + class BookmarkNode(object): """ @@ -18,6 +20,11 @@ Bookmark = 2 Separator = 3 + # possible timestamp types + TsAdded = 0 + TsModified = 1 + TsVisited = 2 + def __init__(self, type_=Root, parent=None): """ Constructor @@ -29,6 +36,9 @@ self.title = "" self.desc = "" self.expanded = False + self.added = QDateTime() + self.modified = QDateTime() + self.visited = QDateTime() self._children = [] self._parent = parent
--- a/Helpviewer/Bookmarks/BookmarksManager.py Sat Mar 24 16:10:48 2012 +0100 +++ b/Helpviewer/Bookmarks/BookmarksManager.py Sat Mar 24 17:57:55 2012 +0100 @@ -10,7 +10,7 @@ import os from PyQt4.QtCore import pyqtSignal, Qt, QT_TRANSLATE_NOOP, QObject, QFile, QByteArray, \ - QBuffer, QIODevice, QXmlStreamReader, QDate, QFileInfo, QUrl + QBuffer, QIODevice, QXmlStreamReader, QDate, QDateTime, QFileInfo, QUrl from PyQt4.QtGui import QUndoStack, QUndoCommand, QApplication, QDialog from E5Gui import E5MessageBox, E5FileDialog @@ -216,6 +216,8 @@ if not self.__loaded: return + self.setTimestamp(node, BookmarkNode.TsAdded, QDateTime.currentDateTime()) + command = InsertBookmarksCommand(self, parent, node, row) self.__commands.push(command) @@ -259,6 +261,30 @@ command = ChangeBookmarkCommand(self, node, newUrl, False) self.__commands.push(command) + def setTimestamp(self, node, timestampType, timestamp): + """ + Public method to set the URL of a bookmark. + + @param node reference to the node to be changed (BookmarkNode) + @param timestampType type of the timestamp to set (BookmarkNode.TsAdded, + BookmarkNode.TsModified, BookmarkNode.TsVisited) + @param timestamp timestamp to set (QDateTime) + """ + if not self.__loaded: + return + + assert timestampType in [BookmarkNode.TsAdded, + BookmarkNode.TsModified, + BookmarkNode.TsVisited] + + if timestampType == BookmarkNode.TsAdded: + node.added = timestamp + elif timestampType == BookmarkNode.TsModified: + node.modified = timestamp + elif timestampType == BookmarkNode.TsVisited: + node.visited = timestamp + self.__saveTimer.changeOccurred() + def bookmarks(self): """ Public method to get a reference to the root bookmark node.
--- a/Helpviewer/Bookmarks/XbelReader.py Sat Mar 24 16:10:48 2012 +0100 +++ b/Helpviewer/Bookmarks/XbelReader.py Sat Mar 24 17:57:55 2012 +0100 @@ -8,7 +8,7 @@ """ from PyQt4.QtCore import QXmlStreamReader, QXmlStreamEntityResolver, QIODevice, \ - QFile, QCoreApplication, QXmlStreamNamespaceDeclaration + QFile, QCoreApplication, QXmlStreamNamespaceDeclaration, QDateTime, Qt from .BookmarkNode import BookmarkNode @@ -108,6 +108,7 @@ folder = BookmarkNode(BookmarkNode.Folder, node) folder.expanded = self.attributes().value("folded") == "no" + folder.added = QDateTime.fromString(self.attributes().value("added"), Qt.ISODate) while not self.atEnd(): self.readNext() @@ -158,7 +159,8 @@ @param node reference to the bookmark node the separator belongs to (BookmarkNode) """ - BookmarkNode(BookmarkNode.Separator, node) + sep = BookmarkNode(BookmarkNode.Separator, node) + sep.added = QDateTime.fromString(self.attributes().value("added"), Qt.ISODate) # empty elements have a start and end element while not self.atEnd(): @@ -183,6 +185,12 @@ bookmark = BookmarkNode(BookmarkNode.Bookmark, node) bookmark.url = self.attributes().value("href") + bookmark.added = QDateTime.fromString( + self.attributes().value("added"), Qt.ISODate) + bookmark.modified = QDateTime.fromString( + self.attributes().value("modified"), Qt.ISODate) + bookmark.visited = QDateTime.fromString( + self.attributes().value("visited"), Qt.ISODate) while not self.atEnd(): self.readNext()
--- a/Helpviewer/Bookmarks/XbelWriter.py Sat Mar 24 16:10:48 2012 +0100 +++ b/Helpviewer/Bookmarks/XbelWriter.py Sat Mar 24 17:57:55 2012 +0100 @@ -7,7 +7,7 @@ Module implementing a class to write XBEL bookmark files. """ -from PyQt4.QtCore import QXmlStreamWriter, QIODevice, QFile +from PyQt4.QtCore import QXmlStreamWriter, QIODevice, QFile, Qt from .BookmarkNode import BookmarkNode @@ -69,6 +69,8 @@ """ if node.type() == BookmarkNode.Folder: self.writeStartElement("folder") + if node.added.isValid(): + self.writeAttribute("added", node.added.toString(Qt.ISODate)) self.writeAttribute("folded", node.expanded and "no" or "yes") self.writeTextElement("title", node.title) for child in node.children(): @@ -78,9 +80,17 @@ self.writeStartElement("bookmark") if node.url: self.writeAttribute("href", node.url) + if node.added.isValid(): + self.writeAttribute("added", node.added.toString(Qt.ISODate)) + if node.modified.isValid(): + self.writeAttribute("modified", node.modified.toString(Qt.ISODate)) + if node.visited.isValid(): + self.writeAttribute("visited", node.visited.toString(Qt.ISODate)) self.writeTextElement("title", node.title) if node.desc: self.writeTextElement("desc", node.desc) self.writeEndElement() elif node.type() == BookmarkNode.Separator: self.writeEmptyElement("separator") + if node.added.isValid(): + self.writeAttribute("added", node.added.toString(Qt.ISODate))
--- a/Helpviewer/UrlBar/UrlBar.py Sat Mar 24 16:10:48 2012 +0100 +++ b/Helpviewer/UrlBar/UrlBar.py Sat Mar 24 17:57:55 2012 +0100 @@ -7,7 +7,7 @@ Module implementing the URL bar widget. """ -from PyQt4.QtCore import pyqtSlot, Qt, QPointF, QUrl +from PyQt4.QtCore import pyqtSlot, Qt, QPointF, QUrl, QDateTime from PyQt4.QtGui import QColor, QPalette, QApplication, QLinearGradient, QIcon, QDialog try: from PyQt4.QtNetwork import QSslCertificate # __IGNORE_EXCEPTION__ @@ -26,6 +26,7 @@ from .BookmarkActionSelectionDialog import BookmarkActionSelectionDialog from Helpviewer.Feeds.FeedsDialog import FeedsDialog +from Helpviewer.Bookmarks.BookmarkNode import BookmarkNode import UI.PixmapCache import Preferences @@ -144,13 +145,17 @@ """ Private slot to check the current URL for the bookmarked state. """ - if Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\ - .bookmarkForUrl(self.__browser.url()) is None and \ - Helpviewer.HelpWindow.HelpWindow.speedDial()\ - .pageForUrl(self.__browser.url()).url == "": + manager = Helpviewer.HelpWindow.HelpWindow.bookmarksManager() + if manager.bookmarkForUrl(self.__browser.url()) is not None: + self.__bookmarkButton.setIcon(self.__bmActiveIcon) + bookmark = manager.bookmarkForUrl(self.__browser.url()) + manager.setTimestamp(bookmark, BookmarkNode.TsVisited, + QDateTime.currentDateTime()) + elif Helpviewer.HelpWindow.HelpWindow.speedDial()\ + .pageForUrl(self.__browser.url()).url != "": + self.__bookmarkButton.setIcon(self.__bmActiveIcon) + else: self.__bookmarkButton.setIcon(self.__bmInactiveIcon) - else: - self.__bookmarkButton.setIcon(self.__bmActiveIcon) def __loadFinished(self, ok): """