Merge pull request #335 from ArabCoders/master
Expose done/queue list as JSON endpoint
This commit is contained in:
commit
03d6edea5c
1
.gitignore
vendored
1
.gitignore
vendored
@ -46,3 +46,4 @@ Thumbs.db
|
|||||||
|
|
||||||
|
|
||||||
__pycache__
|
__pycache__
|
||||||
|
.venv
|
||||||
|
11
app/main.py
11
app/main.py
@ -132,6 +132,17 @@ async def delete(request):
|
|||||||
status = await (dqueue.cancel(ids) if where == 'queue' else dqueue.clear(ids))
|
status = await (dqueue.cancel(ids) if where == 'queue' else dqueue.clear(ids))
|
||||||
return web.Response(text=serializer.encode(status))
|
return web.Response(text=serializer.encode(status))
|
||||||
|
|
||||||
|
@routes.get(config.URL_PREFIX + 'history')
|
||||||
|
async def history(request):
|
||||||
|
history = { 'done': [], 'queue': []}
|
||||||
|
|
||||||
|
for _ ,v in dqueue.queue.saved_items():
|
||||||
|
history['queue'].append(v)
|
||||||
|
for _ ,v in dqueue.done.saved_items():
|
||||||
|
history['done'].append(v)
|
||||||
|
|
||||||
|
return web.Response(text=serializer.encode(history))
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
async def connect(sid, environ):
|
async def connect(sid, environ):
|
||||||
await sio.emit('all', serializer.encode(dqueue.get()), to=sid)
|
await sio.emit('all', serializer.encode(dqueue.get()), to=sid)
|
||||||
|
15
app/ytdl.py
15
app/ytdl.py
@ -157,17 +157,17 @@ class PersistentQueue:
|
|||||||
pass
|
pass
|
||||||
self.path = path
|
self.path = path
|
||||||
self.dict = OrderedDict()
|
self.dict = OrderedDict()
|
||||||
|
|
||||||
def load(self):
|
def load(self):
|
||||||
for k, v in self.saved_items():
|
for k, v in self.saved_items():
|
||||||
self.dict[k] = Download(None, None, None, None, None, None, {}, v)
|
self.dict[k] = Download(None, None, None, None, None, None, {}, v)
|
||||||
|
|
||||||
def exists(self, key):
|
def exists(self, key):
|
||||||
return key in self.dict
|
return key in self.dict
|
||||||
|
|
||||||
def get(self, key):
|
def get(self, key):
|
||||||
return self.dict[key]
|
return self.dict[key]
|
||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
return self.dict.items()
|
return self.dict.items()
|
||||||
|
|
||||||
@ -180,7 +180,7 @@ class PersistentQueue:
|
|||||||
self.dict[key] = value
|
self.dict[key] = value
|
||||||
with shelve.open(self.path, 'w') as shelf:
|
with shelve.open(self.path, 'w') as shelf:
|
||||||
shelf[key] = value.info
|
shelf[key] = value.info
|
||||||
|
|
||||||
def delete(self, key):
|
def delete(self, key):
|
||||||
del self.dict[key]
|
del self.dict[key]
|
||||||
with shelve.open(self.path, 'w') as shelf:
|
with shelve.open(self.path, 'w') as shelf:
|
||||||
@ -189,7 +189,7 @@ class PersistentQueue:
|
|||||||
def next(self):
|
def next(self):
|
||||||
k, v = next(iter(self.dict.items()))
|
k, v = next(iter(self.dict.items()))
|
||||||
return k, v
|
return k, v
|
||||||
|
|
||||||
def empty(self):
|
def empty(self):
|
||||||
return not bool(self.dict)
|
return not bool(self.dict)
|
||||||
|
|
||||||
@ -201,7 +201,7 @@ class DownloadQueue:
|
|||||||
self.queue = PersistentQueue(self.config.STATE_DIR + '/queue')
|
self.queue = PersistentQueue(self.config.STATE_DIR + '/queue')
|
||||||
self.done = PersistentQueue(self.config.STATE_DIR + '/completed')
|
self.done = PersistentQueue(self.config.STATE_DIR + '/completed')
|
||||||
self.done.load()
|
self.done.load()
|
||||||
|
|
||||||
async def __import_queue(self):
|
async def __import_queue(self):
|
||||||
for k, v in self.queue.saved_items():
|
for k, v in self.queue.saved_items():
|
||||||
await self.add(v.url, v.quality, v.format, v.folder, v.custom_name_prefix)
|
await self.add(v.url, v.quality, v.format, v.folder, v.custom_name_prefix)
|
||||||
@ -243,6 +243,9 @@ class DownloadQueue:
|
|||||||
return dldirectory, None
|
return dldirectory, None
|
||||||
|
|
||||||
async def __add_entry(self, entry, quality, format, folder, custom_name_prefix, already):
|
async def __add_entry(self, entry, quality, format, folder, custom_name_prefix, already):
|
||||||
|
if not entry:
|
||||||
|
return {'status': 'error', 'msg': "Invalid/empty data was given."}
|
||||||
|
|
||||||
etype = entry.get('_type') or 'video'
|
etype = entry.get('_type') or 'video'
|
||||||
if etype == 'playlist':
|
if etype == 'playlist':
|
||||||
entries = entry['entries']
|
entries = entry['entries']
|
||||||
|
Loading…
x
Reference in New Issue
Block a user