From a088697812065484cf3285200bdfe5506d9ace9e Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 13 Feb 2024 10:03:24 +0100 Subject: [PATCH 01/12] added additional rate limiting to password reset --- recipes/settings.py | 9 +++++++++ requirements.txt | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/recipes/settings.py b/recipes/settings.py index 36e68c4f6..e4757ef84 100644 --- a/recipes/settings.py +++ b/recipes/settings.py @@ -556,4 +556,13 @@ DEFAULT_FROM_EMAIL = os.getenv('DEFAULT_FROM_EMAIL', 'webmaster@localhost') ACCOUNT_EMAIL_SUBJECT_PREFIX = os.getenv( 'ACCOUNT_EMAIL_SUBJECT_PREFIX', '[Tandoor Recipes] ') # allauth sender prefix +ACCOUNT_EMAIL_UNKNOWN_ACCOUNTS = False +ACCOUNT_RATE_LIMITS = { + "change_password": "1/m/user", + "reset_password": "1/m/ip,1/m/key", + "reset_password_from_key": "1/m/ip", + "signup": "5/m/ip", + "login": "5/m/ip", +} + mimetypes.add_type("text/javascript", ".js", True) diff --git a/requirements.txt b/requirements.txt index 99b2e99f0..5b5d421b4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -29,7 +29,7 @@ microdata==0.8.0 Jinja2==3.1.3 django-webpack-loader==1.8.1 git+https://github.com/BITSOLVER/django-js-reverse@071e304fd600107bc64bbde6f2491f1fe049ec82 -django-allauth==0.58.1 +django-allauth==0.61.1 recipe-scrapers==14.52.0 django-scopes==2.0.0 pytest==7.4.3 From 57d7bda803923276d7460b1c4641a38fedbebbd4 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 13 Feb 2024 10:56:43 +0100 Subject: [PATCH 02/12] added captcha option to password reset form --- cookbook/forms.py | 16 +++++++++-- .../templates/account/password_reset.html | 9 +++++++ .../account/password_reset_done.html | 27 ++++++++++++++++--- recipes/settings.py | 8 ++++-- 4 files changed, 53 insertions(+), 7 deletions(-) diff --git a/cookbook/forms.py b/cookbook/forms.py index 4226af9cc..a1aa4b220 100644 --- a/cookbook/forms.py +++ b/cookbook/forms.py @@ -1,5 +1,6 @@ from datetime import datetime +from allauth.account.forms import ResetPasswordForm, SignupForm from django import forms from django.conf import settings from django.core.exceptions import ValidationError @@ -9,6 +10,8 @@ from django_scopes import scopes_disabled from django_scopes.forms import SafeModelChoiceField, SafeModelMultipleChoiceField from hcaptcha.fields import hCaptchaField + + from .models import (Comment, Food, InviteLink, Keyword, Recipe, RecipeBook, RecipeBookEntry, SearchPreference, Space, Storage, Sync, User, UserPreference) @@ -313,12 +316,12 @@ class SpaceJoinForm(forms.Form): token = forms.CharField() -class AllAuthSignupForm(forms.Form): +class AllAuthSignupForm(SignupForm): captcha = hCaptchaField() terms = forms.BooleanField(label=_('Accept Terms and Privacy')) def __init__(self, **kwargs): - super(AllAuthSignupForm, self).__init__(**kwargs) + super().__init__(**kwargs) if settings.PRIVACY_URL == '' and settings.TERMS_URL == '': self.fields.pop('terms') if settings.HCAPTCHA_SECRET == '': @@ -328,6 +331,15 @@ class AllAuthSignupForm(forms.Form): pass +class CustomPasswordResetForm(ResetPasswordForm): + captcha = hCaptchaField() + + def __init__(self, **kwargs): + super(CustomPasswordResetForm, self).__init__(**kwargs) + if settings.HCAPTCHA_SECRET == '': + self.fields.pop('captcha') + + class UserCreateForm(forms.Form): name = forms.CharField(label='Username') password = forms.CharField( diff --git a/cookbook/templates/account/password_reset.html b/cookbook/templates/account/password_reset.html index 60cfd702b..7337440af 100644 --- a/cookbook/templates/account/password_reset.html +++ b/cookbook/templates/account/password_reset.html @@ -34,5 +34,14 @@ +
+
+ {% trans "Sign In" %} + {% if SIGNUP_ENABLED %} + - {% trans "Sign Up" %} + {% endif %} +
+
+ {% endblock %} \ No newline at end of file diff --git a/cookbook/templates/account/password_reset_done.html b/cookbook/templates/account/password_reset_done.html index b756e8abc..aca757837 100644 --- a/cookbook/templates/account/password_reset_done.html +++ b/cookbook/templates/account/password_reset_done.html @@ -7,11 +7,32 @@ {% block title %}{% trans "Password Reset" %}{% endblock %} {% block content %} -

{% trans "Password Reset" %}

+ {% if user.is_authenticated %} - {% include "account/snippets/already_logged_in.html" %} + {% include "account/snippets/already_logged_in.html" %} {% endif %} -

{% blocktrans %}We have sent you an e-mail. Please contact us if you do not receive it within a few minutes.{% endblocktrans %}

+
+
+

{% trans "Password Reset" %}

+
+
+ +
+
+
+

{% blocktrans %}We have sent you an e-mail. Please contact us if you do not receive it within a few minutes.{% endblocktrans %}

+
+
+ +
+
+ {% trans "Sign In" %} + {% if SIGNUP_ENABLED %} + - {% trans "Sign Up" %} + {% endif %} +
+
+ {% endblock %} \ No newline at end of file diff --git a/recipes/settings.py b/recipes/settings.py index e4757ef84..b8bf35571 100644 --- a/recipes/settings.py +++ b/recipes/settings.py @@ -98,8 +98,6 @@ FDC_API_KEY = os.getenv('FDC_API_KEY', 'DEMO_KEY') SHARING_ABUSE = bool(int(os.getenv('SHARING_ABUSE', False))) SHARING_LIMIT = int(os.getenv('SHARING_LIMIT', 0)) -ACCOUNT_SIGNUP_FORM_CLASS = 'cookbook.forms.AllAuthSignupForm' - DRF_THROTTLE_RECIPE_URL_IMPORT = os.getenv('DRF_THROTTLE_RECIPE_URL_IMPORT', '60/hour') TERMS_URL = os.getenv('TERMS_URL', '') @@ -556,6 +554,12 @@ DEFAULT_FROM_EMAIL = os.getenv('DEFAULT_FROM_EMAIL', 'webmaster@localhost') ACCOUNT_EMAIL_SUBJECT_PREFIX = os.getenv( 'ACCOUNT_EMAIL_SUBJECT_PREFIX', '[Tandoor Recipes] ') # allauth sender prefix +# ACCOUNT_SIGNUP_FORM_CLASS = 'cookbook.forms.AllAuthSignupForm' +ACCOUNT_FORMS = { + 'signup': 'cookbook.forms.AllAuthSignupForm', + 'reset_password': 'cookbook.forms.CustomPasswordResetForm' +} + ACCOUNT_EMAIL_UNKNOWN_ACCOUNTS = False ACCOUNT_RATE_LIMITS = { "change_password": "1/m/user", From 857d287233748a7f87c780ffb5aa3ebe39b08e7e Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 3 Feb 2024 22:04:44 +0000 Subject: [PATCH 03/12] add ability to set 'MEDIA_ROOT' --- docs/system/configuration.md | 7 +++++++ recipes/settings.py | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/system/configuration.md b/docs/system/configuration.md index 8d93f9859..18caa9630 100644 --- a/docs/system/configuration.md +++ b/docs/system/configuration.md @@ -146,6 +146,13 @@ This can either be a relative path from the applications base path or the url of MEDIA_URL=/media/ ``` +#### Media root + +> default `/mediafiles` - options `/some/other/media/path`. + +Where mediafiles should be stored on disk. The default location is a +`mediafiles` subfolder at the root of the application directory. + #### Gunicorn Workers > default `3` - options `1-X` diff --git a/recipes/settings.py b/recipes/settings.py index 36e68c4f6..9db068e91 100644 --- a/recipes/settings.py +++ b/recipes/settings.py @@ -523,10 +523,10 @@ if os.getenv('S3_ACCESS_KEY', ''): AWS_S3_CUSTOM_DOMAIN = os.getenv('S3_CUSTOM_DOMAIN', '') MEDIA_URL = os.getenv('MEDIA_URL', '/media/') - MEDIA_ROOT = os.path.join(BASE_DIR, "mediafiles") + MEDIA_ROOT = os.getenv('MEDIA_ROOT', os.path.join(BASE_DIR, "mediafiles")) else: MEDIA_URL = os.getenv('MEDIA_URL', '/media/') - MEDIA_ROOT = os.path.join(BASE_DIR, "mediafiles") + MEDIA_ROOT = os.getenv('MEDIA_ROOT', os.path.join(BASE_DIR, "mediafiles")) # Serve static files with gzip STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' From be999c726b09e2f9522a6807016f905af30ce4c5 Mon Sep 17 00:00:00 2001 From: Jocelin Lebreton Date: Sat, 2 Mar 2024 22:45:00 +0000 Subject: [PATCH 04/12] Translated using Weblate (French) Currently translated at 96.5% (473 of 490 strings) Translation: Tandoor/Recipes Backend Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/ --- cookbook/locale/fr/LC_MESSAGES/django.po | 66 +++++++++++------------- 1 file changed, 29 insertions(+), 37 deletions(-) diff --git a/cookbook/locale/fr/LC_MESSAGES/django.po b/cookbook/locale/fr/LC_MESSAGES/django.po index 5f1830a33..91539a593 100644 --- a/cookbook/locale/fr/LC_MESSAGES/django.po +++ b/cookbook/locale/fr/LC_MESSAGES/django.po @@ -14,8 +14,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-05-18 14:28+0200\n" -"PO-Revision-Date: 2023-12-10 14:19+0000\n" -"Last-Translator: Robin Wilmet \n" +"PO-Revision-Date: 2024-03-03 23:19+0000\n" +"Last-Translator: Jocelin Lebreton \n" "Language-Team: French \n" "Language: fr\n" @@ -1802,23 +1802,6 @@ msgstr "" " " #: .\cookbook\templates\search_info.html:39 -#, fuzzy -#| msgid "" -#| " \n" -#| " Web searches simulate functionality found on many web search " -#| "sites supporting special syntax.\n" -#| " Placing quotes around several words will convert those words " -#| "into a phrase.\n" -#| " 'or' is recongized as searching for the word (or phrase) " -#| "immediately before 'or' OR the word (or phrase) directly after.\n" -#| " '-' is recognized as searching for recipes that do not " -#| "include the word (or phrase) that comes immediately after. \n" -#| " For example searching for 'apple pie' or cherry -butter will " -#| "return any recipe that includes the phrase 'apple pie' or the word " -#| "'cherry' \n" -#| " in any field included in the full text search but exclude any " -#| "recipe that has the word 'butter' in any field included.\n" -#| " " msgid "" " \n" " Web searches simulate functionality found on many web search " @@ -1869,19 +1852,6 @@ msgstr "" " " #: .\cookbook\templates\search_info.html:59 -#, fuzzy -#| msgid "" -#| " \n" -#| " Another approach to searching that also requires Postgresql " -#| "is fuzzy search or trigram similarity. A trigram is a group of three " -#| "consecutive characters.\n" -#| " For example searching for 'apple' will create x trigrams " -#| "'app', 'ppl', 'ple' and will create a score of how closely words match " -#| "the generated trigrams.\n" -#| " One benefit of searching trigams is that a search for " -#| "'sandwich' will find mispelled words such as 'sandwhich' that would be " -#| "missed by other methods.\n" -#| " " msgid "" " \n" " Another approach to searching that also requires Postgresql is " @@ -2465,69 +2435,93 @@ msgstr "" #: .\cookbook\views\api.py:687 msgid "Query string matched (fuzzy) against object name." -msgstr "" +msgstr "Correspondance (floue) entre la chaîne de requête et le nom de l'objet." #: .\cookbook\views\api.py:731 msgid "" "Query string matched (fuzzy) against recipe name. In the future also " "fulltext search." msgstr "" +"La chaîne d'interrogation correspond (de manière floue) au nom de la " +"recette. À l'avenir, la recherche en texte intégral sera également possible." #: .\cookbook\views\api.py:733 msgid "" "ID of keyword a recipe should have. For multiple repeat parameter. " "Equivalent to keywords_or" msgstr "" +"ID du mot-clé qu'une recette doit avoir. Pour les paramètres à répétition " +"multiple. Equivalent à keywords_or" #: .\cookbook\views\api.py:736 msgid "" "Keyword IDs, repeat for multiple. Return recipes with any of the keywords" msgstr "" +"ID des mots-clés, répéter pour plusieurs. Retourner les recettes avec " +"n'importe quel mot-clé" #: .\cookbook\views\api.py:739 msgid "" "Keyword IDs, repeat for multiple. Return recipes with all of the keywords." msgstr "" +"ID des mots-clés, répéter pour plusieurs. Retourner les recettes contenant " +"tous les mots-clés." #: .\cookbook\views\api.py:742 msgid "" "Keyword IDs, repeat for multiple. Exclude recipes with any of the keywords." msgstr "" +"ID des mots-clés, répéter pour plusieurs. Exclure les recettes contenant " +"l'un des mots-clés." #: .\cookbook\views\api.py:745 msgid "" "Keyword IDs, repeat for multiple. Exclude recipes with all of the keywords." msgstr "" +"ID des mots-clés, répéter pour plusieurs. Exclure les recettes contenant " +"l'un des mots-clés." #: .\cookbook\views\api.py:747 msgid "ID of food a recipe should have. For multiple repeat parameter." msgstr "" +"ID de l'aliment qu'une recette doit contenir. Pour les paramètres de " +"répétition multiples." #: .\cookbook\views\api.py:750 msgid "Food IDs, repeat for multiple. Return recipes with any of the foods" msgstr "" +"ID des aliments, répéter pour plusieurs. Retourner les recettes contenant " +"l'un des aliments" #: .\cookbook\views\api.py:752 msgid "Food IDs, repeat for multiple. Return recipes with all of the foods." msgstr "" +"ID des aliments, répéter pour plusieurs. Retourner les recettes avec tous " +"les aliments." #: .\cookbook\views\api.py:754 msgid "Food IDs, repeat for multiple. Exclude recipes with any of the foods." msgstr "" +"ID des aliments, répéter pour plusieurs. Exclure les recettes contenant l'un " +"des aliments." #: .\cookbook\views\api.py:756 msgid "Food IDs, repeat for multiple. Exclude recipes with all of the foods." msgstr "" +"ID des aliments, répéter pour plusieurs. Exclure les recettes contenant tous " +"les aliments." #: .\cookbook\views\api.py:757 msgid "ID of unit a recipe should have." -msgstr "" +msgstr "ID de l'unité qu'une recette doit avoir." #: .\cookbook\views\api.py:759 msgid "" "Rating a recipe should have or greater. [0 - 5] Negative value filters " "rating less than." msgstr "" +"Note qu'une recette devrait avoir ou être supérieure. [0 - 5] Une valeur " +"négative filtre une note inférieure à." #: .\cookbook\views\api.py:760 msgid "ID of book a recipe should be in. For multiple repeat parameter." @@ -2686,10 +2680,8 @@ msgid "Invite Link" msgstr "Lien d’invitation" #: .\cookbook\views\delete.py:200 -#, fuzzy -#| msgid "Members" msgid "Space Membership" -msgstr "Membres" +msgstr "Adhésion à l'espace" #: .\cookbook\views\edit.py:116 msgid "You cannot edit this storage!" From 88efe7ac8e5a0962efd917a8e2b016b391776d82 Mon Sep 17 00:00:00 2001 From: M Ugur Date: Sun, 3 Mar 2024 19:16:36 +0000 Subject: [PATCH 05/12] Translated using Weblate (Turkish) Currently translated at 6.5% (32 of 490 strings) Translation: Tandoor/Recipes Backend Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/tr/ --- cookbook/locale/tr/LC_MESSAGES/django.po | 30 ++++++++++++++---------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/cookbook/locale/tr/LC_MESSAGES/django.po b/cookbook/locale/tr/LC_MESSAGES/django.po index 65b420a70..dcc4fd524 100644 --- a/cookbook/locale/tr/LC_MESSAGES/django.po +++ b/cookbook/locale/tr/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-05-18 14:28+0200\n" -"PO-Revision-Date: 2024-02-29 02:19+0000\n" +"PO-Revision-Date: 2024-03-03 23:19+0000\n" "Last-Translator: M Ugur \n" "Language-Team: Turkish \n" @@ -40,19 +40,19 @@ msgstr "Tema" #: .\cookbook\forms.py:56 msgid "Navbar color" -msgstr "" +msgstr "Gezinti çubuğu rengi" #: .\cookbook\forms.py:57 msgid "Sticky navbar" -msgstr "" +msgstr "Yapışkan gezinti çubuğu" #: .\cookbook\forms.py:58 msgid "Default page" -msgstr "" +msgstr "Varsayılan sayfa" #: .\cookbook\forms.py:59 msgid "Plan sharing" -msgstr "" +msgstr "Plan paylaşımı" #: .\cookbook\forms.py:60 msgid "Ingredient decimal places" @@ -87,10 +87,12 @@ msgid "" "Enables support for fractions in ingredient amounts (e.g. convert decimals " "to fractions automatically)" msgstr "" +"Malzeme miktarı için kesir desteğini etkinleştir (örn. ondalıkları kesire " +"otomatik çevir)" #: .\cookbook\forms.py:73 msgid "Display nutritional energy amounts in joules instead of calories" -msgstr "" +msgstr "Besin değerlerini kalori yerine jul olarak görüntüle" #: .\cookbook\forms.py:74 msgid "Users with whom newly created meal plans should be shared by default." @@ -127,11 +129,11 @@ msgstr "" #: .\cookbook\forms.py:83 .\cookbook\forms.py:512 msgid "Automatically add meal plan ingredients to shopping list." -msgstr "" +msgstr "Otomatik olarak yemek planındaki malzemeleri alışveriş listesine ekle." #: .\cookbook\forms.py:84 msgid "Exclude ingredients that are on hand." -msgstr "" +msgstr "Var olan malzemeleri hariç tut." #: .\cookbook\forms.py:85 msgid "Will optimize the UI for use with your left hand." @@ -142,6 +144,8 @@ msgid "" "Both fields are optional. If none are given the username will be displayed " "instead" msgstr "" +"Her iki değer de tercihe bağlıdır. Hiç birisi verilmezse yerlerine kullanıcı " +"adı gösterilecektir" #: .\cookbook\forms.py:123 .\cookbook\forms.py:314 msgid "Name" @@ -149,23 +153,23 @@ msgstr "İsim" #: .\cookbook\forms.py:124 .\cookbook\forms.py:315 .\cookbook\views\lists.py:88 msgid "Keywords" -msgstr "" +msgstr "Anahtar kelimeler" #: .\cookbook\forms.py:125 msgid "Preparation time in minutes" -msgstr "" +msgstr "Hazırlık süresi dakika cinsinden" #: .\cookbook\forms.py:126 msgid "Waiting time (cooking/baking) in minutes" -msgstr "" +msgstr "Bekleme süresi (pişirme/fırınlama) dakika cinsinden" #: .\cookbook\forms.py:127 .\cookbook\forms.py:283 .\cookbook\forms.py:316 msgid "Path" -msgstr "" +msgstr "Adres" #: .\cookbook\forms.py:128 msgid "Storage UID" -msgstr "" +msgstr "Saklama UID (biricik tanımlayıcı)" #: .\cookbook\forms.py:161 msgid "Default" From fe581e538f198c6d0fa968253e4653d39d9f0809 Mon Sep 17 00:00:00 2001 From: Jocelin Lebreton Date: Sat, 2 Mar 2024 22:50:50 +0000 Subject: [PATCH 06/12] Translated using Weblate (French) Currently translated at 95.2% (540 of 567 strings) Translation: Tandoor/Recipes Frontend Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/ --- vue/src/locales/fr.json | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/vue/src/locales/fr.json b/vue/src/locales/fr.json index be5ccec3b..a8c5868d7 100644 --- a/vue/src/locales/fr.json +++ b/vue/src/locales/fr.json @@ -521,5 +521,24 @@ "Transpose_Words": "Transposer les mots", "Name_Replace": "Remplacer le Nom", "Food_Replace": "Remplacer l'aliment", - "Unit_Replace": "Remplacer l'Unité" + "Unit_Replace": "Remplacer l'Unité", + "ShowRecentlyCompleted": "Afficher les éléments récemment complétés", + "Input": "Entrée", + "Undo": "annuler", + "NoMoreUndo": "Aucun changement à annuler.", + "Delete_All": "Supprimer tout", + "created_by": "Créé par", + "ShoppingBackgroundSyncWarning": "Mauvais réseau, en attente de synchronisation ...", + "make_now_count": "Ingrédients manquants au maximum", + "CustomTheme": "Thème personnalisé", + "CustomThemeHelp": "Remplacer les styles du thème sélectionné en téléchargeant un fichier CSS personnalisé.", + "CustomImageHelp": "Téléchargez une image à afficher dans l'aperçu de l'espace.", + "CustomNavLogoHelp": "Téléchargez une image à utiliser comme logo de la barre de navigation.", + "CustomLogoHelp": "Téléchargez des images carrées de différentes tailles pour les transformer en logo dans l'onglet du navigateur et dans l'application web installée.", + "CustomLogos": "Logos personnalisés", + "Calculator": "Calculatrice", + "Created": "Créé", + "Updated": "Mis à jour", + "Unchanged": "Inchangé", + "Error": "Erreur" } From 56223df80b723ea60cd89dfa3c38ccf639c29aec Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 5 Mar 2024 07:45:43 +0100 Subject: [PATCH 07/12] updated translations --- cookbook/locale/cs/LC_MESSAGES/django.mo | Bin 36941 -> 36932 bytes cookbook/locale/de/LC_MESSAGES/django.mo | Bin 63263 -> 63273 bytes cookbook/locale/fr/LC_MESSAGES/django.mo | Bin 58330 -> 63919 bytes cookbook/locale/it/LC_MESSAGES/django.mo | Bin 50078 -> 51658 bytes cookbook/locale/nl/LC_MESSAGES/django.mo | Bin 62440 -> 62416 bytes cookbook/locale/sv/LC_MESSAGES/django.mo | Bin 36771 -> 36774 bytes cookbook/locale/tr/LC_MESSAGES/django.mo | Bin 2010 -> 4001 bytes cookbook/locale/zh_CN/LC_MESSAGES/django.mo | Bin 57549 -> 57898 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/cookbook/locale/cs/LC_MESSAGES/django.mo b/cookbook/locale/cs/LC_MESSAGES/django.mo index 3853f5ecb1b2c7f995a93757384ec045108e73da..f8dca016c7e0e1a8bd921cbba63cb7c28c05ac70 100644 GIT binary patch delta 3045 zcmXZedu+~E9LMp~%XoTGT3V%QHJwGPv}ikJZl!d@#%MRJJnmZh@boF#nMcjcu-X=4 z8;Obxe{3P^He!pK+a{fn*d=8ZlG(&HOv;$q`{SIZ@jBmge!p|h_j`W7U!AH8JysXG zFAx>H8e&Y*1Y>TuGG^FBV~!eQ`b{zBJl@0C89zJKm`B7}CC1z&?laAp;n>w{Od@(` z7;^}#XBrd1bpvK|ALe5_+<|TJ3)J`#WI6NWY!ftbG|svU|8(BNX!<>KSODX36!ykg zT!P8C7GrQ1#^YCRyb%WyH)AArnoClcis|?&=HlwPL1Vhm_?C|L*o0c(2CDxtcET?6 zjEN(|984fCoNt|u%4n&x2B#CRcky*>P27U1_#d{x?xnT@SwR{q(evoRLS#)d0VDAs zYGcPS3Y$<9Tt;30H)_NGVg$yN8Pfq1F$FVFjwV~(* z_6U+uH>9D?u)m8(U=i^+Y=xhqj`B0q1{*L6PoWlS!l&>qYU2-(#DXSlq1|Ce)Id)c z_jQgym9Pj^i4xSA`(0dvT6i<^YxeMu5=tny{pqM@WiWQfsi^Ul*oyVdW*VAc8)oBP z)J86&DsdCT@i9hXxX)(N78S>%DwKk0n1)(l62@RDszOzmgey^rY*Rn$n|(Bt;eK~P z18M{3@df+?b%xI@vJ3Xdw!}kF3%rC%pv3hrM%`C~dRQA!_y3C8z!lWdg)gT58kj;u znJ+{Q>_lbsz!~nhXBmU)?~Ls*72_})vv4#jvuacVwazW5v#&!{Vi(5Z=YHz1QZ>*~ zfIs6VOsX(uB<{m}Y(Y(s7qA%&#aiO2s0pv3Dscx@$&gB8W?=+sqvfc~gZM0NMP2`0 zCG}TEXXwxZ=TI43#CW`mDrMvnW4hsJ)I_DI4Ax)*euNirFY1F;yVSZH+YledIQ$7! znM#x9E;#H{34`Mbp;*~|p+m3Xi(4P`J0^}fD>#W)Rz;(pYP_feU6s%?c5oN1^`24g4|pcXDf-8UKeHKnfq zGIl0zK`Ih7v2WOtq@v!_4D5wtP!lY}3|xyU;n%2&oOGUc_JtM!NDt7}_(tl9*hrMa9 z?|^z%Qc?Hipb{C39=-qLX{fZ5Q8&&*-B9KF*P}B27!z?jDuV-VyaBbbQ!Z|H@io*u z4_(}5gaT@w(V>kzL`@K~$}ar0GY$0#&PH9Ihbnaesv<9=?w^l( z8+_OSm!pp81J}PBRpBpD5B>2~WU7gOr$Z&ZggS~VsGYZ9D#pBJGw+9*aG;CFJ6}U( zrrQX81;}f zp)$OVIT*U0|8U{}oQM_9A8yxAAUl70sUC@o+`%qU#BsQj`p?ohDlgTyc@MZ z+(!E)EW}LWbr_1@U~4>tD(wmEg^k!1?_(5peBXX@yJHBkezcKdHR_uaP7ciPpOKlB zkvSkGt8ZRrZh9s^kz>6TfsBcMZ+XQ6Z@}lzOL@^-o-(F#hVS@}*<~q%%4n5(hx#f5 g3w*w^-ZQJ~Z%^3JzJA4=qtRjI$F|mwsEA1ZA2h+Z9smFU delta 3055 zcmXZe4@{L+7{~DgD#8U+KtVzDnn)>JgHV{D;-5^N8p%jX4ZRW~${*$8U(i=kOYvV$ zo0~3&EjQg<;#f^vnGRj3rPY|}oYt^xy2Y~8T;}Ne<2{V|InR0D_nhZ>&U-IjXbk?Y zF}SHF-1#fWm^t~zJPa{rdVw)5#+aOW#@xbAe243|<{R^zcubKo9mH7+jG2VVeq;J$ z*&<`kVtuhOVca*dgy(Pu_QB)W8^1tZzl>~W+DeRLq8Z$>H+EP%F@pI%i`f7ZaT;b~ z6grrQd$AXu#C~|zUT?!3;(O@97fOxEKp&={AG2^*sbkDQ1{ax#!FJRJPf+urON<$S z!!Vi(b1{}Uzs$7^RnbOk11==qZ{x?F1%vn z9P2Dp3m2d|QHnbAS{pZ@Ha?8}np6Cvf(BQ*^P^Dj%2XVRC8+D$F@*Qe9A=;ej^b!M zjY^~g)ro(wJBC)dM-qvuq`!>^p*l1iM_>kOgCgvO0aSrl@%pkCHi)bl^15_pI@y2urrzb?GX zK$WjTT{wZNs9UvbBMRlosjBdTM^QJpx6QTTZ^{a346 znRpFv<9s(c#`!%tB6 zUtUT7Rq0J8w833e1^2NZK1a1OW)&YPoQ+y2fT~~*#^MpYgQrnnSO-?SHen?3C5*zO7w4sL09IeGxe--D~d-gGz67cHtPBW)ctSRcmYNbSK0YG%p%@_s=Nh9V;gp@ zzt;U;h({Ifjc(dI+`92~k9;mnT`%x8tjQ#N#s)Fo&e;<434< zx^Hl=$D;O0#sT~>8-_aJ!a`K5{@m#L%o?)Etsn}O=m69PBTyBM#YD_Q zB~*cNxE}S+e2BSt9M$Rjo9Mqbe#(Rr>0a+H;6Wwuk~IVM6+9kw|729F^H3dm8})oO z>eH|W`{GvA5goMiO{m1bLcR1?>#0-=|Hgz``T*6Uhp5auF$v=~yOobcE%>U9=UNw` zDq4zKZ!HeT4VZ$*@Bp@9GL~;~zu@*c4CXO$6Q|?ot;SqI2h(xJd&azo>rsDPj^ZTz z9!oLieRrc;OxAT&g5RPFXt(~0N-TPtTWB0=KW7jFo#7Hx%h#bY--@Al64k2Hs588V zYVBR581ocg#=7msRN@H?#e@deB-Hvo)H{)j>QtVqV~QAPfeO?HAE5_Nq0aJ4)EQqw zy=3jE3Lj%8hVS4%rZ@=;u+I7e&L&RY=_a-Y4-)^5)mXnv9pn5TGnmN4z}@ZxMYxo> z3AI7O9`~CtAJd5UVK836p7;%_wbw8e+i(yDec-;VUi1>DVi4*_i4edpxR#+O8=&+~lF_xn5Nd_L!VzrSBL)&=gY z3*492%D<(NS@2@BYBSrr#OyBSFEtxM|Kwt`X}D{dSuD0)Zgv_6tuV{QW+i4V1I%7o zW!4LeO3ec3uPig;qxRNXv&V^3UN@VF^VXT&YixFXy;(@0*_ln|x4ztX?GI)>G5ig) z7C01xaV&=71ni2_u??1D6Wrxp--kaSeiz&0XZSS!8z07TTiyMc*qS&S$;swz^_xY} z2-#+qigB2Qzs9HVF2-Wgb{2y^oQdVw9AkEn9mZitoP(Wk9X^Kd;0U~pN~HTvvvxQT zn_-%thAzB-5t!x0g{Vx{VkB1JVmyn=^qE~|IXDX^;%&^pp}VOTZben_|EP(A|HvE| zj_RL@s)WCQMi7l<*dNO<9xvixY`n)T5r<<-oQq9x32J~9s0D7uWITdePy=e*342|} zlTllnk6OS&BoV)@q@e+JqxR|~HpLp$jd!p)euE*{fa%!cP0ESWQ4^J6E8L77a6f8+ z7f=Y-agFhyI0+nDPhGPl(mBBU|IwXfsk7E_?#{0M!w;VKEggp+qOe$~% z@sPtV^NZMr_!?@QR)2B}j=%!qC@jSFxCT2`nk~o5O6s3RBjpGO3O68CwysCrG0U>o@~P9^=Wt3e=XhtaA5fpfb+JZ2Ya)|7{iZ*WTIN&LC7p z!mu@V#DUlcwFR?K3wRl|RSQv1!)jFK>o5|xpvF0hgRvUNWAHm>nV5m8c*ako2aU+% z?(z8vCJ`56I-c;1dDmsM5S95g)B@^Id-^}rp$t0Vu1BB}=;p-(upRL@)aQJth5GYo zOs266^;mq3$~gEWCmd5y10To6c+QJI#vc;bq84QDxq-tyJ7Q0|<587J_ne7Q#Pg7a z_-&(iVK1sQRj56Uec!#&R-zVIk6OsHr`#$3C2HW8aS#?^0iHrtaQJDru=zNgcs1tZ zC)fnjKG1l6v*&1J&@mOY$JIC+FJcEw`OrPDnb@2-7j>8lP^DjidftDBUGOk=#u|JS zn^wDp#^NKyiTETwjbY4h+i7UPBX|ox!gM@v#=UyO&${=)7}WFq3EIm+M}qC++K~v-oypi4Bx~MJdAzueT=~GP}kd?6L0}OkCoU8+n#ro?Sw6ed!Q2Nd!G9Dq%n*Rl`scY;$;|uYcLVF;$wInm2toY zcles2;!YTf-EbZzp|;={YP{Px9PeQ$_P*#UHT)v=S0?Fns5DbiXJ9UBr3>&yT#h5K z9-qJgmpDLJjGEvkDuFLhui7RbyUYim#!E$w_cPClsD(`R)6h!uQHN(UX5t5^3iP?` z7C01hiASUMv{!EPeJwPp!Tl7i;Ga1l%Oi{h8OQaP5d^h!j~`%ui;FrLw+mz?H8Z8fipgJ zC7XdQ8ZiMXvqjh3^ID2+h}Wa~_n`)?^5P4qvs8nsP{?QQ4cH!Ihv(bNwMg)yPb^P;y<54%f zj_G&;eHil(_X1ghgNd)=s~Gte|NCJXj>6Np6GOjtnIFYr#7)0(@o3a|rO1~1t$~J4 zf4^_tmrok%1B);gtFaL4Q6+w*o<|CgpswFVZBghy-QGuGAaSB+5(X0|V{06Px_=@z zRjsDcP-$mjC(Or4+=SYSO3xFXXHoZGK`s1-*WZAnh@0GZ-vQ%Lm093<5LMwj*a#o| zm0yl3oR*Rh*Q)wmM7Goym=EbGuOv=igF)1%Qr+;*6W=?KiW>)l5 zzRVYWGvY@2GJH9C(Mi)?cXD119aGBJEY5D;IMtVxwJNA2^FgD0cFEO*fJsxz(@s_Y F=z9s#4_p8M delta 4052 zcmXZfdwkE=9mnybN#v$Mq=^cVFDK-Cl3!>!0WOobUI0&iQ=K`F``W z>#oo5@A_01w0G9EF($agn6t*1ZOe_hi8(8b8A<=7Qe$S}mX*fDp#Lgk&S3x5#(43+ zYm904gfVl<=)1D^lUQbj;}F|n~e$aF{XB#aZDmN zHk2C^i+&#(6NCvEj49X=$6#-qf?>D}{cwwW{SWvw@d1p)b2tfaVHZr@ZtqXS4#XKq zPR6s{F(!(JsbCW5j=4A+C*Wm_!Pp(fjKkM3AGc!whVL}yCG3tpFdKVeDfYzuI1-ys ziFDh=GuRLPail{-7hc8)On2k?s7#h)XRN>yJdVorrQNI^r{ffC!c0u4H0BN5h^k;K zYNAK@Ci?BM{h6prIJqi2(`d6OvOE@1>Hf7 zJLV&s@g&sN=Aafc(aaz#ABXcQ73vVjrBc*G^P|?TO2< zJC>sscoJ3N3#hGWK~=C_wVq@DpP@01j{c|#i%}CU#~3U_9j2o=8AJCO^CV_tdn`oV zzYMjvt5J#Uz^Cv8mSQui0$Ka*g7dKt^P3_XDs=@a!xq$y-(yEKHMSz5s6+KM&c$Sm z#=WSs(ulhMHtH<>gsM>Z0b`!S5vT;`V<%jKjxuSHxi3c3AnV-S|#0{u%+WgTjI1m>Qcfh5%5;tJjVPjTd>aV@K zM~8fXs)+A#dw9YynYb6~P)dA_2(xkGpKOA) z4vk;Z5maYipF|u=JRj5XplkREn^7Su^9IxcuA=tzJJg|k;9d_rX%py*y1y@mV=C&o z*H8;}eobS#8mQOeIx6EwScpST*@0`&m$=T2Kf`Xs7f=)2Lk;ZrsWl8^iF=|d@v3Vk zMiG0E`yI2!y|4{cnrhUZcKOVH(H5f?*n&FUqfcAkL=Bva!>||^;4xGMlg`+M72*rT z%drT*KtCK^uf!Z<#?#28V=8Ko>u?^P!S0yyXZyZR!vNxJ)a&Cxm3}GeeP4^ez$$zO zFXGSeA!?yfXN~EKvG@v(!BFNmTWM&(YP^o8FdcV(Za=+&4fcC50#$)=7>v`<7iXge z&PRO*R-zB?LLJsB)D|7VFl@j$yoQeUDD0fwtLHJE*n|GK9Ye4R6Y(fU;CY)-jKBme!Zh5A?J>B~RyGoYhhL{s1acisvyOZy>)F9W&`GJMin5 zZOJk*s0|aKGF$jp`@XKgFyb|+{tDE92i*8H>MUJERmk^>{Q`ExpA+{$CGa9f;wz71 z_J0lyJy3}H0xm&K@PX?dR0c;-XX6Cw{(5{Co8103f3ph>KrJ)`Re_$U$|PbcrlKnN zj{5cfucV>Fvq2rW54HD4@bN^b6*r+io%c{%((!9MQCHM`ai~K#48!qd?21{ag)c&F zRS7Dg&FE;tavGX&52^y6U|E(=u8tRbDMwRLz{R(QU zZeS|j!9tAvm;KgP;O~fcBRQGDw{50}aX4|eJN75qH0(`WhV#%lMk9ho!d-qK;#kxT zt1ul8V-|M#&VE4N#uVanSd1b6=9e?B#8Fs_yU@SYX1))fCw}P0srT%7E08UBOe+nY z{(k?le|$!x9$1JmScgmT7OKQ^@AHQPt5Mg#Ms1P*_jd2Y(1$qIH6DYB2Vw^tfx3SJ zw$-;XorX&L8|;Po*cmsVwqkGD+^9~;x}$*}Ew#zL(u$*qAK-KN!Vk6Rx;ddni#Wjy3X diff --git a/cookbook/locale/fr/LC_MESSAGES/django.mo b/cookbook/locale/fr/LC_MESSAGES/django.mo index d70b35cfee0108ef9427024f74455ee7f52c9460..a91b0e53bde8ca26670ec4819dc348aff496bbc7 100644 GIT binary patch delta 14982 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 delta 9861 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 OUU=(VOyNi8e)~T#0~Cn> diff --git a/cookbook/locale/nl/LC_MESSAGES/django.mo b/cookbook/locale/nl/LC_MESSAGES/django.mo index a316e1cac136a6d11802dfd78c8c52a1d51f58e5..c66a83f3fb3724c41218dddb97fab83b64f707a6 100644 GIT binary patch delta 4067 zcmXZedsNr;9mnwxAc7(&nhA!#ek$S}0l^Y-c|lV|6zzY=V}e#2bJQ49y2hAmn6cKF_FRu&XG|d`uQ#SM9(l(YA75kYHyAUN`14|8 z9$|2aF&?f5Y%(T_IO=_4-lU%iAMh@59adxKQezJL8`JQiF=u(cWSeo!P#&EA5ij8f z*dC8z5Y}P`yo#N%37EWk+=dQ@g#P~Z&4Eq`ox&w7=enXVIbzB zKQ3};w4t#KwXz}%!9QRWmSZoxh>P$)s1@ezAhlS6DR>1(W6yG9M&UeE26tj>JdD4_ z-IHEZ8xjwqc@B4_!$9iK{GP_M+}Mno;YHM5HDUxd<1B2q$CweAhq_;Z%0M-0rI)Z9 zUdL#BjGD-Ry%aW%L_K%a^%f>EzG444Hzfl?VIcQgy=$edkxt@j@cmSti$RV}?vk#H~EE?yy@Dj!zHfBAp!!g+PuXgV; zkw;7+YKsOPu`5l&bm9r9>fYkUk1&mRJYTh7EX60V4D+xGmC@)b@~;#pRN3=58udLG zk0Ce{hvI9f7s^r9U*X0F(4V*pRjkz*j&;}(@8MW{j1zIpr+k#~J=Da1c4+9hr602? z{2ite@5dSFd)%ge7A6s2M6D>~GrOV)R8hsECY*$-ffUr%PQ@;mgI#f@dw(lFMeJ12 zNTG4Ty%2uF7GnZtb3GfCx&~~8-@EYxRFMT%+hX#dCKiVpcsRykx*NZZ>Sq%^jXRKx zI_4}5rLG>8sz#iIy-(VrS&T|m9cu4;oU$v8Mh!R&N8xyU3pd~}?DRJ~v2+|qoP`T< zH~L`YX=TdcBSHhrvlxJfumF#v2jl;4Q#=I&iKn4fG6((fx2U~dfm-oKjKtHZ3^idV z^gUy@;z`s3qcKG zz8f!gUFrHR_T>H+bOzC=rqLfCpyH>`+m%j4rTABNLjK$Cz zd+tY}PFFeV`6Ji{t1%F3YDoM58eeij)#-P^exW?5BI=9kFcH0&jefWuBe2+wcVS!N z3e3hT?2i3v?e$blCC&I1?XXG)}FvU%<6Ei1;BY z15x$1!~PgUJPzCAQf!TDP%AD*O|%r-;dY0HimU=Pqk3F|&8Q-qchSE12IdkMp*nbo znxN0;w)lc@Ik5+onJw4>kD~go!7iE~ zE4G>&P*r{%mCA=0hCgE{hBer#?uWXchT75$jKnN#*$UJ|iZMV3{}UQo;a*hAkGgR^ zYNgjuFWyDfMl-78pHRoh|0`PqeNoRvV@FKDPB<3z-c-x^dZIG*4C=jPR7R#?IA)t-cp6o-zW=bN!Hd+TnS}kZXCuFKI1%+>yNw$7%ys)8 zRqb{1{~Q+v-?0Bi=V1wPCHBG>{%Oo&%)wZ^jma2BZ%^SgR1GY_&iJkym*G0%&u|5% zeZ&6)Q6`LXJg1+`$a53 zt#}c>j;%ObQ*kLK<7J$T5%=tm&jKtWc8=5V&=~tKTb*;U5AnySnb+bk(bHtV6R+d* z#3wKheZR9sS%4|ToA7niZ~VQAM{2^?o^Og8Oh7HemwxdtjY`Iz8{954QYOUh=G(KQw+| zOx(cO7;kJ`Vq8rB82;L(W)>_Q_+ox$Zb5eD!Ug$>-joHonYrGP-sk44F>`ocPIOLI i<*wCT<9%MKJX2K=(B{SbtT~GoEXbc-IqKB*=>G$OVEokp delta 4091 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 b37X43oPIsW16oZsd9{hseRzlRft!;T&f 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 delta 400 zcmXxfJxjw-6b9fEn`>hlv=xO41=B@DXh=eF5SNG=a1a;4O=5}VlBTvXDu__<;}=}q zT>1}$Y|buzEG`bBZvF^2-`n6JZ=P_uoO3dq|CkzlPph|tDj_u_MJmWEBCD(rjl&Au zgH@=(J}km>xCt+z0iWOoe1|HmjS(%vIy7;%1@B-~AYw!V((vBLg-IwIccEP74Epd2 z%7tFw8vKHI$i!9_T!7bTxC;U4$bZQNWiQMe6=se~&Y3_M&E;F>$N8U<*GlPeTUVwU;pb`XbR$dKS(SY1}A(X@NO> diff --git a/cookbook/locale/zh_CN/LC_MESSAGES/django.mo b/cookbook/locale/zh_CN/LC_MESSAGES/django.mo index 9a6271941e13a16d09cec38643a270a3610be791..594c3f6a7c1efbbfe217027f19caba6307be8e4f 100644 GIT binary patch delta 10912 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 delta 10563 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 W@1J`=dGU{{H$GgwZ$Xpq?*AVXb>lq% From 0f06506f188afd6eede826e700800847c2756381 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 5 Mar 2024 08:39:45 +0100 Subject: [PATCH 08/12] fixed device setting supermarkt refresh --- .../ShoppingListView/ShoppingListView.vue | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/vue/src/apps/ShoppingListView/ShoppingListView.vue b/vue/src/apps/ShoppingListView/ShoppingListView.vue index 38f536d74..9c16d5feb 100644 --- a/vue/src/apps/ShoppingListView/ShoppingListView.vue +++ b/vue/src/apps/ShoppingListView/ShoppingListView.vue @@ -9,15 +9,15 @@ @@ -351,7 +351,7 @@
@@ -562,6 +562,16 @@ export default { this.shopping_list_store.refreshFromAPI() useUserPreferenceStore().loadUserSettings(true) useUserPreferenceStore().loadDeviceSettings() + + // update selected supermarkt because local setting become stale otherwise + if (useUserPreferenceStore().device_settings.shopping_selected_supermarket != null) { + let api = new ApiApiFactory() + api.retrieveSupermarket(useUserPreferenceStore().device_settings.shopping_selected_supermarket.id).then(r => { + useUserPreferenceStore().device_settings.shopping_selected_supermarket = r.data + useUserPreferenceStore().updateDeviceSettings() + }) + } + this.autoSyncLoop() }, methods: { @@ -693,6 +703,10 @@ export default { apiClient.updateSupermarket(this.shopping_list_store.supermarkets[index].id, this.shopping_list_store.supermarkets[index]).then((r) => { StandardToasts.makeStandardToast(this, StandardToasts.SUCCESS_UPDATE) this.shopping_list_store.refreshFromAPI() + + if (r.data.id === useUserPreferenceStore().device_settings.shopping_selected_supermarket.id){ + useUserPreferenceStore().device_settings.shopping_selected_supermarket = r.data + } }).catch((err) => { StandardToasts.makeStandardToast(this, StandardToasts.FAIL_UPDATE, err) }) From c23df3d4748305d47277f7ff703335652a4454b9 Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 5 Mar 2024 08:54:40 +0100 Subject: [PATCH 09/12] better shopping placeholder --- vue/src/apps/ShoppingListView/ShoppingListView.vue | 4 ++-- vue/src/locales/en.json | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/vue/src/apps/ShoppingListView/ShoppingListView.vue b/vue/src/apps/ShoppingListView/ShoppingListView.vue index 9c16d5feb..b1c8b20be 100644 --- a/vue/src/apps/ShoppingListView/ShoppingListView.vue +++ b/vue/src/apps/ShoppingListView/ShoppingListView.vue @@ -59,7 +59,7 @@ - @@ -430,7 +430,7 @@