Compare commits
9 Commits
e0cba14d6a
...
ee315399bb
Author | SHA1 | Date |
---|---|---|
j | ee315399bb | |
j | 6115850f17 | |
j | 054edd8a41 | |
j | 82d7f85bdb | |
j | 85e315be40 | |
j | eeee4f5a28 | |
j | b181575a37 | |
j | edbe4da011 | |
j | 9ef452832d |
|
@ -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')
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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])});
|
||||
},
|
||||
|
|
|
@ -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();
|
||||
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue