From c2fc131cdca290a27774b47978339e5b6f2bcbc8 Mon Sep 17 00:00:00 2001 From: HelloZeroNet Date: Thu, 5 Nov 2015 23:19:36 +0100 Subject: [PATCH] Rev546, Sidebar drag fix, Fix rebuild on dbschema changes, Test Dbschema changes, Fix atomicWrite error when old file already exists --- plugins/Sidebar/media/Scrollable.js | 2 ++ plugins/Sidebar/media/Scrollbable.css | 2 +- plugins/Sidebar/media/all.css | 4 ++-- plugins/Sidebar/media/all.js | 3 ++- src/Config.py | 2 +- src/Peer/Peer.py | 2 +- src/Site/SiteStorage.py | 6 ++++-- src/Test/TestDb.py | 15 +++++++++++++++ src/util/helper.py | 3 +++ 9 files changed, 31 insertions(+), 8 deletions(-) diff --git a/plugins/Sidebar/media/Scrollable.js b/plugins/Sidebar/media/Scrollable.js index 9173849e..acee6746 100644 --- a/plugins/Sidebar/media/Scrollable.js +++ b/plugins/Sidebar/media/Scrollable.js @@ -33,6 +33,7 @@ window.initScrollable = function () { contentPosition = scrollContentWrapper.scrollTop; scrollerBeingDragged = true; window.addEventListener('mousemove', scrollBarScroll) + return false } function stopDrag(evt) { @@ -42,6 +43,7 @@ window.initScrollable = function () { function scrollBarScroll(evt) { if (scrollerBeingDragged === true) { + evt.preventDefault(); var mouseDifferential = evt.pageY - normalizedPosition; var scrollEquivalent = mouseDifferential * (scrollContentWrapper.scrollHeight / scrollContainer.offsetHeight); scrollContentWrapper.scrollTop = contentPosition + scrollEquivalent; diff --git a/plugins/Sidebar/media/Scrollbable.css b/plugins/Sidebar/media/Scrollbable.css index 7d69a5f3..b11faea0 100644 --- a/plugins/Sidebar/media/Scrollbable.css +++ b/plugins/Sidebar/media/Scrollbable.css @@ -34,7 +34,7 @@ -o-transition: top .08s; transition: top .08s; } -.content { +.scroller { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; diff --git a/plugins/Sidebar/media/all.css b/plugins/Sidebar/media/all.css index 76b8acdd..2eb760ee 100644 --- a/plugins/Sidebar/media/all.css +++ b/plugins/Sidebar/media/all.css @@ -39,7 +39,7 @@ -o-transition: top .08s; -webkit-transition: top .08s; -moz-transition: top .08s; -o-transition: top .08s; -ms-transition: top .08s; transition: top .08s ; } -.content { +.scroller { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; @@ -58,7 +58,7 @@ .body-sidebar { background-color: #666 !important; } -#inner-iframe { -webkit-transition: 0.3s ease-in-out; -moz-transition: 0.3s ease-in-out; -o-transition: 0.3s ease-in-out; -ms-transition: 0.3s ease-in-out; transition: 0.3s ease-in-out ; transform-origin: left; backface-visibility: hidden; outline: 1px solid transparent } +#inner-iframe { -webkit-transition: 0.3s ease-in-out; -moz-transition: 0.3s ease-in-out; -o-transition: 0.3s ease-in-out; -ms-transition: 0.3s ease-in-out; transition: 0.3s ease-in-out ; transform-origin: left; -webkit-backface-visibility: hidden; -moz-backface-visibility: hidden; -o-backface-visibility: hidden; -ms-backface-visibility: hidden; backface-visibility: hidden ; outline: 1px solid transparent } .body-sidebar iframe { -webkit-transform: rotateY(5deg); -moz-transform: rotateY(5deg); -o-transform: rotateY(5deg); -ms-transform: rotateY(5deg); transform: rotateY(5deg) ; opacity: 0.8; pointer-events: none } /* translateX(-200px) scale(0.95)*/ /* SIDEBAR */ diff --git a/plugins/Sidebar/media/all.js b/plugins/Sidebar/media/all.js index 73b73c8b..7e86061f 100644 --- a/plugins/Sidebar/media/all.js +++ b/plugins/Sidebar/media/all.js @@ -95,6 +95,7 @@ window.initScrollable = function () { contentPosition = scrollContentWrapper.scrollTop; scrollerBeingDragged = true; window.addEventListener('mousemove', scrollBarScroll) + return false } function stopDrag(evt) { @@ -104,6 +105,7 @@ window.initScrollable = function () { function scrollBarScroll(evt) { if (scrollerBeingDragged === true) { + evt.preventDefault(); var mouseDifferential = evt.pageY - normalizedPosition; var scrollEquivalent = mouseDifferential * (scrollContentWrapper.scrollHeight / scrollContainer.offsetHeight); scrollContentWrapper.scrollTop = contentPosition + scrollEquivalent; @@ -536,7 +538,6 @@ window.initScrollable = function () { }).call(this); - /* ---- plugins/Sidebar/media/morphdom.js ---- */ diff --git a/src/Config.py b/src/Config.py index 72e848e4..a8a6ef73 100644 --- a/src/Config.py +++ b/src/Config.py @@ -8,7 +8,7 @@ class Config(object): def __init__(self, argv): self.version = "0.3.2" - self.rev = 542 + self.rev = 546 self.argv = argv self.action = None self.createParser() diff --git a/src/Peer/Peer.py b/src/Peer/Peer.py index 45b831c6..87c58a3b 100644 --- a/src/Peer/Peer.py +++ b/src/Peer/Peer.py @@ -96,7 +96,7 @@ class Peer(object): self.onConnectionError() return None # Connection failed - for retry in range(0, 3): # Retry 3 times + for retry in range(1, 4): # Retry 3 times try: res = self.connection.request(cmd, params, stream_to) if not res: diff --git a/src/Site/SiteStorage.py b/src/Site/SiteStorage.py index 4c78c977..f9a4c3aa 100644 --- a/src/Site/SiteStorage.py +++ b/src/Site/SiteStorage.py @@ -45,7 +45,7 @@ class SiteStorage: if check and not self.db_checked: changed_tables = self.db.checkTables() if changed_tables: - self.rebuildDb(delete_db=False) # Todo only update the changed table datas + self.rebuildDb(delete_db=False) # TODO: only update the changed table datas def closeDb(self): if self.db: @@ -176,7 +176,9 @@ class SiteStorage: # Update Sql cache if inner_path == "dbschema.json": self.has_db = self.isFile("dbschema.json") - self.getDb().checkTables() # Check if any if table schema changed + # Reopen DB to check changes + self.closeDb() + self.openDb() elif inner_path.endswith(".json") and self.has_db: # Load json file to db self.log.debug("Loading json file to db: %s" % inner_path) try: diff --git a/src/Test/TestDb.py b/src/Test/TestDb.py index 00856619..f012d31a 100644 --- a/src/Test/TestDb.py +++ b/src/Test/TestDb.py @@ -49,6 +49,21 @@ class TestDb: assert "test_id" in cols assert "title" in cols + # Add new table + assert "newtest" not in tables + db.schema["tables"]["newtest"] = { + "cols": [ + ["newtest_id", "INTEGER"], + ["newtitle", "TEXT"], + ], + "indexes": ["CREATE UNIQUE INDEX newtest_id ON newtest(newtest_id)"], + "schema_changed": 1426195822 + } + db.checkTables() + tables = [row["name"] for row in db.execute("SELECT name FROM sqlite_master WHERE type='table'")] + assert "test" in tables + assert "newtest" in tables + db.close() # Cleanup diff --git a/src/util/helper.py b/src/util/helper.py index ad9b9872..9750af53 100644 --- a/src/util/helper.py +++ b/src/util/helper.py @@ -3,6 +3,7 @@ import socket import struct import re import collections +import time def atomicWrite(dest, content, mode="w"): @@ -10,6 +11,8 @@ def atomicWrite(dest, content, mode="w"): f.write(content) f.flush() os.fsync(f.fileno()) + if os.path.isfile(dest + "-old"): # Previous incomplete write + os.rename(dest + "-old", dest + "-old-%s" % time.time()) os.rename(dest, dest + "-old") os.rename(dest + "-new", dest) os.unlink(dest + "-old")