Import tokodon_25.04.3-1.debian.tar.xz
authorAurélien COUDERC <coucouf@debian.org>
Thu, 24 Jul 2025 16:34:20 +0000 (18:34 +0200)
committerAurélien COUDERC <coucouf@debian.org>
Thu, 24 Jul 2025 16:34:20 +0000 (18:34 +0200)
[dgit import tarball tokodon 25.04.3-1 tokodon_25.04.3-1.debian.tar.xz]

21 files changed:
changelog [new file with mode: 0644]
control [new file with mode: 0644]
copyright [new file with mode: 0644]
patches/series [new file with mode: 0644]
patches/upstream_128cdaa7_Fix-a-crash-when-trying-to-block-an-account-through-the-post-menu.patch [new file with mode: 0644]
patches/upstream_4643870b_Make-sure-that-toggling-account-options-affects-the-correct-account.patch [new file with mode: 0644]
patches/upstream_4f09a6e8_Add-mute-block-management-on-the-safety-page.patch [new file with mode: 0644]
patches/upstream_5587bbb9_Use-QLatin1String-in-SocialGraphModel.patch [new file with mode: 0644]
patches/upstream_9eb657e1_Fix-crash-when-trying-to-save-less-than-the-max-number-of-fields.patch [new file with mode: 0644]
patches/upstream_b319e681_Add-a-toggle-in-account-settings-for-search-indexing.patch [new file with mode: 0644]
patches/upstream_df89658d_Fix-possible-erroneous-trailing-space-in-OAuth-scope-parameter.patch [new file with mode: 0644]
patches/upstream_fc886374_Playback-audio-in-video-attachments.patch [new file with mode: 0644]
patches/upstream_revert_357ef28c_accountpage-use-formlinkdelegate-for-open-ser.patch [new file with mode: 0644]
qmldeps.optional [new file with mode: 0644]
qmldeps.overrides [new file with mode: 0644]
rules [new file with mode: 0755]
salsa-ci.yml [new file with mode: 0644]
source/format [new file with mode: 0644]
upstream/metadata [new file with mode: 0644]
upstream/signing-key.asc [new file with mode: 0644]
watch [new file with mode: 0644]

diff --git a/changelog b/changelog
new file mode 100644 (file)
index 0000000..781e0d2
--- /dev/null
+++ b/changelog
@@ -0,0 +1,121 @@
+tokodon (25.04.3-1) unstable; urgency=medium
+
+  [ Aurélien COUDERC ]
+  * New upstream release (25.04.3).
+    - Backport upstream commit:
+      - Fix a crash when trying to block an account through the post menu.
+      [128cdaa7]
+      - Add missing mute/block management on the safety page. [4f09a6e8,
+      5587bbb9] (kde#506374)
+      - Fix broken audio in video attachments playback. [fc886374]
+      (kde#505303)
+      - Fix crash when trying to save less than the max number of fields.
+      [9eb657e1]
+      - Add missing toggle for search indexing in account settings. [b319e681]
+      - Make sure that toggling account options affects the correct account.
+      [4643870b]
+      - Fix possible erroneous trailing space in OAuth scope parameter.
+      [df89658d]
+  * Revert upstream commit 357ef28c which silently requires kirigami
+    addons 1.9+ and breaks the account page.
+
+ -- Aurélien COUDERC <coucouf@debian.org>  Thu, 24 Jul 2025 18:34:20 +0200
+
+tokodon (25.04.2-1) unstable; urgency=medium
+
+  [ Aurélien COUDERC ]
+  * New upstream release (25.04.1).
+    - Clamp contentY when using the PageUp key. (kde#501936)
+    - Stop registering for push notifications despite them being disabled.
+    - Print out what the old endpoint was in the warning message.
+    - Don't spam network error log with push subscription checks.
+    - Don't bother updating push subscriptions if there is none.
+    - Remove annual_report from push notification rules.
+    - Call updatePushNotifications when toggling the notifications checkbox.
+  * New upstream release (25.04.2).
+    - ModerationTools: Fix opening some subpages.
+
+ -- Aurélien COUDERC <coucouf@debian.org>  Mon, 09 Jun 2025 23:37:39 +0200
+
+tokodon (25.04.0-1) unstable; urgency=medium
+
+  [ Aurélien COUDERC ]
+  * New upstream release (25.04.0).
+  * Update build-deps and deps with the info from cmake.
+  * Refresh copyright information.
+  * Bump Standards-Version to 4.7.2, no change required.
+
+ -- Aurélien COUDERC <coucouf@debian.org>  Thu, 17 Apr 2025 22:24:22 +0200
+
+tokodon (24.12.0-2) unstable; urgency=medium
+
+  [ Aurélien COUDERC ]
+  * Limit qt6-webview-dev build dependency to amd64 arm64 armhf and i386
+    where it’s available, make QtWebView optional for dh_qmldepends.
+
+ -- Aurélien COUDERC <coucouf@debian.org>  Thu, 23 Jan 2025 14:31:50 +0100
+
+tokodon (24.12.0-1) unstable; urgency=medium
+
+  [ Aurélien COUDERC ]
+  * New upstream release (24.12.0).
+  * Update build-deps and deps with the info from cmake.
+  * Refresh copyright information.
+  * Release to unstable.
+
+ -- Aurélien COUDERC <coucouf@debian.org>  Sat, 21 Dec 2024 17:00:58 +0100
+
+tokodon (24.08.2-1) experimental; urgency=medium
+
+  [ Scarlett Moore ]
+  * Add myself to uploaders.
+
+  [ Aurélien COUDERC ]
+  * New upstream release (24.08.2).
+  * Update build-deps and deps with the info from cmake.
+  * Switch to kf6 debhelper build sequence.
+  * Replace manual QML runtime dependencies management with dh-sequence-
+    qmldeps.
+  * Review copyright information.
+  * Bump Standards-Version to 4.7.0, no change required.
+  * Update project homepage.
+  * Add myself to the uploaders.
+  * Drop obsolete lintian overrides.
+
+ -- Aurélien COUDERC <coucouf@debian.org>  Fri, 25 Oct 2024 00:46:28 +0200
+
+tokodon (23.04.2-2) unstable; urgency=medium
+
+  [ Patrick Franz ]
+  * Switch kirigami-addons-dev B-D to kirigami-addons5-dev.
+
+ -- Patrick Franz <deltaone@debian.org>  Fri, 23 Aug 2024 17:55:48 +0200
+
+tokodon (23.04.2-1) unstable; urgency=medium
+
+  * New upstream release.
+  * tokodon is now part of the KDE release service, so:
+    - switch watch file to release-service locations
+    - import release-service GPG signing key
+  * Set Maintainer to the canonical form.
+  * Update Vcs-* fields.
+  * Update the build dependencies according to the upstream build system:
+    - bump kirigami-addons-dev to 0.7.2
+    - add libkf5configwidgets-dev
+  * Bump the kirigami-addons packages dependencies to 0.7.2.
+  * Update copyright.
+
+ -- Pino Toscano <pino@debian.org>  Wed, 21 Jun 2023 07:32:08 +0200
+
+tokodon (23.02.0-2) unstable; urgency=medium
+
+  * Add lintian overrides for copyright/license files to not list in
+    debian/copyright.
+
+ -- Pino Toscano <pino@debian.org>  Thu, 15 Jun 2023 21:51:04 +0200
+
+tokodon (23.02.0-1) unstable; urgency=medium
+
+  * Initial release.
+
+ -- Pino Toscano <pino@debian.org>  Wed, 01 Mar 2023 09:04:53 +0100
diff --git a/control b/control
new file mode 100644 (file)
index 0000000..be3f349
--- /dev/null
+++ b/control
@@ -0,0 +1,60 @@
+Source: tokodon
+Section: net
+Priority: optional
+Maintainer: Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
+Uploaders: Aurélien COUDERC <coucouf@debian.org>,
+           Pino Toscano <pino@debian.org>,
+           Scarlett Moore <sgmoore@debian.org>,
+Build-Depends: debhelper-compat (= 13),
+               dh-sequence-kf6,
+               dh-sequence-qmldeps,
+               cmake (>= 3.16~),
+               extra-cmake-modules (>= 6.11.0~),
+               gettext,
+               kirigami-addons-dev (>= 1.1.0~),
+               libkf6colorscheme-dev (>= 6.11.0~),
+               libkf6config-dev (>= 6.11.0~),
+               libkf6coreaddons-dev (>= 6.11.0~),
+               libkf6crash-dev (>= 6.11.0~),
+               libkf6dbusaddons-dev (>= 6.11.0~),
+               libkf6i18n-dev (>= 6.11.0~),
+               libkf6iconthemes-dev (>= 6.11.0~),
+               libkf6kio-dev (>= 6.11.0~),
+               libkf6notifications-dev (>= 6.11.0~),
+               libkf6purpose-dev (>= 6.11.0~),
+               libkf6qqc2desktopstyle-dev,
+               libkf6windowsystem-dev (>= 6.11.0~),
+               libkirigami-dev (>= 6.11.0~),
+               libmpvqt-dev,
+               libqqc2breezestyle-dev (>= 6.0.0~),
+               libssl-dev,
+               qml6-module-org-kde-kquickcontrolsaddons,
+               qml6-module-org-kde-notifications,
+               qml6-module-org-kde-purpose,
+               qml6-module-qtcore,
+               qml6-module-qtquick-dialogs,
+               qml6-module-qtquick-effects,
+               qt6-base-dev (>= 6.8.0~),
+               qt6-declarative-dev (>= 6.8.0~),
+               qt6-declarative-private-dev,
+               qt6-multimedia-dev (>= 6.8.0~),
+               qt6-svg-dev (>= 6.8.0~),
+               qt6-websockets-dev (>= 6.8.0~),
+               qt6-webview-dev (>= 6.6~) [amd64 arm64 armhf i386],
+               qtkeychain-qt6-dev,
+               xauth <!nocheck>,
+               xvfb <!nocheck>,
+Standards-Version: 4.7.2
+Homepage: https://apps.kde.org/tokodon
+Vcs-Browser: https://salsa.debian.org/qt-kde-team/kde/tokodon
+Vcs-Git: https://salsa.debian.org/qt-kde-team/kde/tokodon.git
+Rules-Requires-Root: no
+
+Package: tokodon
+Architecture: any
+Depends: ${misc:Depends}, ${qml6:Depends}, ${shlibs:Depends},
+Description: modern Mastodon client
+ Tokodon is a modern client for Mastodon, Pleroma, and Nextcloud Social, built
+ using the Kirigami technology.
+ .
+ Tokodon allows you to interact with the Fediverse community.
diff --git a/copyright b/copyright
new file mode 100644 (file)
index 0000000..b00c486
--- /dev/null
+++ b/copyright
@@ -0,0 +1,1793 @@
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: tokodon
+Source: https://invent.kde.org/network/tokodon/
+
+Files: *
+Copyright: 2024, Arran Ubels <kde@arran4.com>
+           2021-2023, Carl Schwan <carl@carlschwan.eu>
+           2021, Carl Schwan <carlschwan@kde.org>
+           2023-2024, Joshua Goins <josh@redstraste.com>
+           2022-2025, Joshua Goins <josh@redstrate.com>
+           2017, Konstantinos Sideris <siderisk@auth.gr>
+           2023, Rishi Kumar <rsi.dev17@gmail.com>
+           2023, Shubham Arora <shubhamarora@protonmail.com>
+License: GPL-3.0-or-later
+
+Files: po/*
+Copyright: 2023-2024, A S Alam <aalam@satluj.org>
+           2023-2024, Adrián Chaves (Gallaecio)
+           2023-2024, Alexander Yavorsky <kekcuha@gmail.com>
+           2023, Antoni Bella Pérez <antonibella5@yahoo.com>
+           2021-2024, Eloy Cuadra <ecuadra@eloihr.net>
+           2022-2024, Emir SARI <emir_sari@icloud.com>
+           2023, Enol P. <enolp@softastur.org>
+           2022-2024, Frank Steinmetzger <dev-kde@felsenfleischer.de>
+           2021-2024, Freek de Kruijf <freekdekruijf@kde.nl>
+           2023-2024, giovanni <g.sora@tiscali.it>
+           2003-2024, Iñigo Salvador Azurmendi <xalba@ni.eus>
+           2021-2024, Josep M. Ferrer <txemaq@gmail.com>
+           2024, Jure Repinc <jlp@holodeck1.com>
+           2023-2024, KDE euskaratzeko proiektuko arduraduna <xalba@ni.eus>
+           2024, Kimmo Kujansuu <mrkujansuu@gmail.com>
+           2023-2024, Kisaragi Hiu <mail@kisaragi-hiu.com>
+           2022-2024, Kristof Kiszel <ulysses@fsf.hu>
+           2023, Marcin Mikołajczak <me@mkljczk.pl>
+           2021-2024, Matjaž Jeran <matjaz.jeran@amis.net>
+           2024, Olesya Gerasimenko <translation-team@basealt.ru>
+           2021-2024, Shinjo Park <kde@peremen.name>
+           2021-2024, Stefan Asserhäll <stefan.asserhall@gmail.com>
+           2021-2024, Steve Allewell <steve.allewell@gmail.com>
+           2021-2024, Tommi Nieminen <translator@legisign.org>
+           2023-2024, Toms Trasūns <toms.trasuns@posteo.net>
+           2021-2024, Vincenzo Reale <smart2128vr@gmail.com>
+           2021-2024, Vit Pelcak <vit@pelcak.org>
+           2021-2024, Xavier Besnard <xavier.besnard@kde.org>
+           2024, Yaron Shahrabani <sh.yaron@gmail.com>
+           2024, Zayed Al-Saidi <zayed.alsaidi@gmail.com>
+           2021-2024, Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>
+License: GPL-3.0-or-later
+
+Files: CMakeLists.txt
+       src/autotests/CMakeLists.txt
+       src/CMakeLists.txt
+       src/purpose/CMakeLists.txt
+       tools/update-emojis.py
+Copyright: 2021, Carl Schwan <carlschwan@kde.org>
+           2022, Gary Wang <wzc782970009@gmail.com>
+           2023, Joshua Goins <josh@redstrate.com>
+           2022, Tobias Fella <tobias.fella@kde.org>
+License: BSD-2-Clause
+
+Files: android/build.gradle
+       android/version.gradle.in
+       CMakePresets.json
+       src/autotests/appiumtests/CMakeLists.txt
+       src/autotests/appiumtests/SearchboxTest.py
+       src/autotests/appiumtests/TimelineTest.py
+Copyright: 2020, Gabriel Souza Franco <gabrielfrancosouza@gmail.com>
+           2022-2023, Harald Sitter <sitter@kde.org>
+           2021-2022, Laurent Montel <montel@kde.org>
+           2019, Nicolas Fella <nicolas.fella@gmx.de>
+           2023, Rishi Kumar <rsi.dev17@gmail.com>
+           2018-2021, Volker Krause <vkrause@kde.org>
+License: BSD-3-Clause
+
+Files: android/AndroidManifest.xml
+       .clang-tidy
+       .craft.ini
+       .gitignore
+       .gitlab-ci.yml
+       .kde-ci.yml
+       org.kde.tokodon.appdata.xml
+       org.kde.tokodon.desktop
+       snapcraft.yaml
+       src/accountconfig.kcfg
+       src/config.kcfg
+       src/Messages.sh
+       src/notifyrc.qrc
+       src/org.kde.tokodon.service.in
+Copyright: Carl Schwan <carl@carlschwan.eu>
+           2020-2021, Carl Schwan <carlschwan@kde.org>
+           2020, Gabriel Souza Franco <gabrielfrancosouza@gmail.com>
+           2023, Joshua Goins <josh@redstrate.com>
+           2019, Nicolas Fella <nicolas.fella@gmx.de>
+           None
+           none
+           2024, Scarlett Moore <sgmoore@kde.org>
+           2020, Tobias Fella <fella@posteo.de>
+           2018-2020, Volker Krause <vkrause@kde.org>
+License: CC0-1.0
+
+Files: android/src/OpenUriActivity.java
+       android/src/TokodonService.java
+       src/account/relationship.cpp
+       src/account/relationship.h
+       src/admin/accounttoolmodel.cpp
+       src/admin/accounttoolmodel.h
+       src/admin/adminaccountinfo.h
+       src/admin/emailblocktoolmodel.cpp
+       src/admin/emailblocktoolmodel.h
+       src/admin/emailinfo.cpp
+       src/admin/emailinfo.h
+       src/admin/federationinfo.cpp
+       src/admin/federationinfo.h
+       src/admin/federationtoolmodel.cpp
+       src/admin/federationtoolmodel.h
+       src/admin/ipinfo.cpp
+       src/admin/ipinfo.h
+       src/admin/iprulestoolmodel.cpp
+       src/admin/iprulestoolmodel.h
+       src/admin/reportinfo.cpp
+       src/admin/reportinfo.h
+       src/admin/reporttoolmodel.cpp
+       src/admin/reporttoolmodel.h
+       src/autotests/emailblocktooltest.cpp
+       src/autotests/federationtooltest.cpp
+       src/autotests/iprulestooltest.cpp
+       src/content/ui/AccountHeader.qml
+       src/content/ui/AccountInfo.qml
+       src/content/ui/Components/PopupShadow.qml
+       src/content/ui/Components/QrCodeMaximizeComponent.qml
+       src/content/ui/Debug/DebugPage.qml
+       src/content/ui/EditListPage.qml
+       src/content/ui/InitialSetup/SetupNotifications.qml
+       src/content/ui/InitialSetup/SetupPassword.qml
+       src/content/ui/InitialSetup/SetupWelcome.qml
+       src/content/ui/LanguageSelector.qml
+       src/content/ui/ListsPage.qml
+       src/content/ui/LoginFlow/BaseAuthorization.qml
+       src/content/ui/LoginFlow/BrowserAuthorization.qml
+       src/content/ui/LoginFlow/CodeAuthorization.qml
+       src/content/ui/LoginFlow/LoginIssuePage.qml
+       src/content/ui/LoginFlow/LoginPage.qml
+       src/content/ui/LoginFlow/RegistrationPage.qml
+       src/content/ui/LoginFlow/RulesPage.qml
+       src/content/ui/LoginFlow/WebViewAuthorization.qml
+       src/content/ui/LoginFlow/WelcomePage.qml
+       src/content/ui/MastoPage.qml
+       src/content/ui/ModerationTools/AccountToolPage.qml
+       src/content/ui/ModerationTools/EmailBlockToolPage.qml
+       src/content/ui/ModerationTools/FederationToolPage.qml
+       src/content/ui/ModerationTools/IpRulePage.qml
+       src/content/ui/ModerationTools/MainAccountToolPage.qml
+       src/content/ui/ModerationTools/MainFederationToolPage.qml
+       src/content/ui/ModerationTools/MainIpRulePage.qml
+       src/content/ui/ModerationTools/MainReportToolPage.qml
+       src/content/ui/ModerationTools/ModerationToolsView.qml
+       src/content/ui/ModerationTools/ReportToolPage.qml
+       src/content/ui/Notifications/GroupInteractionLabel.qml
+       src/content/ui/Notifications/UserInteractionLabel.qml
+       src/content/ui/PostDelegate/PostInteractionLabel.qml
+       src/content/ui/ReportDialog.qml
+       src/content/ui/SearchField.qml
+       src/content/ui/Settings/EditFilterPage.qml
+       src/content/ui/Settings/ErrorLogPage.qml
+       src/content/ui/Settings/NetworkProxyPage.qml
+       src/content/ui/Settings/TokodonConfigurationView.qml
+       src/content/ui/SocialGraphPage.qml
+       src/content/ui/StandaloneComposer.qml
+       src/content/ui/StatusComposer/StatusComposer.qml
+       src/content/ui/TimelinePage.qml
+       src/main.cpp
+       src/network/networkcontroller.cpp
+       src/network/networkcontroller.h
+       src/timeline/tag.cpp
+       src/timeline/tag.h
+       src/timeline/tagsmodel.cpp
+       src/timeline/tagsmodel.h
+       src/utils/androidutils.cpp
+       src/utils/androidutils.h
+       src/utils/ecdh.cpp
+       src/utils/ecdh.h
+       src/utils/initialsetupflow.cpp
+       src/utils/initialsetupflow.h
+       src/utils/limitermodel.cpp
+       src/utils/limitermodel.h
+Copyright: 2021-2023, Carl Schwan <carl@carlschwan.eu>
+           2023, Carl Schwan <carlschwan@kde.org>
+           2022, Gary Wang <wzc782970009@gmail.com>
+           2022, Jeremy Winter <jeremy.winter@tutanota.com>
+           2021, Jonah Brüchert <jbb@kaidan.im>
+           2022-2025, Joshua Goins <josh@redstrate.com>
+           2023, Joshua goins <josh@redstrate.com>
+           2023, Mathis Brüchert <mbb@kaidan.im>
+           2023, Rishi Kumar <rsi.dev17@gmail.com>
+           2023, Shubham Arora <shubhamarora@proton.me>
+           2023, Shubham Arora <shubhamarora@protonmail.com>
+License: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
+
+Files: src/autotests/mockaccount.cpp
+       src/content/ui/Components/Emoji/EmojiDelegate.qml
+       src/content/ui/Components/Emoji/EmojiGrid.qml
+       src/content/ui/Components/Emoji/EmojiPicker.qml
+       src/content/ui/Components/Emoji/EmojiTonesPicker.qml
+       src/content/ui/PrivacyPolicyPage.qml
+       src/content/ui/ServerInformationPage.qml
+       src/content/ui/Settings/AccountsPage.qml
+       src/content/ui/Settings/BlockedDomainsPage.qml
+       src/content/ui/Settings/FiltersPage.qml
+       src/content/ui/UserInfo.qml
+       src/tokodonapplication.h
+       src/tokodon.notifyrc
+       src/utils/messagefiltercontainer.cpp
+       src/utils/messagefiltercontainer.h
+Copyright: 2021-2024, Carl Schwan <carl@carlschwan.eu>
+           2019, Harald Sitter <sitter@kde.org>
+           2024-2025, Joshua Goins <josh@redstrate.com>
+           2022, Tobias Fella
+           2020-2022, Tobias Fella <fella@posteo.de>
+           2022, Tobias Fella <tobias.fella@kde.org>
+License: GPL-2.0-or-later
+
+Files: src/account/abstractaccount.cpp
+       src/account/account.cpp
+       src/account/account.h
+       src/account/accountmanager.cpp
+       src/account/accountmanager.h
+       src/account/featuredtagsmodel.cpp
+       src/account/featuredtagsmodel.h
+       src/content/ui/AnnouncementsPage.qml
+       src/content/ui/Components/Sidebar.qml
+       src/content/ui/FollowingPage.qml
+       src/content/ui/FullScreenImage.qml
+       src/content/ui/Main.qml
+       src/editor/attachmenteditormodel.cpp
+       src/editor/attachmenteditormodel.h
+       src/notification/notificationmodel.h
+       src/timeline/abstractlistmodel.cpp
+       src/timeline/abstractlistmodel.h
+       src/timeline/accountmediatimelinemodel.cpp
+       src/timeline/accountmediatimelinemodel.h
+       src/timeline/accountmodel.cpp
+       src/timeline/accountmodel.h
+       src/timeline/attachment.cpp
+       src/timeline/attachment.h
+       src/timeline/notification.cpp
+       src/timeline/notification.h
+       src/timeline/post.cpp
+       src/timeline/post.h
+       src/timeline/threadmodel.cpp
+       src/timeline/threadmodel.h
+       src/timeline/timelinemodel.cpp
+       src/timeline/timelinemodel.h
+       src/utils/emojimodel.h
+Copyright: 2018-2019, Black Hat <bhat@encom.eu.org>
+           2021, Carl Schwan <carl@carlschwan.eu>
+           2021, Carl Schwan <carlschwan@kde.org>
+           2020, Devin Lin <espidev@gmail.com>
+           2020, Han Young <hanyoung@protonmail.com>
+           2023-2024, Joshua Goins <josh@redstrate.com
+           2023-2024, Joshua Goins <josh@redstrate.com>
+           2021, kaniini <https://git.pleroma.social/kaniini>
+           2023, Shubham Arora <shubhamarora@protonmail.com>
+License: GPL-3.0-only
+
+Files: fastlane/metadata/org.kde.tokodon/en-US/images/featureGraphic.svg
+       src/autotests/conversationmodeltest.cpp
+       src/autotests/helperreply.h
+       src/content/ui/Components/ClickableIdentityInfo.qml
+       src/content/ui/Components/FocusedImage.qml
+       src/content/ui/Components/InlineIdentityInfo.qml
+       src/content/ui/ListTimelinePage.qml
+       src/content/ui/PostDelegate/LinkPreview.qml
+       src/content/ui/PostDelegate/PostPoll.qml
+       src/content/ui/PostDelegate/QuotePost.qml
+       src/content/ui/ReadMarker.qml
+       src/content/ui/StatusComposer/AttachmentInfoDialog.qml
+       src/content/ui/StatusComposer/ComposerPoll.qml
+       src/content/ui/StatusComposer/EditorAttachmentGrid.qml
+       src/content/ui/StatusComposer/ScheduledPostsPage.qml
+       src/content/ui/ThreadPage.qml
+       src/conversation/conversationmodel.cpp
+       src/conversation/conversationmodel.h
+       src/network/networkaccessmanagerfactory.cpp
+       src/network/networkaccessmanagerfactory.h
+       src/search/searchmodel.cpp
+       src/search/searchmodel.h
+       src/timeline/maintimelinemodel.cpp
+       src/timeline/maintimelinemodel.h
+       src/timeline/poll.cpp
+       src/timeline/poll.h
+       src/utils/emojis.h
+       src/utils/emojitones.cpp
+       src/utils/emojitones_data.h
+       src/utils/emojitones.h
+       src/utils/filehelper.cpp
+       src/utils/filehelper.h
+       src/utils/filetransferjob.cpp
+       src/utils/filetransferjob.h
+       src/utils/navigation.cpp
+       src/utils/navigation.h
+       src/utils/texthandler.cpp
+       src/utils/texthandler.h
+Copyright: Alois Spitzbart <spitz234@hotmail.com>
+           2021-2023, Carl Schwan <carl@carlschwan.eu>
+           2022, Carl Schwan <carlschwan@kde.org>
+           2023, Janet Black
+           2023-2024, Joshua Goins <josh@redstrate.com>
+           None
+           2022, Volker Krause <vkrause@kde.org>
+License: LGPL-2.0-or-later
+
+Files: src/content/ui/Android/ShareAction.qml
+       src/content/ui/ShareAction.qml
+       src/content/ui/ShareDialog.qml
+       src/notification/notificationgroupingmodel.cpp
+       src/notification/notificationgroupingmodel.h
+Copyright: 2017, Atul Sharma <atulsharma406@gmail.com>
+           2021, Carl Schwan <carl@carlschwan.eu>
+           2016, Eike Hein <hein@kde.org>
+           2023, Joshua Goins <josh@redstrate.com>
+           2018-2019, Kai Uwe Broulik <kde@privat.broulik.de>
+License: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+
+Files: po/ca/tokodon.po
+       po/ca@valencia/tokodon.po
+Copyright: 2021-2023, Josep M. Ferrer <txemaq@gmail.com>
+License: LGPL-2.1-only or LGPL-3.0-only or LicenseRef-KDE-Accepted-LGPL
+
+Files: src/account/annualreport.cpp
+       src/account/annualreport.h
+       src/account/notificationfilteringpolicy.cpp
+       src/account/notificationfilteringpolicy.h
+       src/account/preferences.cpp
+       src/account/preferences.h
+       src/account/privacypolicy.cpp
+       src/account/privacypolicy.h
+       src/account/profileeditor.cpp
+       src/account/profileeditor.h
+       src/account/scheduledstatusesmodel.cpp
+       src/account/scheduledstatusesmodel.h
+       src/account/suggestionsmodel.cpp
+       src/account/suggestionsmodel.h
+       src/autotests/posteditortest.cpp
+       src/autotests/profileeditortest.cpp
+       src/content/ui/ConversationDelegate.qml
+       src/content/ui/ConversationPage.qml
+       src/content/ui/Notifications/AnnualReportDelegate.qml
+       src/content/ui/Settings/AccountPage.qml
+       src/content/ui/Settings/AppearancePage.qml
+       src/content/ui/Settings/EditProfilePage.qml
+       src/content/ui/Settings/NotificationsPage.qml
+       src/content/ui/Settings/ProfileEditor.qml
+       src/content/ui/Settings/SafetyPage.qml
+       src/content/ui/StatusComposer/EmojiDialog.qml
+       src/editor/filtereditorbackend.cpp
+       src/editor/filtereditorbackend.h
+       src/editor/listeditorbackend.cpp
+       src/editor/listeditorbackend.h
+       src/editor/polleditorbackend.cpp
+       src/editor/polleditorbackend.h
+       src/editor/posteditorbackend.cpp
+       src/editor/posteditorbackend.h
+       src/editor/reporteditorbackend.cpp
+       src/editor/reporteditorbackend.h
+       src/network/networkrequestprogress.cpp
+       src/network/networkrequestprogress.h
+       src/purpose/purposeplugin.cpp
+       src/timeline/tagstimelinemodel.cpp
+       src/timeline/tagstimelinemodel.h
+       src/timeline/trendingnewsmodel.cpp
+       src/timeline/trendingnewsmodel.h
+       src/tokodonapplication.cpp
+       src/utils/colorschemer.cpp
+       src/utils/colorschemer.h
+Copyright: 2020-2024, Carl Schwan <carl@carlschwan.eu>
+           2021-2023, Carl Schwan <carlschwan@kde.org>
+           2023-2025, Joshua Goins <josh@redstrate.com>
+License: LGPL-2.1-or-later
+
+Files: src/autotests/blurhashtest.cpp
+       src/utils/blurhash.cpp
+       src/utils/blurhash.h
+       src/utils/blurhashimageprovider.cpp
+       src/utils/blurhashimageprovider.h
+Copyright: 2024, Joshua Goins <josh@redstrate.com>
+License: MIT
+
+Files: README.md
+       src/autotests/data/*
+Copyright: Carl Schwan <carl@carlschwan.eu>
+License: CC0-1.0
+Comment: Copied from .reuse/dep5
+
+Files: CONTRIBUTING.md
+       src/purpose/purposeplugin.json
+Copyright: Joshua Goins <josh@redstrate.com>
+License: CC0-1.0
+Comment: Copied from .reuse/dep5
+
+Files: org.kde.tokodon.svg
+       logo.png
+       android/res/drawable/tokodon.png
+Copyright: Bugsbane <https://invent.kde.org/bugsbane>
+License: CC-BY-SA-4.0
+Comment: Copied from .reuse/dep5
+
+Files: src/content/elephant.svg
+       src/content/mastodon-logo.svg
+Copyright: Mastodon contributors
+License: AGPL-3.0-or-later
+Comment: Copied from .reuse/dep5
+
+Files: .flatpak-manifest.json
+Copyright: Nicolas Fella <<nicolas.fella@gmx.de>>
+License: GPL-3.0-or-later
+Comment: Copied from .reuse/dep5
+
+Files: android/ic_launcher-playstore.png
+       android/res/drawable/ic_launcher_background.xml
+       android/res/drawable/ic_launcher_foreground.xml
+       android/res/mipmap-anydpi-v26/ic_launcher.xml
+       android/res/mipmap-anydpi-v26/ic_launcher_round.xml
+       android/res/mipmap-hdpi/ic_launcher.png
+       android/res/mipmap-mdpi/ic_launcher.png
+       android/res/mipmap-xhdpi/ic_launcher.png
+       android/res/mipmap-xxhdpi/ic_launcher.png
+       android/res/mipmap-xxxhdpi/ic_launcher.png
+       fastlane/metadata/org.kde.tokodon/en-US/images/featureGraphic.png
+Copyright: Alois Spitzbart <spitz234@hotmail.com>
+License: CC-BY-SA-4.0
+Comment: Copied from .reuse/dep5
+
+Files: debian/*
+Copyright: 2024, Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
+           2023, Pino Toscano <pino@debian.org>
+License: GPL-3.0-or-later
+
+License: AGPL-3.0-or-later
+ GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
+ .
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ .
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license document, but changing it is not allowed.
+ .
+                          Preamble
+ .
+ The GNU Affero General Public License is a free, copyleft license
+ for software and other kinds of works, specifically designed to
+ ensure cooperation with the community in the case of network server
+ software.
+ .
+ The licenses for most software and other practical works are
+ designed to take away your freedom to share and change the works.
+ By contrast, our General Public Licenses are intended to guarantee
+ your freedom to share and change all versions of a program--to make
+ sure it remains free software for all its users.
+ .
+ When we speak of free software, we are referring to freedom, not
+ price.  Our General Public Licenses are designed to make sure that
+ you have the freedom to distribute copies of free software (and
+ charge for them if you wish), that you receive source code or can
+ get it if you want it, that you can change the software or use
+ pieces of it in new free programs, and that you know you can do
+ these things.
+ .
+ Developers that use our General Public Licenses protect your rights
+ with two steps: (1) assert copyright on the software, and (2) offer
+ you this License which gives you legal permission to copy,
+ distribute and/or modify the software.
+ .
+ A secondary benefit of defending all users' freedom is that
+ improvements made in alternate versions of the program, if they
+ receive widespread use, become available for other developers to
+ incorporate.  Many developers of free software are heartened and
+ encouraged by the resulting cooperation.  However, in the case of
+ software used on network servers, this result may fail to come
+ about. The GNU General Public License permits making a modified
+ version and letting the public access it on a server without ever
+ releasing its source code to the public.
+ .
+ The GNU Affero General Public License is designed specifically to
+ ensure that, in such cases, the modified source code becomes
+ available to the community.  It requires the operator of a network
+ server to provide the source code of the modified version running
+ there to the users of that server.  Therefore, public use of a
+ modified version, on a publicly accessible server, gives the public
+ access to the source code of the modified version.
+ .
+ An older license, called the Affero General Public License and
+ published by Affero, was designed to accomplish similar goals.  This
+ is a different license, not a version of the Affero GPL, but Affero
+ has released a new version of the Affero GPL which permits
+ relicensing under this license.
+ .
+ The precise terms and conditions for copying, distribution and
+ modification follow.
+ .
+                        TERMS AND CONDITIONS
+ .
+ 0. Definitions.
+ .
+ "This License" refers to version 3 of the GNU Affero General Public
+ License.
+ .
+ "Copyright" also means copyright-like laws that apply to other kinds
+ of works, such as semiconductor masks.
+ .
+ "The Program" refers to any copyrightable work licensed under this
+ License.  Each licensee is addressed as "you".  "Licensees" and
+ "recipients" may be individuals or organizations.
+ .
+ To "modify" a work means to copy from or adapt all or part of the
+ work in a fashion requiring copyright permission, other than the
+ making of an exact copy.  The resulting work is called a "modified
+ version" of the earlier work or a work "based on" the earlier work.
+ .
+ A "covered work" means either the unmodified Program or a work based
+ on the Program.
+ .
+ To "propagate" a work means to do anything with it that, without
+ permission, would make you directly or secondarily liable for
+ infringement under applicable copyright law, except executing it on
+ a computer or modifying a private copy.  Propagation includes
+ copying, distribution (with or without modification), making
+ available to the public, and in some countries other activities as
+ well.
+ .
+ To "convey" a work means any kind of propagation that enables other
+ parties to make or receive copies.  Mere interaction with a user
+ through a computer network, with no transfer of a copy, is not
+ conveying.
+ .
+ An interactive user interface displays "Appropriate Legal Notices"
+ to the extent that it includes a convenient and prominently visible
+ feature that (1) displays an appropriate copyright notice, and (2)
+ tells the user that there is no warranty for the work (except to the
+ extent that warranties are provided), that licensees may convey the
+ work under this License, and how to view a copy of this License.  If
+ the interface presents a list of user commands or options, such as a
+ menu, a prominent item in the list meets this criterion.
+ .
+ 1. Source Code. The "source code" for a work means the preferred
+ form of the work for making modifications to it.  "Object code"
+ means any non-source form of a work.
+ .
+ A "Standard Interface" means an interface that either is an official
+ standard defined by a recognized standards body, or, in the case of
+ interfaces specified for a particular programming language, one that
+ is widely used among developers working in that language.
+ .
+ The "System Libraries" of an executable work include anything, other
+ than the work as a whole, that (a) is included in the normal form of
+ packaging a Major Component, but which is not part of that Major
+ Component, and (b) serves only to enable use of the work with that
+ Major Component, or to implement a Standard Interface for which an
+ implementation is available to the public in source code form.  A
+ "Major Component", in this context, means a major essential
+ component (kernel, window system, and so on) of the specific
+ operating system (if any) on which the executable work runs, or a
+ compiler used to produce the work, or an object code interpreter
+ used to run it.
+ .
+ The "Corresponding Source" for a work in object code form means all
+ the source code needed to generate, install, and (for an executable
+ work) run the object code and to modify the work, including scripts
+ to control those activities.  However, it does not include the
+ work's System Libraries, or general-purpose tools or generally
+ available free programs which are used unmodified in performing
+ those activities but which are not part of the work.  For example,
+ Corresponding Source includes interface definition files associated
+ with source files for the work, and the source code for shared
+ libraries and dynamically linked subprograms that the work is
+ specifically designed to require, such as by intimate data
+ communication or control flow between those subprograms and other
+ parts of the work.
+ .
+ The Corresponding Source need not include anything that users can
+ regenerate automatically from other parts of the Corresponding
+ Source.
+ .
+ The Corresponding Source for a work in source code form is that same
+ work.
+ .
+ 2. Basic Permissions. All rights granted under this License are
+ granted for the term of copyright on the Program, and are
+ irrevocable provided the stated conditions are met.  This License
+ explicitly affirms your unlimited permission to run the unmodified
+ Program.  The output from running a covered work is covered by this
+ License only if the output, given its content, constitutes a covered
+ work.  This License acknowledges your rights of fair use or other
+ equivalent, as provided by copyright law.
+ .
+ You may make, run and propagate covered works that you do not
+ convey, without conditions so long as your license otherwise remains
+ in force.  You may convey covered works to others for the sole
+ purpose of having them make modifications exclusively for you, or
+ provide you with facilities for running those works, provided that
+ you comply with the terms of this License in conveying all material
+ for which you do not control copyright.  Those thus making or
+ running the covered works for you must do so exclusively on your
+ behalf, under your direction and control, on terms that prohibit
+ them from making any copies of your copyrighted material outside
+ their relationship with you.
+ .
+ Conveying under any other circumstances is permitted solely under
+ the conditions stated below.  Sublicensing is not allowed; section
+ 10 makes it unnecessary.
+ .
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No
+ covered work shall be deemed part of an effective technological
+ measure under any applicable law fulfilling obligations under
+ article 11 of the WIPO copyright treaty adopted on 20 December 1996,
+ or similar laws prohibiting or restricting circumvention of such
+ measures.
+ .
+ When you convey a covered work, you waive any legal power to forbid
+ circumvention of technological measures to the extent such
+ circumvention is effected by exercising rights under this License
+ with respect to the covered work, and you disclaim any intention to
+ limit operation or modification of the work as a means of enforcing,
+ against the work's users, your or third parties' legal rights to
+ forbid circumvention of technological measures.
+ .
+ 4. Conveying Verbatim Copies. You may convey verbatim copies of the
+ Program's source code as you receive it, in any medium, provided
+ that you conspicuously and appropriately publish on each copy an
+ appropriate copyright notice; keep intact all notices stating that
+ this License and any non-permissive terms added in accord with
+ section 7 apply to the code; keep intact all notices of the absence
+ of any warranty; and give all recipients a copy of this License
+ along with the Program.
+ .
+ You may charge any price or no price for each copy that you convey,
+ and you may offer support or warranty protection for a fee.
+ .
+ 5. Conveying Modified Source Versions. You may convey a work based
+ on the Program, or the modifications to produce it from the Program,
+ in the form of source code under the terms of section 4, provided
+ that you also meet all of these conditions:
+ .
+     a) The work must carry prominent notices stating that you
+     modified it, and giving a relevant date.
+ .
+     b) The work must carry prominent notices stating that it is
+     released under this License and any conditions added under
+     section 7.  This requirement modifies the requirement in section
+     4 to "keep intact all notices".
+ .
+     c) You must license the entire work, as a whole, under this
+     License to anyone who comes into possession of a copy.  This
+     License will therefore apply, along with any applicable section
+     7 additional terms, to the whole of the work, and all its parts,
+     regardless of how they are packaged.  This License gives no
+     permission to license the work in any other way, but it does not
+     invalidate such permission if you have separately received it.
+ .
+     d) If the work has interactive user interfaces, each must
+     display Appropriate Legal Notices; however, if the Program has
+     interactive interfaces that do not display Appropriate Legal
+     Notices, your work need not make them do so.
+ .
+ A compilation of a covered work with other separate and independent
+ works, which are not by their nature extensions of the covered work,
+ and which are not combined with it such as to form a larger program,
+ in or on a volume of a storage or distribution medium, is called an
+ "aggregate" if the compilation and its resulting copyright are not
+ used to limit the access or legal rights of the compilation's users
+ beyond what the individual works permit.  Inclusion of a covered
+ work in an aggregate does not cause this License to apply to the
+ other parts of the aggregate.
+ .
+ 6. Conveying Non-Source Forms. You may convey a covered work in
+ object code form under the terms of sections 4 and 5, provided that
+ you also convey the machine-readable Corresponding Source under the
+ terms of this License, in one of these ways:
+ .
+     a) Convey the object code in, or embodied in, a physical product
+     (including a physical distribution medium), accompanied by the
+     Corresponding Source fixed on a durable physical medium
+     customarily used for software interchange.
+ .
+     b) Convey the object code in, or embodied in, a physical product
+     (including a physical distribution medium), accompanied by a
+     written offer, valid for at least three years and valid for as
+     long as you offer spare parts or customer support for that
+     product model, to give anyone who possesses the object code
+     either (1) a copy of the Corresponding Source for all the
+     software in the product that is covered by this License, on a
+     durable physical medium customarily used for software
+     interchange, for a price no more than your reasonable cost of
+     physically performing this conveying of source, or (2) access to
+     copy the Corresponding Source from a network server at no
+     charge.
+ .
+     c) Convey individual copies of the object code with a copy of
+     the written offer to provide the Corresponding Source.  This
+     alternative is allowed only occasionally and noncommercially,
+     and only if you received the object code with such an offer, in
+     accord with subsection 6b.
+ .
+     d) Convey the object code by offering access from a designated
+     place (gratis or for a charge), and offer equivalent access to
+     the Corresponding Source in the same way through the same place
+     at no further charge.  You need not require recipients to copy
+     the Corresponding Source along with the object code.  If the
+     place to copy the object code is a network server, the
+     Corresponding Source may be on a different server (operated by
+     you or a third party) that supports equivalent copying
+     facilities, provided you maintain clear directions next to the
+     object code saying where to find the Corresponding Source.
+     Regardless of what server hosts the Corresponding Source, you
+     remain obligated to ensure that it is available for as long as
+     needed to satisfy these requirements.
+ .
+     e) Convey the object code using peer-to-peer transmission,
+     provided you inform other peers where the object code and
+     Corresponding Source of the work are being offered to the
+     general public at no charge under subsection 6d.
+ .
+ A separable portion of the object code, whose source code is
+ excluded from the Corresponding Source as a System Library, need not
+ be included in conveying the object code work.
+ .
+ A "User Product" is either (1) a "consumer product", which means any
+ tangible personal property which is normally used for personal,
+ family, or household purposes, or (2) anything designed or sold for
+ incorporation into a dwelling.  In determining whether a product is
+ a consumer product, doubtful cases shall be resolved in favor of
+ coverage.  For a particular product received by a particular user,
+ "normally used" refers to a typical or common use of that class of
+ product, regardless of the status of the particular user or of the
+ way in which the particular user actually uses, or expects or is
+ expected to use, the product.  A product is a consumer product
+ regardless of whether the product has substantial commercial,
+ industrial or non-consumer uses, unless such uses represent the only
+ significant mode of use of the product.
+ .
+ "Installation Information" for a User Product means any methods,
+ procedures, authorization keys, or other information required to
+ install and execute modified versions of a covered work in that User
+ Product from a modified version of its Corresponding Source.  The
+ information must suffice to ensure that the continued functioning of
+ the modified object code is in no case prevented or interfered with
+ solely because modification has been made.
+ .
+ If you convey an object code work under this section in, or with, or
+ specifically for use in, a User Product, and the conveying occurs as
+ part of a transaction in which the right of possession and use of
+ the User Product is transferred to the recipient in perpetuity or
+ for a fixed term (regardless of how the transaction is
+ characterized), the Corresponding Source conveyed under this section
+ must be accompanied by the Installation Information.  But this
+ requirement does not apply if neither you nor any third party
+ retains the ability to install modified object code on the User
+ Product (for example, the work has been installed in ROM).
+ .
+ The requirement to provide Installation Information does not include
+ a requirement to continue to provide support service, warranty, or
+ updates for a work that has been modified or installed by the
+ recipient, or for the User Product in which it has been modified or
+ installed.  Access to a network may be denied when the modification
+ itself materially and adversely affects the operation of the network
+ or violates the rules and protocols for communication across the
+ network.
+ .
+ Corresponding Source conveyed, and Installation Information
+ provided, in accord with this section must be in a format that is
+ publicly documented (and with an implementation available to the
+ public in source code form), and must require no special password or
+ key for unpacking, reading or copying.
+ .
+ 7. Additional Terms. "Additional permissions" are terms that
+ supplement the terms of this License by making exceptions from one
+ or more of its conditions. Additional permissions that are
+ applicable to the entire Program shall be treated as though they
+ were included in this License, to the extent that they are valid
+ under applicable law.  If additional permissions apply only to part
+ of the Program, that part may be used separately under those
+ permissions, but the entire Program remains governed by this License
+ without regard to the additional permissions.
+ .
+ When you convey a copy of a covered work, you may at your option
+ remove any additional permissions from that copy, or from any part
+ of it.  (Additional permissions may be written to require their own
+ removal in certain cases when you modify the work.)  You may place
+ additional permissions on material, added by you to a covered work,
+ for which you have or can give appropriate copyright permission.
+ .
+ Notwithstanding any other provision of this License, for material
+ you add to a covered work, you may (if authorized by the copyright
+ holders of that material) supplement the terms of this License with
+ terms:
+ .
+     a) Disclaiming warranty or limiting liability differently from
+     the terms of sections 15 and 16 of this License; or
+ .
+     b) Requiring preservation of specified reasonable legal notices
+     or author attributions in that material or in the Appropriate
+     Legal Notices displayed by works containing it; or
+ .
+     c) Prohibiting misrepresentation of the origin of that material,
+     or requiring that modified versions of such material be marked
+     in reasonable ways as different from the original version; or
+ .
+     d) Limiting the use for publicity purposes of names of licensors
+     or authors of the material; or
+ .
+     e) Declining to grant rights under trademark law for use of some
+     trade names, trademarks, or service marks; or
+ .
+     f) Requiring indemnification of licensors and authors of that
+     material by anyone who conveys the material (or modified
+     versions of it) with contractual assumptions of liability to the
+     recipient, for any liability that these contractual assumptions
+     directly impose on those licensors and authors.
+ .
+ All other non-permissive additional terms are considered "further
+ restrictions" within the meaning of section 10.  If the Program as
+ you received it, or any part of it, contains a notice stating that
+ it is governed by this License along with a term that is a further
+ restriction, you may remove that term.  If a license document
+ contains a further restriction but permits relicensing or conveying
+ under this License, you may add to a covered work material governed
+ by the terms of that license document, provided that the further
+ restriction does not survive such relicensing or conveying.
+ .
+ If you add terms to a covered work in accord with this section, you
+ must place, in the relevant source files, a statement of the
+ additional terms that apply to those files, or a notice indicating
+ where to find the applicable terms.
+ .
+ Additional terms, permissive or non-permissive, may be stated in the
+ form of a separately written license, or stated as exceptions; the
+ above requirements apply either way.
+ .
+ 8. Termination.
+ .
+ You may not propagate or modify a covered work except as expressly
+ provided under this License.  Any attempt otherwise to propagate or
+ modify it is void, and will automatically terminate your rights
+ under this License (including any patent licenses granted under the
+ third paragraph of section 11).
+ .
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly and
+ finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+ .
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+ .
+ Termination of your rights under this section does not terminate the
+ licenses of parties who have received copies or rights from you
+ under this License.  If your rights have been terminated and not
+ permanently reinstated, you do not qualify to receive new licenses
+ for the same material under section 10.
+ .
+ 9. Acceptance Not Required for Having Copies.
+ .
+ You are not required to accept this License in order to receive or
+ run a copy of the Program.  Ancillary propagation of a covered work
+ occurring solely as a consequence of using peer-to-peer transmission
+ to receive a copy likewise does not require acceptance.  However,
+ nothing other than this License grants you permission to propagate
+ or modify any covered work.  These actions infringe copyright if you
+ do not accept this License.  Therefore, by modifying or propagating
+ a covered work, you indicate your acceptance of this License to do
+ so.
+ .
+ 10. Automatic Licensing of Downstream Recipients.
+ .
+ Each time you convey a covered work, the recipient automatically
+ receives a license from the original licensors, to run, modify and
+ propagate that work, subject to this License.  You are not
+ responsible for enforcing compliance by third parties with this
+ License.
+ .
+ An "entity transaction" is a transaction transferring control of an
+ organization, or substantially all assets of one, or subdividing an
+ organization, or merging organizations.  If propagation of a covered
+ work results from an entity transaction, each party to that
+ transaction who receives a copy of the work also receives whatever
+ licenses to the work the party's predecessor in interest had or
+ could give under the previous paragraph, plus a right to possession
+ of the Corresponding Source of the work from the predecessor in
+ interest, if the predecessor has it or can get it with reasonable
+ efforts.
+ .
+ You may not impose any further restrictions on the exercise of the
+ rights granted or affirmed under this License.  For example, you may
+ not impose a license fee, royalty, or other charge for exercise of
+ rights granted under this License, and you may not initiate
+ litigation (including a cross-claim or counterclaim in a lawsuit)
+ alleging that any patent claim is infringed by making, using,
+ selling, offering for sale, or importing the Program or any portion
+ of it.
+ .
+ 11. Patents.
+ .
+ A "contributor" is a copyright holder who authorizes use under this
+ License of the Program or a work on which the Program is based.  The
+ work thus licensed is called the contributor's "contributor
+ version".
+ .
+ A contributor's "essential patent claims" are all patent claims
+ owned or controlled by the contributor, whether already acquired or
+ hereafter acquired, that would be infringed by some manner,
+ permitted by this License, of making, using, or selling its
+ contributor version, but do not include claims that would be
+ infringed only as a consequence of further modification of the
+ contributor version.  For purposes of this definition, "control"
+ includes the right to grant patent sublicenses in a manner
+ consistent with the requirements of this License.
+ .
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+ patent license under the contributor's essential patent claims, to
+ make, use, sell, offer for sale, import and otherwise run, modify
+ and propagate the contents of its contributor version.
+ .
+ In the following three paragraphs, a "patent license" is any express
+ agreement or commitment, however denominated, not to enforce a
+ patent (such as an express permission to practice a patent or
+ covenant not to sue for patent infringement).  To "grant" such a
+ patent license to a party means to make such an agreement or
+ commitment not to enforce a patent against the party.
+ .
+ If you convey a covered work, knowingly relying on a patent license,
+ and the Corresponding Source of the work is not available for anyone
+ to copy, free of charge and under the terms of this License, through
+ a publicly available network server or other readily accessible
+ means, then you must either (1) cause the Corresponding Source to be
+ so available, or (2) arrange to deprive yourself of the benefit of
+ the patent license for this particular work, or (3) arrange, in a
+ manner consistent with the requirements of this License, to extend
+ the patent license to downstream recipients.  "Knowingly relying"
+ means you have actual knowledge that, but for the patent license,
+ your conveying the covered work in a country, or your recipient's
+ use of the covered work in a country, would infringe one or more
+ identifiable patents in that country that you have reason to believe
+ are valid.
+ .
+ If, pursuant to or in connection with a single transaction or
+ arrangement, you convey, or propagate by procuring conveyance of, a
+ covered work, and grant a patent license to some of the parties
+ receiving the covered work authorizing them to use, propagate,
+ modify or convey a specific copy of the covered work, then the
+ patent license you grant is automatically extended to all recipients
+ of the covered work and works based on it.
+ .
+ A patent license is "discriminatory" if it does not include within
+ the scope of its coverage, prohibits the exercise of, or is
+ conditioned on the non-exercise of one or more of the rights that
+ are specifically granted under this License.  You may not convey a
+ covered work if you are a party to an arrangement with a third party
+ that is in the business of distributing software, under which you
+ make payment to the third party based on the extent of your activity
+ of conveying the work, and under which the third party grants, to
+ any of the parties who would receive the covered work from you, a
+ discriminatory patent license (a) in connection with copies of the
+ covered work conveyed by you (or copies made from those copies), or
+ (b) primarily for and in connection with specific products or
+ compilations that contain the covered work, unless you entered into
+ that arrangement, or that patent license was granted, prior to 28
+ March 2007.
+ .
+ Nothing in this License shall be construed as excluding or limiting
+ any implied license or other defenses to infringement that may
+ otherwise be available to you under applicable patent law.
+ .
+ 12. No Surrender of Others' Freedom.
+ .
+ If conditions are imposed on you (whether by court order, agreement
+ or otherwise) that contradict the conditions of this License, they
+ do not excuse you from the conditions of this License.  If you
+ cannot convey a covered work so as to satisfy simultaneously your
+ obligations under this License and any other pertinent obligations,
+ then as a consequence you may not convey it at all.  For example, if
+ you agree to terms that obligate you to collect a royalty for
+ further conveying from those to whom you convey the Program, the
+ only way you could satisfy both those terms and this License would
+ be to refrain entirely from conveying the Program.
+ .
+ 13. Remote Network Interaction; Use with the GNU General Public
+ License.
+ .
+ Notwithstanding any other provision of this License, if you modify
+ the Program, your modified version must prominently offer all users
+ interacting with it remotely through a computer network (if your
+ version supports such interaction) an opportunity to receive the
+ Corresponding Source of your version by providing access to the
+ Corresponding Source from a network server at no charge, through
+ some standard or customary means of facilitating copying of
+ software.  This Corresponding Source shall include the Corresponding
+ Source for any work covered by version 3 of the GNU General Public
+ License that is incorporated pursuant to the following paragraph.
+ .
+ Notwithstanding any other provision of this License, you have
+ permission to link or combine any covered work with a work licensed
+ under version 3 of the GNU General Public License into a single
+ combined work, and to convey the resulting work.  The terms of this
+ License will continue to apply to the part which is the covered
+ work, but the work with which it is combined will remain governed by
+ version 3 of the GNU General Public License.
+ .
+ 14. Revised Versions of this License.
+ .
+ The Free Software Foundation may publish revised and/or new versions
+ of the GNU Affero General Public License from time to time.  Such
+ new versions will be similar in spirit to the present version, but
+ may differ in detail to address new problems or concerns.
+ .
+ Each version is given a distinguishing version number.  If the
+ Program specifies that a certain numbered version of the GNU Affero
+ General Public License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of that
+ numbered version or of any later version published by the Free
+ Software Foundation.  If the Program does not specify a version
+ number of the GNU Affero General Public License, you may choose any
+ version ever published by the Free Software Foundation.
+ .
+ If the Program specifies that a proxy can decide which future
+ versions of the GNU Affero General Public License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Program.
+ .
+ Later license versions may give you additional or different
+ permissions.  However, no additional obligations are imposed on any
+ author or copyright holder as a result of your choosing to follow a
+ later version.
+ .
+ 15. Disclaimer of Warranty.
+ .
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+ APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+ COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
+ RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
+ SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+ NECESSARY SERVICING, REPAIR OR CORRECTION.
+ .
+ 16. Limitation of Liability.
+ .
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
+ AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
+ DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
+ DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
+ (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
+ INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE
+ OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
+ HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGES.
+ .
+ 17. Interpretation of Sections 15 and 16.
+ .
+ If the disclaimer of warranty and limitation of liability provided
+ above cannot be given local legal effect according to their terms,
+ reviewing courts shall apply local law that most closely
+ approximates an absolute waiver of all civil liability in connection
+ with the Program, unless a warranty or assumption of liability
+ accompanies a copy of the Program in return for a fee.
+ .
+ END OF TERMS AND CONDITIONS
+ .
+             How to Apply These Terms to Your New Programs
+ .
+ If you develop a new program, and you want it to be of the greatest
+ possible use to the public, the best way to achieve this is to make
+ it free software which everyone can redistribute and change under
+ these terms.
+ .
+ To do so, attach the following notices to the program.  It is safest
+ to attach them to the start of each source file to most effectively
+ state the exclusion of warranty; and each file should have at least
+ the "copyright" line and a pointer to where the full notice is
+ found.
+ .
+      <one line to give the program's name and a brief idea of what
+      it does.> Copyright (C) <year>  <name of author>
+ .
+      This program is free software: you can redistribute it and/or
+      modify it under the terms of the GNU Affero General Public
+      License as published by the Free Software Foundation, either
+      version 3 of the License, or (at your option) any later
+      version.
+ .
+      This program is distributed in the hope that it will be useful,
+      but WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+      GNU Affero General Public License for more details.
+ .
+      You should have received a copy of the GNU Affero General
+      Public License along with this program.  If not, see
+      <http://www.gnu.org/licenses/>.
+ .
+ Also add information on how to contact you by electronic and paper
+ mail.
+ .
+ If your software can interact with users remotely through a computer
+ network, you should also make sure that it provides a way for users
+ to get its source.  For example, if your program is a web
+ application, its interface could display a "Source" link that leads
+ users to an archive of the code.  There are many ways you could
+ offer source, and different solutions will be better for different
+ programs; see section 13 for the specific requirements.
+ .
+ You should also get your employer (if you work as a programmer) or
+ school, if any, to sign a "copyright disclaimer" for the program, if
+ necessary. For more information on this, and how to apply and follow
+ the GNU AGPL, see <http://www.gnu.org/licenses/>.
+
+License: BSD-2-Clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ .
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ .
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+License: BSD-3-Clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ .
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ .
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+ .
+ 3. Neither the name of the copyright holder nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+License: CC-BY-SA-4.0
+ Creative Commons Attribution-ShareAlike 4.0 International Creative
+ Commons Corporation ("Creative Commons") is not a law firm and does
+ not provide legal services or legal advice. Distribution of Creative
+ Commons public licenses does not create a lawyer-client or other
+ relationship. Creative Commons makes its licenses and related
+ information available on an "as-is" basis. Creative Commons gives no
+ warranties regarding its licenses, any material licensed under their
+ terms and conditions, or any related information. Creative Commons
+ disclaims all liability for damages resulting from their use to the
+ fullest extent possible.
+ .
+ Using Creative Commons Public Licenses
+ .
+ Creative Commons public licenses provide a standard set of terms and
+ conditions that creators and other rights holders may use to share
+ original works of authorship and other material subject to copyright
+ and certain other rights specified in the public license below. The
+ following considerations are for informational purposes only, are
+ not exhaustive, and do not form part of our licenses.
+ .
+ Considerations for licensors: Our public licenses are intended for
+ use by those authorized to give the public permission to use
+ material in ways otherwise restricted by copyright and certain other
+ rights. Our licenses are irrevocable. Licensors should read and
+ understand the terms and conditions of the license they choose
+ before applying it. Licensors should also secure all rights
+ necessary before applying our licenses so that the public can reuse
+ the material as expected. Licensors should clearly mark any material
+ not subject to the license. This includes other CC-licensed
+ material, or material used under an exception or limitation to
+ copyright. More considerations for licensors :
+ wiki.creativecommons.org/Considerations_for_licensors
+ .
+ Considerations for the public: By using one of our public licenses,
+ a licensor grants the public permission to use the licensed material
+ under specified terms and conditions. If the licensor's permission
+ is not necessary for any reason–for example, because of any
+ applicable exception or limitation to copyright–then that use is not
+ regulated by the license. Our licenses grant only permissions under
+ copyright and certain other rights that a licensor has authority to
+ grant. Use of the licensed material may still be restricted for
+ other reasons, including because others have copyright or other
+ rights in the material. A licensor may make special requests, such
+ as asking that all changes be marked or described.
+ .
+ Although not required by our licenses, you are encouraged to respect
+ those requests where reasonable. More considerations for the public
+ : wiki.creativecommons.org/Considerations_for_licensees
+ .
+ Creative Commons Attribution-ShareAlike 4.0 International Public
+ License
+ .
+ By exercising the Licensed Rights (defined below), You accept and
+ agree to be bound by the terms and conditions of this Creative
+ Commons Attribution-ShareAlike 4.0 International Public License
+ ("Public License"). To the extent this Public License may be
+ interpreted as a contract, You are granted the Licensed Rights in
+ consideration of Your acceptance of these terms and conditions, and
+ the Licensor grants You such rights in consideration of benefits the
+ Licensor receives from making the Licensed Material available under
+ these terms and conditions.
+ .
+ Section 1 – Definitions.
+ .
+ a. Adapted Material means material subject to Copyright and Similar
+ Rights that is derived from or based upon the Licensed Material and
+ in which the Licensed Material is translated, altered, arranged,
+ transformed, or otherwise modified in a manner requiring permission
+ under the Copyright and Similar Rights held by the Licensor. For
+ purposes of this Public License, where the Licensed Material is a
+ musical work, performance, or sound recording, Adapted Material is
+ always produced where the Licensed Material is synched in timed
+ relation with a moving image.
+ .
+ b. Adapter's License means the license You apply to Your Copyright
+ and Similar Rights in Your contributions to Adapted Material in
+ accordance with the terms and conditions of this Public License.
+ .
+ c. BY-SA Compatible License means a license listed at
+ creativecommons.org/compatiblelicenses, approved by Creative Commons
+ as essentially the equivalent of this Public License.
+ .
+ d. Copyright and Similar Rights means copyright and/or similar
+ rights closely related to copyright including, without limitation,
+ performance, broadcast, sound recording, and Sui Generis Database
+ Rights, without regard to how the rights are labeled or categorized.
+ For purposes of this Public License, the rights specified in Section
+ 2(b)(1)-(2) are not Copyright and Similar Rights.
+ .
+ e. Effective Technological Measures means those measures that, in
+ the absence of proper authority, may not be circumvented under laws
+ fulfilling obligations under Article 11 of the WIPO Copyright Treaty
+ adopted on December 20, 1996, and/or similar international
+ agreements.
+ .
+ f. Exceptions and Limitations means fair use, fair dealing, and/or
+ any other exception or limitation to Copyright and Similar Rights
+ that applies to Your use of the Licensed Material.
+ .
+ g. License Elements means the license attributes listed in the name
+ of a Creative Commons Public License. The License Elements of this
+ Public License are Attribution and ShareAlike.
+ .
+ h. Licensed Material means the artistic or literary work, database,
+ or other material to which the Licensor applied this Public License.
+ .
+ i. Licensed Rights means the rights granted to You subject to the
+ terms and conditions of this Public License, which are limited to
+ all Copyright and Similar Rights that apply to Your use of the
+ Licensed Material and that the Licensor has authority to license.
+ .
+ j. Licensor means the individual(s) or entity(ies) granting rights
+ under this Public License.
+ .
+ k. Share means to provide material to the public by any means or
+ process that requires permission under the Licensed Rights, such as
+ reproduction, public display, public performance, distribution,
+ dissemination, communication, or importation, and to make material
+ available to the public including in ways that members of the public
+ may access the material from a place and at a time individually
+ chosen by them.
+ .
+ l. Sui Generis Database Rights means rights other than copyright
+ resulting from Directive 96/9/EC of the European Parliament and of
+ the Council of 11 March 1996 on the legal protection of databases,
+ as amended and/or succeeded, as well as other essentially equivalent
+ rights anywhere in the world.
+ .
+ m. You means the individual or entity exercising the Licensed Rights
+ under this Public License. Your has a corresponding meaning.
+ .
+ Section 2 – Scope.
+ .
+    a. License grant.
+ .
+ 1. Subject to the terms and conditions of this Public License, the
+ Licensor hereby grants You a worldwide, royalty-free,
+ non-sublicensable, non-exclusive, irrevocable license to exercise
+ the Licensed Rights in the Licensed Material to:
+ .
+          A. reproduce and Share the Licensed Material, in whole or
+          in part; and
+ .
+          B. produce, reproduce, and Share Adapted Material.
+ .
+ 2. Exceptions and Limitations. For the avoidance of doubt, where
+ Exceptions and Limitations apply to Your use, this Public License
+ does not apply, and You do not need to comply with its terms and
+ conditions.
+ .
+       3. Term. The term of this Public License is specified in
+       Section 6(a).
+ .
+ 4. Media and formats; technical modifications allowed. The Licensor
+ authorizes You to exercise the Licensed Rights in all media and
+ formats whether now known or hereafter created, and to make
+ technical modifications necessary to do so. The Licensor waives
+ and/or agrees not to assert any right or authority to forbid You
+ from making technical modifications necessary to exercise the
+ Licensed Rights, including technical modifications necessary to
+ circumvent Effective Technological Measures. For purposes of this
+ Public License, simply making modifications authorized by this
+ Section 2(a)(4) never produces Adapted Material.
+ .
+       5. Downstream recipients.
+ .
+ A. Offer from the Licensor – Licensed Material. Every recipient of
+ the Licensed Material automatically receives an offer from the
+ Licensor to exercise the Licensed Rights under the terms and
+ conditions of this Public License.
+ .
+ B. Additional offer from the Licensor – Adapted Material. Every
+ recipient of Adapted Material from You automatically receives an
+ offer from the Licensor to exercise the Licensed Rights in the
+ Adapted Material under the conditions of the Adapter's License You
+ apply.
+ .
+ C. No downstream restrictions. You may not offer or impose any
+ additional or different terms or conditions on, or apply any
+ Effective Technological Measures to, the Licensed Material if doing
+ so restricts exercise of the Licensed Rights by any recipient of the
+ Licensed Material.
+ .
+ 6. No endorsement. Nothing in this Public License constitutes or may
+ be construed as permission to assert or imply that You are, or that
+ Your use of the Licensed Material is, connected with, or sponsored,
+ endorsed, or granted official status by, the Licensor or others
+ designated to receive attribution as provided in Section
+ 3(a)(1)(A)(i).
+ .
+    b. Other rights.
+ .
+ 1. Moral rights, such as the right of integrity, are not licensed
+ under this Public License, nor are publicity, privacy, and/or other
+ similar personality rights; however, to the extent possible, the
+ Licensor waives and/or agrees not to assert any such rights held by
+ the Licensor to the limited extent necessary to allow You to
+ exercise the Licensed Rights, but not otherwise.
+ .
+ 2. Patent and trademark rights are not licensed under this Public
+ License.
+ .
+ 3. To the extent possible, the Licensor waives any right to collect
+ royalties from You for the exercise of the Licensed Rights, whether
+ directly or through a collecting society under any voluntary or
+ waivable statutory or compulsory licensing scheme. In all other
+ cases the Licensor expressly reserves any right to collect such
+ royalties.
+ .
+ Section 3 – License Conditions.
+ .
+ Your exercise of the Licensed Rights is expressly made subject to
+ the following conditions.
+ .
+    a. Attribution.
+ .
+ 1. If You Share the Licensed Material (including in modified form),
+ You must:
+ .
+ A. retain the following if it is supplied by the Licensor with the
+ Licensed Material:
+ .
+ i. identification of the creator(s) of the Licensed Material and any
+ others designated to receive attribution, in any reasonable manner
+ requested by the Licensor (including by pseudonym if designated);
+ .
+             ii. a copyright notice;
+ .
+             iii. a notice that refers to this Public License;
+ .
+             iv. a notice that refers to the disclaimer of
+             warranties;
+ .
+ v. a URI or hyperlink to the Licensed Material to the extent
+ reasonably practicable;
+ .
+ B. indicate if You modified the Licensed Material and retain an
+ indication of any previous modifications; and
+ .
+ C. indicate the Licensed Material is licensed under this Public
+ License, and include the text of, or the URI or hyperlink to, this
+ Public License.
+ .
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
+ reasonable manner based on the medium, means, and context in which
+ You Share the Licensed Material. For example, it may be reasonable
+ to satisfy the conditions by providing a URI or hyperlink to a
+ resource that includes the required information.
+ .
+ 3. If requested by the Licensor, You must remove any of the
+ information required by Section 3(a)(1)(A) to the extent reasonably
+ practicable.
+ .
+ b. ShareAlike.In addition to the conditions in Section 3(a), if You
+ Share Adapted Material You produce, the following conditions also
+ apply.
+ .
+ 1. The Adapter's License You apply must be a Creative Commons
+ license with the same License Elements, this version or later, or a
+ BY-SA Compatible License.
+ .
+ 2. You must include the text of, or the URI or hyperlink to, the
+ Adapter's License You apply. You may satisfy this condition in any
+ reasonable manner based on the medium, means, and context in which
+ You Share Adapted Material.
+ .
+ 3. You may not offer or impose any additional or different terms or
+ conditions on, or apply any Effective Technological Measures to,
+ Adapted Material that restrict exercise of the rights granted under
+ the Adapter's License You apply.
+ .
+ Section 4 – Sui Generis Database Rights.
+ .
+ Where the Licensed Rights include Sui Generis Database Rights that
+ apply to Your use of the Licensed Material:
+ .
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+ to extract, reuse, reproduce, and Share all or a substantial portion
+ of the contents of the database;
+ .
+ b. if You include all or a substantial portion of the database
+ contents in a database in which You have Sui Generis Database
+ Rights, then the database in which You have Sui Generis Database
+ Rights (but not its individual contents) is Adapted Material,
+ including for purposes of Section 3(b); and
+ .
+ c. You must comply with the conditions in Section 3(a) if You Share
+ all or a substantial portion of the contents of the database.
+ .
+ For the avoidance of doubt, this Section 4 supplements and does not
+ replace Your obligations under this Public License where the
+ Licensed Rights include other Copyright and Similar Rights.
+ .
+ Section 5 – Disclaimer of Warranties and Limitation of Liability.
+ .
+ a. Unless otherwise separately undertaken by the Licensor, to the
+ extent possible, the Licensor offers the Licensed Material as-is and
+ as-available, and makes no representations or warranties of any kind
+ concerning the Licensed Material, whether express, implied,
+ statutory, or other. This includes, without limitation, warranties
+ of title, merchantability, fitness for a particular purpose,
+ non-infringement, absence of latent or other defects, accuracy, or
+ the presence or absence of errors, whether or not known or
+ discoverable. Where disclaimers of warranties are not allowed in
+ full or in part, this disclaimer may not apply to You.
+ .
+ b. To the extent possible, in no event will the Licensor be liable
+ to You on any legal theory (including, without limitation,
+ negligence) or otherwise for any direct, special, indirect,
+ incidental, consequential, punitive, exemplary, or other losses,
+ costs, expenses, or damages arising out of this Public License or
+ use of the Licensed Material, even if the Licensor has been advised
+ of the possibility of such losses, costs, expenses, or damages.
+ Where a limitation of liability is not allowed in full or in part,
+ this limitation may not apply to You.
+ .
+ c. The disclaimer of warranties and limitation of liability provided
+ above shall be interpreted in a manner that, to the extent possible,
+ most closely approximates an absolute disclaimer and waiver of all
+ liability.
+ .
+ Section 6 – Term and Termination.
+ .
+ a. This Public License applies for the term of the Copyright and
+ Similar Rights licensed here. However, if You fail to comply with
+ this Public License, then Your rights under this Public License
+ terminate automatically.
+ .
+ b. Where Your right to use the Licensed Material has terminated
+ under Section 6(a), it reinstates:
+ .
+ 1. automatically as of the date the violation is cured, provided it
+ is cured within 30 days of Your discovery of the violation; or
+ .
+       2. upon express reinstatement by the Licensor.
+ .
+ c. For the avoidance of doubt, this Section 6(b) does not affect any
+ right the Licensor may have to seek remedies for Your violations of
+ this Public License.
+ .
+ d. For the avoidance of doubt, the Licensor may also offer the
+ Licensed Material under separate terms or conditions or stop
+ distributing the Licensed Material at any time; however, doing so
+ will not terminate this Public License.
+ .
+    e. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+    License.
+ .
+ Section 7 – Other Terms and Conditions.
+ .
+ a. The Licensor shall not be bound by any additional or different
+ terms or conditions communicated by You unless expressly agreed.
+ .
+ b. Any arrangements, understandings, or agreements regarding the
+ Licensed Material not stated herein are separate from and
+ independent of the terms and conditions of this Public License.
+ .
+ Section 8 – Interpretation.
+ .
+ a. For the avoidance of doubt, this Public License does not, and
+ shall not be interpreted to, reduce, limit, restrict, or impose
+ conditions on any use of the Licensed Material that could lawfully
+ be made without permission under this Public License.
+ .
+ b. To the extent possible, if any provision of this Public License
+ is deemed unenforceable, it shall be automatically reformed to the
+ minimum extent necessary to make it enforceable. If the provision
+ cannot be reformed, it shall be severed from this Public License
+ without affecting the enforceability of the remaining terms and
+ conditions.
+ .
+ c. No term or condition of this Public License will be waived and no
+ failure to comply consented to unless expressly agreed to by the
+ Licensor.
+ .
+ d. Nothing in this Public License constitutes or may be interpreted
+ as a limitation upon, or waiver of, any privileges and immunities
+ that apply to the Licensor or You, including from the legal
+ processes of any jurisdiction or authority.
+ .
+ Creative Commons is not a party to its public licenses.
+ Notwithstanding, Creative Commons may elect to apply one of its
+ public licenses to material it publishes and in those instances will
+ be considered the "Licensor." The text of the Creative Commons
+ public licenses is dedicated to the public domain under the CC0
+ Public Domain Dedication. Except for the limited purpose of
+ indicating that material is shared under a Creative Commons public
+ license or as otherwise permitted by the Creative Commons policies
+ published at creativecommons.org/policies, Creative Commons does not
+ authorize the use of the trademark "Creative Commons" or any other
+ trademark or logo of Creative Commons without its prior written
+ consent including, without limitation, in connection with any
+ unauthorized modifications to any of its public licenses or any
+ other arrangements, understandings, or agreements concerning use of
+ licensed material. For the avoidance of doubt, this paragraph does
+ not form part of the public licenses.
+ .
+ Creative Commons may be contacted at creativecommons.org.
+
+License: CC0-1.0
+ To the extent possible under law, the author(s) have dedicated all
+ copyright and related and neighboring rights to this software to the
+ public domain worldwide. This software is distributed without any
+ warranty.
+ .
+ You should have received a copy of the CC0 Public Domain Dedication
+ along with this software. If not, see
+ <https://creativecommons.org/publicdomain/zero/1.0/>.
+ .
+ On Debian systems, the complete text of the CC0 Public Domain
+ Dedication can be found in `/usr/share/common-licenses/CC0-1.0’.
+
+License: GPL-2.0-only
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2.
+ .
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA. Also add information on how to contact you by
+ electronic and paper mail.
+ .
+ On Debian systems, the complete text of the GNU General Public
+ License version 2 can be found in
+ `/usr/share/common-licenses/GPL-2’.
+
+License: GPL-2.0-or-later
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA. Also add information on how to contact you by
+ electronic and paper mail.
+ .
+ On Debian systems, the complete text of the GNU General Public
+ License version 2 can be found in
+ `/usr/share/common-licenses/GPL-2’.
+
+License: GPL-3.0-only
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GPL License as published by the Free
+ Software Foundation, version 3.
+ .
+ This package is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU General Public
+ License version 3 can be found in
+ `/usr/share/common-licenses/GPL-3’.
+
+License: GPL-3.0-or-later
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see
+ <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU General Public
+ License version 3 can be found in
+ `/usr/share/common-licenses/GPL-3’.
+
+License: LGPL-2.0-or-later
+ This library is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option)  any later version.
+ .
+ This library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Library General Public License for more details.
+ .
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+ .
+ On Debian systems, the complete text of the GNU Library General
+ Public License version 2 can be found in
+ `/usr/share/common-licenses/LGPL-2’.
+
+License: LGPL-2.1-only
+ This library is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version
+ 2.1 as published by the Free Software Foundation.
+ .
+ This library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Lesser General Public License for more details.
+ .
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301  USA Also add information on how to contact you by
+ electronic and paper mail.
+ .
+ On Debian systems, the complete text of the GNU Lesser General
+ Public License version 2.1 can be found in
+ `/usr/share/common-licenses/LGPL-2.1’.
+
+License: LGPL-2.1-or-later
+ This library is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+ .
+ This library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Lesser General Public License for more details.
+ .
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301  USA Also add information on how to contact you by
+ electronic and paper mail.
+ .
+ On Debian systems, the complete text of the GNU Lesser General
+ Public License version 2.1 can be found in
+ `/usr/share/common-licenses/LGPL-2.1’.
+
+License: LGPL-3.0-only
+ This library is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version
+ 3 as published by the Free Software Foundation.
+ .
+ This library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Lesser General Public License for more details.
+ .
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library.  If not, see
+ <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU Lesser General
+ Public License version 3 can be found in
+ `/usr/share/common-licenses/LGPL-3’.
+
+License: LicenseRef-KDE-Accepted-GPL
+ This library is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the license or (at
+ your option) at any later version that is accepted by the membership
+ of KDE e.V. (or its successor approved by the membership of KDE
+ e.V.), which shall act as a proxy as defined in Section 14 of
+ version 3 of the license.
+ .
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+License: LicenseRef-KDE-Accepted-LGPL
+ This library is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 3 of the
+ license or (at your option) any later version that is accepted by
+ the membership of KDE e.V. (or its successor approved by the
+ membership of KDE e.V.), which shall act as a proxy as defined in
+ Section 6 of version 3 of the license.
+ .
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+License: MIT
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of the Software,
+ and to permit persons to whom the Software is furnished to do so,
+ subject to the following conditions:
+ .
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
diff --git a/patches/series b/patches/series
new file mode 100644 (file)
index 0000000..8e9e995
--- /dev/null
@@ -0,0 +1,9 @@
+upstream_revert_357ef28c_accountpage-use-formlinkdelegate-for-open-ser.patch
+upstream_128cdaa7_Fix-a-crash-when-trying-to-block-an-account-through-the-post-menu.patch
+upstream_4f09a6e8_Add-mute-block-management-on-the-safety-page.patch
+upstream_5587bbb9_Use-QLatin1String-in-SocialGraphModel.patch
+upstream_fc886374_Playback-audio-in-video-attachments.patch
+upstream_9eb657e1_Fix-crash-when-trying-to-save-less-than-the-max-number-of-fields.patch
+upstream_b319e681_Add-a-toggle-in-account-settings-for-search-indexing.patch
+upstream_4643870b_Make-sure-that-toggling-account-options-affects-the-correct-account.patch
+upstream_df89658d_Fix-possible-erroneous-trailing-space-in-OAuth-scope-parameter.patch
diff --git a/patches/upstream_128cdaa7_Fix-a-crash-when-trying-to-block-an-account-through-the-post-menu.patch b/patches/upstream_128cdaa7_Fix-a-crash-when-trying-to-block-an-account-through-the-post-menu.patch
new file mode 100644 (file)
index 0000000..c24be89
--- /dev/null
@@ -0,0 +1,31 @@
+From 128cdaa75e4b18989248a0f293111918adcdcf51 Mon Sep 17 00:00:00 2001
+From: Joshua Goins <josh@redstrate.com>
+Date: Mon, 30 Jun 2025 16:19:09 -0400
+Subject: [PATCH] Fix a crash when trying to block an account through the post
+ menu
+
+Not sure why I try to access a non-existent identity property here,
+but it's fixed now.
+---
+ src/content/ui/PostDelegate/PostMenu.qml | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/content/ui/PostDelegate/PostMenu.qml b/src/content/ui/PostDelegate/PostMenu.qml
+index bf27c4ed7..2c7b4f770 100644
+--- a/src/content/ui/PostDelegate/PostMenu.qml
++++ b/src/content/ui/PostDelegate/PostMenu.qml
+@@ -181,9 +181,9 @@ Components.ConvergentContextMenu {
+         }
+         onTriggered: {
+             if (root.authorIdentity.relationship && root.authorIdentity.relationship.blocking) {
+-                AccountManager.selectedAccount.unblockAccount(root.authorIdentity.identity);
++                AccountManager.selectedAccount.unblockAccount(root.authorIdentity);
+             } else {
+-                AccountManager.selectedAccount.blockAccount(root.authorIdentity.identity);
++                AccountManager.selectedAccount.blockAccount(root.authorIdentity);
+             }
+         }
+     }
+-- 
+GitLab
+
diff --git a/patches/upstream_4643870b_Make-sure-that-toggling-account-options-affects-the-correct-account.patch b/patches/upstream_4643870b_Make-sure-that-toggling-account-options-affects-the-correct-account.patch
new file mode 100644 (file)
index 0000000..634e5e3
--- /dev/null
@@ -0,0 +1,94 @@
+From 4643870ba9b330c9069a77b3ec79e843ca112bcf Mon Sep 17 00:00:00 2001
+From: Joshua Goins <josh@redstrate.com>
+Date: Sun, 6 Jul 2025 21:53:13 -0400
+Subject: [PATCH] Make sure that toggling account options affects the correct
+ account
+
+(cherry picked from commit 8c8a0519a82fea6aaaf49f6022b4b497e66d07ae)
+---
+From: Aurélien COUDERC <coucouf@debian.org>
+Adapted to apply on top of the 357ef28c revert
+---
+ src/content/ui/Settings/AccountPage.qml | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/src/content/ui/Settings/AccountPage.qml b/src/content/ui/Settings/AccountPage.qml
+index 2345672d0..46d9b0df1 100644
+--- a/src/content/ui/Settings/AccountPage.qml
++++ b/src/content/ui/Settings/AccountPage.qml
+@@ -14,7 +14,7 @@ import ".."
+ Kirigami.Page {
+     id: root
+-    property var account
++    property AbstractAccount account
+     readonly property ProfileEditorBackend backend : ProfileEditorBackend {
+         account: root.account
+@@ -167,8 +167,8 @@ Kirigami.Page {
+                     FormCard.FormSwitchDelegate {
+                         text: i18nc("@label Account preferences", "Mark uploaded media as sensitive by default")
+-                        checked: AccountManager.selectedAccount.preferences.defaultSensitive
+-                        onToggled: AccountManager.selectedAccount.preferences.defaultSensitive = checked
++                        checked: root.account.preferences.defaultSensitive
++                        onToggled: root.account.preferences.defaultSensitive = checked
+                     }
+                     FormCard.FormDelegateSeparator {
+@@ -176,8 +176,8 @@ Kirigami.Page {
+                     FormCard.FormSwitchDelegate {
+                         text: i18nc("@label Account preferences", "Include public posts in search results")
+-                        checked: AccountManager.selectedAccount.preferences.indexable
+-                        onToggled: AccountManager.selectedAccount.preferences.indexable = checked
++                        checked: root.account.preferences.indexable
++                        onToggled: root.account.preferences.indexable = checked
+                     }
+                     FormCard.FormDelegateSeparator {
+@@ -185,7 +185,7 @@ Kirigami.Page {
+                     FormCard.FormButtonDelegate {
+                         text: i18nc("@label Account preferences", "Default post language")
+-                        description: Qt.locale(AccountManager.selectedAccount.preferences.defaultLanguage).nativeLanguageName
++                        description: Qt.locale(root.account.preferences.defaultLanguage).nativeLanguageName
+                         onClicked: languageSelect.createObject().open()
+@@ -195,10 +195,10 @@ Kirigami.Page {
+                             LanguageSelector {
+                                 parent: root.QQC2.Overlay.overlay
+                                 onAboutToShow: {
+-                                    const sourceIndex = listView.model.sourceModel.indexOfValue(AccountManager.selectedAccount.preferences.defaultLanguage);
++                                    const sourceIndex = listView.model.sourceModel.indexOfValue(root.account.preferences.defaultLanguage);
+                                     listView.currentIndex = listView.model.mapFromSource(sourceIndex).row;
+                                 }
+-                                onCodeSelected: code => AccountManager.selectedAccount.preferences.defaultLanguage = code
++                                onCodeSelected: code => root.account.preferences.defaultLanguage = code
+                                 onClosed: destroyed()
+                             }
+                         }
+@@ -216,8 +216,8 @@ Kirigami.Page {
+                             i18nc("@item:inlistbox Default post visibility rule", "Unlisted"),
+                             i18nc("@item:inlistbox Default post visibility rule", "Private")
+                         ]
+-                        Component.onCompleted: currentIndex = AccountManager.selectedAccount.preferences.defaultVisibility
+-                        onCurrentValueChanged: AccountManager.selectedAccount.preferences.defaultVisibility = currentIndex
++                        Component.onCompleted: currentIndex = root.account.preferences.defaultVisibility
++                        onCurrentValueChanged: root.account.preferences.defaultVisibility = currentIndex
+                     }
+                     FormCard.FormDelegateSeparator {
+@@ -229,7 +229,7 @@ Kirigami.Page {
+                         id: websiteDelegate
+                         text: i18nc("@abel Account preferences", "Open Server in Browser")
+                         description: i18n("Some settings can only be configured on your server's website.")
+-                        onClicked: Qt.openUrlExternally(AccountManager.selectedAccount.instanceUri)
++                        onClicked: Qt.openUrlExternally(root.account.instanceUri)
+                     }
+                 }
+             }
+-- 
+GitLab
+
diff --git a/patches/upstream_4f09a6e8_Add-mute-block-management-on-the-safety-page.patch b/patches/upstream_4f09a6e8_Add-mute-block-management-on-the-safety-page.patch
new file mode 100644 (file)
index 0000000..06dd435
--- /dev/null
@@ -0,0 +1,130 @@
+From 4f09a6e861c0ce1d2f629654047b026bc0167a9e Mon Sep 17 00:00:00 2001
+From: Joshua Goins <josh@redstrate.com>
+Date: Mon, 30 Jun 2025 16:19:34 -0400
+Subject: [PATCH] Add mute/block management on the safety page
+
+This allows you to manage your muted/blocked users without having to
+navigate to their profile first.
+
+CCBUG: 506374
+---
+ src/account/socialgraphmodel.cpp   | 40 ++++++++++++++++++++++++++++++
+ src/account/socialgraphmodel.h     |  6 +++++
+ src/content/ui/SocialGraphPage.qml | 12 +++++++++
+ 3 files changed, 58 insertions(+)
+
+diff --git a/src/account/socialgraphmodel.cpp b/src/account/socialgraphmodel.cpp
+index 6eb2443c2..afc54b701 100644
+--- a/src/account/socialgraphmodel.cpp
++++ b/src/account/socialgraphmodel.cpp
+@@ -251,6 +251,16 @@ bool SocialGraphModel::isList() const
+     return m_followListName == QStringLiteral("list");
+ }
++bool SocialGraphModel::isBlockList() const
++{
++    return m_followListName == QStringLiteral("blocks");
++}
++
++bool SocialGraphModel::isMuteList() const
++{
++    return m_followListName == QStringLiteral("mutes");
++}
++
+ void SocialGraphModel::actionAllow(const QModelIndex &index)
+ {
+     auto account = AccountManager::instance().selectedAccount();
+@@ -371,6 +381,36 @@ void SocialGraphModel::actionAddToList(const QString &accountId)
+     });
+ }
++void SocialGraphModel::actionUnblock(const QModelIndex &index)
++{
++    auto account = AccountManager::instance().selectedAccount();
++
++    if (!checkIndex(index, QAbstractItemModel::CheckIndexOption::IndexIsValid))
++        return;
++
++    auto requestIdentity = m_accounts[index.row()].get();
++    account->unblockAccount(requestIdentity);
++
++    beginRemoveRows({}, index.row(), index.row());
++    m_accounts.removeAt(index.row());
++    endRemoveRows();
++}
++
++void SocialGraphModel::actionUnmute(const QModelIndex &index)
++{
++    auto account = AccountManager::instance().selectedAccount();
++
++    if (!checkIndex(index, QAbstractItemModel::CheckIndexOption::IndexIsValid))
++        return;
++
++    auto requestIdentity = m_accounts[index.row()].get();
++    account->unmuteAccount(requestIdentity);
++
++    beginRemoveRows({}, index.row(), index.row());
++    m_accounts.removeAt(index.row());
++    endRemoveRows();
++}
++
+ bool SocialGraphModel::canFetchMore(const QModelIndex &parent) const
+ {
+     Q_UNUSED(parent);
+diff --git a/src/account/socialgraphmodel.h b/src/account/socialgraphmodel.h
+index 4bf6fceb7..918041923 100644
+--- a/src/account/socialgraphmodel.h
++++ b/src/account/socialgraphmodel.h
+@@ -23,6 +23,8 @@ class SocialGraphModel : public QAbstractListModel
+     Q_PROPERTY(bool isFollowing READ isFollowing CONSTANT)
+     Q_PROPERTY(bool isFollower READ isFollower CONSTANT)
+     Q_PROPERTY(bool isList READ isList CONSTANT)
++    Q_PROPERTY(bool isMuteList READ isMuteList CONSTANT)
++    Q_PROPERTY(bool isBlockList READ isBlockList CONSTANT)
+     /**
+      * @brief The account id of the account we want to display
+@@ -56,6 +58,8 @@ public:
+     [[nodiscard]] bool isFollowing() const;
+     [[nodiscard]] bool isFollower() const;
+     [[nodiscard]] bool isList() const;
++    [[nodiscard]] bool isMuteList() const;
++    [[nodiscard]] bool isBlockList() const;
+     [[nodiscard]] QString statusId() const;
+     void setStatusId(const QString &statusId);
+     [[nodiscard]] int count() const;
+@@ -70,6 +74,8 @@ public Q_SLOTS:
+     void actionRemoveFollower(const QModelIndex &index);
+     void actionRemoveFromList(const QModelIndex &index);
+     void actionAddToList(const QString &accountId);
++    void actionUnblock(const QModelIndex &index);
++    void actionUnmute(const QModelIndex &index);
+ Q_SIGNALS:
+     void loadingChanged();
+diff --git a/src/content/ui/SocialGraphPage.qml b/src/content/ui/SocialGraphPage.qml
+index 2bc6db9b4..9133cb305 100644
+--- a/src/content/ui/SocialGraphPage.qml
++++ b/src/content/ui/SocialGraphPage.qml
+@@ -94,6 +94,18 @@ Kirigami.ScrollablePage {
+                         onClicked: model.actionRemoveFromList(model.index(delegate.index, 0))
+                         visible: model.isList && model.accountId === AccountManager.selectedAccount.identity.id
+                     }
++
++                    QQC2.Button {
++                        text: i18nc("@action:button Unblock this user", "Unblock")
++                        onClicked: model.actionUnblock(model.index(delegate.index, 0))
++                        visible: model.isBlockList
++                    }
++
++                    QQC2.Button {
++                        text: i18nc("@action:button Unmute this user", "Unmute")
++                        onClicked: model.actionUnmute(model.index(delegate.index, 0))
++                        visible: model.isMuteList
++                    }
+                 }
+                 QQC2.ProgressBar {
+-- 
+GitLab
+
diff --git a/patches/upstream_5587bbb9_Use-QLatin1String-in-SocialGraphModel.patch b/patches/upstream_5587bbb9_Use-QLatin1String-in-SocialGraphModel.patch
new file mode 100644 (file)
index 0000000..3805040
--- /dev/null
@@ -0,0 +1,55 @@
+From 5587bbb9b5f17d54e7f2044218662d3693f5f77a Mon Sep 17 00:00:00 2001
+From: Joshua Goins <josh@redstrate.com>
+Date: Mon, 30 Jun 2025 18:17:15 -0400
+Subject: [PATCH] Use QLatin1String in SocialGraphModel
+
+---
+ src/account/socialgraphmodel.cpp | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/src/account/socialgraphmodel.cpp b/src/account/socialgraphmodel.cpp
+index afc54b701..92a228fbe 100644
+--- a/src/account/socialgraphmodel.cpp
++++ b/src/account/socialgraphmodel.cpp
+@@ -233,32 +233,32 @@ void SocialGraphModel::setLoading(bool loading)
+ bool SocialGraphModel::isFollowRequest() const
+ {
+-    return m_followListName == QStringLiteral("request");
++    return m_followListName == "request"_L1;
+ }
+ bool SocialGraphModel::isFollowing() const
+ {
+-    return m_followListName == QStringLiteral("following");
++    return m_followListName == "following"_L1;
+ }
+ bool SocialGraphModel::isFollower() const
+ {
+-    return m_followListName == QStringLiteral("followers");
++    return m_followListName == "followers"_L1;
+ }
+ bool SocialGraphModel::isList() const
+ {
+-    return m_followListName == QStringLiteral("list");
++    return m_followListName == "list"_L1;
+ }
+ bool SocialGraphModel::isBlockList() const
+ {
+-    return m_followListName == QStringLiteral("blocks");
++    return m_followListName == "blocks"_L1;
+ }
+ bool SocialGraphModel::isMuteList() const
+ {
+-    return m_followListName == QStringLiteral("mutes");
++    return m_followListName == "mutes"_L1;
+ }
+ void SocialGraphModel::actionAllow(const QModelIndex &index)
+-- 
+GitLab
+
diff --git a/patches/upstream_9eb657e1_Fix-crash-when-trying-to-save-less-than-the-max-number-of-fields.patch b/patches/upstream_9eb657e1_Fix-crash-when-trying-to-save-less-than-the-max-number-of-fields.patch
new file mode 100644 (file)
index 0000000..ad0e7d8
--- /dev/null
@@ -0,0 +1,27 @@
+From 9eb657e17e6596e007cfaf3524d11d37c5a9148b Mon Sep 17 00:00:00 2001
+From: Joshua Goins <josh@redstrate.com>
+Date: Sun, 6 Jul 2025 21:50:54 -0400
+Subject: [PATCH] Fix crash when trying to save less than the max number of
+ fields
+
+(cherry picked from commit 049ce8700af96134a0fcfc575016514b4ae0e912)
+---
+ src/account/profileeditor.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/account/profileeditor.cpp b/src/account/profileeditor.cpp
+index ea402f11f..0ab785e62 100644
+--- a/src/account/profileeditor.cpp
++++ b/src/account/profileeditor.cpp
+@@ -292,7 +292,7 @@ void ProfileEditorBackend::save()
+     discoverablePart.setBody(discoverable() ? "1" : "0");
+     multiPart->append(discoverablePart);
+-    for (int i = 0; i < maxFields(); i++) {
++    for (int i = 0; i < m_fields.size(); i++) {
+         QHttpPart fieldNamePart;
+         fieldNamePart.setHeader(QNetworkRequest::ContentDispositionHeader, QStringLiteral("form-data; name=\"fields_attributes[%1][name]\"").arg(i));
+         fieldNamePart.setBody(m_fields[i]["name"_L1].toString().toUtf8());
+-- 
+GitLab
+
diff --git a/patches/upstream_b319e681_Add-a-toggle-in-account-settings-for-search-indexing.patch b/patches/upstream_b319e681_Add-a-toggle-in-account-settings-for-search-indexing.patch
new file mode 100644 (file)
index 0000000..3bc4d55
--- /dev/null
@@ -0,0 +1,129 @@
+From b319e6816101d0a997603983c402fc2c87726d89 Mon Sep 17 00:00:00 2001
+From: Joshua Goins <josh@redstrate.com>
+Date: Sun, 6 Jul 2025 21:52:01 -0400
+Subject: [PATCH] Add a toggle in account settings for search indexing
+
+This was added in Mastodon 4.3.0 but I missed it.
+
+(cherry picked from commit 39622f624be636fd0ca8d478ef27632eb37ad428)
+---
+ src/account/preferences.cpp             | 19 +++++++++++++++++++
+ src/account/preferences.h               | 20 ++++++++++++++++++++
+ src/content/ui/Settings/AccountPage.qml |  9 +++++++++
+ 3 files changed, 48 insertions(+)
+
+diff --git a/src/account/preferences.cpp b/src/account/preferences.cpp
+index 2b3feeca8..0d35a7632 100644
+--- a/src/account/preferences.cpp
++++ b/src/account/preferences.cpp
+@@ -26,11 +26,13 @@ Preferences::Preferences(AbstractAccount *account)
+             m_defaultVisibility = Post::stringToVisibility(obj[QStringLiteral("posting:default:visibility")].toString());
+             m_extendSpoiler = obj[QStringLiteral("reading:expand:spoilers")].toBool();
+             m_extendMedia = obj[QStringLiteral("reading:expand:media")].toString();
++            m_indexable = obj[QStringLiteral("indexable")].toBool();
+             Q_EMIT defaultVisibilityChanged();
+             Q_EMIT defaultSensitiveChanged();
+             Q_EMIT defaultLanguageChanged();
+             Q_EMIT extendMediaChanged();
+             Q_EMIT extendSpoilerChanged();
++            Q_EMIT indexableChanged();
+         });
+     });
+ }
+@@ -100,6 +102,23 @@ bool Preferences::extendSpoiler() const
+     return m_extendSpoiler;
+ }
++bool Preferences::indexable() const
++{
++    return m_indexable;
++}
++
++void Preferences::setIndexable(bool indexable)
++{
++    if (indexable == m_indexable) {
++        return;
++    }
++
++    m_indexable = indexable;
++    Q_EMIT indexableChanged();
++
++    setPreferencesField(QStringLiteral("indexable"), indexable ? QStringLiteral("true") : QStringLiteral("false"));
++}
++
+ void Preferences::setPreferencesField(const QString &name, const QString &value)
+ {
+     const auto multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
+diff --git a/src/account/preferences.h b/src/account/preferences.h
+index 31463a5e1..ec1f917a5 100644
+--- a/src/account/preferences.h
++++ b/src/account/preferences.h
+@@ -17,6 +17,7 @@ class Preferences final : public QObject
+     Q_PROPERTY(QString defaultLanguage READ defaultLanguage WRITE setDefaultLanguage NOTIFY defaultLanguageChanged)
+     Q_PROPERTY(QString extendMedia READ extendMedia NOTIFY extendMediaChanged)
+     Q_PROPERTY(bool extendSpoiler READ extendSpoiler NOTIFY extendSpoilerChanged)
++    Q_PROPERTY(bool indexable READ indexable WRITE setIndexable NOTIFY indexableChanged)
+ public:
+     explicit Preferences(AbstractAccount *account);
+@@ -72,6 +73,19 @@ public:
+      */
+     [[nodiscard]] bool extendSpoiler() const;
++    /**
++     * @return Whether public posts should be indexed.
++     * @see setIndexable()
++     */
++    [[nodiscard]] bool indexable() const;
++
++    /**
++     * @brief Set whether public posts should be indexed.
++     * @param indexable Whether or not public posts are indexed.
++     * @see indexable()
++     */
++    void setIndexable(bool indexable);
++
+ Q_SIGNALS:
+     /**
+      * @brief Emitted when the default status visibility preference has been changed.
+@@ -101,6 +115,11 @@ Q_SIGNALS:
+      */
+     void extendSpoilerChanged();
++    /**
++     * @brief Emitted when the indexable preference has been changed.
++     */
++    void indexableChanged();
++
+ private:
+     void setPreferencesField(const QString &name, const QString &value);
+@@ -111,4 +130,5 @@ private:
+     QString m_defaultLanguage;
+     QString m_extendMedia;
+     bool m_extendSpoiler;
++    bool m_indexable;
+ };
+diff --git a/src/content/ui/Settings/AccountPage.qml b/src/content/ui/Settings/AccountPage.qml
+index 255f6c00c..2345672d0 100644
+--- a/src/content/ui/Settings/AccountPage.qml
++++ b/src/content/ui/Settings/AccountPage.qml
+@@ -174,6 +174,15 @@ Kirigami.Page {
+                     FormCard.FormDelegateSeparator {
+                     }
++                    FormCard.FormSwitchDelegate {
++                        text: i18nc("@label Account preferences", "Include public posts in search results")
++                        checked: AccountManager.selectedAccount.preferences.indexable
++                        onToggled: AccountManager.selectedAccount.preferences.indexable = checked
++                    }
++
++                    FormCard.FormDelegateSeparator {
++                    }
++
+                     FormCard.FormButtonDelegate {
+                         text: i18nc("@label Account preferences", "Default post language")
+                         description: Qt.locale(AccountManager.selectedAccount.preferences.defaultLanguage).nativeLanguageName
+-- 
+GitLab
+
diff --git a/patches/upstream_df89658d_Fix-possible-erroneous-trailing-space-in-OAuth-scope-parameter.patch b/patches/upstream_df89658d_Fix-possible-erroneous-trailing-space-in-OAuth-scope-parameter.patch
new file mode 100644 (file)
index 0000000..1fcc844
--- /dev/null
@@ -0,0 +1,29 @@
+From df89658d6fb62136b3c28a2122862d33b0320098 Mon Sep 17 00:00:00 2001
+From: Joshua Goins <josh@redstrate.com>
+Date: Mon, 14 Jul 2025 20:11:56 -0400
+Subject: [PATCH] Fix possible erroneous trailing space in OAuth scope
+ parameter
+
+(cherry picked from commit f17762668e9c9f27b4b338dbed6ec4cb3824772d)
+
+Co-authored-by: Laura Hausmann <laura@hausmann.dev>
+---
+ src/account/abstractaccount.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/account/abstractaccount.cpp b/src/account/abstractaccount.cpp
+index a4a0a1fe8..2f6865f46 100644
+--- a/src/account/abstractaccount.cpp
++++ b/src/account/abstractaccount.cpp
+@@ -156,7 +156,7 @@ void AbstractAccount::registerApplication(const QString &appName, const QString
+     const QJsonObject obj{
+         {QStringLiteral("client_name"), appName},
+         {QStringLiteral("redirect_uris"), m_redirectUri},
+-        {QStringLiteral("scopes"), QStringLiteral("read write follow %1").arg(m_additionalScopes)},
++        {QStringLiteral("scopes"), QStringLiteral("read write follow %1").arg(m_additionalScopes).trimmed()},
+         {QStringLiteral("website"), website},
+     };
+     const QJsonDocument doc(obj);
+-- 
+GitLab
+
diff --git a/patches/upstream_fc886374_Playback-audio-in-video-attachments.patch b/patches/upstream_fc886374_Playback-audio-in-video-attachments.patch
new file mode 100644 (file)
index 0000000..d89e6ce
--- /dev/null
@@ -0,0 +1,177 @@
+From fc8863740c26cb2c2a2aa3ba87cf199a98968048 Mon Sep 17 00:00:00 2001
+From: Joshua Goins <josh@redstrate.com>
+Date: Mon, 30 Jun 2025 19:38:05 -0400
+Subject: [PATCH] Playback audio in video attachments
+
+When porting to QtMultimedia fully, I forgot that we needed to manually
+add a VideoOutput too.
+
+CCBUG: 505303
+
+TODO:
+* Fix the volume control hiding when it shouldn't, and test on mobile
+---
+ src/content/ui/Components/VideoPlayer.qml     |  4 +
+ .../ui/PostDelegate/VideoAttachment.qml       | 90 ++++++++++++++++++-
+ 2 files changed, 93 insertions(+), 1 deletion(-)
+
+diff --git a/src/content/ui/Components/VideoPlayer.qml b/src/content/ui/Components/VideoPlayer.qml
+index f5e2a6a07..c8dc704c8 100644
+--- a/src/content/ui/Components/VideoPlayer.qml
++++ b/src/content/ui/Components/VideoPlayer.qml
+@@ -17,6 +17,7 @@ Item {
+     property alias source: player.source
+     property alias position: player.position
+     property bool looping
++    property alias volume: audioOutput.volume
+     signal errorOccurred(error: int, errorString: string)
+@@ -35,6 +36,9 @@ Item {
+     MediaPlayer {
+         id: player
+         videoOutput: videoOutput
++        audioOutput: AudioOutput {
++            id: audioOutput
++        }
+         loops: root.looping ? MediaPlayer.Infinite : 0
+         onMediaStatusChanged: {
+diff --git a/src/content/ui/PostDelegate/VideoAttachment.qml b/src/content/ui/PostDelegate/VideoAttachment.qml
+index 91f78047c..58a19936b 100644
+--- a/src/content/ui/PostDelegate/VideoAttachment.qml
++++ b/src/content/ui/PostDelegate/VideoAttachment.qml
+@@ -21,6 +21,7 @@ MediaContainer {
+     property alias showControls: mediaControls.visible
+     property bool looping: false
+     property alias loading: busyIndicator.visible
++    property real volume: 1.0
+     signal errorOccurred(error: int, errorString: string)
+@@ -56,6 +57,7 @@ MediaContainer {
+             source: root.videoUrl
+             looping: root.looping
+             onErrorOccurred: (error, errorString) => root.errorOccurred(error, errorString)
++            volume: root.volume
+         }
+     }
+@@ -78,6 +80,13 @@ MediaContainer {
+     HoverHandler {
+         id: hoverHandler
++
++        acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
++        onHoveredChanged: {
++            if (hovered) {
++                mediaControlsHideTimer.restart();
++            }
++        }
+     }
+     QQC2.BusyIndicator {
+@@ -132,13 +141,18 @@ MediaContainer {
+         radius: Kirigami.Units.cornerRadius
+         color: Kirigami.Theme.backgroundColor
+-        opacity: hoverHandler.hovered && !root.isSensitive && !(player.item?.paused ?? true) && !(player.item?.stopped ?? true) ? 0.7 : 0.0
++        opacity: (mediaControlsHideTimer.running || volumePopupTimer || hoverHandler.hovered) && !root.isSensitive && !(player.item?.paused ?? true) && !(player.item?.stopped ?? true) ? 0.7 : 0.0
+         Behavior on opacity {
+             OpacityAnimator {
+                 duration: Kirigami.Units.longDuration
+             }
+         }
++        Timer {
++            id: mediaControlsHideTimer
++            interval: 5000
++        }
++
+         RowLayout {
+             id: mediaControlsLayout
+             anchors.fill: parent
+@@ -173,6 +187,80 @@ MediaContainer {
+                 onMoved: player.item?.setPosition(value)
+             }
++
++            QQC2.ToolButton {
++                id: volumeButton
++
++                property var unmuteVolume: root.volume
++
++                icon.name: root.volume <= 0 ? "player-volume-muted-symbolic" : "player-volume-symbolic"
++
++                QQC2.ToolTip.visible: hovered
++                QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
++                QQC2.ToolTip.timeout: Kirigami.Units.toolTipDelay
++                QQC2.ToolTip.text: i18nc("@action:button", "Volume")
++
++                onClicked: {
++                    if (root.volume > 0) {
++                        root.volume = 0;
++                    } else  if (unmuteVolume === 0) {
++                        root.volume = 1;
++                    } else {
++                        root.volume = unmuteVolume;
++                    }
++                }
++
++                QQC2.Popup {
++                    id: volumePopup
++                    y: -height
++                    width: volumeButton.width
++                    visible: (volumeButton.hovered || volumePopupHoverHandler.hovered || volumeSlider.hovered || volumePopupTimer.running)
++
++                    focus: true
++                    padding: Kirigami.Units.smallSpacing
++                    closePolicy: QQC2.Popup.NoAutoClose
++
++                    QQC2.Slider {
++                        id: volumeSlider
++                        anchors.centerIn: parent
++                        implicitHeight: Kirigami.Units.gridUnit * 7
++                        orientation: Qt.Vertical
++                        padding: 0
++                        from: 0
++                        to: 1
++                        value: root.volume
++                        onMoved: {
++                            root.volume = value;
++                            volumeButton.unmuteVolume = value;
++                        }
++                    }
++                    Timer {
++                        id: volumePopupTimer
++                        interval: 1000
++                    }
++                    HoverHandler {
++                        id: volumePopupHoverHandler
++
++                        onHoveredChanged: {
++                            if (hovered) {
++                                volumePopupTimer.restart();
++                            }
++                        }
++                    }
++                    background: Kirigami.ShadowedRectangle {
++                        radius: Kirigami.Units.cornerRadius
++                        color: Kirigami.Theme.backgroundColor
++                        opacity: 0.8
++
++                        shadow {
++                            xOffset: 0
++                            yOffset: 4
++                            color: Qt.rgba(0, 0, 0, 0.3)
++                            size: Kirigami.Units.largeSpacing
++                       }
++                    }
++                }
++            }
+         }
+     }
+ }
+-- 
+GitLab
+
diff --git a/patches/upstream_revert_357ef28c_accountpage-use-formlinkdelegate-for-open-ser.patch b/patches/upstream_revert_357ef28c_accountpage-use-formlinkdelegate-for-open-ser.patch
new file mode 100644 (file)
index 0000000..bcd40b7
--- /dev/null
@@ -0,0 +1,34 @@
+From 9f072ecdff448bd7448267271aa7ef7a55445c39 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Aur=C3=A9lien=20COUDERC?= <coucouf@coucouf.fr>
+Date: Thu, 24 Jul 2025 18:48:58 +0200
+Subject: [PATCH] Revert "AccountPage: Use FormLinkDelegate for "Open Server in
+ Browser" button"
+
+This reverts commit 357ef28c2b91b724874797514b5bdffd86b727c5.
+---
+ src/content/ui/Settings/AccountPage.qml | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/content/ui/Settings/AccountPage.qml b/src/content/ui/Settings/AccountPage.qml
+index 04e1b050..c8612bb5 100644
+--- a/src/content/ui/Settings/AccountPage.qml
++++ b/src/content/ui/Settings/AccountPage.qml
+@@ -213,13 +213,12 @@ Kirigami.Page {
+                     FormCard.FormDelegateSeparator {
+                     }
+-                    FormCard.FormLinkDelegate {
++                    FormCard.FormButtonDelegate {
+                         Layout.fillWidth: true
+                         id: websiteDelegate
+-                        icon.name: "globe-symbolic"
+                         text: i18nc("@abel Account preferences", "Open Server in Browser")
+                         description: i18n("Some settings can only be configured on your server's website.")
+-                        url: AccountManager.selectedAccount.instanceUri
++                        onClicked: Qt.openUrlExternally(AccountManager.selectedAccount.instanceUri)
+                     }
+                 }
+             }
+-- 
+2.50.0
+
diff --git a/qmldeps.optional b/qmldeps.optional
new file mode 100644 (file)
index 0000000..4d54729
--- /dev/null
@@ -0,0 +1 @@
+QtWebView
diff --git a/qmldeps.overrides b/qmldeps.overrides
new file mode 100644 (file)
index 0000000..e960857
--- /dev/null
@@ -0,0 +1,2 @@
+org.kde.tokodon tokodon
+org.kde.tokodon.private tokodon
diff --git a/rules b/rules
new file mode 100755 (executable)
index 0000000..72e6621
--- /dev/null
+++ b/rules
@@ -0,0 +1,9 @@
+#!/usr/bin/make -f
+
+export DEB_BUILD_MAINT_OPTIONS = hardening=+all
+
+%:
+       dh $@
+
+override_dh_auto_test:
+       xvfb-run -a dh_auto_test
diff --git a/salsa-ci.yml b/salsa-ci.yml
new file mode 100644 (file)
index 0000000..31e31c9
--- /dev/null
@@ -0,0 +1,6 @@
+include:
+  - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml
+  - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml
+variables:
+  SALSA_CI_DISABLE_MISSING_BREAKS: 'no'
+  SALSA_CI_DISABLE_RC_BUGS: 'no'
diff --git a/source/format b/source/format
new file mode 100644 (file)
index 0000000..163aaf8
--- /dev/null
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/upstream/metadata b/upstream/metadata
new file mode 100644 (file)
index 0000000..d1e77c2
--- /dev/null
@@ -0,0 +1,7 @@
+Bug-Database: https://bugs.kde.org/buglist.cgi?product=tokodon&resolution=---
+Bug-Submit: https://bugs.kde.org/enter_bug.cgi?format=guided&product=tokodon
+Changelog: https://invent.kde.org/network/tokodon/-/commits/
+Donation: https://www.kde.org/community/donations/
+Repository: https://invent.kde.org/network/tokodon.git
+Repository-Browse: https://invent.kde.org/network/tokodon
+Security-Contact: security@kde.org
diff --git a/upstream/signing-key.asc b/upstream/signing-key.asc
new file mode 100644 (file)
index 0000000..a9bed94
--- /dev/null
@@ -0,0 +1,158 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+xFvzcCS8ghlF
+=NTMM
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBFlRpEYBCACecX3F5xzF6wzeXiuBAuHq74bVHON7I89U+ROloEWYUYMRNTz2
+l1BkNHWRTTqfmPO7LhMY6g4gOPeQVCwgTGVjI8bn6sJd3SFdeiRvvaFBpmn7SjBd
+s1rkKKJIjeMUl1w8dFnmf22V0PnhSSepmNwmd8RQnl1umCTSihDJydGxixw6ZNhr
+4tzbn+Rfadybli61H2hc6/JJHe91i+V1ltgkHwGcs6MUCqXgSL0dUIJs49gSrla0
+gkrcJYF5MWyGxKlajbCjkMCJtN+8bhEmpc4Oe8NZ33arEWnlyh1RVgi5p3RTNApY
+Pxctcg57ExczbKn9R8VLYmPJ7Di3gX0cmotrABEBAAG0HkNocmlzdG9waCBGZWNr
+IDxjZmVja0BrZGUub3JnPokBTgQTAQgAOBYhBPIydeS/EK/B32kUptvSzok+LRyH
+BQJZUaRGAhsDBQsJCAcCBhUICQoLAgQWAgMBAh4BAheAAAoJENvSzok+LRyHeWcH
+/A1E2d5UL2oHsrLIolIiWMmheRorcac+0Hgll1mMUQ5tfPH+LVzgrlMMG7g1Amky
+Hk1qZ5oszrXUg2H/28/cOF/WVlHgQcSGr7aQbHieUivPtZMua+lHUdILC3UV2l1V
+22Zz8HIDl4kxmK6EpoNIOK5Mo550S3e3AKYq5pa/FlckCV9/JoK9+thRCsoAAj3g
+oWwTx9RY5pmLPtklqyC5961Je7KHSIVqapJ/G5DX+yfOC1Psc+vIfyQVqnaefZPW
+dIxXQQhn46i6IRRimw94Gkwca+wslkimt/L/Z7ByZqBsXMyixSQPq+dtSO9CMgr0
+WxTX78wATkTGzh5oSwKCMga5AQ0EWVGkRgEIAMuUnfNfrdx8xn7Jjcm6MGkB/Yep
+XVysrlHxUUS6q7629JdSlVWnQo9GFO927GZClWI9rCGLQMfZZk/jfgKV/nkpLod3
+I51remOg7ohSkwRLAdwJ7xCuNrafhKntFh5/NxuaXxaVIY1muvZbTAsIRyks2jCE
+pUoK43Z8dr4/QPhBstssB8czDME1Tw4r7X+RwjFrQqDItFv6f0BIdEwR462khLEw
+vbXRN1nzs+6Y0foJbJCS3VDZC9scsrrMVMV+OEBF3DXp9ypSWsLnkuBPPIus6Y8G
+j7JvYUBtrUhKL5a7o5G3Te9YhwGgOKVqWlncs6ZLiOV6HnG0BO3xdPcn09cAEQEA
+AYkBNgQYAQgAIBYhBPIydeS/EK/B32kUptvSzok+LRyHBQJZUaRGAhsMAAoJENvS
+zok+LRyHaRMIAI5YaTfGeQDmR08I2LvztOEH/3YF63cNCP/Vp+WAtF/Kr8mMFpFS
+oTHJNMi7p964lHYTTPzPeQzLzV3ayiQjq+DHs6HFmYl73ukzlGGc7KDlyhugQjm6
+AqNtqqXAVykaixnFj8jf2WtQGl1hqpm8GhDRBmZycqMqne4tZokujhtpdC6suRvc
+AB0S+lRZUwrY05k6Nc1A8J8k/lxXXa9KzXNaqKsqppgBZoqKN3zS4146uEjvuLsh
+CarZ/6uUidvP0LBTR7HKye5A9Qdbjlg9qvtR7YF3hqy4g1PRNZWRlsQ1pkCdCTfN
+TA+HYUzK0ESVpY72lWvH49lNg+ufZ1bKvKI=
+=MZJ5
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=PVLg
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/watch b/watch
new file mode 100644 (file)
index 0000000..2c4d4e7
--- /dev/null
+++ b/watch
@@ -0,0 +1,2 @@
+version=4
+opts=pgpsigurlmangle=s/$/.sig/ https://download.kde.org/stable/release-service/([\d.]+)/src/@PACKAGE@-([\d.]+)\.tar\.xz