Warning, /multimedia/plasmatube/src/ui/loginflow/AddInvidiousPage.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
0002 // SPDX-License-Identifier: GPL-3.0-or-later
0003 
0004 import QtQuick
0005 import QtQuick.Controls as QQC2
0006 import QtQuick.Layouts
0007 import QtQuick.Window
0008 import QtQml.Models
0009 
0010 import org.kde.kirigami as Kirigami
0011 import org.kde.kirigamiaddons.formcard as FormCard
0012 import org.kde.kitemmodels as KItemModels
0013 import org.kde.plasmatube
0014 
0015 FormCard.FormCardPage {
0016     id: root
0017 
0018     title: i18nc("@title:window", "Add Invidious Source")
0019 
0020     function addSource(url) {
0021         PlasmaTube.sourceManager.createInvidiousSource(url);
0022         if (root.Window.window !== applicationWindow()) {
0023             root.Window.window.close();
0024         }
0025     }
0026 
0027     FormCard.FormHeader {
0028         title: i18n("Select a instance")
0029     }
0030 
0031     FormCard.FormCard {
0032         FormCard.FormTextFieldDelegate {
0033             id: searchDelegate
0034             label: i18n("Search")
0035             placeholderText: i18n("invidious.io")
0036         }
0037 
0038         FormCard.FormDelegateSeparator {}
0039 
0040         Repeater {
0041             model: KItemModels.KSortFilterProxyModel {
0042                 id: filterModel
0043 
0044                 sourceModel: InvidiousInstancesModel {}
0045 
0046                 filterString: searchDelegate.text
0047                 filterRoleName: "url"
0048             }
0049 
0050             delegate: ColumnLayout {
0051                 required property int index
0052                 required property string url
0053 
0054                 FormCard.FormDelegateSeparator {
0055                     visible: index !== 0
0056                 }
0057 
0058                 FormCard.FormButtonDelegate {
0059                     text: url
0060                     onClicked: root.addSource(url)
0061                 }
0062             }
0063         }
0064 
0065         FormCard.FormTextDelegate {
0066             text: i18n("No public instances found.")
0067             visible: filterModel.count === 0
0068         }
0069 
0070         FormCard.FormDelegateSeparator {
0071             visible: searchDelegate.text.length !== 0
0072         }
0073 
0074         FormCard.FormButtonDelegate {
0075             text: searchDelegate.text
0076             visible: searchDelegate.text.length !== 0
0077             onClicked: root.addSource(searchDelegate.text)
0078         }
0079     }
0080 }