Compare commits

...

9 Commits

Author SHA1 Message Date
j ee315399bb linux fulltext search 2019-02-12 13:57:27 +05:30
j 6115850f17 load without sidebar 2019-02-12 13:38:41 +05:30
j 054edd8a41 linux placeholder 2019-02-12 13:36:45 +05:30
j 82d7f85bdb go back to current list 2019-02-12 13:36:31 +05:30
j 85e315be40 show annotations in fullscreen mode 2019-02-12 13:00:06 +05:30
j eeee4f5a28 only delete own annotations 2019-02-11 14:08:52 +05:30
j b181575a37 migrate again 2019-02-11 00:25:00 +05:30
j edbe4da011 add annotations to db 2019-02-11 00:20:26 +05:30
j 9ef452832d fix migration 2019-02-11 00:14:40 +05:30
8 changed files with 77 additions and 17 deletions

View File

@ -2,6 +2,7 @@ import logging
import os
import subprocess
import sys
from urllib.parse import quote, unquote
from sqlalchemy.sql import operators
@ -14,6 +15,8 @@ def get_prefix():
def get_ids(books):
from item.models import File
if not books:
return []
ids = [b[0] for b in File.query.filter(operators.in_op(File.path, books)).values('sha1')]
return ids
@ -32,13 +35,31 @@ def find_fulltext_windows(query):
books = [b.split(':')[0] for b in books]
return get_ids(books, prefix)
def find_fulltext_linux(query):
prefix = get_prefix()
prefix_url = quote(prefix)
cmd = [
'tracker',
'sparql',
'-q',
"SELECT nie:url(?f) WHERE { ?f fts:match '%s' FILTER (tracker:uri-is-descendant ('file://%s', nie:url (?f))) }" % (query, prefix_url)
]
books = subprocess.check_output(cmd).decode().strip().split('\n')
books = [
unquote(r.strip()).replace('file://', '')[len(prefix):]
for r in books if r.strip().startswith('file://')
]
return get_ids(books)
def find_fulltext(query):
ids = []
if sys.platform == 'darwin':
ids = find_fulltext_macos(query)
elif sys.platform == 'linux':
ids = find_fulltext_linux(query)
else:
logger.debug('missing fulltext search implementation for %s', sys.platform)
return ids
def platform_supported():
return sys.platform == 'darwin'
return sys.platform in ('darwin', 'linux')

View File

@ -39,3 +39,13 @@
.OxAnnotationFolder div.OxInput {
background-image: none;
}
.OxThemeOxlight .OxAnnotationFolder {
background-color: rgb(240, 240, 240);
}
.OxThemeOxmedium .OxAnnotationFolder {
background-color: rgb(144, 144, 144);
}
.OxThemeOxdark .OxAnnotationFolder {
background-color: rgb(16, 16, 16);
}

View File

@ -73,9 +73,11 @@ oml.ui.annotation = function(annotation, $iframe) {
borderBottom: '1px solid rgb(208, 208, 208)',
}).bindEvent({
key_delete: function() {
that.triggerEvent('delete', {
id: annotation.id
})
if (annotation.user == oml.user.id) {
that.triggerEvent('delete', {
id: annotation.id
})
}
}
}).append($quote).append($notes);
@ -98,9 +100,11 @@ oml.ui.annotation = function(annotation, $iframe) {
}
}
that.delete = function() {
that.triggerEvent('delete', {
id: annotation.id
})
if (annotation.user == oml.user.id) {
that.triggerEvent('delete', {
id: annotation.id
})
}
}
that.deselect = function() {
that.removeClass('selected')

View File

@ -111,6 +111,11 @@ oml.ui.folders = function() {
oml.UI.set({find: getFind('')});
oml.$ui.librariesList.options({selected: ['']});
},
singleclick: function(data) {
oml.UI.set({
find: getFind('')
});
},
selectnext: function() {
oml.UI.set(Ox.extend(
{find: getFind(':')},
@ -201,7 +206,14 @@ oml.ui.folders = function() {
!index && oml.addList();
},
select: function(data) {
oml.UI.set({find: getFind(data.ids[0])});
oml.UI.set({
find: getFind(data.ids[0]),
});
},
singleclick: function(data) {
oml.UI.set({
find: getFind(oml.$ui.libraryList[index].options('selected')[0])
});
},
selectnext: function() {
oml.UI.set({find: getFind(inboxId)});
@ -290,6 +302,11 @@ oml.ui.folders = function() {
open: function(data) {
!index && !Ox.contains(data.ids, ':Inbox') && oml.ui.listDialog().open();
},
singleclick: function(data) {
oml.UI.set({
find: getFind(oml.$ui.folderList[index].options('selected')[0])
});
},
select: function(data) {
oml.UI.set({find: getFind(data.ids[0])});
},

View File

@ -16,7 +16,7 @@ oml.ui.fullscreenButton = function() {
})
.bindEvent({
click: function() {
Ox.Fullscreen.enter(oml.$ui.viewer.find('iframe')[0]);
Ox.Fullscreen.enter(oml.$ui.viewer[0]);
},
oml_itemview: function() {
that.updateElement();
@ -31,4 +31,4 @@ oml.ui.fullscreenButton = function() {
return that.updateElement();
};
};

View File

@ -17,7 +17,7 @@ oml.ui.itemViewPanel = function() {
],
orientation: 'horizontal',
selected: ui.itemView,
size: window.innerWidth - ui.sidebarSize - 1
size: window.innerWidth - (ui.showSidebar ? ui.sidebarSize : 0) - 1
})
.bindEvent({
oml_itemview: function(data) {
@ -27,4 +27,4 @@ oml.ui.itemViewPanel = function() {
return that;
};
};

View File

@ -566,7 +566,7 @@ oml.ui.mainMenu = function() {
? 'openPreview' : 'closePreview'
]();
} else if (id == 'fullscreen') {
Ox.Fullscreen.enter(oml.$ui.viewer.find('iframe')[0]);
Ox.Fullscreen.enter(oml.$ui.viewer[0]);
} else if (id == 'debugmode') {
if (oml.localStorage('enableDebugMode')) {
oml.localStorage['delete']('enableDebugMode');

View File

@ -61,7 +61,10 @@ oml.ui.viewer = function() {
note = data.notes[0]
delete data.notes
}
addAnnotation(data, false)
var a = Ox.extend({}, data)
a.created = a.created || (new Date).toISOString();
a.item = ui.item
oml.api.addAnnotation(a)
if (note) {
data.notes = [note]
} else {
@ -90,9 +93,14 @@ oml.ui.viewer = function() {
oml.api.getAnnotations({
id: ui.item
}, function(result) {
console.log(result)
annotations = result.data.annotations
callback && callback(annotations)
if (!result.data.annotations.length && localStorage[oml.user.ui.item + '.annotations_']) {
localStorage[oml.user.ui.item + '.annotations'] = localStorage[oml.user.ui.item + '.annotations_']
loadAnnotations(callback)
} else {
annotations = result.data.annotations
callback && callback(annotations)
}
})
}
}