From 93bdab9daad3ae431afd41a2efaefae05a555d88 Mon Sep 17 00:00:00 2001 From: Joar Wandborg Date: Fri, 23 Sep 2011 02:35:57 +0200 Subject: Multimedia support - Commiting from a not yet finished state - Details below * DONE Initially testing with arista ** DONE Video display templates *** TODO Multi-browser support ** TODO Video thumbnails ** TODO Link to original video ** TODO Video cropping Also contains a lot of "debug" print's --- mediagoblin/user_pages/views.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 6a82d718..5458c694 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -29,6 +29,8 @@ from mediagoblin.decorators import (uses_pagination, get_user_media_entry, from werkzeug.contrib.atom import AtomFeed +from mediagoblin.media_types import get_media_manager + @uses_pagination def user_home(request, page): @@ -113,9 +115,11 @@ def media_home(request, media, page, **kwargs): comment_form = user_forms.MediaCommentForm(request.POST) + media_template_name = get_media_manager(media['media_type'])['display_template'] + return render_to_response( request, - 'mediagoblin/user_pages/media.html', + media_template_name, {'media': media, 'comments': comments, 'pagination': pagination, -- cgit v1.2.3 From 243c3843bd574129caa7663e25d1a843b2d2dd30 Mon Sep 17 00:00:00 2001 From: Nathan Yergler Date: Sat, 1 Oct 2011 15:10:02 -0700 Subject: Whitespace and formatting cleanup. * Removed trailing whitespace * Line length < 80 where possible * Honor conventions on number of blank lines * Honor conventions about spaces around :, = --- mediagoblin/user_pages/views.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 6a82d718..e6ba6b79 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -53,7 +53,7 @@ def user_home(request, page): #if no data is available, return NotFound if media_entries == None: return render_404(request) - + user_gallery_url = request.urlgen( 'mediagoblin.user_pages.user_gallery', user=user['username']) @@ -66,6 +66,7 @@ def user_home(request, page): 'media_entries': media_entries, 'pagination': pagination}) + @uses_pagination def user_gallery(request, page): """'Gallery' of a User()""" @@ -85,7 +86,7 @@ def user_gallery(request, page): #if no data is available, return NotFound if media_entries == None: return render_404(request) - + return render_to_response( request, 'mediagoblin/user_pages/gallery.html', @@ -95,6 +96,7 @@ def user_gallery(request, page): MEDIA_COMMENTS_PER_PAGE = 50 + @get_user_media_entry @uses_pagination def media_home(request, media, page, **kwargs): @@ -142,8 +144,8 @@ def media_post_comment(request): 'Comment posted!') return redirect(request, 'mediagoblin.user_pages.media_home', - media = request.matchdict['media'], - user = request.matchdict['user']) + media=request.matchdict['media'], + user=request.matchdict['user']) @get_user_media_entry @@ -184,6 +186,7 @@ def media_confirm_delete(request, media): ATOM_DEFAULT_NR_OF_UPDATED_ITEMS = 15 + def atom_feed(request): """ generates the atom feed with the newest images @@ -204,7 +207,7 @@ def atom_feed(request): feed = AtomFeed(request.matchdict['user'], feed_url=request.url, url=request.host_url) - + for entry in cursor: feed.add(entry.get('title'), entry.get('description_html'), -- cgit v1.2.3 From eabe6b678a98fd06d9cd8463935a3b842f41485c Mon Sep 17 00:00:00 2001 From: Elrond Date: Sun, 13 Nov 2011 19:25:06 +0100 Subject: Dot-Notation for "_id" Note: Migrations can't use "Dot Notation"! Migrations run on pymongo, not mongokit. So they can't use the "Dot Notation". This isn't really a big issue, as migrations are anyway quite mongo specific. --- mediagoblin/user_pages/views.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 2090d6fd..82865bb4 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -45,7 +45,7 @@ def user_home(request, page): {'user': user}) cursor = request.db.MediaEntry.find( - {'uploader': user['_id'], + {'uploader': user._id, 'state': 'processed'}).sort('created', DESCENDING) pagination = Pagination(page, cursor) @@ -78,7 +78,7 @@ def user_gallery(request, page): return render_404(request) cursor = request.db.MediaEntry.find( - {'uploader': user['_id'], + {'uploader': user._id, 'state': 'processed'}).sort('created', DESCENDING) pagination = Pagination(page, cursor) @@ -135,8 +135,8 @@ def media_post_comment(request, media): assert request.method == 'POST' comment = request.db.MediaComment() - comment['media_entry'] = media['_id'] - comment['author'] = request.user['_id'] + comment['media_entry'] = media._id + comment['author'] = request.user._id comment['content'] = unicode(request.POST['comment_content']) comment['content_html'] = cleaned_markdown_conversion(comment['content']) @@ -179,7 +179,7 @@ def media_confirm_delete(request, media): location=media.url_for_self(request.urlgen)) if ((request.user[u'is_admin'] and - request.user[u'_id'] != media.uploader()[u'_id'])): + request.user._id != media.uploader()._id)): messages.add_message( request, messages.WARNING, _("You are about to delete another user's media. " @@ -207,7 +207,7 @@ def atom_feed(request): return render_404(request) cursor = request.db.MediaEntry.find({ - 'uploader': user['_id'], + 'uploader': user._id, 'state': 'processed'}) \ .sort('created', DESCENDING) \ .limit(ATOM_DEFAULT_NR_OF_UPDATED_ITEMS) @@ -251,7 +251,7 @@ def processing_panel(request): # # Make sure we have permission to access this user's panel. Only # admins and this user herself should be able to do so. - if not (user[u'_id'] == request.user[u'_id'] + if not (user._id == request.user._id or request.user.is_admin): # No? Let's simply redirect to this user's homepage then. return redirect( @@ -260,12 +260,12 @@ def processing_panel(request): # Get media entries which are in-processing processing_entries = request.db.MediaEntry.find( - {'uploader': user['_id'], + {'uploader': user._id, 'state': 'processing'}).sort('created', DESCENDING) # Get media entries which have failed to process failed_entries = request.db.MediaEntry.find( - {'uploader': user['_id'], + {'uploader': user._id, 'state': 'failed'}).sort('created', DESCENDING) # Render to response -- cgit v1.2.3 From 1a3138addd43d410b03cdd1816e0a62bd217de30 Mon Sep 17 00:00:00 2001 From: "Pablo J. Urbano Santos" Date: Sat, 19 Nov 2011 19:15:41 +0100 Subject: media_home: order comments by ascending date. --- mediagoblin/user_pages/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 82865bb4..98a21bb4 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -106,11 +106,11 @@ def media_home(request, media, page, **kwargs): """ if ObjectId(request.matchdict.get('comment')): pagination = Pagination( - page, media.get_comments(), MEDIA_COMMENTS_PER_PAGE, + page, media.get_comments(True), MEDIA_COMMENTS_PER_PAGE, ObjectId(request.matchdict.get('comment'))) else: pagination = Pagination( - page, media.get_comments(), MEDIA_COMMENTS_PER_PAGE) + page, media.get_comments(True), MEDIA_COMMENTS_PER_PAGE) comments = pagination() -- cgit v1.2.3 From 7c378f2cd5324a05e709cbada5eb5668ce3a3469 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Sat, 19 Nov 2011 14:01:38 -0600 Subject: Allow user to set whether comments are ascending or descending --- mediagoblin/user_pages/views.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 98a21bb4..25fd2ebb 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -106,11 +106,15 @@ def media_home(request, media, page, **kwargs): """ if ObjectId(request.matchdict.get('comment')): pagination = Pagination( - page, media.get_comments(True), MEDIA_COMMENTS_PER_PAGE, + page, media.get_comments( + mg_globals.app_config['comments_ascending']), + MEDIA_COMMENTS_PER_PAGE, ObjectId(request.matchdict.get('comment'))) else: pagination = Pagination( - page, media.get_comments(True), MEDIA_COMMENTS_PER_PAGE) + page, media.get_comments( + mg_globals.app_config['comments_ascending']), + MEDIA_COMMENTS_PER_PAGE) comments = pagination() -- cgit v1.2.3 From d0ba62e2e773dbd3cc89bf6f446da45370652360 Mon Sep 17 00:00:00 2001 From: "Pablo J. Urbano Santos" Date: Tue, 22 Nov 2011 20:29:33 +0100 Subject: Fixes #597. Add a visible error when user tries to delete an image without cheking the "I'm sure" checkbox. --- mediagoblin/user_pages/views.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 25fd2ebb..2ccb453b 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -179,6 +179,9 @@ def media_confirm_delete(request, media): return redirect(request, "mediagoblin.user_pages.user_home", user=username) else: + messages.add_message( + request, messages.ERROR, + _("The file was not deleted because you didn't check that you were sure.")) return exc.HTTPFound( location=media.url_for_self(request.urlgen)) -- cgit v1.2.3 From 56bfd91ab45c5160bcd65ebe15f44b08f880ed72 Mon Sep 17 00:00:00 2001 From: "Pablo J. Urbano Santos" Date: Tue, 22 Nov 2011 21:07:09 +0100 Subject: Added a message noticing the user the image has been successfully deleted. --- mediagoblin/user_pages/views.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 2ccb453b..b28b68e1 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -175,13 +175,14 @@ def media_confirm_delete(request, media): delete_media_files(media) media.delete() + messages.add_message(request, messages.SUCCESS, _('You deleted the media.')) return redirect(request, "mediagoblin.user_pages.user_home", user=username) else: messages.add_message( request, messages.ERROR, - _("The file was not deleted because you didn't check that you were sure.")) + _("The media was not deleted because you didn't check that you were sure.")) return exc.HTTPFound( location=media.url_for_self(request.urlgen)) -- cgit v1.2.3 From ea33f63635ca0b57f0bc7eca6eb941a9ee99b596 Mon Sep 17 00:00:00 2001 From: Elrond Date: Tue, 22 Nov 2011 21:48:56 +0100 Subject: Wrap long line. Nothing else. --- mediagoblin/user_pages/views.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index b28b68e1..f679be9c 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -175,7 +175,8 @@ def media_confirm_delete(request, media): delete_media_files(media) media.delete() - messages.add_message(request, messages.SUCCESS, _('You deleted the media.')) + messages.add_message( + request, messages.SUCCESS, _('You deleted the media.')) return redirect(request, "mediagoblin.user_pages.user_home", user=username) -- cgit v1.2.3 From 30188321531e1b0d3c78166498702bbd8c7dc2bc Mon Sep 17 00:00:00 2001 From: Elrond Date: Mon, 21 Nov 2011 21:40:48 +0100 Subject: Rename MediaEntry.uploader() to .get_uploader() The .uploader() method conflicts with the uploader database field. As we're moving to .FIELD for db field access, this is a relevant conflict. So renaming .uploader() to .get_uploader() --- mediagoblin/user_pages/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index f679be9c..61cae775 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -169,7 +169,7 @@ def media_confirm_delete(request, media): if request.method == 'POST' and form.validate(): if form.confirm.data is True: - username = media.uploader()['username'] + username = media.get_uploader()['username'] # Delete all files on the public storage delete_media_files(media) @@ -188,7 +188,7 @@ def media_confirm_delete(request, media): location=media.url_for_self(request.urlgen)) if ((request.user[u'is_admin'] and - request.user._id != media.uploader()._id)): + request.user._id != media.get_uploader()._id)): messages.add_message( request, messages.WARNING, _("You are about to delete another user's media. " -- cgit v1.2.3 From eae7d0585fc0348a47087919c04e2372d15d244c Mon Sep 17 00:00:00 2001 From: Jef van Schendel Date: Sat, 3 Dec 2011 01:19:15 +0100 Subject: Changed comment error message wording slightly. Btw, should we translate these things? --- mediagoblin/user_pages/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 3d9735f7..779394c7 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -152,13 +152,13 @@ def media_post_comment(request, media): messages.add_message( request, messages.ERROR, - _("Empty comments are not allowed.")) + _("Oops, your comment was empty.")) else: comment.save() messages.add_message( request, messages.SUCCESS, - _('Comment posted!')) + _('Your comment has been posted!')) return exc.HTTPFound( location=media.url_for_self(request.urlgen)) -- cgit v1.2.3 From 5a4e3ff1e2a0f2ed451bc191c1d44bcd694b8e75 Mon Sep 17 00:00:00 2001 From: Elrond Date: Mon, 14 Nov 2011 15:39:57 +0100 Subject: Dot-Notation for Users.username --- mediagoblin/user_pages/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 779394c7..ad33479b 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -59,7 +59,7 @@ def user_home(request, page): user_gallery_url = request.urlgen( 'mediagoblin.user_pages.user_gallery', - user=user['username']) + user=user.username) return render_to_response( request, @@ -173,7 +173,7 @@ def media_confirm_delete(request, media): if request.method == 'POST' and form.validate(): if form.confirm.data is True: - username = media.get_uploader()['username'] + username = media.get_uploader().username # Delete all files on the public storage delete_media_files(media) -- cgit v1.2.3 From 7a3d00ec217cc3fd44788b9d8c63ab9f7b1d05a7 Mon Sep 17 00:00:00 2001 From: Elrond Date: Mon, 14 Nov 2011 19:01:26 +0100 Subject: Dot-Notation for Users.status --- mediagoblin/user_pages/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index ad33479b..4b311822 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -40,7 +40,7 @@ def user_home(request, page): 'username': request.matchdict['user']}) if not user: return render_404(request) - elif user['status'] != u'active': + elif user.status != u'active': return render_to_response( request, 'mediagoblin/user_pages/user.html', @@ -254,7 +254,7 @@ def processing_panel(request): # Make sure the user exists and is active if not user: return render_404(request) - elif user['status'] != u'active': + elif user.status != u'active': return render_to_response( request, 'mediagoblin/user_pages/user.html', -- cgit v1.2.3 From bec591d85b1e4695024b54bbd902559ec7727ea6 Mon Sep 17 00:00:00 2001 From: Elrond Date: Mon, 14 Nov 2011 19:08:43 +0100 Subject: Dot-Notation for Users.is_admin --- mediagoblin/user_pages/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 4b311822..dc549567 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -191,7 +191,7 @@ def media_confirm_delete(request, media): return exc.HTTPFound( location=media.url_for_self(request.urlgen)) - if ((request.user[u'is_admin'] and + if ((request.user.is_admin and request.user._id != media.get_uploader()._id)): messages.add_message( request, messages.WARNING, -- cgit v1.2.3 From f4ee839939e4215820df3132b62c51f721510f77 Mon Sep 17 00:00:00 2001 From: Elrond Date: Sun, 4 Dec 2011 20:16:01 +0100 Subject: Dot-Notation for MediaEntry.media_type --- mediagoblin/user_pages/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index dc549567..87b82c74 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -122,7 +122,7 @@ def media_home(request, media, page, **kwargs): comment_form = user_forms.MediaCommentForm(request.POST) - media_template_name = get_media_manager(media['media_type'])['display_template'] + media_template_name = get_media_manager(media.media_type)['display_template'] return render_to_response( request, -- cgit v1.2.3 From 4deda94a380dc4217247b49df6e8a5bce0082ddc Mon Sep 17 00:00:00 2001 From: Elrond Date: Mon, 19 Dec 2011 22:29:40 +0100 Subject: Replace media.get_uploader()._id by media.uploader media.get_uploader()._id loads a complete user object without actually needing it, because media.uploader already has the id! --- mediagoblin/user_pages/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 87b82c74..449e3b1c 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -192,7 +192,7 @@ def media_confirm_delete(request, media): location=media.url_for_self(request.urlgen)) if ((request.user.is_admin and - request.user._id != media.get_uploader()._id)): + request.user._id != media.uploader)): messages.add_message( request, messages.WARNING, _("You are about to delete another user's media. " -- cgit v1.2.3 From 05751758469a03835975dd2998aa727fa29c9a16 Mon Sep 17 00:00:00 2001 From: Elrond Date: Sat, 24 Dec 2011 00:08:28 +0100 Subject: Turn media.get_uploader into a property sqlalchemy gives autoloading (hopefully caching) link to other objects as properties. So turn get_uploader on the current mongo based stuff into a property to ease transition. --- mediagoblin/user_pages/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 449e3b1c..f721f012 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -173,7 +173,7 @@ def media_confirm_delete(request, media): if request.method == 'POST' and form.validate(): if form.confirm.data is True: - username = media.get_uploader().username + username = media.get_uploader.username # Delete all files on the public storage delete_media_files(media) -- cgit v1.2.3 From 1df68a3524d92caee5601a8acc011ac8e1fe16d4 Mon Sep 17 00:00:00 2001 From: Michele Azzolari Date: Thu, 5 Jan 2012 18:48:23 +0100 Subject: Fixed #724 and added extra infos to the atom feed (author uri and links to the html version of each entry) --- mediagoblin/user_pages/views.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'mediagoblin/user_pages/views.py') diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index f721f012..a234722f 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -225,17 +225,37 @@ def atom_feed(request): .sort('created', DESCENDING) \ .limit(ATOM_DEFAULT_NR_OF_UPDATED_ITEMS) - feed = AtomFeed(request.matchdict['user'], + """ + ATOM feed id is a tag URI (see http://en.wikipedia.org/wiki/Tag_URI) + """ + feed = AtomFeed( + "MediaGoblin: Feed for user '%s'" % request.matchdict['user'], feed_url=request.url, - url=request.host_url) + id='tag:'+request.host+',2011:gallery.user-'+request.matchdict['user'], + links=[{ + 'href': request.urlgen( + 'mediagoblin.user_pages.user_home', + qualified=True,user=request.matchdict['user']), + 'rel': 'alternate', + 'type': 'text/html'}]) for entry in cursor: feed.add(entry.get('title'), entry.get('description_html'), + id=entry.url_for_self(request.urlgen,qualified=True), content_type='html', - author=request.matchdict['user'], + author={ + 'name': entry.get_uploader.username, + 'uri': request.urlgen( + 'mediagoblin.user_pages.user_home', + qualified=True, user=entry.get_uploader.username)}, updated=entry.get('created'), - url=entry.url_for_self(request.urlgen)) + links=[{ + 'href': entry.url_for_self( + request.urlgen, + qualified=True), + 'rel': 'alternate', + 'type': 'text/html'}]) return feed.get_response() -- cgit v1.2.3