# GNU MediaGoblin -- federated, autonomous media hosting # Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import six from datetime import datetime from itsdangerous import BadSignature from werkzeug.exceptions import Forbidden from werkzeug.utils import secure_filename from mediagoblin import messages from mediagoblin import mg_globals from mediagoblin.plugins.custom_subtitles import forms from mediagoblin.decorators import (require_active_login, active_user_from_url, get_media_entry_by_id, path_subtitle, user_may_delete_media) from mediagoblin.tools.metadata import (compact_and_validate, DEFAULT_CHECKER, DEFAULT_SCHEMA) from mediagoblin.tools.response import (render_to_response, redirect, redirect_obj, render_404) import mimetypes from mediagoblin.plugins.custom_subtitles.tools import open_subtitle,save_subtitle UNSAFE_MIMETYPES = [ 'text/html', 'text/svg+xml'] @get_media_entry_by_id @user_may_delete_media @require_active_login def edit_subtitles(request, media): form = forms.EditSubtitlesForm(request.form) # Add any subtitles if 'subtitle_file' in request.files \ and request.files['subtitle_file']: if mimetypes.guess_type( request.files['subtitle_file'].filename)[0] in \ UNSAFE_MIMETYPES: public_filename = secure_filename('{0}.notsafe'.format( request.files['subtitle_file'].filename)) else: public_filename = secure_filename( request.files['subtitle_file'].filename) subtitle_public_filepath \ = mg_globals.public_store.get_unique_filepath( ['media_entries', six.text_type(media.id), 'subtitle', public_filename]) subtitle_public_file = mg_globals.public_store.get_file( subtitle_public_filepath, 'wb') try: subtitle_public_file.write( request.files['subtitle_file'].stream.read()) finally: request.files['subtitle_file'].stream.close() media.subtitle_files.append(dict( name=form.subtitle_language.data \ or request.files['subtitle_file'].filename, filepath=subtitle_public_filepath, created=datetime.utcnow(), )) media.save() messages.add_message( request, messages.SUCCESS, ("You added the subttile %s!") % (form.subtitle_language.data or request.files['subtitle_file'].filename)) return redirect(request, location=media.url_for_self(request.urlgen)) return render_to_response( request, 'mediagoblin/plugins/custom_subtitles/subtitles.html', {'media': media, 'form': form}) @require_active_login @get_media_entry_by_id @user_may_delete_media @path_subtitle def custom_subtitles(request,media,path=None): text="" # text = open_subtitle(path) form = forms.CustomizeSubtitlesForm(request.form, subtitle=text) if request.method == 'POST' and form.validate(): subtitle_data = form.subtitle.data # save_subtitle(path,subtitle_data) return render_to_response( request, "mediagoblin/plugins/custom_subtitles/custom_subtitles.html", {"path": path, "media": media, "form": form }) """delete_container = None index = 0 for subtitle in media.subtitle_files: if subtitle["name"] == "Two And A Half Men S02E02.srt": delete_container = index index += 1 print media.subtitle_files.pop(delete_container) media.save()""" return render_to_response( request, "mediagoblin/plugins/custom_subtitles/custom_subtitles.html", {"path": path, "media": media, "form": form }) @require_active_login @get_media_entry_by_id @user_may_delete_media @path_subtitle def delete_subtitles(request,media,path=None): text = open_subtitle(path) form = forms.CustomizeSubtitlesForm(request.form, subtitle=text) if request.method == 'POST' and form.validate(): subtitle_data = form.subtitle.data save_subtitle(path,subtitle_data) """delete_container = None index = 0 for subtitle in media.subtitle_files: if subtitle["name"] == "Two And A Half Men S02E02.srt": delete_container = index index += 1 print media.subtitle_files.pop(delete_container) media.save()""" return render_to_response( request, "mediagoblin/plugins/custom_subtitles/custom_subtitles.html", {"path": path, "media": media, "form": form })