import url celanup

- only import first url
- pass empty string instead of undefined
- page can contain multiple videos, import as parts
This commit is contained in:
j 2016-08-10 10:49:29 +02:00
parent b59a9c3122
commit 8c928860e1
2 changed files with 80 additions and 74 deletions

View file

@ -89,8 +89,8 @@ def add_subtitles(item, media, tmp):
def download(item_id, url):
item = Item.objects.get(public_id=item_id)
info = get_info(url)
if len(info) != 1:
return '%s contains %d videos' % (url, len(info))
if not len(info):
return '%s contains no videos' % url
media = info[0]
cdir = os.path.abspath(os.curdir)
tmp = tempfile.mkdtemp().decode('utf-8')
@ -100,28 +100,34 @@ def download(item_id, url):
stdout=subprocess.PIPE,
stderr=subprocess.PIPE, close_fds=True)
stdout, stderr = p.communicate()
fname = list(os.listdir(tmp))
if fname:
fname = os.path.join(tmp, fname[0])
oshash = ox.oshash(fname)
f, created = models.File.objects.get_or_create(oshash=oshash)
if created:
f.data.name = f.get_path('data.' + fname.split('.')[-1])
ox.makedirs(os.path.dirname(f.data.path))
shutil.move(fname, f.data.path)
f.item = item
f.info = ox.avinfo(f.data.path)
f.info['extension'] = media['extension']
f.path = '%(title)s.%(extension)s' % media
f.parse_info()
f.selected = True
f.save()
f.item.save()
f.extract_stream()
status = True
else:
status = 'file exists'
add_subtitles(f.item, media, tmp)
parts = list(os.listdir(tmp))
if parts:
part = 1
for name in parts:
name = os.path.join(tmp, name)
oshash = ox.oshash(name)
f, created = models.File.objects.get_or_create(oshash=oshash)
if created:
f.data.name = f.get_path('data.' + name.split('.')[-1])
ox.makedirs(os.path.dirname(f.data.path))
shutil.move(name, f.data.path)
f.item = item
f.info = ox.avinfo(f.data.path)
f.info['extension'] = media['extension']
f.path = '%(title)s.%(extension)s' % media
f.parse_info()
f.selected = True
if len(parts) > 1:
f.part = part
part += 1
f.save()
f.item.save()
f.extract_stream()
status = True
else:
status = 'file exists'
if len(parts) == 1:
add_subtitles(f.item, media, tmp)
else:
status = 'download failed'
os.chdir(cdir)

View file

@ -84,57 +84,57 @@ pandora.ui.importMediaDialog = function(options) {
function addMedia(url, callback) {
pandora.api.getMediaUrlInfo({url: url}, function(result) {
result.data.items.forEach(function(info) {
var infoKeys = [
'date', 'description', 'id', 'tags',
'title', 'uploader', 'url'
];
var values = Ox.map(pandora.site.importMetadata, function(value, key) {
var isArray = Ox.isArray(
Ox.getObjectById(pandora.site.itemKeys, key).type
);
if (isArray && value == '{tags}') {
value = info.tags;
} else {
infoKeys.forEach(function(infoKey) {
var infoValue = info[infoKey];
if (key == 'year' && infoKey == 'date') {
infoValue = infoValue.substr(0, 4);
}
if (infoKey == 'tags') {
infoValue = infoValue.join(', ');
}
value = value.replace(
new RegExp('\{' + infoKey + '\}', 'g'), infoValue
);
});
// For example: director -> uploader
if (isArray) {
value = [value];
// FIXME: support playlists / multiple items
var info = result.data.items[0];
var infoKeys = [
'date', 'description', 'id', 'tags',
'title', 'uploader', 'url'
];
var values = Ox.map(pandora.site.importMetadata, function(value, key) {
var isArray = Ox.isArray(
Ox.getObjectById(pandora.site.itemKeys, key).type
);
if (isArray && value == '{tags}') {
value = info.tags;
} else {
infoKeys.forEach(function(infoKey) {
var infoValue = info[infoKey] || '';
if (key == 'year' && infoKey == 'date') {
infoValue = infoValue.substr(0, 4);
}
if (infoKey == 'tags') {
infoValue = infoValue.join(', ');
}
value = value.replace(
new RegExp('\{' + infoKey + '\}', 'g'), infoValue
);
});
// For example: director -> uploader
if (isArray) {
value = [value];
}
return value;
});
pandora.api.add({title: values.title || info.title}, function(result) {
var edit = Ox.extend(
Ox.filter(values, function(value, key) {
return key != 'title';
}),
{'id': result.data.id}
);
pandora.api.edit(edit, function(result) {
pandora.api.addMediaUrl({
url: info.url,
item: edit.id
}, function(result) {
if (result.data.taskId) {
pandora.wait(result.data.taskId, function(result) {
callback(edit.id);
});
} else {
}
return value;
});
pandora.api.add({title: values.title || info.title}, function(result) {
var edit = Ox.extend(
Ox.filter(values, function(value, key) {
return key != 'title';
}),
{'id': result.data.id}
);
pandora.api.edit(edit, function(result) {
pandora.api.addMediaUrl({
url: info.url,
item: edit.id
}, function(result) {
if (result.data.taskId) {
pandora.wait(result.data.taskId, function(result) {
callback(edit.id);
}
});
});
} else {
callback(edit.id);
}
});
});
});
@ -183,7 +183,7 @@ pandora.ui.importMediaDialog = function(options) {
if (items.length) {
// FIXME: support playlists / multiple items
var info = items[0];
$info.append($('<img>').css({
info.thumbnail && $info.append($('<img>').css({
position: 'absolute',
width: '248px'
}).attr('src', info.thumbnail));
@ -196,7 +196,7 @@ pandora.ui.importMediaDialog = function(options) {
width: '248px'
}).html(
'<span style="font-weight: bold">' + info.title
+ '</span><br/><br/>' + info.description
+ '</span><br/><br/>' + (info.description || '')
));
that.enableButton('import');
} else {