cleanup client
This commit is contained in:
parent
9ab8661420
commit
a989842b3a
3 changed files with 56 additions and 33 deletions
|
@ -23,7 +23,8 @@ __version__ = '0.1'
|
||||||
DEBUG = True
|
DEBUG = True
|
||||||
default_media_cache = os.environ.get('oxMEDIA', os.path.expanduser('~/.ox/media'))
|
default_media_cache = os.environ.get('oxMEDIA', os.path.expanduser('~/.ox/media'))
|
||||||
|
|
||||||
def encode(filename, prefix, profile):
|
def encode(filename, prefix, profile, info=None):
|
||||||
|
if not info:
|
||||||
info = utils.avinfo(filename)
|
info = utils.avinfo(filename)
|
||||||
if not 'oshash' in info:
|
if not 'oshash' in info:
|
||||||
return None
|
return None
|
||||||
|
@ -60,9 +61,10 @@ class Client(object):
|
||||||
|
|
||||||
if 'username' in self._config:
|
if 'username' in self._config:
|
||||||
r = self.api.signin(username=self._config['username'], password=self._config['password'])
|
r = self.api.signin(username=self._config['username'], password=self._config['password'])
|
||||||
if r['status']['code'] == 200:
|
if r['status']['code'] == 200 and not 'errors' in r['data']:
|
||||||
self.user = r['data']['user']
|
self.user = r['data']['user']
|
||||||
else:
|
else:
|
||||||
|
self.user = False
|
||||||
print 'login failed'
|
print 'login failed'
|
||||||
|
|
||||||
conn, c = self._conn()
|
conn, c = self._conn()
|
||||||
|
@ -113,6 +115,13 @@ class Client(object):
|
||||||
c.execute(u'INSERT OR REPLACE INTO setting values (?, ?)', (key, str(value)))
|
c.execute(u'INSERT OR REPLACE INTO setting values (?, ?)', (key, str(value)))
|
||||||
conn.commit()
|
conn.commit()
|
||||||
|
|
||||||
|
def info(self, oshash):
|
||||||
|
conn, c = self._conn()
|
||||||
|
c.execute('SELECT info FROM file WHERE oshash = ?', (oshash, ))
|
||||||
|
for row in c:
|
||||||
|
return json.loads(row[2])
|
||||||
|
return None
|
||||||
|
|
||||||
def scan_file(self, path):
|
def scan_file(self, path):
|
||||||
conn, c = self._conn()
|
conn, c = self._conn()
|
||||||
|
|
||||||
|
@ -182,19 +191,26 @@ class Client(object):
|
||||||
else:
|
else:
|
||||||
volumes[name]['available'] = False
|
volumes[name]['available'] = False
|
||||||
|
|
||||||
#profile = self.api.encodingProfile()['data']['profile']
|
profile = self.api.encodingProfile()['data']['profile']
|
||||||
profile = '480p.webm'
|
#profile = '480p.webm'
|
||||||
for name in volumes:
|
for name in volumes:
|
||||||
if volumes[name]['available']:
|
if volumes[name]['available']:
|
||||||
prefix = volumes[name]['path']
|
prefix = volumes[name]['path']
|
||||||
files = self.files(prefix)
|
files = self.files(prefix)
|
||||||
for f in files['files']:
|
for f in files['files']:
|
||||||
filename = os.path.join(prefix, f['path'])
|
filename = os.path.join(prefix, f['path'])
|
||||||
if 'video' in files['info'][f['oshash']] and files['info'][f['oshash']]['video']:
|
info = files['info'][f['oshash']]
|
||||||
|
if 'video' in info and \
|
||||||
|
info['video'] and \
|
||||||
|
'/extras' not in filename.lower() and \
|
||||||
|
'/versions' not in filename.lower():
|
||||||
print filename.encode('utf-8')
|
print filename.encode('utf-8')
|
||||||
i = encode(filename, self.media_cache(), profile)
|
i = encode(filename, self.media_cache(), profile, info)
|
||||||
|
|
||||||
def sync(self):
|
def sync(self):
|
||||||
|
if not self.user:
|
||||||
|
print "you need to login"
|
||||||
|
return
|
||||||
conn, c = self._conn()
|
conn, c = self._conn()
|
||||||
|
|
||||||
volumes = {}
|
volumes = {}
|
||||||
|
@ -214,9 +230,12 @@ class Client(object):
|
||||||
if volumes[name]['available']:
|
if volumes[name]['available']:
|
||||||
prefix = volumes[name]['path']
|
prefix = volumes[name]['path']
|
||||||
files = self.files(prefix)
|
files = self.files(prefix)
|
||||||
files['volume'] = name
|
post = {}
|
||||||
|
post['files'] = files['files']
|
||||||
|
post['volume'] = name
|
||||||
print 'sending list of files'
|
print 'sending list of files'
|
||||||
r = self.api.update(files)
|
print len(json.dumps(post))
|
||||||
|
r = self.api.update(post)
|
||||||
if r['status']['code'] == 200:
|
if r['status']['code'] == 200:
|
||||||
#backend works on update request asyncronously, wait for it to finish
|
#backend works on update request asyncronously, wait for it to finish
|
||||||
if 'taskId' in r['data']:
|
if 'taskId' in r['data']:
|
||||||
|
@ -225,12 +244,17 @@ class Client(object):
|
||||||
while t['data']['status'] == 'PENDING':
|
while t['data']['status'] == 'PENDING':
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
t = self.api.taskStatus(task_id=r['data']['taskId'])
|
t = self.api.taskStatus(task_id=r['data']['taskId'])
|
||||||
|
#send empty list to get updated list of requested info/files/data
|
||||||
post = {'info': {}}
|
post = {'info': {}}
|
||||||
r = self.api.update(post)
|
r = self.api.update(post)
|
||||||
|
|
||||||
post = {'info': {}}
|
|
||||||
if r['data']['info']:
|
if r['data']['info']:
|
||||||
for oshash in r['data']['info']:
|
info = r['data']['info']
|
||||||
|
max_info = 100
|
||||||
|
for offset in range(0, len(info), max_info):
|
||||||
|
post = {'info': {}}
|
||||||
|
for oshash in info[offset:offset+max_info]:
|
||||||
|
if oshash in files['info']:
|
||||||
post['info'][oshash] = files['info'][oshash]
|
post['info'][oshash] = files['info'][oshash]
|
||||||
print 'sending info for new files', len(post['info'])
|
print 'sending info for new files', len(post['info'])
|
||||||
r = self.api.update(post)
|
r = self.api.update(post)
|
||||||
|
@ -239,23 +263,27 @@ class Client(object):
|
||||||
for f in files['files']:
|
for f in files['files']:
|
||||||
filenames[f['oshash']] = f['path']
|
filenames[f['oshash']] = f['path']
|
||||||
|
|
||||||
|
print 'uploading files', len(r['data']['file'])
|
||||||
|
if r['data']['file']:
|
||||||
|
for oshash in r['data']['file']:
|
||||||
|
if oshash in filenames:
|
||||||
|
filename = filenames[oshash]
|
||||||
|
self.api.uploadData(os.path.join(prefix, filename), oshash)
|
||||||
|
|
||||||
print 'encoding videos', len(r['data']['data'])
|
print 'encoding videos', len(r['data']['data'])
|
||||||
if r['data']['data']:
|
if r['data']['data']:
|
||||||
for oshash in r['data']['data']:
|
for oshash in r['data']['data']:
|
||||||
data = {}
|
data = {}
|
||||||
if oshash in filenames:
|
if oshash in filenames:
|
||||||
filename = filenames[oshash]
|
filename = filenames[oshash]
|
||||||
self.api.uploadVideo(os.path.join(prefix, filename), data, profile)
|
info = files['info'][oshash]
|
||||||
|
self.api.uploadVideo(os.path.join(prefix, filename),
|
||||||
|
data, profile, info)
|
||||||
else:
|
else:
|
||||||
print oshash, "missing"
|
print oshash, "missing"
|
||||||
|
|
||||||
print 'uploading files', len(r['data']['file'])
|
|
||||||
if r['data']['file']:
|
|
||||||
for oshash in r['data']['file']:
|
|
||||||
filename = filenames[oshash]
|
|
||||||
self.api.uploadData(os.path.join(prefix, filename), oshash)
|
|
||||||
else:
|
else:
|
||||||
print "updating volume", name, "failed"
|
print "updating volume", name, "failed"
|
||||||
|
print r
|
||||||
|
|
||||||
def files(self, prefix):
|
def files(self, prefix):
|
||||||
conn, c = self._conn()
|
conn, c = self._conn()
|
||||||
|
@ -367,14 +395,14 @@ class API(object):
|
||||||
form.add_field('data', json.dumps(data))
|
form.add_field('data', json.dumps(data))
|
||||||
return self._json_request(self.url, form)
|
return self._json_request(self.url, form)
|
||||||
|
|
||||||
def uploadVideo(self, filename, data, profile):
|
def uploadVideo(self, filename, data, profile, info=None):
|
||||||
if DEBUG:
|
if DEBUG:
|
||||||
print filename.encode('utf-8')
|
print filename.encode('utf-8')
|
||||||
i = encode(filename, self.media_cache, profile)
|
i = encode(filename, self.media_cache, profile, info)
|
||||||
if not i:
|
if not i:
|
||||||
print "failed"
|
print "failed"
|
||||||
return
|
return
|
||||||
|
print i
|
||||||
#upload frames
|
#upload frames
|
||||||
form = ox.MultiPartForm()
|
form = ox.MultiPartForm()
|
||||||
form.add_field('action', 'upload')
|
form.add_field('action', 'upload')
|
||||||
|
|
|
@ -54,12 +54,7 @@ def frame(video, target, position):
|
||||||
|
|
||||||
def video(video, target, profile, info):
|
def video(video, target, profile, info):
|
||||||
if not os.path.exists(target):
|
if not os.path.exists(target):
|
||||||
fdir = os.path.dirname(target)
|
ox.makedirs(os.path.dirname(target))
|
||||||
if not os.path.exists(fdir):
|
|
||||||
os.makedirs(fdir)
|
|
||||||
|
|
||||||
if info['video']:
|
|
||||||
dar = AspectRatio(info['video'][0]['display_aspect_ratio'])
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
look into
|
look into
|
||||||
|
@ -110,9 +105,9 @@ def video(video, target, profile, info):
|
||||||
audiochannels = 1
|
audiochannels = 1
|
||||||
|
|
||||||
bpp = 0.17
|
bpp = 0.17
|
||||||
if info['video']:
|
if info['video'] and 'display_aspect_ratio' in info['video'][0]:
|
||||||
|
dar = AspectRatio(info['video'][0]['display_aspect_ratio'])
|
||||||
fps = AspectRatio(info['video'][0]['framerate'])
|
fps = AspectRatio(info['video'][0]['framerate'])
|
||||||
|
|
||||||
width = int(dar * height)
|
width = int(dar * height)
|
||||||
width += width % 2
|
width += width % 2
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ class AspectRatio(fractions.Fraction):
|
||||||
def avinfo(filename):
|
def avinfo(filename):
|
||||||
if os.path.getsize(filename):
|
if os.path.getsize(filename):
|
||||||
info = ox.avinfo(filename)
|
info = ox.avinfo(filename)
|
||||||
if 'video' in info and info['video']:
|
if 'video' in info and info['video'] and 'width' in info['video'][0]:
|
||||||
if not 'display_aspect_ratio' in info['video'][0]:
|
if not 'display_aspect_ratio' in info['video'][0]:
|
||||||
dar = AspectRatio(info['video'][0]['width'], info['video'][0]['height'])
|
dar = AspectRatio(info['video'][0]['width'], info['video'][0]['height'])
|
||||||
info['video'][0]['display_aspect_ratio'] = dar.ratio
|
info['video'][0]['display_aspect_ratio'] = dar.ratio
|
||||||
|
|
Loading…
Reference in a new issue