# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2022, The Funkwhale Collective
# This file is distributed under the same license as the funkwhale package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
#
msgid ""
msgstr ""
"Project-Id-Version: funkwhale 1.2.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-07-01 10:35+0200\n"
"PO-Revision-Date: 2022-07-03 21:04+0000\n"
"Last-Translator: Ciarán Ainsworth <sporiff@funkwhale.audio>\n"
"Language-Team: English (United Kingdom) <https://translate.funkwhale.audio/"
"projects/documentation/federation-index/en_GB/>\n"
"Language: en_GB\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.13\n"
"Generated-By: Babel 2.10.1\n"

#: ../../federation/index.rst:2
msgid "Funkwhale Federation"
msgstr ""

#: ../../federation/index.rst:4
msgid ""
"This documentation section is more technical, and targets people who want"
" to understand how Funkwhale's federation works."
msgstr ""

#: ../../federation/index.rst:9
msgid "Technologies and standards"
msgstr ""

#: ../../federation/index.rst:11
msgid "Funkwhale's federation is built on top of the following technologies:"
msgstr ""

#: ../../federation/index.rst:13
msgid "`ActivityPub`_ as the high-level federation protocol"
msgstr ""

#: ../../federation/index.rst:14
msgid "`HTTP Signatures`_ as the primary mean to authenticate messages"
msgstr ""

#: ../../federation/index.rst:15
msgid "`Webfinger`_ to easily retrieve resources using human-friendly names"
msgstr ""

#: ../../federation/index.rst:16
msgid ""
"`ActivityStreams`_ and `ActivityStreams vocabulary`_ as the mean to "
"structure messages"
msgstr ""

#: ../../federation/index.rst:18
msgid "Support for the following is planned but not implemented-yet:"
msgstr ""

#: ../../federation/index.rst:20
msgid "`JSON-LD signatures`_ as an alternate mean to authenticate messages"
msgstr ""

#: ../../federation/index.rst:30
msgid "Philosophy"
msgstr ""

#: ../../federation/index.rst:32
msgid ""
"Our goal is to stick to the specifications as much as possible, to ensure"
" compatibility with existing applications such as Mastodon, Peertube, "
"Plume, Pleroma or PixelFed."
msgstr ""

#: ../../federation/index.rst:35
msgid ""
"However, this is not always possible for all our use cases. The "
"ActivityPub and ActivityStreams specifications are really high-level and "
"do not always fit our use cases. For such cases, we will use an ad-hoc "
"solution, and document it here."
msgstr ""

#: ../../federation/index.rst:39
msgid ""
"There are plenty of projects built using ActivityPub, and our goal is not"
" to support all the existing activities. Instead, we want to support "
"activities and objects that make sense for Funkwhale use cases, such as "
"follows or likes."
msgstr ""

#: ../../federation/index.rst:43
msgid ""
"If you think this document is not accurate or find evidence that "
"Funkwhale is not behaving according to the behaviour documented here, "
"please file a bug on our issue tracker, as we consider this a bug."
msgstr ""

#: ../../federation/index.rst:48 ../../federation/index.rst:157
#: ../../federation/index.rst:211 ../../federation/index.rst:266
#: ../../federation/index.rst:310 ../../federation/index.rst:361
#: ../../federation/index.rst:445
msgid "Internal logic"
msgstr ""

#: ../../federation/index.rst:50
msgid ""
"This section is relevant if you're interested in how we handle things "
"internally in our application code."
msgstr ""

#: ../../federation/index.rst:54
msgid "Database schema"
msgstr ""

#: ../../federation/index.rst:56
msgid ""
"As much as possible, we try to map our internal model and database schema"
" to ActivityPub entities, as this makes things easier to deal with."
msgstr ""

#: ../../federation/index.rst:59
msgid ""
"We store received activities payload directly in the database before we "
"attempt to process or deliver them. Storing the activities unlock some "
"interesting use cases, such as debugging federation issues, replaying "
"deliveries, or reprocess historical activities that were not supported "
"before."
msgstr ""

#: ../../federation/index.rst:64
msgid ""
"Each local user is bound to an ``Actor``. Remote and local actors share "
"the same database table and all federated entities (such as uploads) are "
"linked to an ``Actor`` and not to a user. This means that, internally, in"
" general, there is no distinction between local and remote users."
msgstr ""

#: ../../federation/index.rst:69 ../../federation/index.rst:98
msgid "Links:"
msgstr ""

#: ../../federation/index.rst:71
msgid ""
"`Federation models "
"<https://dev.funkwhale.audio/funkwhale/funkwhale/blob/develop/api/funkwhale_api/federation/models.py>`_"
msgstr ""

#: ../../federation/index.rst:75
msgid "Activity creation and delivery"
msgstr ""

#: ../../federation/index.rst:77
msgid ""
"When a local actor is making an action that should trigger an "
"``Activity``, which roughly is equivalent to posting an activity to an "
"outbox, we create an object, with the proper payload and store it in our "
"``Activity`` table. We then trigger two kind of deliveries:"
msgstr ""

#: ../../federation/index.rst:81
msgid ""
"A delivery to local recipients: for each local recipient, we create an "
"``InboxItem``, linked to the activity. A local actor's feed is then made "
"of all the available inbox items, which can also have a read/unread "
"status"
msgstr ""

#: ../../federation/index.rst:84
msgid ""
"A delivery to remote recipients: we collect all inboxes and shared inbox "
"urls from remote recipients, and create a ``Delivery`` object in our "
"database, linked to the initial activity and the inbox or shared inbox "
"url. This ``Delivery`` object is then used by our worker to post the "
"activity content to the url."
msgstr ""

#: ../../federation/index.rst:88
msgid ""
"Receiving an activity from a remote actor in a local inbox is basically "
"the same, but we skip step 2."
msgstr ""

#: ../../federation/index.rst:90
msgid ""
"Funkwhale does not support all activities, and we have a basic routing "
"logic to handle specific activities, and discard unsupported ones."
msgstr ""

#: ../../federation/index.rst:93
msgid ""
"If a delivered activity matches one of our routes, a dedicated handler is"
" called, which can trigger additional logic. For instance, if we receive "
"a :ref:`activity-create` activity for an :ref:`object-audio` object, our "
"handler will persist the proper data in our local ``Upload`` table, "
"retrieve the audio cover, etc."
msgstr ""

#: ../../federation/index.rst:100
msgid ""
"`Routing logic for activities "
"<https://dev.funkwhale.audio/funkwhale/funkwhale/blob/develop/api/funkwhale_api/federation/routes.py>`_"
msgstr ""

#: ../../federation/index.rst:101
msgid ""
"`Delivery logic for activities "
"<https://dev.funkwhale.audio/funkwhale/funkwhale/blob/develop/api/funkwhale_api/federation/tasks.py>`_"
msgstr ""

#: ../../federation/index.rst:107
msgid "Service actor"
msgstr ""

#: ../../federation/index.rst:109
msgid ""
"In some situations, we will send messages or authenticate our fetches "
"using what we call the service actor. A service actor is an ActivityPub "
"actor object that acts on behalf of a Funkwhale server."
msgstr ""

#: ../../federation/index.rst:113
msgid ""
"The actor id usually looks like "
"``https://yourdomain.com/federation/actors/service``, but the reliable "
"way to determine it is to query the nodeinfo endpoint and use the value "
"available in the ``metadata > actorId`` field."
msgstr ""

#: ../../federation/index.rst:117
msgid ""
"Funkwhale generally considers that the service actor has authority to "
"send activities associated with any object on the same domain. For "
"instance, the service actor could send a :ref:`activity-delete` activity "
"linked to another users' library on the same domain."
msgstr ""

#: ../../federation/index.rst:123
msgid "Supported activities"
msgstr ""

#: ../../federation/index.rst:128
msgid "Follow"
msgstr ""

#: ../../federation/index.rst:131 ../../federation/index.rst:181
#: ../../federation/index.rst:236 ../../federation/index.rst:282
#: ../../federation/index.rst:332 ../../federation/index.rst:384
msgid "Supported on"
msgstr ""

#: ../../federation/index.rst:133 ../../federation/index.rst:387
msgid ":ref:`object-Library` objects"
msgstr ""

#: ../../federation/index.rst:136
msgid "Example of library follow"
msgstr ""

#: ../../federation/index.rst:153
msgid ""
"In this example, Alice is following the :ref:`object-library` described "
"in ``object``, which is owned by Bob."
msgstr ""

#: ../../federation/index.rst:159
msgid ""
"When a follow is received on a :ref:`object-Library`, Funkwhale will "
"behave differently depending on the visibility of the library:"
msgstr ""

#: ../../federation/index.rst:162
msgid ""
"Automatic accept, when the library is public: a notification is sent to "
"the library owner, and an :ref:`activity-accept` is sent automatically to"
" the follow actor."
msgstr ""

#: ../../federation/index.rst:163
msgid ""
"Manual accept, in all other cases: a notification is sent to the library "
"owner. After manual approval from the owner, an :ref:`activity-accept` is"
" sent to the follow actor."
msgstr ""

#: ../../federation/index.rst:165
msgid ""
"Funkwhale uses library follow status to grant access to the follow actor."
" If a library is not public and an actor does not have an approved "
"follow, library content will be inaccessible to the actor."
msgstr ""

#: ../../federation/index.rst:170 ../../federation/index.rst:225
#: ../../federation/index.rst:271 ../../federation/index.rst:318
#: ../../federation/index.rst:368 ../../federation/index.rst:451
msgid "Checks"
msgstr ""

#: ../../federation/index.rst:172
msgid ""
"Before handling the activity, Funkwhale will ensure the library's owner "
"is the activity recipient."
msgstr ""

#: ../../federation/index.rst:178
msgid "Accept"
msgstr ""

#: ../../federation/index.rst:183 ../../federation/index.rst:238
msgid ":ref:`activity-follow` objects"
msgstr ""

#: ../../federation/index.rst:186 ../../federation/index.rst:241
#: ../../federation/index.rst:287 ../../federation/index.rst:338
#: ../../federation/index.rst:469 ../../federation/index.rst:499
#: ../../federation/index.rst:541 ../../federation/index.rst:581
#: ../../federation/index.rst:626
msgid "Example"
msgstr "Example"

#: ../../federation/index.rst:208
msgid "In this example, Bob accepts Alice's follow."
msgstr ""

#: ../../federation/index.rst:213
msgid ""
"When an :ref:`activity-accept` is received with a :ref:`activity-follow` "
"object, the corresponding follow is marked as accepted in the database."
msgstr ""

#: ../../federation/index.rst:216
msgid ""
"For library follows, this means that the actor will receive future "
"activities occurring within this library, such as :ref:`activity-create` "
":ref:`object-audio`, :ref:`activity-delete` :ref:`object-audio` or :ref"
":`activity-delete` :ref:`object-library`"
msgstr ""

#: ../../federation/index.rst:220
msgid ""
"The follow actor will also be able to browse the library pages and "
"download the library's audio files. Have a look at :ref:`library-access` "
"for more details."
msgstr ""

#: ../../federation/index.rst:227
msgid ""
"Before handling the activity, Funkwhale will ensure the accept comes from"
" the library's owner."
msgstr ""

#: ../../federation/index.rst:233
msgid "Undo"
msgstr ""

#: ../../federation/index.rst:263
msgid "In this example, Alice is notifying Bob she's undoing her follow."
msgstr ""

#: ../../federation/index.rst:268
msgid ""
"When an undo is received, the corresponding follow is deleted from the "
"database."
msgstr ""

#: ../../federation/index.rst:273
msgid ""
"Before handling the activity, Funkwhale will ensure the undo actor is the"
" follow actor."
msgstr ""

#: ../../federation/index.rst:279
msgid "Create"
msgstr ""

#: ../../federation/index.rst:284 ../../federation/index.rst:386
msgid ":ref:`object-audio` objects"
msgstr ""

#: ../../federation/index.rst:307
msgid ""
"Refer to :ref:`object-audio` to see the structure of the ``object`` "
"attribute."
msgstr ""

#: ../../federation/index.rst:312
msgid ""
"When a :ref:`activity-create` is received with an :ref:`object-audio` "
"object, Funkwhale will persist a local upload and bind it to the proper "
"library and track. If no local track match the audio metadata, a track is"
" created using the ``metadata`` attribute from the :ref:`object-audio` "
"object."
msgstr ""

#: ../../federation/index.rst:320
msgid ""
"Before handling the activity, Funkwhale will ensure the activity actor "
"and the audio library's actor are the same."
msgstr ""

#: ../../federation/index.rst:323
msgid ""
"If no local actor follows the audio's library, the activity will be "
"discarded."
msgstr ""

#: ../../federation/index.rst:329
msgid "Update"
msgstr ""

#: ../../federation/index.rst:334
msgid ":ref:`object-library` objects"
msgstr ""

#: ../../federation/index.rst:335
msgid ":ref:`object-track` objects"
msgstr ""

#: ../../federation/index.rst:358
msgid ""
"Refer to :ref:`object-library` or :ref:`object-track` to see the "
"structure of the ``object`` attribute."
msgstr ""

#: ../../federation/index.rst:363
msgid ""
"When a :ref:`activity-update` is received with a :ref:`object-library` or"
" :ref:`object-track` object, Funkwhale will try to update the local copy "
"of the corresponding object in it's database."
msgstr ""

#: ../../federation/index.rst:370
msgid "Checks vary depending of the type of object associated with the update."
msgstr ""

#: ../../federation/index.rst:372
msgid ""
"For :ref:`object-library` objects, we ensure the actor sending the "
"message is the owner of the library."
msgstr ""

#: ../../federation/index.rst:374
msgid ""
"For musical entities such as :ref:`object-track`, we ensure the actor "
"sending the message matches the :ref:`property-attributedTo` property "
"declared on the local copy on the object, or the :ref:`service-actor`."
msgstr ""

#: ../../federation/index.rst:381
msgid "Delete"
msgstr ""

#: ../../federation/index.rst:390
msgid "Example (on :ref:`object-Library`)"
msgstr ""

#: ../../federation/index.rst:412
msgid "Example (on :ref:`object-audio`)"
msgstr ""

#: ../../federation/index.rst:437
msgid ""
"In this example, Bob notifies the followers of their library that 3 "
"objects were deleted."
msgstr ""

#: ../../federation/index.rst:441
msgid ""
"For performance reason, when deleting :ref:`object-audio` objects, "
"Funkwhale supports either a list of ids or a single id."
msgstr ""

#: ../../federation/index.rst:447
msgid ""
"When a :ref:`activity-delete` is received, the corresponding objects are "
"immediately deleted from the database."
msgstr ""

#: ../../federation/index.rst:453
msgid ""
"Before handling deletion, Funkwhale ensures the actor initiating the "
"activity is the owner of the deleted :ref:`object-audio` or :ref:`object-"
"Library`."
msgstr ""

#: ../../federation/index.rst:457
msgid "Supported objects"
msgstr ""

#: ../../federation/index.rst:462
msgid "Artist"
msgstr ""

#: ../../federation/index.rst:466 ../../federation/index.rst:496
#: ../../federation/index.rst:538
msgid "This object is not standard."
msgstr ""

#: ../../federation/index.rst:482 ../../federation/index.rst:521
#: ../../federation/index.rst:559 ../../federation/index.rst:599
#: ../../federation/index.rst:649
msgid "Structure"
msgstr ""

#: ../../federation/index.rst:484
msgid "**id** (required): a uri identifying the artist over federation"
msgstr ""

#: ../../federation/index.rst:485
msgid "**name** (required): a name for the artist"
msgstr ""

#: ../../federation/index.rst:486
msgid ""
"**published** (required): the publication date of the artist (on the "
"federation)"
msgstr ""

#: ../../federation/index.rst:487
msgid "**musicbrainzId** (optional): the musicbrainz artist id"
msgstr ""

#: ../../federation/index.rst:492
msgid "Album"
msgstr ""

#: ../../federation/index.rst:523
msgid "**id** (required): a uri identifying the album over federation"
msgstr ""

#: ../../federation/index.rst:524
msgid "**name** (required): the title of the album"
msgstr ""

#: ../../federation/index.rst:525
msgid ""
"**artists** (required): a list of :ref:`object-artist` objects involved "
"in the album"
msgstr ""

#: ../../federation/index.rst:526 ../../federation/index.rst:564
#: ../../federation/index.rst:657
msgid ""
"**published** (required): the publication date of the entity (on the "
"federation)"
msgstr ""

#: ../../federation/index.rst:527
msgid "**released** (optional): the release date of the album"
msgstr ""

#: ../../federation/index.rst:528
msgid "**musicbrainzId** (optional): the musicbrainz release id"
msgstr ""

#: ../../federation/index.rst:529
msgid "**cover** (optional): a `Link` object representing the album cover"
msgstr ""

#: ../../federation/index.rst:534
msgid "Track"
msgstr ""

#: ../../federation/index.rst:561
msgid "**id** (required): a uri identifying the track over federation"
msgstr ""

#: ../../federation/index.rst:562
msgid "**name** (required): the title of the track"
msgstr ""

#: ../../federation/index.rst:563
msgid ""
"**position** (required): the position of the :ref:`object-track` in the "
"album"
msgstr ""

#: ../../federation/index.rst:565
msgid "**musicbrainzId** (optional): the musicbrainz recording id"
msgstr ""

#: ../../federation/index.rst:566
msgid "**album** (required): the :ref:`object-album` that contains the track"
msgstr ""

#: ../../federation/index.rst:567
msgid ""
"**artists** (required): a list of :ref:`object-artist` objects involved "
"in the track (they can differ from the album artists)"
msgstr ""

#: ../../federation/index.rst:572
msgid "Library"
msgstr ""

#: ../../federation/index.rst:576
msgid ""
"This object is not standard but inherits its behaviour and properties "
"from Actor and Collection."
msgstr ""

#: ../../federation/index.rst:601
msgid "**id** (required): a uri identifying the library over federation"
msgstr ""

#: ../../federation/index.rst:602
msgid "**actor** (required): the id of the actor managing the library"
msgstr ""

#: ../../federation/index.rst:603
msgid "**name** (required): the name of the library"
msgstr ""

#: ../../federation/index.rst:604
msgid "**followers** (required): the id of the library's followers collection"
msgstr ""

#: ../../federation/index.rst:605
msgid ""
"**totalItems** (required): the number of audio objects available in the "
"library"
msgstr ""

#: ../../federation/index.rst:606
msgid "**first** (required): the URL of the first page of the library"
msgstr ""

#: ../../federation/index.rst:607
msgid "**last** (required): the URL of the last page of the library"
msgstr ""

#: ../../federation/index.rst:608
msgid "**summary** (optional): a description for the library"
msgstr ""

#: ../../federation/index.rst:612
msgid ""
"Crawling library pages requires authentication and an approved follow, "
"unless the library is public."
msgstr ""

#: ../../federation/index.rst:618
msgid "Audio"
msgstr ""

#: ../../federation/index.rst:622
msgid ""
"This object `is specified in ActivityStreams <https://www.w3.org/TR"
"/activitystreams-vocabulary/#dfn-audio>`_, but Funkwhale needs non-"
"standard attributes to handle it."
msgstr ""

#: ../../federation/index.rst:651
msgid "**id** (required): a uri identifying the audio over federation"
msgstr ""

#: ../../federation/index.rst:652
msgid ""
"**name** (required): a human-friendly title for the audio (We concatenate"
" track name, album title and artist name)"
msgstr ""

#: ../../federation/index.rst:653
msgid "**size** (required, non-standard): the size of the audio, in bytes"
msgstr ""

#: ../../federation/index.rst:654
msgid "**bitrate** (required, non-standard): the bitrate of the audio, in bytes/s"
msgstr ""

#: ../../federation/index.rst:655
msgid "**duration** (required): the duration of the audio, in seconds"
msgstr ""

#: ../../federation/index.rst:656
msgid ""
"**library** (required, non-standard): the id of the :ref:`object-Library`"
" object that contains the object"
msgstr ""

#: ../../federation/index.rst:658
msgid ""
"**updated** (required): the last update date of the entity (on the "
"federation)"
msgstr ""

#: ../../federation/index.rst:659
msgid ""
"**url** (required): a ``Link`` object with an ``audio/`` mediaType where "
"the audio file is downloadable"
msgstr ""

#: ../../federation/index.rst:660
msgid ""
"**track** (required, non-standard): the :ref:`object-track` the :ref"
":`object-audio` is bound to"
msgstr ""

#: ../../federation/index.rst:664
msgid ""
"Accessing the Audio file via its url requires authentication and an "
"approved follow on the containing library, unless the library is public."
msgstr ""

#: ../../federation/index.rst:671
msgid "Audio fetching on restricted libraries"
msgstr ""

#: ../../federation/index.rst:673
msgid ""
":ref:`object-library` and :ref:`object-audio` url objects may require "
"additional authentication to be accessed."
msgstr ""

#: ../../federation/index.rst:676
msgid "For :ref:`object-library` objects:"
msgstr ""

#: ../../federation/index.rst:678
msgid ""
"If the library is public, library pages can be accessed without "
"restriction"
msgstr ""

#: ../../federation/index.rst:679
msgid ""
"Otherwise, the HTTP request must be signed by an actor with an approved "
"follow on the library"
msgstr ""

#: ../../federation/index.rst:682
msgid "For :ref:`object-audio` url objects:"
msgstr ""

#: ../../federation/index.rst:684
msgid ""
"If the audio's library is public, audio file can be accessed without "
"restriction"
msgstr ""

#: ../../federation/index.rst:685
msgid ""
"Otherwise, the HTTP request must be signed by an actor with an approved "
"follow on the audio's library"
msgstr ""

#: ../../federation/index.rst:689
msgid "Properties"
msgstr ""

#: ../../federation/index.rst:694
msgid "attributedTo"
msgstr ""

#: ../../federation/index.rst:696
msgid ""
"Funkwhale will generally use the ``attributedTo`` property to communicate"
" who is responsible for a given object. When an object has the "
"``attributedTo`` attribute, the associated actor has the permission to "
":ref:`activity-update`, :ref:`activity-delete` or more generally apply "
"any kind of activity on the object."
msgstr ""

#: ../../federation/index.rst:701
msgid ""
"In addition, Funkwhale consider all the objects of a domain as attributed"
" to its corresponding :ref:`service-actor`."
msgstr ""
