Rev546, Sidebar drag fix, Fix rebuild on dbschema changes, Test Dbschema changes, Fix atomicWrite error when old file already exists

This commit is contained in:
HelloZeroNet 2015-11-05 23:19:36 +01:00
parent bd67d8fe14
commit c2fc131cdc
9 changed files with 31 additions and 8 deletions

View file

@ -33,6 +33,7 @@ window.initScrollable = function () {
contentPosition = scrollContentWrapper.scrollTop; contentPosition = scrollContentWrapper.scrollTop;
scrollerBeingDragged = true; scrollerBeingDragged = true;
window.addEventListener('mousemove', scrollBarScroll) window.addEventListener('mousemove', scrollBarScroll)
return false
} }
function stopDrag(evt) { function stopDrag(evt) {
@ -42,6 +43,7 @@ window.initScrollable = function () {
function scrollBarScroll(evt) { function scrollBarScroll(evt) {
if (scrollerBeingDragged === true) { if (scrollerBeingDragged === true) {
evt.preventDefault();
var mouseDifferential = evt.pageY - normalizedPosition; var mouseDifferential = evt.pageY - normalizedPosition;
var scrollEquivalent = mouseDifferential * (scrollContentWrapper.scrollHeight / scrollContainer.offsetHeight); var scrollEquivalent = mouseDifferential * (scrollContentWrapper.scrollHeight / scrollContainer.offsetHeight);
scrollContentWrapper.scrollTop = contentPosition + scrollEquivalent; scrollContentWrapper.scrollTop = contentPosition + scrollEquivalent;

View file

@ -34,7 +34,7 @@
-o-transition: top .08s; -o-transition: top .08s;
transition: top .08s; transition: top .08s;
} }
.content { .scroller {
-webkit-touch-callout: none; -webkit-touch-callout: none;
-webkit-user-select: none; -webkit-user-select: none;
-khtml-user-select: none; -khtml-user-select: none;

View file

@ -39,7 +39,7 @@
-o-transition: top .08s; -o-transition: top .08s;
-webkit-transition: top .08s; -moz-transition: top .08s; -o-transition: top .08s; -ms-transition: top .08s; 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-touch-callout: none;
-webkit-user-select: none; -webkit-user-select: none;
-khtml-user-select: none; -khtml-user-select: none;
@ -58,7 +58,7 @@
.body-sidebar { background-color: #666 !important; } .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)*/ .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 */ /* SIDEBAR */

View file

@ -95,6 +95,7 @@ window.initScrollable = function () {
contentPosition = scrollContentWrapper.scrollTop; contentPosition = scrollContentWrapper.scrollTop;
scrollerBeingDragged = true; scrollerBeingDragged = true;
window.addEventListener('mousemove', scrollBarScroll) window.addEventListener('mousemove', scrollBarScroll)
return false
} }
function stopDrag(evt) { function stopDrag(evt) {
@ -104,6 +105,7 @@ window.initScrollable = function () {
function scrollBarScroll(evt) { function scrollBarScroll(evt) {
if (scrollerBeingDragged === true) { if (scrollerBeingDragged === true) {
evt.preventDefault();
var mouseDifferential = evt.pageY - normalizedPosition; var mouseDifferential = evt.pageY - normalizedPosition;
var scrollEquivalent = mouseDifferential * (scrollContentWrapper.scrollHeight / scrollContainer.offsetHeight); var scrollEquivalent = mouseDifferential * (scrollContentWrapper.scrollHeight / scrollContainer.offsetHeight);
scrollContentWrapper.scrollTop = contentPosition + scrollEquivalent; scrollContentWrapper.scrollTop = contentPosition + scrollEquivalent;
@ -536,7 +538,6 @@ window.initScrollable = function () {
}).call(this); }).call(this);
/* ---- plugins/Sidebar/media/morphdom.js ---- */ /* ---- plugins/Sidebar/media/morphdom.js ---- */

View file

@ -8,7 +8,7 @@ class Config(object):
def __init__(self, argv): def __init__(self, argv):
self.version = "0.3.2" self.version = "0.3.2"
self.rev = 542 self.rev = 546
self.argv = argv self.argv = argv
self.action = None self.action = None
self.createParser() self.createParser()

View file

@ -96,7 +96,7 @@ class Peer(object):
self.onConnectionError() self.onConnectionError()
return None # Connection failed return None # Connection failed
for retry in range(0, 3): # Retry 3 times for retry in range(1, 4): # Retry 3 times
try: try:
res = self.connection.request(cmd, params, stream_to) res = self.connection.request(cmd, params, stream_to)
if not res: if not res:

View file

@ -45,7 +45,7 @@ class SiteStorage:
if check and not self.db_checked: if check and not self.db_checked:
changed_tables = self.db.checkTables() changed_tables = self.db.checkTables()
if changed_tables: 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): def closeDb(self):
if self.db: if self.db:
@ -176,7 +176,9 @@ class SiteStorage:
# Update Sql cache # Update Sql cache
if inner_path == "dbschema.json": if inner_path == "dbschema.json":
self.has_db = self.isFile("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 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) self.log.debug("Loading json file to db: %s" % inner_path)
try: try:

View file

@ -49,6 +49,21 @@ class TestDb:
assert "test_id" in cols assert "test_id" in cols
assert "title" 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() db.close()
# Cleanup # Cleanup

View file

@ -3,6 +3,7 @@ import socket
import struct import struct
import re import re
import collections import collections
import time
def atomicWrite(dest, content, mode="w"): def atomicWrite(dest, content, mode="w"):
@ -10,6 +11,8 @@ def atomicWrite(dest, content, mode="w"):
f.write(content) f.write(content)
f.flush() f.flush()
os.fsync(f.fileno()) 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, dest + "-old")
os.rename(dest + "-new", dest) os.rename(dest + "-new", dest)
os.unlink(dest + "-old") os.unlink(dest + "-old")