From f381d1d1af233c51e6046c0d283b61035bf31eaa Mon Sep 17 00:00:00 2001 From: some weird guy <120821766+Mistake35@users.noreply.github.com> Date: Tue, 29 Aug 2023 11:56:34 -0700 Subject: [PATCH] deez --- closedverse_main/admin.py | 5 +- closedverse_main/context_processors.py | 11 ++-- closedverse_main/middleware.py | 1 - closedverse_main/models.py | 53 ++++++++++++------- .../elements/community_post.html | 2 +- .../templates/closedverse_main/post-view.html | 2 +- .../templates/closedverse_main/user_view.html | 4 +- closedverse_main/templatetags/__init__.py | 1 - .../templatetags/closedverse_tags.py | 2 - closedverse_main/urls.py | 8 +-- closedverse_main/util.py | 8 +-- closedverse_main/views.py | 16 ++---- static/blueness.css | 2 +- static/closedverse.js | 50 ++++++++++------- 14 files changed, 88 insertions(+), 77 deletions(-) diff --git a/closedverse_main/admin.py b/closedverse_main/admin.py index 4d426d0..ab8b38a 100644 --- a/closedverse_main/admin.py +++ b/closedverse_main/admin.py @@ -1,9 +1,8 @@ from django.contrib import admin #from django.contrib.auth.admin import UserAdmin from django.contrib.auth.models import Group -from django.forms import ModelForm, PasswordInput -from closedverse_main import models -from closedverse import settings +#from django.forms import ModelForm, PasswordInput +from django.conf import settings from . import models diff --git a/closedverse_main/context_processors.py b/closedverse_main/context_processors.py index f3ec51f..bba6467 100644 --- a/closedverse_main/context_processors.py +++ b/closedverse_main/context_processors.py @@ -1,14 +1,13 @@ -try: - from closedverse.settings import brand_name -except ImportError: +from closedverse import settings +if not hasattr(settings, 'brand_name'): # use default app name by default as brand name from closedverse_main import apps brand_name = apps.ClosedverseMainConfig.verbose_name +else: + brand_name = settings.brand_name -# for brand logo -from closedverse.settings import STATIC_URL # variable for this and name are here for imports -brand_logo = STATIC_URL + 'img/menu-logo.svg' +brand_logo = settings.STATIC_URL + 'img/menu-logo.svg' # the name of the function is merely what's imported into settings.py def brand_name_universal(request): diff --git a/closedverse_main/middleware.py b/closedverse_main/middleware.py index 02c7dd5..82fad41 100644 --- a/closedverse_main/middleware.py +++ b/closedverse_main/middleware.py @@ -1,7 +1,6 @@ from django.http import HttpResponseForbidden from closedverse import settings from django.shortcuts import redirect -from django.contrib.auth import logout from .models import Ban from django.utils import timezone from re import compile diff --git a/closedverse_main/models.py b/closedverse_main/models.py index a57c9c9..61b3e42 100644 --- a/closedverse_main/models.py +++ b/closedverse_main/models.py @@ -2,13 +2,13 @@ from __future__ import unicode_literals from django.db import models from django.contrib.auth.base_user import AbstractBaseUser from django.contrib.auth.models import BaseUserManager -from django.db.models import Q, QuerySet, Max, F, Count, Case, When, Exists, OuterRef, Subquery +from django.db.models import Q, Max, F, Count, Exists, OuterRef, Subquery #, QuerySet, Case, When, from django.utils import timezone +from django.http import Http404 from django.core.validators import RegexValidator, URLValidator from django.core.exceptions import ValidationError from datetime import timedelta, time #from passlib.hash import bcrypt_sha256 -# you may want to import django.conf.settings instead (then change checks for DEFAULT_FROM_EMAIL) from closedverse import settings from closedverse_main.context_processors import brand_name, brand_logo from . import util @@ -128,7 +128,7 @@ class Role(models.Model): organization = models.CharField(max_length=255, blank=True, null=True, help_text='Text that shows above one\'s username') def __str__(self): - return "role \"" + str(self.organization) + "\"" + return "role \"" + str(self.organization) + "\", name " + str(self.image) #mii_domain = 'https://mii-secure.cdn.nintendo.net' # as of writing, mii-secure is unstable, nintendo please do not f*ck me for this @@ -195,13 +195,17 @@ class User(AbstractBaseUser): return self.warned def get_warned_reason(self): return self.warned_reason - def profile(self, thing=None): - # If thing is specified, that field is retrieved - if thing: + def profile(self, attr=None): + # If attr is specified, that field is retrieved + if attr: # could this be shortened? or discontinued in general - return self.profile_set.all().values_list(thing, flat=True).first() + return self.profile_set.all().values_list(attr, flat=True).first() # Otherwise just get full profile - return self.profile_set.filter().first() + result = self.profile_set.filter().first() + if not result: + # hacky but should make any page that requests this where it's not there, return a 404 + raise Http404() + return result def gravatar(self): g = util.get_gravatar(self.email) if not g: @@ -344,7 +348,7 @@ class User(AbstractBaseUser): # trailing if UserBlock.objects.filter(source=source, target=self).exists(): return False - if not self.can_block(source): + if not self.can_block(source) or self == source: return False fs = Friendship.find_friendship(self, source) if fs: @@ -378,18 +382,29 @@ class User(AbstractBaseUser): for post in posts: post.setup(request) return posts - def get_yeahed(self, type=0, limit=20, offset=0): + def get_yeahed(self, type, limit, offset, user): # 0 - post, 1 - comment, 2 - any - if type == 2: - yeahs = self.yeah_set.select_related('post').select_related('comment').select_related('comment__original_post').select_related('comment__original_post__creator').annotate(num_yeahs_post=Count('post__yeah', distinct=True), num_yeahs_comment=Count('comment__yeah', distinct=True), num_comments=Count('post__comment', distinct=True)).filter().order_by('-created')[offset:offset + limit] + yeahs = self.yeah_set.select_related('post', 'comment', 'comment__original_post', 'comment__original_post__creator').annotate( + # todo clean up all queries like this lmao + num_yeahs_post=Count('post__yeah', distinct=True), + num_yeahs_comment=Count('comment__yeah', distinct=True), + num_comments=Count('post__comment', distinct=True) + ) + # add type= if NOT selecting all + type_query = Q(type=type) if type != 2 else Q() + if not user.is_authenticated: + # if user is not authenticated then only search yeahs in communities that don't require auth + require_auth_query = Q(post__community__require_auth=False) | Q(comment__community__require_auth=False) else: - yeahs = self.yeah_set.select_related('post').select_related('post__creator').annotate(num_yeahs_post=Count('post__yeah', distinct=True), num_comments=Count('post__comment', distinct=True)).filter(type=type, post__is_rm=False).order_by('-created')[offset:offset + limit] - for thing in yeahs: - if thing.post: - thing.post.num_yeahs = thing.num_yeahs_post - thing.post.num_comments = thing.num_comments - elif thing.comment: - thing.comment.num_yeahs = thing.num_yeahs_comment + require_auth_query = Q() + # sometimes is_rm'ed posts are searched so it's necessary to specifically specify non deleted + yeahs = yeahs.filter(type_query, require_auth_query, Q(post__is_rm=False) | Q(comment__is_rm=False)).order_by('-created')[offset:offset + limit] + for yeah in yeahs: + if yeah.post: + yeah.post.num_yeahs = yeah.num_yeahs_post + yeah.post.num_comments = yeah.num_comments + elif yeah.comment: + yeah.comment.num_yeahs = yeah.num_yeahs_comment return yeahs def get_following(self, limit=50, offset=0, request=None): return self.follow_source.select_related('target').filter().order_by('-created')[offset:offset + limit] diff --git a/closedverse_main/templates/closedverse_main/elements/community_post.html b/closedverse_main/templates/closedverse_main/elements/community_post.html index 6831ee6..19f2f5b 100644 --- a/closedverse_main/templates/closedverse_main/elements/community_post.html +++ b/closedverse_main/templates/closedverse_main/elements/community_post.html @@ -41,7 +41,7 @@ {% endif %} {% endif %} {% if post.screenshot %}{% endif %} - {% if post.video %}
{% endif %} + {% if post.video %}
{% endif %} {% if post.spoils and not post.is_mine and not post.creator.banned %}

This post contains spoilers.

diff --git a/closedverse_main/templates/closedverse_main/post-view.html b/closedverse_main/templates/closedverse_main/post-view.html index f62f374..68c0fe2 100644 --- a/closedverse_main/templates/closedverse_main/post-view.html +++ b/closedverse_main/templates/closedverse_main/post-view.html @@ -88,7 +88,7 @@ {% if post.yt_vid %}
{% elif post.video %} -
+
{% elif post.discord_vid %}
diff --git a/closedverse_main/templates/closedverse_main/user_view.html b/closedverse_main/templates/closedverse_main/user_view.html index a44624f..ba13d2e 100644 --- a/closedverse_main/templates/closedverse_main/user_view.html +++ b/closedverse_main/templates/closedverse_main/user_view.html @@ -18,7 +18,7 @@
{% endif %}
View posts - {% if profile.yeahs_visible and request.user.is_authenticated %} + {% if profile.yeahs_visible %}

Recently yeahed posts

{% if yeahed.count < 1 %} @@ -37,4 +37,4 @@
View all yeahs {% endif %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/closedverse_main/templatetags/__init__.py b/closedverse_main/templatetags/__init__.py index 0519ecb..e69de29 100644 --- a/closedverse_main/templatetags/__init__.py +++ b/closedverse_main/templatetags/__init__.py @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/closedverse_main/templatetags/closedverse_tags.py b/closedverse_main/templatetags/closedverse_tags.py index fd9f8b4..aface20 100644 --- a/closedverse_main/templatetags/closedverse_tags.py +++ b/closedverse_main/templatetags/closedverse_tags.py @@ -1,9 +1,7 @@ from django import template -from closedverse_main.models import User from closedverse_main.util import HumanTime from closedverse_main.models import mii_domain from closedverse import settings -import re register = template.Library() diff --git a/closedverse_main/urls.py b/closedverse_main/urls.py index a3e68bb..a9c05fe 100644 --- a/closedverse_main/urls.py +++ b/closedverse_main/urls.py @@ -1,10 +1,10 @@ from django.conf.urls import url, re_path -from django.conf.urls.static import static from django.views.static import serve -from django.shortcuts import redirect +#from django.conf.urls.static import static +#from django.shortcuts import redirect from . import views -from closedverse.settings import MEDIA_URL, MEDIA_ROOT +from django.conf import settings username = r'(?P[A-Za-z0-9-\'-._ ]+)' community = r'(?P[0-9]+)' @@ -113,4 +113,4 @@ urlpatterns = [ ] # + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # serve static and media i think???? mighTTT??????? -urlpatterns += [re_path(r'^i/(?P.*)$', serve, {'document_root': MEDIA_ROOT, }), ] +urlpatterns += [re_path(r'^media/(?P.*)$', serve, {'document_root': settings.MEDIA_ROOT, }), ] diff --git a/closedverse_main/util.py b/closedverse_main/util.py index 44cb758..d3c2a49 100644 --- a/closedverse_main/util.py +++ b/closedverse_main/util.py @@ -2,22 +2,16 @@ import urllib.request, urllib.error # requests is only used for get_mii which is not being used currently #import requests from lxml import etree -from random import choice import json import time import os.path -import random -from PIL import Image, ExifTags, ImageFile +from PIL import Image, ImageFile #, ExifTags, from datetime import datetime -from binascii import crc32 from math import floor from hashlib import md5, sha1 import io -from uuid import uuid4 -import imghdr import base64 from closedverse import settings -import re from os import remove, rename def HumanTime(date, full=False): diff --git a/closedverse_main/views.py b/closedverse_main/views.py index f95167e..fb15540 100644 --- a/closedverse_main/views.py +++ b/closedverse_main/views.py @@ -208,7 +208,7 @@ def login_page(request): 'title': 'Log in', 'form': form, 'allow_signups': settings.allow_signups, - 'reset_supported': hasattr(settings, 'DEFAULT_FROM_EMAIL'), + 'reset_supported': settings.DEBUG or hasattr(settings, 'EMAIL_HOST_USER'), }) def signup_page(request): @@ -369,8 +369,7 @@ def forgot_passwd(request): if not request.POST['password'] == request.POST['password_again']: return HttpResponseBadRequest("Your passwords don't match.") try: - new = request.POST['password'] - validate_password(new, user=user) + validate_password(request.POST['password'], user=user) except ValidationError as error: return HttpResponseBadRequest(error) user.set_password(request.POST['password']) @@ -383,7 +382,7 @@ def forgot_passwd(request): }) return render(request, 'closedverse_main/forgot_page.html', { 'title': 'Reset password', - 'reset_supported': hasattr(settings, 'DEFAULT_FROM_EMAIL'), + 'reset_supported': settings.DEBUG or hasattr(settings, 'EMAIL_HOST_USER'), #'classes': ['no-login-btn'], }) @@ -586,7 +585,7 @@ def user_view(request, username): user.save() return HttpResponse() posts = user.get_posts(3, 0, request, timezone.now()) - yeahed = user.get_yeahed(0, 3) + yeahed = user.get_yeahed(0, 3, 0, request.user) for yeah in yeahed: if user.is_me(request): yeah.post.yeah_given = True @@ -668,8 +667,6 @@ def user_yeahs(request, username): user = get_object_or_404(User, username__iexact=username) if user.is_me(request): title = 'My yeahs' - elif not request.user.is_authenticated: - raise Http404() else: if request.user.is_authenticated and not user.can_view(request.user): raise Http404() @@ -686,10 +683,7 @@ def user_yeahs(request, username): if not profile.yeahs_visible: raise Http404() - if request.GET.get('offset'): - yeahs = user.get_yeahed(2, 20, int(request.GET['offset'])) - else: - yeahs = user.get_yeahed(2, 20, 0) + yeahs = user.get_yeahed(2, 20, int(request.GET.get('offset', 0)), request.user) if yeahs.count() > 19: if request.GET.get('offset'): next_offset = int(request.GET['offset']) + 20 diff --git a/static/blueness.css b/static/blueness.css index a1fcc3c..547a0c1 100644 --- a/static/blueness.css +++ b/static/blueness.css @@ -18,7 +18,7 @@ input[type=text], input[type=password], input[type=email], input:not([type]), se } .guest .guest-message p { color: #ccc; - background: #1b1b1b; + background: #15151f; } .guest-message .arrow-button { border-top: 1px solid #000 !important; diff --git a/static/closedverse.js b/static/closedverse.js index acb01d3..aff7c8a 100644 --- a/static/closedverse.js +++ b/static/closedverse.js @@ -616,10 +616,18 @@ var Olv = Olv || {}; a(window).on("click submit", this.onMayLeavePage) }, onDataHrefClick: function(c) { - if (a(c.target).attr("data-href")) { + // if is video then don't navigate + // bc most of the time you click on a video it plays in the background while navigating to the next post + // this may make it more inconvenient to click on the post but it's a win to me + //if (a(c.target).is('video')) { + if (a(c.target).attr('controls')) { + // ignore + return; + } + if (a(c.target).attr("data-href")) { b.Net.go($(this).attr("data-href")); return; - } + } if (!c.isDefaultPrevented() && !a(c.target).closest("a,button").length) { var d = a(this); if (!d.hasClass("disabled")) { @@ -1118,10 +1126,15 @@ var Olv = Olv || {}; b.ModalWindowManager.setup() }), a(document).on("olv:pagechange", function() { - b.ModalWindowManager.closeAll(); - if(!Olv.ModalWindowManager._windows.length && $('.mask').length) { - b.ModalWindowManager.toggleMask(); - } + // hackily re-add modals that were open on page forward/backwards, restoring their functionality + b.ModalWindowManager._windows = []; + a('.modal-window-open').each(function(i, v) { + var modal = new b.ModalWindow(v); + modal.triggerOpenHandlers(a.Deferred()); + b.ModalWindowManager._windows.push(modal); + b.ModalWindowManager.currentWindow = modal; + }); + //b.ModalWindowManager.closeAll() }), b.ModalWindow = function(b, c) { this.element = a(b), @@ -1949,23 +1962,25 @@ var Olv = Olv || {}; var handleFileChange = function(event) { //var fileList; - console.log('handleFileChange: files is being assigned...'); + //console.log('handleFileChange: files is being assigned...'); + var files; switch(true) { case event.target.files !== undefined: - uploadFile[0].files = event.target.files; + files = event.target.files; break; case event.originalEvent.dataTransfer !== undefined: - uploadFile[0].files = event.originalEvent.dataTransfer.files; + files = event.originalEvent.dataTransfer.files; break; case event.originalEvent.clipboardData !== undefined: - uploadFile[0].files = event.originalEvent.clipboardData.files; + files = event.originalEvent.clipboardData.files; break; default: return; } - if (!(null === uploadFile[0].files || uploadFile[0].files.length < 1 || void 0 === uploadFile[0].files[0] || uploadFile[0].files[0].type.indexOf("image") < 0)) { + if (!(null === files || files.length < 1 || void 0 === files[0] || files[0].type.indexOf("image") < 0)) { event.preventDefault(); + uploadFile[0].files = files; Olv.Form.toggleDisabled($("input.black-button"), false); uploadPreview.hide(); uploadPreviewContainer.hide(); @@ -1977,7 +1992,7 @@ var Olv = Olv || {}; console.log('here is your fileList, and uploadFile') */ var blobURL = URL.createObjectURL(uploadFile[0].files[0]); - console.log(uploadFile[0].files[0]) + //console.log(uploadFile[0].files[0]) uploadPreview.attr("src", blobURL); uploadPreview.show(); @@ -2021,9 +2036,7 @@ var Olv = Olv || {}; event.preventDefault(); }); - c.on("drop", handleFileChange); - // upon choosing an image, and pasting plain text after, no image would be uploaded for some reason. - // yeah i got no fucking clue how to fix this shit. + c.on("drop paste", handleFileChange); c.on("olv:entryform:post:done", function() { imageDimensions.text(b.EntryForm.tempPollutionButImageFormAllowedText); @@ -2597,7 +2610,6 @@ var Olv = Olv || {}; b.Closed.changesel("news"); $('.received-request-button').on('click', function(a) { a.preventDefault() - window.ass = a fr = new b.ModalWindow($('div[data-modal-types=accept-friend-request][data-action="'+ $(this).parent().parent().data('action') +'"]'));fr.open(); }) $('div[data-modal-types=accept-friend-request] .ok-button.post-button').on('click', function(a){ @@ -2916,7 +2928,7 @@ $('.post-poll .poll-votes').on('click', function() { $('.edit-post-button').on('click',function(){ if($('.post-content-memo').length) { b.showMessage("", "You can't edit a drawing, sorry."); - } else if($('.vidya').length) { + } if($('.screenshot-container > video').length) { b.showMessage("", "You can't edit your uploaded video, sorry. But you can edit the contents of the post."); et(); b.Form.toggleDisabled(submit_btn, true); @@ -2948,7 +2960,9 @@ $('.post-poll .poll-votes').on('click', function() { lock_comments_button.on('click',function(){ b.showConfirm("Lock comments", "Really lock up the comments? This cannot be undone.") $('.ok-button').on('click',function(){ - b.Form.post(lock_comments_button.attr('data-action')).done + b.Form.post(lock_comments_button.attr('data-action')).done(function() { + b.Net.reload(); + }); }) }) }