and more...

This commit is contained in:
j 2014-05-13 01:43:27 +02:00
commit 0c18dad1b5
20 changed files with 293 additions and 146 deletions

View file

@ -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()

View file

@ -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

View file

@ -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

View file

@ -27,7 +27,7 @@ class LocalNodes(Thread):
_BROADCAST = "ff02::1"
_PORT = 9851
TTL = 2
TTL = 1
def __init__(self, app):
self._app = app

View file

@ -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]

View file

@ -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

View file

@ -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):

View file

@ -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)

View file

@ -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()