From a8d6dbd8a69b06d53c89c8707f88d411ffc60120 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 4 Aug 2021 16:56:08 -0700 Subject: [PATCH 01/10] Adds books stream audience --- bookwyrm/activitystreams.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/bookwyrm/activitystreams.py b/bookwyrm/activitystreams.py index a49a7ce4d..cdfebfd0d 100644 --- a/bookwyrm/activitystreams.py +++ b/bookwyrm/activitystreams.py @@ -173,6 +173,34 @@ class FederatedStream(ActivityStream): privacy_levels=["public"], ) +class BooksStream(ActivityStream): + """books on your shelves""" + + key = "books" + + def get_audience(self, status): + """anyone with the mentioned book on their shelves""" + # only show public statuses on the books feed, + # and only statuses that mention books + if status.privacy != "public" or not (status.mention_books.exists() or hasattr(status, "book")): + return [] + + work = status.book.parent_work if hasattr(status, "book") else status.mention_books.first().parent_work + + audience = super().get_audience(status) + if not audience: + return [] + return audience.filter( + shelfbook__book__parent_work=work + ).distinct() + + def get_statuses_for_user(self, user): + """any public status that mentions their books""" + return privacy_filter( + user, + models.Status.objects.select_subclasses().filter(, + privacy_levels=["public"], + ) streams = { "home": HomeStream(), From 5a9dbc50da23f0c1a08eb1f4d7500996d30fa3d1 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 4 Aug 2021 17:25:31 -0700 Subject: [PATCH 02/10] Adds books stream --- bookwyrm/activitystreams.py | 29 +++++++++++++++---- .../0080_alter_shelfbook_options.py | 17 +++++++++++ bookwyrm/settings.py | 2 +- bookwyrm/urls.py | 4 ++- 4 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 bookwyrm/migrations/0080_alter_shelfbook_options.py diff --git a/bookwyrm/activitystreams.py b/bookwyrm/activitystreams.py index cdfebfd0d..4e464b3cb 100644 --- a/bookwyrm/activitystreams.py +++ b/bookwyrm/activitystreams.py @@ -173,6 +173,7 @@ class FederatedStream(ActivityStream): privacy_levels=["public"], ) + class BooksStream(ActivityStream): """books on your shelves""" @@ -182,30 +183,46 @@ class BooksStream(ActivityStream): """anyone with the mentioned book on their shelves""" # only show public statuses on the books feed, # and only statuses that mention books - if status.privacy != "public" or not (status.mention_books.exists() or hasattr(status, "book")): + if status.privacy != "public" or not ( + status.mention_books.exists() or hasattr(status, "book") + ): return [] - work = status.book.parent_work if hasattr(status, "book") else status.mention_books.first().parent_work + work = ( + status.book.parent_work + if hasattr(status, "book") + else status.mention_books.first().parent_work + ) audience = super().get_audience(status) if not audience: return [] - return audience.filter( - shelfbook__book__parent_work=work - ).distinct() + return audience.filter(shelfbook__book__parent_work=work).distinct() def get_statuses_for_user(self, user): """any public status that mentions their books""" + books = user.shelfbook_set.values_list( + "book__parent_work__id", flat=True + ).distinct() return privacy_filter( user, - models.Status.objects.select_subclasses().filter(, + models.Status.objects.select_subclasses() + .filter( + Q(comment__book__parent_work__id__in=books) + | Q(quotation__book__parent_work__id__in=books) + | Q(review__book__parent_work__id__in=books) + | Q(mention_books__parent_work__id__in=books) + ) + .distinct(), privacy_levels=["public"], ) + streams = { "home": HomeStream(), "local": LocalStream(), "federated": FederatedStream(), + "books": BooksStream(), } diff --git a/bookwyrm/migrations/0080_alter_shelfbook_options.py b/bookwyrm/migrations/0080_alter_shelfbook_options.py new file mode 100644 index 000000000..b5ee7e673 --- /dev/null +++ b/bookwyrm/migrations/0080_alter_shelfbook_options.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.4 on 2021-08-05 00:00 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("bookwyrm", "0079_merge_20210804_1746"), + ] + + operations = [ + migrations.AlterModelOptions( + name="shelfbook", + options={"ordering": ("-shelved_date", "-created_date", "-updated_date")}, + ), + ] diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 17fcfabe5..a10f128d6 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -118,7 +118,7 @@ REDIS_ACTIVITY_PORT = env("REDIS_ACTIVITY_PORT", 6379) REDIS_ACTIVITY_PASSWORD = env("REDIS_ACTIVITY_PASSWORD", None) MAX_STREAM_LENGTH = int(env("MAX_STREAM_LENGTH", 200)) -STREAMS = ["home", "local", "federated"] +STREAMS = ["home", "books"] # Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databases diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 7eccfd651..3d39b9d52 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -23,6 +23,8 @@ STATUS_PATH = r"%s/(%s)/(?P\d+)" % (USER_PATH, "|".join(status_types) BOOK_PATH = r"^book/(?P\d+)" +STREAMS = "|".join(settings.STREAMS) + urlpatterns = [ path("admin/", admin.site.urls), path( @@ -177,7 +179,7 @@ urlpatterns = [ name="get-started-users", ), # feeds - re_path(r"^(?Phome|local|federated)/?$", views.Feed.as_view()), + re_path(r"^(?P{:s})/?$".format(STREAMS), views.Feed.as_view()), re_path( r"^direct-messages/?$", views.DirectMessage.as_view(), name="direct-messages" ), From 9d75bc39827d94319d50519e57890c03a677cb11 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 4 Aug 2021 17:53:44 -0700 Subject: [PATCH 03/10] Display books timeline --- bookwyrm/activitystreams.py | 8 ++++---- bookwyrm/settings.py | 6 +++++- bookwyrm/templates/feed/feed.html | 24 +++++++----------------- bookwyrm/urls.py | 2 +- bookwyrm/views/feed.py | 9 +++++---- 5 files changed, 22 insertions(+), 27 deletions(-) diff --git a/bookwyrm/activitystreams.py b/bookwyrm/activitystreams.py index 4e464b3cb..2f1555384 100644 --- a/bookwyrm/activitystreams.py +++ b/bookwyrm/activitystreams.py @@ -4,9 +4,9 @@ from django.db.models import signals, Q from bookwyrm import models from bookwyrm.redis_store import RedisStore, r +from bookwyrm.settings import STREAMS from bookwyrm.views.helpers import privacy_filter - class ActivityStream(RedisStore): """a category of activity stream (like home, local, federated)""" @@ -218,13 +218,13 @@ class BooksStream(ActivityStream): ) -streams = { +available_streams = [s["key"] for s in STREAMS] +streams = {k:v for (k, v) in { "home": HomeStream(), "local": LocalStream(), "federated": FederatedStream(), "books": BooksStream(), -} - +}.items() if k in available_streams} @receiver(signals.post_save) # pylint: disable=unused-argument diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index a10f128d6..180191d98 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -118,7 +118,11 @@ REDIS_ACTIVITY_PORT = env("REDIS_ACTIVITY_PORT", 6379) REDIS_ACTIVITY_PASSWORD = env("REDIS_ACTIVITY_PASSWORD", None) MAX_STREAM_LENGTH = int(env("MAX_STREAM_LENGTH", 200)) -STREAMS = ["home", "books"] + +STREAMS = [ + {"key": "home", "name": _("Home Timeline"), "shortname": _("Home")}, + {"key": "books", "name": _("Books Timeline"), "shortname": _("Books")}, +] # Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databases diff --git a/bookwyrm/templates/feed/feed.html b/bookwyrm/templates/feed/feed.html index 65cf97e19..780f1d171 100644 --- a/bookwyrm/templates/feed/feed.html +++ b/bookwyrm/templates/feed/feed.html @@ -4,35 +4,25 @@ {% block panel %}

- {% if tab == 'home' %} - {% trans "Home Timeline" %} - {% elif tab == 'local' %} - {% trans "Local Timeline" %} - {% else %} - {% trans "Federated Timeline" %} - {% endif %} + {{ tab.name }}

{# announcements and system messages #} {% if not activities.number > 1 %} -{% if request.user.show_goal and not goal and tab == 'home' %} +{% if request.user.show_goal and not goal and tab.key == streams.first.key %} {% now 'Y' as year %}
{% include 'snippets/goal_card.html' with year=year %} diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 3d39b9d52..d3e2dad1a 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -23,7 +23,7 @@ STATUS_PATH = r"%s/(%s)/(?P\d+)" % (USER_PATH, "|".join(status_types) BOOK_PATH = r"^book/(?P\d+)" -STREAMS = "|".join(settings.STREAMS) +STREAMS = "|".join(s["key"] for s in settings.STREAMS) urlpatterns = [ path("admin/", admin.site.urls), diff --git a/bookwyrm/views/feed.py b/bookwyrm/views/feed.py index 3001c86e2..d28166a3f 100644 --- a/bookwyrm/views/feed.py +++ b/bookwyrm/views/feed.py @@ -23,10 +23,10 @@ class Feed(View): def get(self, request, tab): """user's homepage with activity feed""" - if not tab in STREAMS: - tab = "home" + tab = [s for s in STREAMS if s["key"] == tab] + tab = tab[0] or STREAMS[0] - activities = activitystreams.streams[tab].get_activity_stream(request.user) + activities = activitystreams.streams[tab["key"]].get_activity_stream(request.user) paginated = Paginator(activities, PAGE_LENGTH) suggestions = suggested_users.get_suggestions(request.user) @@ -38,8 +38,9 @@ class Feed(View): "activities": paginated.get_page(request.GET.get("page")), "suggested_users": suggestions, "tab": tab, + "streams": STREAMS, "goal_form": forms.GoalForm(), - "path": "/%s" % tab, + "path": "/%s" % tab["key"], }, } return TemplateResponse(request, "feed/feed.html", data) From 9d19092205bb2b0db2e120455e11edb563db9d80 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 4 Aug 2021 18:22:06 -0700 Subject: [PATCH 04/10] Updates tests --- bookwyrm/activitystreams.py | 18 ++++++++++++------ .../tests/management/test_populate_streams.py | 2 +- bookwyrm/tests/views/test_feed.py | 2 +- bookwyrm/views/feed.py | 6 ++++-- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/bookwyrm/activitystreams.py b/bookwyrm/activitystreams.py index 2f1555384..0a9669719 100644 --- a/bookwyrm/activitystreams.py +++ b/bookwyrm/activitystreams.py @@ -7,6 +7,7 @@ from bookwyrm.redis_store import RedisStore, r from bookwyrm.settings import STREAMS from bookwyrm.views.helpers import privacy_filter + class ActivityStream(RedisStore): """a category of activity stream (like home, local, federated)""" @@ -219,12 +220,17 @@ class BooksStream(ActivityStream): available_streams = [s["key"] for s in STREAMS] -streams = {k:v for (k, v) in { - "home": HomeStream(), - "local": LocalStream(), - "federated": FederatedStream(), - "books": BooksStream(), -}.items() if k in available_streams} +streams = { + k: v + for (k, v) in { + "home": HomeStream(), + "local": LocalStream(), + "federated": FederatedStream(), + "books": BooksStream(), + }.items() + if k in available_streams +} + @receiver(signals.post_save) # pylint: disable=unused-argument diff --git a/bookwyrm/tests/management/test_populate_streams.py b/bookwyrm/tests/management/test_populate_streams.py index ee7a96d7c..c080e3fe5 100644 --- a/bookwyrm/tests/management/test_populate_streams.py +++ b/bookwyrm/tests/management/test_populate_streams.py @@ -46,4 +46,4 @@ class Activitystreams(TestCase): "bookwyrm.activitystreams.ActivityStream.populate_store" ) as redis_mock: populate_streams() - self.assertEqual(redis_mock.call_count, 6) # 2 users x 3 streams + self.assertEqual(redis_mock.call_count, 4) # 2 users x 2 streams diff --git a/bookwyrm/tests/views/test_feed.py b/bookwyrm/tests/views/test_feed.py index 8a38b808f..666c3e02b 100644 --- a/bookwyrm/tests/views/test_feed.py +++ b/bookwyrm/tests/views/test_feed.py @@ -45,7 +45,7 @@ class FeedViews(TestCase): view = views.Feed.as_view() request = self.factory.get("") request.user = self.local_user - result = view(request, "local") + result = view(request, "home") self.assertIsInstance(result, TemplateResponse) result.render() self.assertEqual(result.status_code, 200) diff --git a/bookwyrm/views/feed.py b/bookwyrm/views/feed.py index d28166a3f..7a46ca57d 100644 --- a/bookwyrm/views/feed.py +++ b/bookwyrm/views/feed.py @@ -24,9 +24,11 @@ class Feed(View): def get(self, request, tab): """user's homepage with activity feed""" tab = [s for s in STREAMS if s["key"] == tab] - tab = tab[0] or STREAMS[0] + tab = tab[0] if tab else STREAMS[0] - activities = activitystreams.streams[tab["key"]].get_activity_stream(request.user) + activities = activitystreams.streams[tab["key"]].get_activity_stream( + request.user + ) paginated = Paginator(activities, PAGE_LENGTH) suggestions = suggested_users.get_suggestions(request.user) From 3b46ce85011b049f5ad8117ba98820b6250f5a31 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 4 Aug 2021 18:57:05 -0700 Subject: [PATCH 05/10] Locale updates --- locale/de_DE/LC_MESSAGES/django.mo | Bin 24293 -> 24142 bytes locale/de_DE/LC_MESSAGES/django.po | 103 ++++++++++++++------------- locale/en_US/LC_MESSAGES/django.po | 90 ++++++++++++----------- locale/es/LC_MESSAGES/django.mo | Bin 43107 -> 42719 bytes locale/es/LC_MESSAGES/django.po | 101 ++++++++++++++------------ locale/fr_FR/LC_MESSAGES/django.mo | Bin 45939 -> 45471 bytes locale/fr_FR/LC_MESSAGES/django.po | 101 ++++++++++++++------------ locale/zh_Hans/LC_MESSAGES/django.mo | Bin 42356 -> 41974 bytes locale/zh_Hans/LC_MESSAGES/django.po | 100 ++++++++++++++------------ locale/zh_Hant/LC_MESSAGES/django.mo | Bin 41166 -> 40752 bytes locale/zh_Hant/LC_MESSAGES/django.po | 100 ++++++++++++++------------ 11 files changed, 321 insertions(+), 274 deletions(-) diff --git a/locale/de_DE/LC_MESSAGES/django.mo b/locale/de_DE/LC_MESSAGES/django.mo index fb15184108c67c333088d8b27062a76939709a84..543d5355901e12d226dbe40f6d72ce8e7cf616f3 100644 GIT binary patch delta 7260 zcmaF5m+{;l#`=3gEK?a67#IQ=85m?37#QYoF)$niu|+|m3=9e~3=G8#3=E1g3=FLd z3=C6c7#R2%7#O5w85pz}7#Or<85lrHLuDBlq!}0(vSk?<3>X*~+GQCS_!$@&cE~a? zh%+!SoRDQ;kY!+Ccp%Hb5W>K~@K2V3L5+c-o*`HcB2gvBz@Wsyz%WCOfkBahfnm2C z#NfMf3=EPC3=E&;7#K_#7#MivAqG0hGce>cFfc?x=~MCy40#L;3|0yZ48aTx3@a5F z7#tWF82&0SFqkqhFxV+FFlaI`Fq9}VFbFd+Fw9eAU|?gYXJFW*$iTqCz`(Fmk%57k zfq~(WA_D^_0|Ub`MTieBK=}_8AwGWv*2uu{Q;~sz2NXz33=F&=hbciEF0I7CV8p<{ zV5`Kyz|O$HP@n{|h=HL(iGe|gfq|i3iGhKIfq`L?5(5K&Jp%*7bR`A`ZUzR1gWHuM4()@A&r@b#U}a!nSPhlm zs0?w)4k&#<8Dh=}Wd??Nkb$?9Awly-8R9}Q6^Ox_DiEI;s6ZTOrvkCqO9f&;I8;0n zDqgC>z#z}Sz|f=uv2YPoeihW5ZBTQMs4y^yFfcHjR$-_I2jK&#g10J=xc#ldz#zfE zz#yy&NmM$j5Q{xjAwCUNWni#iU|>j9g;+EXD!xn=;^1vi{t;D(!>_19qVxfjeg&n! zsMbRa{-?^oz{SA8z^w-1i>W~@QdWbA8>=xeNP!ZO8pPsAHAq^Rqy}-oLMXiwN^gY9 z?^J_Wd_s+ZL4kpR;SyB*vl=ALG1aR>;+R_Z1^b%=$*P<|4W zp99rb4b?YM9b)hdbx0~-2o>L|4)Mqybw~&uhllc4fTG$0|iO9Px+>KP7cFfgby zFfcrUYUI&`SR|#%zz_{8V4(aqO^AWhG$9UK3gvIqgrxQZnh+l!(}X0hTbhuNe6I3LcZAFtMe zbn3n_pufOgB$|`!zV2U23-aQ20?8G20>8%x7UWmaUe*5fq@}f8)8we zHpF2~+7ONNpz8K&Lo7V54e|j4!&PmF4IPSk<;AYTU(q>Va|pqvUdV2%#N;)Oa8i`MBtLTP| zgHBzDf&ID=pG?<ATBk4l-;cc5RFTr3O7ULcN;()cG>_E z0#^(m4!I2#e`)~9|L>ssSPUWN@EAg(NXihRU)_*_A(DZC!2lv(&(LKEamfrr1_m)u zEocY{>V1ZgY;wwwfx(M`f#C;~b~b|45q(CGT(Zmv;^W;$kOs^-BL)U11_p-LPa6l>d25AsUoSAwD%S zg;-E)3USaxQ-}}dLFtvIkf7dT3h~h?Q;5YEOc@w_85kIDm@+W(~NZv#K53y0nuP)0cpEA zL+Ke7kfzpK3rMZ#XbFjmDocpNdMzRPCtE@sIL8ta^h==Pt1TJo!A-9%P>H>kknD2A zl7S(Cfq~&3RHMBW#2|Mo1_n1q28IAD28ISu%gLI7p_74uLBa+SB8zMwseFeGB>O$F zfuxCVHVh1Ap!S3`Iy5F636OxkZk5>2Qj$B z4pM}+*)cF!GcYjBw}Zs#Z94{r8U_Z2-*yZPA z80;As7-Z`m85lGe7#Lz5A#vX32=VDGM@XD6c7)`Hbx`?Tju4B_IYJ!r+!5mQpN^13 z%I^g6p{x@mSLr!H8XmSz3=Fmm3=DBj5cB3ZLF}nt;RI>fY;=Oe(HSR*1y`IP2EKKI z1l4aRNQo!x3~{K0Go(?f;|$4$dz~TbFF8ZXg$K?MhrDuzq@CZ+5D#& zt1BcbnB5o{EJ1aM8^k<+H;6+c+`v9%$Z>;&NTnOZLtSnR41A#cKi3W7lQmEUd!P!= zLirEeAQpUdgM<*XJH#LfcSz4k)186Aih+T_-5u(1cZdTfxBAQr@WKpd9l0ZBU*9uRXH zp!z3!KzzR31LBY^9+0%OAFBSk2ekgb?*WOsmr#osJRxz!?g?>-uqVVIbx(-TO*|oK z#MKkxfM}??Tu+Eajh+yTdZ6?YPl(U=K+U}f<=^$Jhgk3lD#7Lj>D3B(L7GmsUJxJU zctH%P_hMj3V_;yI;svqbw-=s7F$ZsmK6fY`;|&S9LMUBT?+tNr zvp2*?ecq6eSmF%{`rY0TAK!o)@X{L+m;byWiIKwxqF%`d5;c}SkdSltfuyNmABaPe zeIV+yd?1Or1*)%pt`DSvu*HXgL7#zv;SN**k1xa^RbPlt4SgXRJ$)f1Vv;W;dv^Ll z65Tdmh|iDuLZa%1FCrvLzF+1K35k>b5Q`uALxTFXKg8j`q2kN|5D)MK zKtf0?01}m|0g$LN3t(VS0Ofy|0Eh!pp&AMUAO=+jKuWIW07w+92!O=(fdG)p85piZ z#qR|`9P$mS|9=1^L^%T?7V`%}Dkr%>h<>|3NSzQG$iPq!8lx$LO0)$+TsAilV!`S_ z28JRA28K<65C^ITLF5gCAaQLErGtVXK1+qlmjyx6NJ|hTBv%JPLTpD6B$r$af`sJL zAclHytCS-c;scXlhy}J#+B+DcFftet_cg(gAngl=7&Ido;?Olv{hNa!4&4(B3BeP= z5FcNFia&?y`wTUYJ)|C-3K=9rAPo+=5QxF`A&|5%IRsKWu7HXk4q;%h0}aK5FfjNq zFffRPLhAA4P)Ook912Mb2SXt~z6ce670STi&A`CG5e9KkNEpPS+4W(NxGE2W_@p)r z;=`6ONOtK9gE(kr7$juYLixL)2AvOs#PKsI|7#c|vGRmNJYXFTF()7#qAofd(g4W{ zXJAMH4Myz>hiH(Gfb@X;A|NfFq6mmjCPpwY1Tio$ER2A-{7VERPPro?v_vGtVXBc3 z3ymWoLGKX>@mN4414AeS14CFO14AGK1H+m~28J-u_+KQr%~;P68U-14>x+UII4O#O zAqv!_ih?No1?2}uGceeI42XtU_%a$2Qs1K?O)JJ2NE0q0hJhiTfq`L93}pOICKlqb z*jPvi7sW!-T4gNAq4f+5O;CX@C_OnAV(=WOhGnskkXakcz>vYfz;H1Z5~Nmf5QALf z7#J8CAWd!12qhkbu5Uz71VTRU|^^NjsG?>FfhDlfVA5|lAwX;s|*YbyFeT$ z1~rwTOfaoPDfFf%eRtN`nT z5TH&Eh_x3q{tFs<1#v)~%$W=f44I&TMFs|j$qWn(g`n{o1_p+o3=9k^jF7fHNUbAi zV2Xi(fsv7c;U%b@4-#a6bTUBAdC-WsDb&Y(pmsi}tN?XrK%Ec<28PQF3=A@i3=FNH z__u^AY-341jLK|-5A1Qag<%_ z!vO{chK&pi4Bb%m{)`L^{EQ3?%8U#Qw;321$`~Lc<>{dOZ_CKQpvTC-aDst>K?>@S z<4}#DAy@-O28QztkgU_g0O{=p#JU|P~iZIBT(Lk8mt6$2#5q?>kb!}r7b*rCJpfHn$TKo9%z}zthte<#G((XD<1jEVECx+&fPC!%3RDILhU&=| zrN!$(W5ys=MxgA;z`!sK#9@GxCpJ*4K}~lNMo4k|m4Si56{-d_iJ=Hp0~$AUXJBA> z#=yX!02R|^gw(pAK~j(wP$>;6I6;#oAif|YD0PFTYM>gHF+gTa5*Z*J6_6qr_JlD& zxr%{-;SZF5mVtpml97SIijjfgDFXw;Lz`)?i$iQ#|)RAFiU|0y6YhqwvFlS(3 z*vG)Yz|P3Pkj%iqkj=orpvlO?85kJ6p$-D6*$pBX7#K7d85ks>;-Co)P{a5?0|SF9Bcu`o zwIe}F)fgEV+CdCZf@fp^k43x&d6bcXL5Puoq23s3$Rto1z{tR`1T;GW8ir$lOiHa{ zfYg$Y86X210*sIbj}BBHXuimik%3_gXfzd6<}flaa5FM66hJLyWn^HmXJlYF&A`Ag z7b<4L2${|Cht!`83?)#B3k(blk3eGppuuOT7-)hD#QX*#p!f>|149**?aIi&a16?3 sV}#Vu4>!lkcrZ`CV=l1ymV6D@<`^w5(aHZEG&gUx_vP8l;d56A01RdKbN~PV delta 7413 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\n" "Language-Team: English \n" @@ -101,27 +101,49 @@ msgstr "Username" msgid "A user with that username already exists." msgstr "Dieser Benutzename ist bereits vergeben." -#: bookwyrm/settings.py:166 +#: bookwyrm/settings.py:123 +msgid "Home Timeline" +msgstr "" + +#: bookwyrm/settings.py:123 +msgid "Home" +msgstr "" + +#: bookwyrm/settings.py:124 +#, fuzzy +#| msgid "Title" +msgid "Books Timeline" +msgstr "Titel" + +#: bookwyrm/settings.py:124 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/templates/search/layout.html:42 +#: bookwyrm/templates/user/layout.html:81 +#, fuzzy +#| msgid "Book" +msgid "Books" +msgstr "Buch" + +#: bookwyrm/settings.py:170 msgid "English" msgstr "Englisch" -#: bookwyrm/settings.py:167 +#: bookwyrm/settings.py:171 msgid "German" msgstr "Deutsch" -#: bookwyrm/settings.py:168 +#: bookwyrm/settings.py:172 msgid "Spanish" msgstr "Spanisch" -#: bookwyrm/settings.py:169 +#: bookwyrm/settings.py:173 msgid "French" msgstr "Französisch" -#: bookwyrm/settings.py:170 +#: bookwyrm/settings.py:174 msgid "Simplified Chinese" msgstr "Vereinfachtes Chinesisch" -#: bookwyrm/settings.py:171 +#: bookwyrm/settings.py:175 msgid "Traditional Chinese" msgstr "" @@ -972,39 +994,12 @@ msgstr "Alle Nachrichten" msgid "You have no messages right now." msgstr "Du hast momentan keine Nachrichten." -#: bookwyrm/templates/feed/feed.html:8 -msgid "Home Timeline" -msgstr "" - -#: bookwyrm/templates/feed/feed.html:10 -msgid "Local Timeline" -msgstr "" - -#: bookwyrm/templates/feed/feed.html:12 -#, fuzzy -#| msgid "Federated Servers" -msgid "Federated Timeline" -msgstr "Föderierende Server" - -#: bookwyrm/templates/feed/feed.html:18 -msgid "Home" -msgstr "" - -#: bookwyrm/templates/feed/feed.html:21 -msgid "Local" -msgstr "Lokal" - -#: bookwyrm/templates/feed/feed.html:24 -#: bookwyrm/templates/settings/edit_server.html:40 -msgid "Federated" -msgstr "Föderiert" - -#: bookwyrm/templates/feed/feed.html:32 +#: bookwyrm/templates/feed/feed.html:22 #, python-format -msgid "load 0 unread status(es)" +msgid "load 0 unread status(es)" msgstr "" -#: bookwyrm/templates/feed/feed.html:48 +#: bookwyrm/templates/feed/feed.html:38 msgid "There aren't any activities right now! Try following a user to get started" msgstr "Hier sind noch keine Aktivitäten! Folge anderen, um loszulegen" @@ -2020,14 +2015,6 @@ msgstr "Suche nach Buch oder Benutzer*in" msgid "Search type" msgstr "Suche" -#: bookwyrm/templates/search/layout.html:21 -#: bookwyrm/templates/search/layout.html:42 -#: bookwyrm/templates/user/layout.html:81 -#, fuzzy -#| msgid "Book" -msgid "Books" -msgstr "Buch" - #: bookwyrm/templates/search/layout.html:23 #: bookwyrm/templates/search/layout.html:46 #: bookwyrm/templates/settings/admin_layout.html:26 @@ -2242,6 +2229,10 @@ msgstr "Instanzname" msgid "Status:" msgstr "Importstatus" +#: bookwyrm/templates/settings/edit_server.html:40 +msgid "Federated" +msgstr "Föderiert" + #: bookwyrm/templates/settings/edit_server.html:41 #: bookwyrm/templates/settings/federated_server.html:10 #, fuzzy @@ -2573,15 +2564,23 @@ msgstr "Registrierungen geschlossen text" msgid "Posted by %(username)s" msgstr "Direktnachrichten mit %(username)s" +#: bookwyrm/templates/snippets/authors.html:22 +#, python-format +msgid "and %(remainder_count_display)s other" +msgid_plural "and %(remainder_count_display)s others" +msgstr[0] "" +msgstr[1] "" + #: bookwyrm/templates/snippets/book_cover.html:32 #, fuzzy #| msgid "Add cover" msgid "No cover" msgstr "Cover hinzufügen" -#: bookwyrm/templates/snippets/book_titleby.html:4 -#, python-format -msgid "%(title)s by " +#: bookwyrm/templates/snippets/book_titleby.html:6 +#, fuzzy, python-format +#| msgid "%(title)s by " +msgid "%(title)s by" msgstr "%(title)s von " #: bookwyrm/templates/snippets/boost_button.html:20 @@ -3313,6 +3312,14 @@ msgstr "Dieser Benutzename ist bereits vergeben." msgid "A password reset link sent to %s" msgstr "" +#, fuzzy +#~| msgid "Federated Servers" +#~ msgid "Federated Timeline" +#~ msgstr "Föderierende Server" + +#~ msgid "Local" +#~ msgstr "Lokal" + #, fuzzy #~| msgid "Direct Messages with %(username)s" #~ msgid "Remove %(name)s" diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index ce06013f2..153d8b9a1 100644 --- a/locale/en_US/LC_MESSAGES/django.po +++ b/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-04 20:40+0000\n" +"POT-Creation-Date: 2021-08-05 01:33+0000\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -91,27 +91,45 @@ msgstr "" msgid "A user with that username already exists." msgstr "" -#: bookwyrm/settings.py:166 -msgid "English" +#: bookwyrm/settings.py:123 +msgid "Home Timeline" msgstr "" -#: bookwyrm/settings.py:167 -msgid "German" +#: bookwyrm/settings.py:123 +msgid "Home" msgstr "" -#: bookwyrm/settings.py:168 -msgid "Spanish" +#: bookwyrm/settings.py:124 +msgid "Books Timeline" msgstr "" -#: bookwyrm/settings.py:169 -msgid "French" +#: bookwyrm/settings.py:124 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/templates/search/layout.html:42 +#: bookwyrm/templates/user/layout.html:81 +msgid "Books" msgstr "" #: bookwyrm/settings.py:170 -msgid "Simplified Chinese" +msgid "English" msgstr "" #: bookwyrm/settings.py:171 +msgid "German" +msgstr "" + +#: bookwyrm/settings.py:172 +msgid "Spanish" +msgstr "" + +#: bookwyrm/settings.py:173 +msgid "French" +msgstr "" + +#: bookwyrm/settings.py:174 +msgid "Simplified Chinese" +msgstr "" + +#: bookwyrm/settings.py:175 msgid "Traditional Chinese" msgstr "" @@ -896,37 +914,12 @@ msgstr "" msgid "You have no messages right now." msgstr "" -#: bookwyrm/templates/feed/feed.html:8 -msgid "Home Timeline" -msgstr "" - -#: bookwyrm/templates/feed/feed.html:10 -msgid "Local Timeline" -msgstr "" - -#: bookwyrm/templates/feed/feed.html:12 -msgid "Federated Timeline" -msgstr "" - -#: bookwyrm/templates/feed/feed.html:18 -msgid "Home" -msgstr "" - -#: bookwyrm/templates/feed/feed.html:21 -msgid "Local" -msgstr "" - -#: bookwyrm/templates/feed/feed.html:24 -#: bookwyrm/templates/settings/edit_server.html:40 -msgid "Federated" -msgstr "" - -#: bookwyrm/templates/feed/feed.html:32 +#: bookwyrm/templates/feed/feed.html:22 #, python-format -msgid "load 0 unread status(es)" +msgid "load 0 unread status(es)" msgstr "" -#: bookwyrm/templates/feed/feed.html:48 +#: bookwyrm/templates/feed/feed.html:38 msgid "There aren't any activities right now! Try following a user to get started" msgstr "" @@ -1864,12 +1857,6 @@ msgstr "" msgid "Search type" msgstr "" -#: bookwyrm/templates/search/layout.html:21 -#: bookwyrm/templates/search/layout.html:42 -#: bookwyrm/templates/user/layout.html:81 -msgid "Books" -msgstr "" - #: bookwyrm/templates/search/layout.html:23 #: bookwyrm/templates/search/layout.html:46 #: bookwyrm/templates/settings/admin_layout.html:26 @@ -2045,6 +2032,10 @@ msgstr "" msgid "Status:" msgstr "" +#: bookwyrm/templates/settings/edit_server.html:40 +msgid "Federated" +msgstr "" + #: bookwyrm/templates/settings/edit_server.html:41 #: bookwyrm/templates/settings/federated_server.html:10 msgid "Blocked" @@ -2333,13 +2324,20 @@ msgstr "" msgid "Posted by %(username)s" msgstr "" +#: bookwyrm/templates/snippets/authors.html:22 +#, python-format +msgid "and %(remainder_count_display)s other" +msgid_plural "and %(remainder_count_display)s others" +msgstr[0] "" +msgstr[1] "" + #: bookwyrm/templates/snippets/book_cover.html:32 msgid "No cover" msgstr "" -#: bookwyrm/templates/snippets/book_titleby.html:4 +#: bookwyrm/templates/snippets/book_titleby.html:6 #, python-format -msgid "%(title)s by " +msgid "%(title)s by" msgstr "" #: bookwyrm/templates/snippets/boost_button.html:20 diff --git a/locale/es/LC_MESSAGES/django.mo b/locale/es/LC_MESSAGES/django.mo index 69c734d46688d85bc60fa4b8f060ab0c9fbd8109..23869cf45428ccb9c4d7e0d8a06dc96b209e7775 100644 GIT binary patch delta 13188 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 diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po index fd76f60d4..5bae4d7e2 100644 --- a/locale/es/LC_MESSAGES/django.po +++ b/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-04 20:40+0000\n" +"POT-Creation-Date: 2021-08-05 01:33+0000\n" "PO-Revision-Date: 2021-03-19 11:49+0800\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -91,27 +91,47 @@ msgstr "nombre de usuario" msgid "A user with that username already exists." msgstr "Ya existe un usuario con ese nombre." -#: bookwyrm/settings.py:166 +#: bookwyrm/settings.py:123 +msgid "Home Timeline" +msgstr "Línea temporal de hogar" + +#: bookwyrm/settings.py:123 +msgid "Home" +msgstr "Hogar" + +#: bookwyrm/settings.py:124 +#, fuzzy +#| msgid "Book Title" +msgid "Books Timeline" +msgstr "Título" + +#: bookwyrm/settings.py:124 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/templates/search/layout.html:42 +#: bookwyrm/templates/user/layout.html:81 +msgid "Books" +msgstr "Libros" + +#: bookwyrm/settings.py:170 msgid "English" msgstr "Inglés" -#: bookwyrm/settings.py:167 +#: bookwyrm/settings.py:171 msgid "German" msgstr "Aléman" -#: bookwyrm/settings.py:168 +#: bookwyrm/settings.py:172 msgid "Spanish" msgstr "Español" -#: bookwyrm/settings.py:169 +#: bookwyrm/settings.py:173 msgid "French" msgstr "Francés" -#: bookwyrm/settings.py:170 +#: bookwyrm/settings.py:174 msgid "Simplified Chinese" msgstr "Chino simplificado" -#: bookwyrm/settings.py:171 +#: bookwyrm/settings.py:175 #, fuzzy #| msgid "Additional info:" msgid "Traditional Chinese" @@ -904,37 +924,13 @@ msgstr "Todos los mensajes" msgid "You have no messages right now." msgstr "No tienes ningún mensaje en este momento." -#: bookwyrm/templates/feed/feed.html:8 -msgid "Home Timeline" -msgstr "Línea temporal de hogar" - -#: bookwyrm/templates/feed/feed.html:10 -msgid "Local Timeline" -msgstr "Línea temporal local" - -#: bookwyrm/templates/feed/feed.html:12 -msgid "Federated Timeline" -msgstr "Línea temporal federalizado" - -#: bookwyrm/templates/feed/feed.html:18 -msgid "Home" -msgstr "Hogar" - -#: bookwyrm/templates/feed/feed.html:21 -msgid "Local" -msgstr "Local" - -#: bookwyrm/templates/feed/feed.html:24 -#: bookwyrm/templates/settings/edit_server.html:40 -msgid "Federated" -msgstr "Federalizado" - -#: bookwyrm/templates/feed/feed.html:32 -#, python-format -msgid "load 0 unread status(es)" +#: bookwyrm/templates/feed/feed.html:22 +#, fuzzy, python-format +#| msgid "load 0 unread status(es)" +msgid "load 0 unread status(es)" msgstr "cargar 0 status(es) no leídos" -#: bookwyrm/templates/feed/feed.html:48 +#: bookwyrm/templates/feed/feed.html:38 msgid "There aren't any activities right now! Try following a user to get started" msgstr "¡No hay actividad ahora mismo! Sigue a otro usuario para empezar" @@ -1885,12 +1881,6 @@ msgstr "Búsqueda" msgid "Search type" msgstr "Tipo de búsqueda" -#: bookwyrm/templates/search/layout.html:21 -#: bookwyrm/templates/search/layout.html:42 -#: bookwyrm/templates/user/layout.html:81 -msgid "Books" -msgstr "Libros" - #: bookwyrm/templates/search/layout.html:23 #: bookwyrm/templates/search/layout.html:46 #: bookwyrm/templates/settings/admin_layout.html:26 @@ -2072,6 +2062,10 @@ msgstr "Instancia:" msgid "Status:" msgstr "Status:" +#: bookwyrm/templates/settings/edit_server.html:40 +msgid "Federated" +msgstr "Federalizado" + #: bookwyrm/templates/settings/edit_server.html:41 #: bookwyrm/templates/settings/federated_server.html:10 msgid "Blocked" @@ -2366,13 +2360,21 @@ msgstr "Texto de registración cerrada:" msgid "Posted by %(username)s" msgstr "Publicado por %(username)s" +#: bookwyrm/templates/snippets/authors.html:22 +#, python-format +msgid "and %(remainder_count_display)s other" +msgid_plural "and %(remainder_count_display)s others" +msgstr[0] "" +msgstr[1] "" + #: bookwyrm/templates/snippets/book_cover.html:32 msgid "No cover" msgstr "Sin portada" -#: bookwyrm/templates/snippets/book_titleby.html:4 -#, python-format -msgid "%(title)s by " +#: bookwyrm/templates/snippets/book_titleby.html:6 +#, fuzzy, python-format +#| msgid "%(title)s by " +msgid "%(title)s by" msgstr "%(title)s por " #: bookwyrm/templates/snippets/boost_button.html:20 @@ -3047,6 +3049,15 @@ msgstr "No se pudo encontrar un usuario con esa dirección de correo electrónic msgid "A password reset link sent to %s" msgstr "Un enlace para reestablecer tu contraseña se enviará a %s" +#~ msgid "Local Timeline" +#~ msgstr "Línea temporal local" + +#~ msgid "Federated Timeline" +#~ msgstr "Línea temporal federalizado" + +#~ msgid "Local" +#~ msgstr "Local" + #~ msgid "Remove %(name)s" #~ msgstr "Eliminar %(name)s" diff --git a/locale/fr_FR/LC_MESSAGES/django.mo b/locale/fr_FR/LC_MESSAGES/django.mo index 3d622ac662185de82e67b3026ad6d339fb8dab0a..f8ade2a391ba574da54afa6f45e1bf1ad55f9372 100644 GIT binary patch delta 13530 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\n" "Language-Team: Mouse Reeve \n" @@ -91,27 +91,47 @@ msgstr "nom du compte :" msgid "A user with that username already exists." msgstr "Ce nom est déjà associé à un compte." -#: bookwyrm/settings.py:166 +#: bookwyrm/settings.py:123 +msgid "Home Timeline" +msgstr "Mon fil d’actualité" + +#: bookwyrm/settings.py:123 +msgid "Home" +msgstr "Accueil" + +#: bookwyrm/settings.py:124 +#, fuzzy +#| msgid "Book Title" +msgid "Books Timeline" +msgstr "Titre du livre" + +#: bookwyrm/settings.py:124 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/templates/search/layout.html:42 +#: bookwyrm/templates/user/layout.html:81 +msgid "Books" +msgstr "Livres" + +#: bookwyrm/settings.py:170 msgid "English" msgstr "English" -#: bookwyrm/settings.py:167 +#: bookwyrm/settings.py:171 msgid "German" msgstr "Deutsch" -#: bookwyrm/settings.py:168 +#: bookwyrm/settings.py:172 msgid "Spanish" msgstr "Español" -#: bookwyrm/settings.py:169 +#: bookwyrm/settings.py:173 msgid "French" msgstr "Français" -#: bookwyrm/settings.py:170 +#: bookwyrm/settings.py:174 msgid "Simplified Chinese" msgstr "简化字" -#: bookwyrm/settings.py:171 +#: bookwyrm/settings.py:175 #, fuzzy #| msgid "Additional info:" msgid "Traditional Chinese" @@ -900,37 +920,13 @@ msgstr "Tous les messages" msgid "You have no messages right now." msgstr "Vous n’avez aucun message pour l’instant." -#: bookwyrm/templates/feed/feed.html:8 -msgid "Home Timeline" -msgstr "Mon fil d’actualité" - -#: bookwyrm/templates/feed/feed.html:10 -msgid "Local Timeline" -msgstr "Fil d’actualité local" - -#: bookwyrm/templates/feed/feed.html:12 -msgid "Federated Timeline" -msgstr "Fil d’actualité des instances fédérées" - -#: bookwyrm/templates/feed/feed.html:18 -msgid "Home" -msgstr "Accueil" - -#: bookwyrm/templates/feed/feed.html:21 -msgid "Local" -msgstr "Local" - -#: bookwyrm/templates/feed/feed.html:24 -#: bookwyrm/templates/settings/edit_server.html:40 -msgid "Federated" -msgstr "Fédéré" - -#: bookwyrm/templates/feed/feed.html:32 -#, python-format -msgid "load 0 unread status(es)" +#: bookwyrm/templates/feed/feed.html:22 +#, fuzzy, python-format +#| msgid "load 0 unread status(es)" +msgid "load 0 unread status(es)" msgstr "charger le(s) 0 statut(s) non lu(s)" -#: bookwyrm/templates/feed/feed.html:48 +#: bookwyrm/templates/feed/feed.html:38 msgid "There aren't any activities right now! Try following a user to get started" msgstr "Aucune activité pour l’instant ! Abonnez‑vous à quelqu’un pour commencer" @@ -1879,12 +1875,6 @@ msgstr "Requête" msgid "Search type" msgstr "Type de recherche" -#: bookwyrm/templates/search/layout.html:21 -#: bookwyrm/templates/search/layout.html:42 -#: bookwyrm/templates/user/layout.html:81 -msgid "Books" -msgstr "Livres" - #: bookwyrm/templates/search/layout.html:23 #: bookwyrm/templates/search/layout.html:46 #: bookwyrm/templates/settings/admin_layout.html:26 @@ -2060,6 +2050,10 @@ msgstr "Instance :" msgid "Status:" msgstr "Statut :" +#: bookwyrm/templates/settings/edit_server.html:40 +msgid "Federated" +msgstr "Fédéré" + #: bookwyrm/templates/settings/edit_server.html:41 #: bookwyrm/templates/settings/federated_server.html:10 msgid "Blocked" @@ -2348,13 +2342,21 @@ msgstr "Texte affiché lorsque les inscriptions sont closes :" msgid "Posted by %(username)s" msgstr "Publiée par %(username)s" +#: bookwyrm/templates/snippets/authors.html:22 +#, python-format +msgid "and %(remainder_count_display)s other" +msgid_plural "and %(remainder_count_display)s others" +msgstr[0] "" +msgstr[1] "" + #: bookwyrm/templates/snippets/book_cover.html:32 msgid "No cover" msgstr "Pas de couverture" -#: bookwyrm/templates/snippets/book_titleby.html:4 -#, python-format -msgid "%(title)s by " +#: bookwyrm/templates/snippets/book_titleby.html:6 +#, fuzzy, python-format +#| msgid "%(title)s by " +msgid "%(title)s by" msgstr "%(title)s par " #: bookwyrm/templates/snippets/boost_button.html:20 @@ -3026,6 +3028,15 @@ msgstr "Aucun compte avec cette adresse email n’a été trouvé." msgid "A password reset link sent to %s" msgstr "Un lien de réinitialisation a été envoyé à %s." +#~ msgid "Local Timeline" +#~ msgstr "Fil d’actualité local" + +#~ msgid "Federated Timeline" +#~ msgstr "Fil d’actualité des instances fédérées" + +#~ msgid "Local" +#~ msgstr "Local" + #, fuzzy #~| msgid "BookWyrm users" #~ msgid "BookWyrm\\" diff --git a/locale/zh_Hans/LC_MESSAGES/django.mo b/locale/zh_Hans/LC_MESSAGES/django.mo index 3450c353ac4b48e9636805a6a77931a74b68dd92..6645033399a2ca839b8ebe71c829b209d23bfd31 100644 GIT binary patch delta 13776 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 delta 14090 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\n" "Language-Team: Mouse Reeve \n" @@ -91,27 +91,47 @@ msgstr "用户名" msgid "A user with that username already exists." msgstr "已经存在使用该用户名的用户。" -#: bookwyrm/settings.py:166 +#: bookwyrm/settings.py:123 +msgid "Home Timeline" +msgstr "主页时间线" + +#: bookwyrm/settings.py:123 +msgid "Home" +msgstr "主页" + +#: bookwyrm/settings.py:124 +#, fuzzy +#| msgid "Book Title" +msgid "Books Timeline" +msgstr "书名" + +#: bookwyrm/settings.py:124 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/templates/search/layout.html:42 +#: bookwyrm/templates/user/layout.html:81 +msgid "Books" +msgstr "书目" + +#: bookwyrm/settings.py:170 msgid "English" msgstr "English(英语)" -#: bookwyrm/settings.py:167 +#: bookwyrm/settings.py:171 msgid "German" msgstr "Deutsch(德语)" -#: bookwyrm/settings.py:168 +#: bookwyrm/settings.py:172 msgid "Spanish" msgstr "Español(西班牙语)" -#: bookwyrm/settings.py:169 +#: bookwyrm/settings.py:173 msgid "French" msgstr "Français(法语)" -#: bookwyrm/settings.py:170 +#: bookwyrm/settings.py:174 msgid "Simplified Chinese" msgstr "简体中文" -#: bookwyrm/settings.py:171 +#: bookwyrm/settings.py:175 msgid "Traditional Chinese" msgstr "繁體中文(繁体中文)" @@ -895,37 +915,13 @@ msgstr "所有消息" msgid "You have no messages right now." msgstr "你现在没有消息。" -#: bookwyrm/templates/feed/feed.html:8 -msgid "Home Timeline" -msgstr "主页时间线" - -#: bookwyrm/templates/feed/feed.html:10 -msgid "Local Timeline" -msgstr "本地时间线" - -#: bookwyrm/templates/feed/feed.html:12 -msgid "Federated Timeline" -msgstr "跨站时间线" - -#: bookwyrm/templates/feed/feed.html:18 -msgid "Home" -msgstr "主页" - -#: bookwyrm/templates/feed/feed.html:21 -msgid "Local" -msgstr "本站" - -#: bookwyrm/templates/feed/feed.html:24 -#: bookwyrm/templates/settings/edit_server.html:40 -msgid "Federated" -msgstr "跨站" - -#: bookwyrm/templates/feed/feed.html:32 -#, python-format -msgid "load 0 unread status(es)" +#: bookwyrm/templates/feed/feed.html:22 +#, fuzzy, python-format +#| msgid "load 0 unread status(es)" +msgid "load 0 unread status(es)" msgstr "加载 0 条未读状态" -#: bookwyrm/templates/feed/feed.html:48 +#: bookwyrm/templates/feed/feed.html:38 msgid "There aren't any activities right now! Try following a user to get started" msgstr "现在还没有任何活动!尝试从关注一个用户开始吧" @@ -1865,12 +1861,6 @@ msgstr "搜索请求" msgid "Search type" msgstr "搜索类型" -#: bookwyrm/templates/search/layout.html:21 -#: bookwyrm/templates/search/layout.html:42 -#: bookwyrm/templates/user/layout.html:81 -msgid "Books" -msgstr "书目" - #: bookwyrm/templates/search/layout.html:23 #: bookwyrm/templates/search/layout.html:46 #: bookwyrm/templates/settings/admin_layout.html:26 @@ -2046,6 +2036,10 @@ msgstr "实例:" msgid "Status:" msgstr "状态:" +#: bookwyrm/templates/settings/edit_server.html:40 +msgid "Federated" +msgstr "跨站" + #: bookwyrm/templates/settings/edit_server.html:41 #: bookwyrm/templates/settings/federated_server.html:10 msgid "Blocked" @@ -2334,13 +2328,20 @@ msgstr "注册关闭文字:" msgid "Posted by %(username)s" msgstr "由 %(username)s 发布" +#: bookwyrm/templates/snippets/authors.html:22 +#, python-format +msgid "and %(remainder_count_display)s other" +msgid_plural "and %(remainder_count_display)s others" +msgstr[0] "" + #: bookwyrm/templates/snippets/book_cover.html:32 msgid "No cover" msgstr "没有封面" -#: bookwyrm/templates/snippets/book_titleby.html:4 -#, python-format -msgid "%(title)s by " +#: bookwyrm/templates/snippets/book_titleby.html:6 +#, fuzzy, python-format +#| msgid "%(title)s by " +msgid "%(title)s by" msgstr "%(title)s 来自" #: bookwyrm/templates/snippets/boost_button.html:20 @@ -3003,3 +3004,12 @@ msgstr "没有找到使用该邮箱的用户。" #, python-format msgid "A password reset link sent to %s" msgstr "密码重置连接已发送给 %s" + +#~ msgid "Local Timeline" +#~ msgstr "本地时间线" + +#~ msgid "Federated Timeline" +#~ msgstr "跨站时间线" + +#~ msgid "Local" +#~ msgstr "本站" diff --git a/locale/zh_Hant/LC_MESSAGES/django.mo b/locale/zh_Hant/LC_MESSAGES/django.mo index 8c8b5af887a30a2430d7a568e4e987d971a822fb..552fea2a6ea9d89a28105fe6338f09b8053c81ce 100644 GIT binary patch delta 13344 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 F1OQhtxN86a diff --git a/locale/zh_Hant/LC_MESSAGES/django.po b/locale/zh_Hant/LC_MESSAGES/django.po index b7736822f..5ce42251b 100644 --- a/locale/zh_Hant/LC_MESSAGES/django.po +++ b/locale/zh_Hant/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-04 20:40+0000\n" +"POT-Creation-Date: 2021-08-05 01:33+0000\n" "PO-Revision-Date: 2021-06-30 10:36+0000\n" "Last-Translator: Grace Cheng \n" "Language-Team: LANGUAGE \n" @@ -91,27 +91,47 @@ msgstr "使用者名稱" msgid "A user with that username already exists." msgstr "已經存在使用該名稱的使用者。" -#: bookwyrm/settings.py:166 +#: bookwyrm/settings.py:123 +msgid "Home Timeline" +msgstr "主頁時間線" + +#: bookwyrm/settings.py:123 +msgid "Home" +msgstr "主頁" + +#: bookwyrm/settings.py:124 +#, fuzzy +#| msgid "Book Title" +msgid "Books Timeline" +msgstr "書名" + +#: bookwyrm/settings.py:124 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/templates/search/layout.html:42 +#: bookwyrm/templates/user/layout.html:81 +msgid "Books" +msgstr "書目" + +#: bookwyrm/settings.py:170 msgid "English" msgstr "English(英語)" -#: bookwyrm/settings.py:167 +#: bookwyrm/settings.py:171 msgid "German" msgstr "Deutsch(德語)" -#: bookwyrm/settings.py:168 +#: bookwyrm/settings.py:172 msgid "Spanish" msgstr "Español(西班牙語)" -#: bookwyrm/settings.py:169 +#: bookwyrm/settings.py:173 msgid "French" msgstr "Français(法語)" -#: bookwyrm/settings.py:170 +#: bookwyrm/settings.py:174 msgid "Simplified Chinese" msgstr "簡體中文" -#: bookwyrm/settings.py:171 +#: bookwyrm/settings.py:175 #, fuzzy #| msgid "Tranditional Chinese" msgid "Traditional Chinese" @@ -901,37 +921,13 @@ msgstr "所有訊息" msgid "You have no messages right now." msgstr "你現在沒有訊息。" -#: bookwyrm/templates/feed/feed.html:8 -msgid "Home Timeline" -msgstr "主頁時間線" - -#: bookwyrm/templates/feed/feed.html:10 -msgid "Local Timeline" -msgstr "本地時間線" - -#: bookwyrm/templates/feed/feed.html:12 -msgid "Federated Timeline" -msgstr "跨站時間線" - -#: bookwyrm/templates/feed/feed.html:18 -msgid "Home" -msgstr "主頁" - -#: bookwyrm/templates/feed/feed.html:21 -msgid "Local" -msgstr "本站" - -#: bookwyrm/templates/feed/feed.html:24 -#: bookwyrm/templates/settings/edit_server.html:40 -msgid "Federated" -msgstr "跨站" - -#: bookwyrm/templates/feed/feed.html:32 -#, python-format -msgid "load 0 unread status(es)" +#: bookwyrm/templates/feed/feed.html:22 +#, fuzzy, python-format +#| msgid "load 0 unread status(es)" +msgid "load 0 unread status(es)" msgstr "載入 0 條未讀狀態" -#: bookwyrm/templates/feed/feed.html:48 +#: bookwyrm/templates/feed/feed.html:38 msgid "There aren't any activities right now! Try following a user to get started" msgstr "現在還沒有任何活動!嘗試著從關注一個使用者開始吧" @@ -1880,12 +1876,6 @@ msgstr "搜尋請求" msgid "Search type" msgstr "搜尋類別" -#: bookwyrm/templates/search/layout.html:21 -#: bookwyrm/templates/search/layout.html:42 -#: bookwyrm/templates/user/layout.html:81 -msgid "Books" -msgstr "書目" - #: bookwyrm/templates/search/layout.html:23 #: bookwyrm/templates/search/layout.html:46 #: bookwyrm/templates/settings/admin_layout.html:26 @@ -2061,6 +2051,10 @@ msgstr "實例:" msgid "Status:" msgstr "狀態:" +#: bookwyrm/templates/settings/edit_server.html:40 +msgid "Federated" +msgstr "跨站" + #: bookwyrm/templates/settings/edit_server.html:41 #: bookwyrm/templates/settings/federated_server.html:10 msgid "Blocked" @@ -2353,13 +2347,20 @@ msgstr "註冊關閉文字:" msgid "Posted by %(username)s" msgstr "由 %(username)s 釋出" +#: bookwyrm/templates/snippets/authors.html:22 +#, python-format +msgid "and %(remainder_count_display)s other" +msgid_plural "and %(remainder_count_display)s others" +msgstr[0] "" + #: bookwyrm/templates/snippets/book_cover.html:32 msgid "No cover" msgstr "沒有封面" -#: bookwyrm/templates/snippets/book_titleby.html:4 -#, python-format -msgid "%(title)s by " +#: bookwyrm/templates/snippets/book_titleby.html:6 +#, fuzzy, python-format +#| msgid "%(title)s by " +msgid "%(title)s by" msgstr "%(title)s 來自" #: bookwyrm/templates/snippets/boost_button.html:20 @@ -3023,5 +3024,14 @@ msgstr "沒有找到使用該郵箱的使用者。" msgid "A password reset link sent to %s" msgstr "密碼重置連結已傳送給 %s" +#~ msgid "Local Timeline" +#~ msgstr "本地時間線" + +#~ msgid "Federated Timeline" +#~ msgstr "跨站時間線" + +#~ msgid "Local" +#~ msgstr "本站" + #~ msgid "Remove %(name)s" #~ msgstr "移除 %(name)s" From 75f586c10983e70169df495b835d4ffa58757454 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 4 Aug 2021 19:09:00 -0700 Subject: [PATCH 06/10] Removes unused stream code --- bookwyrm/activitystreams.py | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/bookwyrm/activitystreams.py b/bookwyrm/activitystreams.py index 0a9669719..b4926285f 100644 --- a/bookwyrm/activitystreams.py +++ b/bookwyrm/activitystreams.py @@ -156,25 +156,6 @@ class LocalStream(ActivityStream): ) -class FederatedStream(ActivityStream): - """users you follow""" - - key = "federated" - - def get_audience(self, status): - # this stream wants no part in non-public statuses - if status.privacy != "public": - return [] - return super().get_audience(status) - - def get_statuses_for_user(self, user): - return privacy_filter( - user, - models.Status.objects.select_subclasses(), - privacy_levels=["public"], - ) - - class BooksStream(ActivityStream): """books on your shelves""" @@ -201,7 +182,7 @@ class BooksStream(ActivityStream): return audience.filter(shelfbook__book__parent_work=work).distinct() def get_statuses_for_user(self, user): - """any public status that mentions their books""" + """any public status that mentions the user's books""" books = user.shelfbook_set.values_list( "book__parent_work__id", flat=True ).distinct() @@ -219,13 +200,13 @@ class BooksStream(ActivityStream): ) +# determine which streams are enabled in settings.py available_streams = [s["key"] for s in STREAMS] streams = { k: v for (k, v) in { "home": HomeStream(), "local": LocalStream(), - "federated": FederatedStream(), "books": BooksStream(), }.items() if k in available_streams From 1c0472efc2835d15072d5346df1e39dda555846a Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 4 Aug 2021 19:19:24 -0700 Subject: [PATCH 07/10] Fixes references to public streams --- bookwyrm/activitystreams.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bookwyrm/activitystreams.py b/bookwyrm/activitystreams.py index b4926285f..7c15fd900 100644 --- a/bookwyrm/activitystreams.py +++ b/bookwyrm/activitystreams.py @@ -9,7 +9,7 @@ from bookwyrm.views.helpers import privacy_filter class ActivityStream(RedisStore): - """a category of activity stream (like home, local, federated)""" + """a category of activity stream (like home, local, books)""" def stream_id(self, user): """the redis key for this user's instance of this stream""" @@ -229,7 +229,6 @@ def add_status_on_create(sender, instance, created, *args, **kwargs): if not created: return - # iterates through Home, Local, Federated for stream in streams.values(): stream.add_status(instance) @@ -296,7 +295,7 @@ def remove_statuses_on_block(sender, instance, *args, **kwargs): # pylint: disable=unused-argument def add_statuses_on_unblock(sender, instance, *args, **kwargs): """remove statuses from all feeds on block""" - public_streams = [LocalStream(), FederatedStream()] + public_streams = [v for (k, v) in streams.items() if k != 'home'] # add statuses back to streams with statuses from anyone if instance.user_subject.local: for stream in public_streams: From c8250ac94cf342567207b473eb06cb56426b9c59 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 4 Aug 2021 19:25:44 -0700 Subject: [PATCH 08/10] Python formatting --- bookwyrm/activitystreams.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/activitystreams.py b/bookwyrm/activitystreams.py index 7c15fd900..01ca3f770 100644 --- a/bookwyrm/activitystreams.py +++ b/bookwyrm/activitystreams.py @@ -295,7 +295,7 @@ def remove_statuses_on_block(sender, instance, *args, **kwargs): # pylint: disable=unused-argument def add_statuses_on_unblock(sender, instance, *args, **kwargs): """remove statuses from all feeds on block""" - public_streams = [v for (k, v) in streams.items() if k != 'home'] + public_streams = [v for (k, v) in streams.items() if k != "home"] # add statuses back to streams with statuses from anyone if instance.user_subject.local: for stream in public_streams: From 142d0da3b73a5a5f679c187771c58392b0169ce1 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 4 Aug 2021 20:01:44 -0700 Subject: [PATCH 09/10] Removes outdated tests --- bookwyrm/tests/test_activitystreams.py | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/bookwyrm/tests/test_activitystreams.py b/bookwyrm/tests/test_activitystreams.py index f4747971a..22445892e 100644 --- a/bookwyrm/tests/test_activitystreams.py +++ b/bookwyrm/tests/test_activitystreams.py @@ -190,20 +190,3 @@ class Activitystreams(TestCase): ) users = activitystreams.LocalStream().get_audience(status) self.assertEqual(users, []) - - def test_federatedstream_get_audience(self, *_): - """get a list of users that should see a status""" - status = models.Status.objects.create( - user=self.remote_user, content="hi", privacy="public" - ) - users = activitystreams.FederatedStream().get_audience(status) - self.assertTrue(self.local_user in users) - self.assertTrue(self.another_user in users) - - def test_federatedstream_get_audience_unlisted(self, *_): - """get a list of users that should see a status""" - status = models.Status.objects.create( - user=self.remote_user, content="hi", privacy="unlisted" - ) - users = activitystreams.FederatedStream().get_audience(status) - self.assertEqual(users, []) From f3a757951cdb40364546b843577c29ca5a3c0b3a Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Thu, 5 Aug 2021 14:22:54 -0700 Subject: [PATCH 10/10] Tests for books stream --- bookwyrm/tests/test_activitystreams.py | 97 +++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 1 deletion(-) diff --git a/bookwyrm/tests/test_activitystreams.py b/bookwyrm/tests/test_activitystreams.py index 22445892e..ba4950895 100644 --- a/bookwyrm/tests/test_activitystreams.py +++ b/bookwyrm/tests/test_activitystreams.py @@ -6,6 +6,7 @@ from bookwyrm import activitystreams, models @patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay") @patch("bookwyrm.activitystreams.ActivityStream.add_status") +@patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") class Activitystreams(TestCase): """using redis to build activity streams""" @@ -32,7 +33,8 @@ class Activitystreams(TestCase): inbox="https://example.com/users/rat/inbox", outbox="https://example.com/users/rat/outbox", ) - self.book = models.Edition.objects.create(title="test book") + work = models.Work.objects.create(title="test work") + self.book = models.Edition.objects.create(title="test book", parent_work=work) class TestStream(activitystreams.ActivityStream): """test stream, don't have to do anything here""" @@ -190,3 +192,96 @@ class Activitystreams(TestCase): ) users = activitystreams.LocalStream().get_audience(status) self.assertEqual(users, []) + + def test_localstream_get_audience_books_no_book(self, *_): + """get a list of users that should see a status""" + status = models.Status.objects.create( + user=self.local_user, content="hi", privacy="public" + ) + audience = activitystreams.BooksStream().get_audience(status) + # no books, no audience + self.assertEqual(audience, []) + + def test_localstream_get_audience_books_mention_books(self, *_): + """get a list of users that should see a status""" + status = models.Status.objects.create( + user=self.local_user, content="hi", privacy="public" + ) + status.mention_books.add(self.book) + status.save(broadcast=False) + models.ShelfBook.objects.create( + user=self.local_user, + shelf=self.local_user.shelf_set.first(), + book=self.book, + ) + # yes book, yes audience + audience = activitystreams.BooksStream().get_audience(status) + self.assertTrue(self.local_user in audience) + + def test_localstream_get_audience_books_book_field(self, *_): + """get a list of users that should see a status""" + status = models.Comment.objects.create( + user=self.local_user, content="hi", privacy="public", book=self.book + ) + models.ShelfBook.objects.create( + user=self.local_user, + shelf=self.local_user.shelf_set.first(), + book=self.book, + ) + # yes book, yes audience + audience = activitystreams.BooksStream().get_audience(status) + self.assertTrue(self.local_user in audience) + + def test_localstream_get_audience_books_alternate_edition(self, *_): + """get a list of users that should see a status""" + alt_book = models.Edition.objects.create( + title="hi", parent_work=self.book.parent_work + ) + status = models.Comment.objects.create( + user=self.remote_user, content="hi", privacy="public", book=alt_book + ) + models.ShelfBook.objects.create( + user=self.local_user, + shelf=self.local_user.shelf_set.first(), + book=self.book, + ) + # yes book, yes audience + audience = activitystreams.BooksStream().get_audience(status) + self.assertTrue(self.local_user in audience) + + def test_localstream_get_audience_books_non_public(self, *_): + """get a list of users that should see a status""" + alt_book = models.Edition.objects.create( + title="hi", parent_work=self.book.parent_work + ) + status = models.Comment.objects.create( + user=self.remote_user, content="hi", privacy="unlisted", book=alt_book + ) + models.ShelfBook.objects.create( + user=self.local_user, + shelf=self.local_user.shelf_set.first(), + book=self.book, + ) + # yes book, yes audience + audience = activitystreams.BooksStream().get_audience(status) + self.assertEqual(audience, []) + + def test_get_statuses_for_user_books(self, *_): + """create a stream for a user""" + alt_book = models.Edition.objects.create( + title="hi", parent_work=self.book.parent_work + ) + status = models.Status.objects.create( + user=self.local_user, content="hi", privacy="public" + ) + status = models.Comment.objects.create( + user=self.remote_user, content="hi", privacy="public", book=alt_book + ) + models.ShelfBook.objects.create( + user=self.local_user, + shelf=self.local_user.shelf_set.first(), + book=self.book, + ) + # yes book, yes audience + result = activitystreams.BooksStream().get_statuses_for_user(self.local_user) + self.assertEqual(list(result), [status])