mirror of
				https://gitlab.com/brutaldon/brutaldon
				synced 2025-06-05 21:49:32 +02:00 
			
		
		
		
	Make media posting work, with limitations.
Doesn't work with replies (for reasons I don't 100% understand yet). Only one media field set in the form, though the rest could be added.
This commit is contained in:
		| @@ -127,3 +127,7 @@ STATIC_ROOT = os.path.join(BASE_DIR, 'static') | |||||||
| # Sanitizer settings | # Sanitizer settings | ||||||
| SANITIZER_ALLOWED_TAGS = ['a', 'p', 'img', 'br', 'i', 'strong'] | SANITIZER_ALLOWED_TAGS = ['a', 'p', 'img', 'br', 'i', 'strong'] | ||||||
| SANITIZER_ALLOWED_ATTRIBUTES = ['href', 'src'] | SANITIZER_ALLOWED_ATTRIBUTES = ['href', 'src'] | ||||||
|  |  | ||||||
|  | # File upload settings. | ||||||
|  | # Important: media will not work if you change this. | ||||||
|  | FILE_UPLOAD_HANDLERS = ["django.core.files.uploadhandler.TemporaryFileUploadHandler"] | ||||||
|   | |||||||
| @@ -1,9 +1,9 @@ | |||||||
| {% load widget_tweaks %} | {% load widget_tweaks %} | ||||||
|  |  | ||||||
| {% if reply %} | {% if reply %} | ||||||
| <form method="post" action="{% url "reply" toot.id %}"> |     <form method="post" action="{% url "reply" toot.id %}" enctype="multipart/form-data"> | ||||||
| {% else %} | {% else %} | ||||||
| <form method="post" action="{% url "toot" %}"> |         <form method="post" action="{% url "toot" %}" enctype="multipart/form-data"> | ||||||
| {% endif %} | {% endif %} | ||||||
|     {% csrf_token %} |     {% csrf_token %} | ||||||
|  |  | ||||||
| @@ -32,6 +32,21 @@ | |||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|     </div> |     </div> | ||||||
|  |  | ||||||
|  |     <div class="field"> | ||||||
|  |         <label class="label"> {{ form.media_file_1.label }}</label> | ||||||
|  |         <div class="content"> | ||||||
|  |             {% render_field form.media_file_1 %} | ||||||
|  |         </div> | ||||||
|  |         <div class="control"> | ||||||
|  |             {% render_field form.media_text_1 class+="input" placeholder="Describe attachment" %} | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|  |     <div> | ||||||
|  |         {{ form.errors }} | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|     <div class="field"> |     <div class="field"> | ||||||
|         <div class="control"> |         <div class="control"> | ||||||
|             <input type="submit" class="button is-primary" |             <input type="submit" class="button is-primary" | ||||||
|   | |||||||
| @@ -5,6 +5,7 @@ from brutaldon.forms import LoginForm, SettingsForm, PostForm | |||||||
| from brutaldon.models import Client, Account | from brutaldon.models import Client, Account | ||||||
| from mastodon import Mastodon | from mastodon import Mastodon | ||||||
| from urllib import parse | from urllib import parse | ||||||
|  | from  django.core.files.uploadhandler import TemporaryFileUploadHandler | ||||||
|  |  | ||||||
| class NotLoggedInException(Exception): | class NotLoggedInException(Exception): | ||||||
|     pass |     pass | ||||||
| @@ -165,11 +166,22 @@ def toot(request): | |||||||
|     elif request.method == 'POST': |     elif request.method == 'POST': | ||||||
|         form = PostForm(request.POST, request.FILES) |         form = PostForm(request.POST, request.FILES) | ||||||
|         if form.is_valid(): |         if form.is_valid(): | ||||||
|             # create media objects |  | ||||||
|             mastodon = get_mastodon(request) |             mastodon = get_mastodon(request) | ||||||
|  |  | ||||||
|  |             # create media objects | ||||||
|  |             media_objects = [] | ||||||
|  |             for index in range(1,5): | ||||||
|  |                 if 'media_file_'+str(index) in request.FILES: | ||||||
|  |                     media_objects.append( | ||||||
|  |                         mastodon.media_post(request.FILES['media_file_'+str(index)] | ||||||
|  |                                             .temporary_file_path(), | ||||||
|  |                                             description=request.POST.get('media_text_' | ||||||
|  |                                                                          +str(index), | ||||||
|  |                                                                          None))) | ||||||
|             mastodon.status_post(status=form.cleaned_data['status'], |             mastodon.status_post(status=form.cleaned_data['status'], | ||||||
|                                  visibility=form.cleaned_data['visibility'], |                                  visibility=form.cleaned_data['visibility'], | ||||||
|                                  spoiler_text=form.cleaned_data['spoiler_text']) |                                  spoiler_text=form.cleaned_data['spoiler_text'], | ||||||
|  |                                  media_ids=media_objects) | ||||||
|             return redirect(home) |             return redirect(home) | ||||||
|         else: |         else: | ||||||
|             return render(request, 'main/post.html', |             return render(request, 'main/post.html', | ||||||
| @@ -198,6 +210,16 @@ def reply(request, id): | |||||||
|         if form.is_valid(): |         if form.is_valid(): | ||||||
|             # create media objects |             # create media objects | ||||||
|             mastodon = get_mastodon(request) |             mastodon = get_mastodon(request) | ||||||
|  |             # create media objects | ||||||
|  |             media_objects = [] | ||||||
|  |             for index in range(1,5): | ||||||
|  |                 if 'media_file_'+str(index) in request.FILES: | ||||||
|  |                     media_objects.append( | ||||||
|  |                         mastodon.media_post(request.FILES['media_file_'+str(index)] | ||||||
|  |                                             .temporary_file_path(), | ||||||
|  |                                             description=request.POST.get('media_text_' | ||||||
|  |                                                                          +str(index), | ||||||
|  |                                                                          None))) | ||||||
|             mastodon.status_post(status=form.cleaned_data['status'], |             mastodon.status_post(status=form.cleaned_data['status'], | ||||||
|                                  visibility=form.cleaned_data['visibility'], |                                  visibility=form.cleaned_data['visibility'], | ||||||
|                                  spoiler_text=form.cleaned_data['spoiler_text'], |                                  spoiler_text=form.cleaned_data['spoiler_text'], | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user