diff --git a/pandora/config.0xdb.jsonc b/pandora/config.0xdb.jsonc index bcae7125..7b300891 100644 --- a/pandora/config.0xdb.jsonc +++ b/pandora/config.0xdb.jsonc @@ -38,7 +38,6 @@ "canAddItems": {"staff": true, "admin": true}, "canAddDocuments": {"staff": true, "admin": true}, "canDownloadVideo": {"guest": -1, "member": -1, "friend": -1, "staff": -1, "admin": -1}, - "canDownloadSource": {"guest": -1, "member": -1, "friend": -1, "staff": -1, "admin": -1}, "canEditAnnotations": {"staff": true, "admin": true}, "canEditEntities": {"staff": true, "admin": true}, "canEditDocuments": {"staff": true, "admin": true}, diff --git a/pandora/config.indiancinema.jsonc b/pandora/config.indiancinema.jsonc index 40876054..77f5b855 100644 --- a/pandora/config.indiancinema.jsonc +++ b/pandora/config.indiancinema.jsonc @@ -39,7 +39,6 @@ "canAddItems": {"researcher": true, "staff": true, "admin": true}, "canAddDocuments": {"researcher": true, "staff": true, "admin": true}, "canDownloadVideo": {"guest": -1, "member": -1, "researcher": 3, "staff": 3, "admin": 3}, - "canDownloadSource": {"guest": -1, "member": -1, "researcher": -1, "staff": -1, "admin": -1}, "canEditAnnotations": {"staff": true, "admin": true}, "canEditDocuments": {"researcher": true, "staff": true, "admin": true}, "canEditEntities": {"staff": true, "admin": true}, diff --git a/pandora/config.padma.jsonc b/pandora/config.padma.jsonc index c78740a9..b406bb87 100644 --- a/pandora/config.padma.jsonc +++ b/pandora/config.padma.jsonc @@ -38,7 +38,6 @@ "canAddItems": {"member": true, "staff": true, "admin": true}, "canAddDocuments": {"member": true, "staff": true, "admin": true}, "canDownloadVideo": {"guest": 0, "member": 0, "staff": 4, "admin": 4}, - "canDownloadSource": {"guest": -1, "member": -1, "staff": 4, "admin": 4}, "canEditAnnotations": {"staff": true, "admin": true}, "canEditEntities": {"staff": true, "admin": true}, "canEditDocuments": {"staff": true, "admin": true}, diff --git a/pandora/config.pandora.jsonc b/pandora/config.pandora.jsonc index c418566f..f7fdd8f2 100644 --- a/pandora/config.pandora.jsonc +++ b/pandora/config.pandora.jsonc @@ -45,7 +45,6 @@ examples (config.SITENAME.jsonc) that are part of this pan.do/ra distribution. "canAddItems": {"member": true, "staff": true, "admin": true}, "canAddDocuments": {"member": true, "staff": true, "admin": true}, "canDownloadVideo": {"guest": 1, "member": 1, "staff": 4, "admin": 4}, - "canDownloadSource": {"member": 1, "staff": 4, "admin": 4}, "canEditAnnotations": {"staff": true, "admin": true}, "canEditDocuments": {"staff": true, "admin": true}, "canEditEntities": {"staff": true, "admin": true}, @@ -551,7 +550,7 @@ examples (config.SITENAME.jsonc) that are part of this pan.do/ra distribution. { "id": "country", "title": "Country", - "type": ["string"], + "type": "string", "autocomplete": true, "columnWidth": 180, "filter": true, diff --git a/pandora/item/models.py b/pandora/item/models.py index dfd593df..ba9f7f61 100644 --- a/pandora/item/models.py +++ b/pandora/item/models.py @@ -639,9 +639,6 @@ class Item(models.Model): if self.poster_height: i['posterRatio'] = self.poster_width / self.poster_height - if 'source' in keys: - i['source'] = self.files.filter(selected=True).exclude(data='').exists() - streams = self.streams() i['durations'] = [s.duration for s in streams] i['duration'] = sum(i['durations']) diff --git a/pandora/item/urls.py b/pandora/item/urls.py index 332da86d..948a1878 100644 --- a/pandora/item/urls.py +++ b/pandora/item/urls.py @@ -16,7 +16,6 @@ urlpatterns = [ url(r'^(?P[A-Z0-9].*)/download$', views.download), url(r'^(?P[A-Z0-9].*)/download/$', views.download), url(r'^(?P[A-Z0-9].*)/download/source/(?P\d+)?$', views.download_source), - url(r'^(?P[A-Z0-9].*)/download/(?P\d+)p(?P\d+)\.(?Pwebm|ogv|mp4)$', views.download), url(r'^(?P[A-Z0-9].*)/download/(?P\d+)p\.(?Pwebm|ogv|mp4)$', views.download), #video diff --git a/pandora/item/views.py b/pandora/item/views.py index f5539b61..182f7068 100644 --- a/pandora/item/views.py +++ b/pandora/item/views.py @@ -992,8 +992,6 @@ def download_source(request, id, part=None): raise Http404 parts = ['%s - %s ' % (item.get('title'), settings.SITENAME), item.public_id] - if len(streams) > 1: - parts.append('.Part %d' % (part + 1)) parts.append('.') parts.append(f.extension) filename = ''.join(parts) @@ -1004,7 +1002,7 @@ def download_source(request, id, part=None): response['Content-Disposition'] = "attachment; filename*=UTF-8''%s" % quote(filename.encode('utf-8')) return response -def download(request, id, resolution=None, format='webm', part=None): +def download(request, id, resolution=None, format='webm'): item = get_object_or_404(models.Item, public_id=id) if not resolution or int(resolution) not in settings.CONFIG['video']['resolutions']: resolution = max(settings.CONFIG['video']['resolutions']) @@ -1012,35 +1010,22 @@ def download(request, id, resolution=None, format='webm', part=None): resolution = int(resolution) if not item.access(request.user) or not item.rendered: return HttpResponseForbidden() - if part is not None: - part = int(part) - 1 - streams = item.streams() - if part > len(streams): - raise Http404 ext = '.%s' % format parts = ['%s - %s ' % (item.get('title'), settings.SITENAME), item.public_id] if resolution != max(settings.CONFIG['video']['resolutions']): parts.append('.%dp' % resolution) - if part is not None: - parts.append('.Part %d' % (part + 1)) parts.append(ext) filename = ''.join(parts) video = NamedTemporaryFile(suffix=ext) content_type = mimetypes.guess_type(video.name)[0] - if part is None: - r = item.merge_streams(video.name, resolution, format) - if not r: - return HttpResponseForbidden() - elif r is True: - response = HttpResponse(FileWrapper(video), content_type=content_type) - response['Content-Length'] = os.path.getsize(video.name) - else: - response = HttpFileResponse(r, content_type=content_type) + r = item.merge_streams(video.name, resolution, format) + if not r: + return HttpResponseForbidden() + elif r is True: + response = HttpResponse(FileWrapper(video), content_type=content_type) + response['Content-Length'] = os.path.getsize(video.name) else: - stream = streams[part].get(resolution, format) - path = stream.media.path - content_type = mimetypes.guess_type(path)[0] - response = HttpFileResponse(path, content_type=content_type) + response = HttpFileResponse(r, content_type=content_type) response['Content-Disposition'] = "attachment; filename*=UTF-8''%s" % quote(filename.encode('utf-8')) return response diff --git a/static/js/downloadVideoDialog.js b/static/js/downloadVideoDialog.js index 88d58b7e..214bcd21 100644 --- a/static/js/downloadVideoDialog.js +++ b/static/js/downloadVideoDialog.js @@ -9,10 +9,6 @@ pandora.ui.downloadVideoDialog = function(options) { 'mp4': 'MP4', }, - parts = Ox.max(options.video.map(function(video) { - return video.index - })), - $content = Ox.Element() .css({margin: '16px'}), @@ -31,9 +27,6 @@ pandora.ui.downloadVideoDialog = function(options) { .css({marginBottom: '16px'}) .appendTo($content), - $format, - $resolution, - $form = window.$form = Ox.Form({ items: [ Ox.Select({ @@ -43,10 +36,7 @@ pandora.ui.downloadVideoDialog = function(options) { id: format, title: formats[format] }; - }).concat(!options.out && options.source ? [{ - id: 'source', - title: Ox._('Source') - }] : []), + }), label: Ox._('Format'), labelWidth: 120, value: pandora.site.video.downloadFormat, @@ -54,14 +44,9 @@ pandora.ui.downloadVideoDialog = function(options) { }) .bindEvent({ change: function(data) { - if (data.value == 'source') { - $resolution.hide() - } else { - $resolution.show() - } } }), - $resolution = Ox.Select({ + Ox.Select({ id: 'resolution', items: pandora.site.video.resolutions.map(function(resolution) { return { @@ -78,25 +63,7 @@ pandora.ui.downloadVideoDialog = function(options) { change: function(data) { } }) - ].concat(parts ? [ - Ox.Select({ - id: 'part', - items: Ox.range(parts + 1).map(function(resolution, idx) { - return { - id: idx + 1, - title: 'Part ' + (idx+1) - }; - }), - label: Ox._('Part'), - labelWidth: 120, - value: 1, - width: 240 - }) - .bindEvent({ - change: function(data) { - } - }) - ] : []) + ] }).appendTo($content), failed = false, @@ -149,17 +116,9 @@ pandora.ui.downloadVideoDialog = function(options) { }) } else { - if (values.format == 'source') { - url = '/' + options.item - + '/download/source/' - + (values.part ? values.part : '') - } else { - url = '/' + options.item - + '/download/' + values.resolution - + 'p' - + (values.part ? values.part : '') - + '.' + values.format - } + url = '/' + options.item + + '/download/' + values.resolution + + 'p.' + values.format } if (url) { that.close(); diff --git a/static/js/editor.js b/static/js/editor.js index 6c3106b9..0997ac84 100644 --- a/static/js/editor.js +++ b/static/js/editor.js @@ -28,7 +28,7 @@ pandora.ui.editor = function(data) { enableSetPosterFrame: !pandora.site.media.importFrames && data.editable, enableSubtitles: ui.videoSubtitles, find: ui.itemFind, - findLayer: pandora.getFindLayer(), + findLayer: ui._findState.key, getFrameURL: function(position) { return pandora.getMediaURL('/' + ui.item + '/' + ui.videoResolution + 'p' + position + '.jpg?' + data.modified); }, @@ -189,9 +189,7 @@ pandora.ui.editor = function(data) { pandora.ui.downloadVideoDialog({ item: ui.item, rightsLevel: rightsLevel, - source: data.source && pandora.hasCapability('canDownloadSource'), - title: data.title, - video: data.video + title: data.title }).open(); }, downloadselection: function(selection) { diff --git a/static/js/utils.js b/static/js/utils.js index 977c95e7..ebdc5cd0 100644 --- a/static/js/utils.js +++ b/static/js/utils.js @@ -1439,14 +1439,6 @@ pandora.getFoldersWidth = function(section) { return width; }; -pandora.getFindLayer = function() { - var key = pandora.user.ui._findState.key - if (!!Ox.getObjectById(pandora.site.layers, key)) { - key = 'all' - } - return key -}; - pandora.getHash = function(state, callback) { // FIXME: remove this var embedKeys = [ @@ -2367,7 +2359,6 @@ pandora.VIDEO_OPTIONS_KEYS = [ 'rendered', 'rightslevel', 'size', - 'source', 'streams', 'title', 'videoRatio' diff --git a/vm/LXC_README.md b/vm/LXC_README.md index 92cd6262..44af135e 100644 --- a/vm/LXC_README.md +++ b/vm/LXC_README.md @@ -4,7 +4,7 @@ # Installing pan.do/ra inside LXC -1) Install lxc on the host (Ubuntu 18.04 or later): +1) Install lxc on the host (Ubuntu 16.04 or later): sudo apt-get install lxc @@ -15,7 +15,7 @@ 2) Create a new container, use different names if installing multiple instances: - sudo lxc-create -n pandora -t ubuntu-cloud -- -r bionic + sudo lxc-create -n pandora -t ubuntu -- -r xenial or @@ -28,12 +28,12 @@ 4) Attach to container and install pan.do/ra sudo lxc-attach -n pandora --clear-env + apt-get update -qq && apt-get upgrade -y + apt-get -y install curl ca-certificates sed -i s/ubuntu/pandora/g /etc/passwd /etc/shadow /etc/group mv /home/ubuntu /home/pandora echo "pandora:pandora" | chpasswd echo PasswordAuthentication no >> /etc/ssh/sshd_config - apt-get update -qq && apt-get upgrade -y - apt-get -y install curl ca-certificates locale-gen en_US.UTF-8 update-locale LANG=en_US.UTF-8 export LANG=en_US.UTF-8