# HG changeset patch # User neko259 # Date 2017-09-05 08:57:24 # Node ID 5728b509a0357ca9f5b0e8baa6c72c96bd3d288d # Parent 34a15215f20f11d37bf4019a9f3b523e875a53e4 Clarified url download modes diff --git a/boards/forms/__init__.py b/boards/forms/__init__.py --- a/boards/forms/__init__.py +++ b/boards/forms/__init__.py @@ -13,6 +13,7 @@ from django.core.files.uploadedfile impo from django.forms.utils import ErrorList from django.utils.translation import ugettext_lazy as _, ungettext_lazy from django.core.files.images import get_image_dimensions +from django.core.cache import cache import boards.settings as board_settings import neboard @@ -186,8 +187,8 @@ class PostForm(NeboardForm): required=False, label=LABEL_TEXT) download_mode = forms.ChoiceField( choices=( - (DOWN_MODE_TRY, _('Download if possible')), - (DOWN_MODE_DOWNLOAD, _('Download')), + (DOWN_MODE_TRY, _('Download or add URL')), + (DOWN_MODE_DOWNLOAD, _('Download or fail')), (DOWN_MODE_URL, _('Insert as URLs')), ), initial=DOWN_MODE_TRY, @@ -393,6 +394,21 @@ class PostForm(NeboardForm): error_message = _('Either text or file must be entered.') self._add_general_error(error_message) + def _get_cache_key(self, key): + return '{}_{}'.format(self.session.session_key, key) + + def _set_session_cache(self, key, value): + cache.set(self._get_cache_key(key), value) + + def _get_session_cache(self, key): + return cache.get(self._get_cache_key(key)) + + def _get_last_post_time(self): + last = self._get_session_cache(LAST_POST_TIME) + if last is None: + last = self.session.get(LAST_POST_TIME) + return last + def _validate_posting_speed(self): can_post = True @@ -408,11 +424,13 @@ class PostForm(NeboardForm): need_delay = True else: - last_post_time = self.session.get(LAST_POST_TIME) + last_post_time = self._get_last_post_time() current_delay = int(now - last_post_time) need_delay = current_delay < posting_delay + self._set_session_cache(LAST_POST_TIME, now) + if need_delay: delay = posting_delay - current_delay error_message = ungettext_lazy(ERROR_SPEED, ERROR_SPEED_PLURAL, @@ -423,6 +441,9 @@ class PostForm(NeboardForm): if can_post: self.session[LAST_POST_TIME] = now + else: + # Reset the time since posting failed + self._set_session_cache(LAST_POST_TIME, self.session[LAST_POST_TIME]) def _get_file_from_url(self, url: str) -> SimpleUploadedFile: """ diff --git a/boards/locale/ru/LC_MESSAGES/django.mo b/boards/locale/ru/LC_MESSAGES/django.mo index fde29f49c406965a1c452dd5e89534466bebc410..c8449ac9f649c95b3e2e3ed8f0d52510476a1f52 GIT binary patch literal 12006 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 Ig?HTl0@`{zk^lez diff --git a/boards/locale/ru/LC_MESSAGES/django.po b/boards/locale/ru/LC_MESSAGES/django.po --- a/boards/locale/ru/LC_MESSAGES/django.po +++ b/boards/locale/ru/LC_MESSAGES/django.po @@ -602,11 +602,11 @@ msgstr "Забанить" msgid "URL download mode" msgstr "Режим загрузки ссылок" -msgid "Download if possible" -msgstr "Загружать если возможно" +msgid "Download or add URL" +msgstr "Загрузить или добавить ссылку" -msgid "Download" -msgstr "Загружать" +msgid "Download or fail" +msgstr "Загрузить или отказать" msgid "Insert as URLs" msgstr "Вставлять как ссылки" diff --git a/boards/locale/uk/LC_MESSAGES/django.mo b/boards/locale/uk/LC_MESSAGES/django.mo index 31b5bee10e7c7f44495ade201390c42f546b0091..dadfe1cf2c2b4cd22a5435195c3f3af5d7fa9af4 GIT binary patch literal 12167 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