mirror of
https://github.com/sashacmc/photo-importer.git
synced 2025-02-10 18:31:08 +02:00
* server import added
This commit is contained in:
parent
5de803f5e2
commit
f02a42a969
@ -18,7 +18,7 @@ class Config(object):
|
||||
'time_src_audio': 'name,attr',
|
||||
'file_ext_image': 'jpeg,jpg',
|
||||
'file_ext_video': 'mp4,mpg,mpeg,mov,avi',
|
||||
'file_ext_audio': 'mp3,3gpp,m4a,wav',
|
||||
'file_ext_audio': 'mp3,3gp,3gpp,m4a,wav',
|
||||
'file_ext_garbage': 'thm,ctg',
|
||||
'file_ext_ignore': 'ini,zip,db',
|
||||
'remove_garbage': 1,
|
||||
|
76
server.py
76
server.py
@ -11,6 +11,7 @@ import http.server
|
||||
|
||||
import log
|
||||
import config
|
||||
import importer
|
||||
|
||||
|
||||
class PhotoImporterHandler(http.server.BaseHTTPRequestHandler):
|
||||
@ -46,17 +47,25 @@ class PhotoImporterHandler(http.server.BaseHTTPRequestHandler):
|
||||
if re.match(self.server.remote_drive_reg(), dev):
|
||||
r = {}
|
||||
r['path'] = mount_list.get('/dev/' + dev, '')
|
||||
r['progress'] = 0
|
||||
if r['path']:
|
||||
stat = self.server.import_status(r['path'])
|
||||
du = psutil.disk_usage(r['path'])
|
||||
r['size'] = self.__bytes_to_gbytes(du.total)
|
||||
r['usage'] = du.percent
|
||||
r['state'] = 'mounted'
|
||||
r['progress'] = 42
|
||||
if stat:
|
||||
stage = stat['stage']
|
||||
r['state'] = stage
|
||||
if stage == 'move' or stage == 'rotate':
|
||||
r['progress'] = \
|
||||
round(100. *
|
||||
stat[stage]['processed'] / stat['total'])
|
||||
else:
|
||||
r['state'] = 'mounted'
|
||||
else:
|
||||
r['size'] = 0
|
||||
r['usage'] = 0
|
||||
r['state'] = 'unmounted'
|
||||
r['progress'] = 0
|
||||
res[dev] = r
|
||||
return res
|
||||
|
||||
@ -101,6 +110,40 @@ class PhotoImporterHandler(http.server.BaseHTTPRequestHandler):
|
||||
|
||||
self.__ok_response(result)
|
||||
|
||||
def __import_start(self, in_path):
|
||||
self.server.import_start(in_path)
|
||||
return True
|
||||
|
||||
def __import_stop(self, dev):
|
||||
pass
|
||||
|
||||
def __import_request(self, params):
|
||||
try:
|
||||
action = params['a'][0]
|
||||
except Exception as ex:
|
||||
self.__bad_request_response(str(ex))
|
||||
logging.exception(ex)
|
||||
return
|
||||
|
||||
try:
|
||||
in_path = params['p'][0]
|
||||
except:
|
||||
self.__bad_request_response(str(ex))
|
||||
logging.exception(ex)
|
||||
return
|
||||
|
||||
result = None
|
||||
|
||||
if action == 'start':
|
||||
result = self.__import_start(in_path)
|
||||
elif action == 'stop':
|
||||
result = self.__import_stop(in_path)
|
||||
else:
|
||||
self.__bad_request_response('unknown action %s' % action)
|
||||
return
|
||||
|
||||
self.__ok_response(result)
|
||||
|
||||
def __sysinfo_request(self, params):
|
||||
res = {}
|
||||
du = psutil.disk_usage(self.server.out_path())
|
||||
@ -138,6 +181,10 @@ class PhotoImporterHandler(http.server.BaseHTTPRequestHandler):
|
||||
self.__mount_request(params)
|
||||
return
|
||||
|
||||
if path == '/import':
|
||||
self.__import_request(params)
|
||||
return
|
||||
|
||||
if path == '/sysinfo':
|
||||
self.__sysinfo_request(params)
|
||||
return
|
||||
@ -168,6 +215,10 @@ class PhotoImporterHandler(http.server.BaseHTTPRequestHandler):
|
||||
if path == '/mount':
|
||||
self.__mount_request(params)
|
||||
return
|
||||
|
||||
if path == '/import':
|
||||
self.__import_request(params)
|
||||
return
|
||||
except Exception as ex:
|
||||
self.__server_error_response(str(ex))
|
||||
logging.exception(ex)
|
||||
@ -176,6 +227,7 @@ class PhotoImporterHandler(http.server.BaseHTTPRequestHandler):
|
||||
class PhotoImporterServer(http.server.HTTPServer):
|
||||
def __init__(self, cfg):
|
||||
self.__cfg = cfg
|
||||
self.__importers = {}
|
||||
port = int(cfg['server']['port'])
|
||||
self.__web_path = cfg['server']['web_path']
|
||||
self.__remote_drive_reg = cfg['server']['remote_drive_reg']
|
||||
@ -191,6 +243,24 @@ class PhotoImporterServer(http.server.HTTPServer):
|
||||
def out_path(self):
|
||||
return self.__out_path
|
||||
|
||||
def import_start(self, in_path):
|
||||
if in_path in self.__importers:
|
||||
raise Exception('Already started')
|
||||
|
||||
self.__importers[in_path] = importer.Importer(
|
||||
self.__cfg,
|
||||
in_path,
|
||||
self.out_path(),
|
||||
False)
|
||||
|
||||
self.__importers[in_path].start()
|
||||
|
||||
def import_status(self, in_path):
|
||||
if in_path in self.__importers:
|
||||
return self.__importers[in_path].status()
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def args_parse():
|
||||
parser = argparse.ArgumentParser()
|
||||
|
@ -44,18 +44,16 @@
|
||||
var action = ""
|
||||
if (data[dev].state == "mounted") {
|
||||
action += "<input onclick=\"sendCommand('umount', '" + dev + "');\" type=button class=\"btn btn-primary btn-sm\" value=\"Unmount\"/> ";
|
||||
action += "<input onclick=\"sendCommand('import', '" + data[dev].path + "');\" type=button class=\"btn btn-success btn-sm\" value=\"Import\"/> ";
|
||||
action += "<input onclick=\"sendCommand('start', '" + data[dev].path + "');\" type=button class=\"btn btn-success btn-sm\" value=\"Import\"/> ";
|
||||
} else if (data[dev].state == "unmounted") {
|
||||
action = "<input onclick=\"sendCommand('mount', '" + dev + "');\" type=button class=\"btn btn-primary btn-sm\" value=\"Mount\"/> ";
|
||||
} else if (data[dev].state == "process") {
|
||||
action = "<input onclick=\"sendCommand('stop', '" + data[dev].path + "');\" type=button class=\"btn btn-error btn-sm\" value=\"Stop\"/> ";
|
||||
} else if (data[dev].state == "done") {
|
||||
action = "<input onclick=\"sendCommand('umount', '" + dev + "');\" type=button class=\"btn btn-primary btn-sm\" value=\"Unmount\"/> ";
|
||||
}
|
||||
var stat = ""
|
||||
var stat = data[dev].state
|
||||
var p = data[dev].progress
|
||||
if (p != 0) {
|
||||
stat = progress(p, "")
|
||||
stat += progress(p, "", "")
|
||||
}
|
||||
html += "<tr>"
|
||||
+ "<td>" + dev + "</td>"
|
||||
@ -63,7 +61,7 @@
|
||||
+ "<td>" + stat + "</td>"
|
||||
+ "<td>" + action + "</td>"
|
||||
+ "<td>" + data[dev].size + " GB</td>"
|
||||
+ "<td>" + data[dev].usage + " %</td>"
|
||||
+ "<td>" + progress(data[dev].usage, "", "bg-info") + "</td>"
|
||||
+ "</tr>"
|
||||
}
|
||||
html += "</table>"
|
||||
@ -111,6 +109,18 @@
|
||||
$.ajax({
|
||||
url: "/mount?a=" + cmd + "&d=" + dev,
|
||||
type: "POST"
|
||||
success: function() {
|
||||
update()
|
||||
}
|
||||
});
|
||||
} else
|
||||
if (cmd == "start") {
|
||||
$.ajax({
|
||||
url: "/import?a=" + cmd + "&p=" + dev,
|
||||
type: "POST"
|
||||
success: function() {
|
||||
update()
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user