and more...
This commit is contained in:
parent
10d2f35b7b
commit
0c18dad1b5
20 changed files with 293 additions and 146 deletions
|
|
@ -188,7 +188,7 @@ class Changelog(db.Model):
|
|||
l.add_items(ids)
|
||||
return True
|
||||
|
||||
def action_removelistitem(self, user, timestamp, name, ids):
|
||||
def action_removelistitems(self, user, timestamp, name, ids):
|
||||
from user.models import List
|
||||
l = List.get(user.id, name)
|
||||
if l:
|
||||
|
|
@ -205,7 +205,7 @@ class Changelog(db.Model):
|
|||
user.save()
|
||||
return True
|
||||
|
||||
def action_adduser(self, user, timestamp, peerid, username):
|
||||
def action_addpeer(self, user, timestamp, peerid, username):
|
||||
from user.models import User
|
||||
if not 'users' in user.info:
|
||||
user.info['users'] = {}
|
||||
|
|
@ -215,7 +215,7 @@ class Changelog(db.Model):
|
|||
#fixme, add username to user?
|
||||
return True
|
||||
|
||||
def action_removeuser(self, user, timestamp, peerid):
|
||||
def action_removepeer(self, user, timestamp, peerid):
|
||||
if 'users' in user.info and peerid in user.info['users']:
|
||||
del user.info['users'][peerid]
|
||||
user.save()
|
||||
|
|
|
|||
|
|
@ -172,11 +172,7 @@ def download(request):
|
|||
data = json.loads(request.form['data']) if 'data' in request.form else {}
|
||||
item = models.Item.get(data['id'])
|
||||
if item:
|
||||
item.transferprogress = 0
|
||||
item.transferadded = datetime.now()
|
||||
p = models.User.get(settings.USER_ID)
|
||||
if p not in item.users:
|
||||
item.users.append(p)
|
||||
item.queue_download()
|
||||
item.update()
|
||||
response = {'status': 'queued'}
|
||||
return response
|
||||
|
|
@ -190,9 +186,11 @@ def cancelDownload(request):
|
|||
if item:
|
||||
item.transferprogress = None
|
||||
item.transferadded = None
|
||||
p = models.User.get(settings.USER_ID)
|
||||
p = state.user()
|
||||
if p in item.users:
|
||||
item.users.remove(p)
|
||||
for l in item.lists.filter_by(user_id=settings.USER_ID):
|
||||
l.remove(item)
|
||||
item.update()
|
||||
response = {'status': 'cancelled'}
|
||||
return response
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ from person import get_sort_name
|
|||
import media
|
||||
from meta import scraper
|
||||
|
||||
import state
|
||||
import utils
|
||||
|
||||
from oxflask.db import MutableDict
|
||||
|
|
@ -204,8 +205,8 @@ class Item(db.Model):
|
|||
if key.get('find') or key.get('filter'):
|
||||
value = self.json().get(key['id'], None)
|
||||
if key.get('filterMap') and value:
|
||||
value = re.compile(key.get('filterMap')).findall(value)[0]
|
||||
print key['id'], value
|
||||
value = re.compile(key.get('filterMap')).findall(value)
|
||||
if value: value = value[0]
|
||||
if value:
|
||||
if isinstance(value, list):
|
||||
Find.query.filter_by(item_id=self.id, key=key['id']).delete()
|
||||
|
|
@ -326,9 +327,20 @@ class Item(db.Model):
|
|||
print 'FIX UPDATE', mainid
|
||||
self.update()
|
||||
|
||||
def queue_download(self):
|
||||
u = state.user()
|
||||
if not u in self.users:
|
||||
self.transferprogress = 0
|
||||
self.transferadded = datetime.now()
|
||||
self.users.append(u)
|
||||
|
||||
def save_file(self, content):
|
||||
p = User.get(settings.USER_ID)
|
||||
u = state.user()
|
||||
f = File.get(self.id)
|
||||
content_id = media.get_id(data=content)
|
||||
if content_id != self.id:
|
||||
print 'INVALID CONTENT', self.id, 'vs', content_id
|
||||
return False
|
||||
if not f:
|
||||
path = 'Downloads/%s.%s' % (self.id, self.info['extension'])
|
||||
f = File.get_or_create(self.id, self.info, path=path)
|
||||
|
|
@ -337,11 +349,11 @@ class Item(db.Model):
|
|||
ox.makedirs(os.path.dirname(path))
|
||||
with open(path, 'wb') as fd:
|
||||
fd.write(content)
|
||||
if p not in self.users:
|
||||
self.users.append(p)
|
||||
if u not in self.users:
|
||||
self.users.append(u)
|
||||
self.transferprogress = 1
|
||||
self.added = datetime.now()
|
||||
Changelog.record(p, 'additem', self.id, self.info)
|
||||
Changelog.record(u, 'additem', self.id, self.info)
|
||||
self.update()
|
||||
trigger_event('transfer', {
|
||||
'id': self.id, 'progress': 1
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class LocalNodes(Thread):
|
|||
|
||||
_BROADCAST = "ff02::1"
|
||||
_PORT = 9851
|
||||
TTL = 2
|
||||
TTL = 1
|
||||
|
||||
def __init__(self, app):
|
||||
self._app = app
|
||||
|
|
|
|||
|
|
@ -1,12 +1,23 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
|
||||
import base64
|
||||
import hashlib
|
||||
import os
|
||||
|
||||
import ox
|
||||
|
||||
import pdf
|
||||
import epub
|
||||
import txt
|
||||
import os
|
||||
import base64
|
||||
import ox
|
||||
|
||||
def get_id(f):
|
||||
return base64.b32encode(ox.sha1sum(f).decode('hex'))
|
||||
def get_id(f=None, data=None):
|
||||
if data:
|
||||
return base64.b32encode(hashlib.sha1(data).digest())
|
||||
else:
|
||||
return base64.b32encode(ox.sha1sum(f).decode('hex'))
|
||||
|
||||
|
||||
def metadata(f):
|
||||
ext = f.split('.')[-1]
|
||||
|
|
|
|||
|
|
@ -79,9 +79,18 @@ def api_rejectPeering(app, user_id, message):
|
|||
def api_removePeering(app, user_id, message):
|
||||
user = User.get(user_id)
|
||||
if user:
|
||||
user.peered = False
|
||||
user.info['message'] = message
|
||||
user.save()
|
||||
trigger_event('peering', {'id': user.id, 'peered': user.peered})
|
||||
user.update_peering(False)
|
||||
trigger_event('peering', user.json())
|
||||
return True
|
||||
return False
|
||||
|
||||
def api_cancelPeering(app, user_id, message):
|
||||
user = User.get(user_id)
|
||||
if user:
|
||||
user.info['message'] = message
|
||||
user.update_peering(False)
|
||||
trigger_event('peering', user.json())
|
||||
user.peered = False
|
||||
return True
|
||||
return False
|
||||
|
|
|
|||
10
oml/nodes.py
10
oml/nodes.py
|
|
@ -169,12 +169,22 @@ class Node(object):
|
|||
r = self.request('rejectPeering', message)
|
||||
p = self.user
|
||||
p.update_peering(False)
|
||||
self.go_online()
|
||||
return True
|
||||
|
||||
def removePeering(self, message):
|
||||
print 'remove peering!!!', self.user
|
||||
r = self.request('removePeering', message)
|
||||
p = self.user
|
||||
p.update_peering(False)
|
||||
self.go_online()
|
||||
return True
|
||||
|
||||
def cancelPeering(self, message):
|
||||
r = self.request('cancelPeering', message)
|
||||
p = self.user
|
||||
p.update_peering(False)
|
||||
self.go_online()
|
||||
return True
|
||||
|
||||
def download(self, item):
|
||||
|
|
|
|||
|
|
@ -210,3 +210,12 @@ def removePeering(request):
|
|||
state.nodes.queue(p.id, 'removePeering', data.get('message', ''))
|
||||
return {}
|
||||
actions.register(removePeering, cache=False)
|
||||
|
||||
@returns_json
|
||||
def cancelPeering(request):
|
||||
data = json.loads(request.form['data']) if 'data' in request.form else {}
|
||||
p = models.User.get_or_create(data['id'])
|
||||
state.nodes.queue('add', p.id)
|
||||
state.nodes.queue(p.id, 'cancelPeering', data.get('message', ''))
|
||||
return {}
|
||||
actions.register(cancelPeering, cache=False)
|
||||
|
|
|
|||
|
|
@ -72,9 +72,11 @@ class User(db.Model):
|
|||
self.info['username'] = username
|
||||
|
||||
self.set_nickname(self.info.get('username', 'anonymous'))
|
||||
Changelog.record(state.user(), 'addpeer', self.id, self.nickname)
|
||||
else:
|
||||
self.peered = False
|
||||
self.nickname = None
|
||||
self.save()
|
||||
for i in self.items:
|
||||
i.users.remove(self)
|
||||
if not i.users:
|
||||
|
|
@ -82,6 +84,8 @@ class User(db.Model):
|
|||
db.session.delete(i)
|
||||
else:
|
||||
i.update_lists()
|
||||
Changelog.query.filter_by(user_id=self.id).delete()
|
||||
Changelog.record(state.user(), 'removepeer', self.id)
|
||||
self.save()
|
||||
|
||||
def set_nickname(self, nickname):
|
||||
|
|
@ -159,6 +163,7 @@ class List(db.Model):
|
|||
for item_id in items:
|
||||
i = Item.get(item_id)
|
||||
self.items.append(i)
|
||||
i.queue_download()
|
||||
i.update()
|
||||
db.session.add(self)
|
||||
db.session.commit()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue