~comcloudway/melon

bcfdca49b5b37858c480682d070f25916fa2965e — Jakob Meier a month ago 640c266
Remember nebula api token
M melon/servers/__init__.py => melon/servers/__init__.py +2 -0
@@ 41,6 41,8 @@ class PreferenceType(Enum):
    # dropdown select boxes
    # default: map[str,str], value: str
    DROPDOWN = auto()
    # hidden/disabled string value store
    HIDDEN = auto()


class Preference:

M melon/servers/nebula/__init__.py => melon/servers/nebula/__init__.py +26 -11
@@ 6,6 6,7 @@ from gettext import gettext as _
from melon.servers import Server, Preference, PreferenceType
from melon.servers import Feed, Channel, Video, Playlist, Stream, SearchMode
from melon.servers import USER_AGENT
from melon.models import set_server_setting


# NOTE: uses beautifulsoup instead of the invidious api


@@ 35,6 36,14 @@ class Nebula(Server):
            "",
            "",
        ),
        "token": Preference(
            "token",
            _("Token"),
            _("Automatically generated API access token"),
            PreferenceType.HIDDEN,
            "",
            "",
        ),
    }

    # nebula might contain 18+ material


@@ 297,17 306,23 @@ class Nebula(Server):
        email = self.settings["email"].value
        passwd = self.settings["password"].value

        # obtain the user login token (changes every time)
        # NOTE: the first time the app runs this,
        # it will send out the Login Detected email
        level1_auth = "https://nebula.tv/auth/login/"
        level1_data = {"email": email, "password": passwd}
        r1 = requests.post(
            level1_auth, json=level1_data, headers={"Content-Type": "application/json"}
        )
        if not r1.ok:
            return []
        key1 = r1.json()["key"]
        key1 = self.settings["token"].value
        if key1 == "":
            # obtain the user login token (changes every time)
            # NOTE: the first time the app runs this,
            # it will send out the Login Detected email
            level1_auth = "https://nebula.tv/auth/login/"
            level1_data = {"email": email, "password": passwd}
            r1 = requests.post(
                level1_auth,
                json=level1_data,
                headers={"Content-Type": "application/json"},
            )
            if not r1.ok:
                return []
            key1 = r1.json()["key"]
            set_server_setting(self.id, "token", key1)
            self.settings["token"].value = key1

        # obtain the user authorization token
        # (apparently always the same)

M melon/settings/__init__.py => melon/settings/__init__.py +6 -8
@@ 10,6 10,7 @@ from melon.models import (
    ensure_server_disabled,
    ensure_server_enabled,
)
from melon.utils import pass_me

global_prefs = {
    # True if images should be shown when searching or browsing public feeds


@@ 103,7 104,7 @@ class SettingsScreen(Adw.NavigationPage):
            # HACK: pass contextual arguments from for loop to helper function
            # fixes problem where pref_id would always have value of last element
            row.set_callback(
                pass_me(lambda val, other: set_app_setting(other[0], val), pref_id)
                pass_me(lambda val, pref_id: set_app_setting(pref_id, val), pref_id)
            )
            self.general.add(row.get_widget())
        self.box.add(self.general)


@@ 137,7 138,9 @@ class SettingsScreen(Adw.NavigationPage):
                # fixes problem where pref_id and server_id would always have value of last element
                row.set_callback(
                    pass_me(
                        lambda val, other: set_server_setting(other[0], other[1], val),
                        lambda val, server_id, pref_id: set_server_setting(
                            server_id, pref_id, val
                        ),
                        server_id,
                        pref_id,
                    )


@@ 150,13 153,8 @@ class SettingsScreen(Adw.NavigationPage):
        self.toolbar_view.set_content(self.wrapper)
        self.set_child(self.toolbar_view)

    def toggle_server(self, value, other):
        server_id = other[0]
    def toggle_server(self, value, server_id):
        if value:
            ensure_server_enabled(server_id)
        else:
            ensure_server_disabled(server_id)


def pass_me(func, *args):
    return lambda y: func(y, args)

M melon/widgets/player.py => melon/widgets/player.py +1 -1
@@ 104,8 104,8 @@ volume = 1.0
# inverse opacity of overlay
brightness = 1.0

class VideoPlayerBase(Gtk.Overlay):

class VideoPlayerBase(Gtk.Overlay):
    def __init__(self, streams: list[Stream], with_gl=True, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.streams = streams

M melon/widgets/preferencerow.py => melon/widgets/preferencerow.py +10 -0
@@ 65,6 65,16 @@ class PreferenceRow:
        elif pref.type is PreferenceType.MULTI:
            self.widget = MultiRow(pref)
            self.widget.connect(lambda v: self.pass_to_callback(v))
        elif pref.type is PreferenceType.HIDDEN:
            self.widget = Adw.ActionRow()
            self.widget.set_title(pref.name)
            self.widget.set_subtitle(pref.description)
            reset_btn = IconButton(
                "", "object-rotate-left-symbolic", tooltip=_("Reset value")
            )
            self.widget.add_suffix(reset_btn)
            self.current_value = pref.value
            reset_btn.connect("clicked", lambda a: self.pass_to_callback(""))
        else:
            # shouldn't be reachable
            self.widget = Adw.ActionRow()

M po/de.po => po/de.po +61 -49
@@ 7,7 7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Melon 0.1.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-15 13:53+0200\n"
"POT-Creation-Date: 2024-08-15 15:36+0200\n"
"PO-Revision-Date: 2024-04-20 14:18+0000\n"
"Last-Translator: hurzelchen <hurzelchen@users.noreply.translate.codeberg."
"org>\n"


@@ 185,13 185,13 @@ msgstr "Kanäle"

#: ../melon/browse/search.py:101 ../melon/browse/server.py:51
#: ../melon/home/playlists.py:30 ../melon/home/playlists.py:74
#: ../melon/servers/nebula/__init__.py:203
#: ../melon/servers/nebula/__init__.py:212
#: ../melon/servers/peertube/__init__.py:209
msgid "Playlists"
msgstr "Wiedergabelisten"

#: ../melon/browse/search.py:106 ../melon/browse/server.py:56
#: ../melon/servers/nebula/__init__.py:197
#: ../melon/servers/nebula/__init__.py:206
#: ../melon/servers/peertube/__init__.py:209
#: ../melon/servers/peertube/__init__.py:210
msgid "Videos"


@@ 510,12 510,12 @@ msgstr ""

#: ../melon/playlist/__init__.py:282 ../melon/playlist/create.py:49
#: ../melon/playlist/create.py:104 ../melon/playlist/pick.py:82
#: ../melon/playlist/pick.py:120 ../melon/widgets/preferencerow.py:175
#: ../melon/widgets/preferencerow.py:214
#: ../melon/playlist/pick.py:120 ../melon/widgets/preferencerow.py:185
#: ../melon/widgets/preferencerow.py:224
msgid "Cancel"
msgstr "Abbruch"

#: ../melon/playlist/__init__.py:284 ../melon/widgets/preferencerow.py:216
#: ../melon/playlist/__init__.py:284 ../melon/widgets/preferencerow.py:226
msgid "Delete"
msgstr "Löschen"



@@ 544,7 544,7 @@ msgstr "Unbenannte Wiedergabeliste"
msgid "Do not create playlist"
msgstr "Wiedergabeliste nicht erstellen"

#: ../melon/playlist/create.py:52 ../melon/widgets/preferencerow.py:178
#: ../melon/playlist/create.py:52 ../melon/widgets/preferencerow.py:188
msgid "Create"
msgstr "Erstellen"



@@ 603,7 603,7 @@ msgstr "Trends"
msgid "Popular"
msgstr "Beliebt"

#: ../melon/servers/nebula/__init__.py:18
#: ../melon/servers/nebula/__init__.py:19
msgid ""
"Home of smart, thoughtful videos, podcasts, and classes from your favorite "
"creators"


@@ 611,22 611,30 @@ msgstr ""
"Zu Hause von intelligenten, durchdachten Videos, Podcasts und Kursen von "
"deinen Lieblingskanälen"

#: ../melon/servers/nebula/__init__.py:24
#: ../melon/servers/nebula/__init__.py:25
msgid "Email Address"
msgstr "E-Mail-Adresse"

#: ../melon/servers/nebula/__init__.py:25
#: ../melon/servers/nebula/__init__.py:26
msgid "Email Address to login to your account"
msgstr "E-Mail-Adresse zur Anmeldung mit deinem Konto"

#: ../melon/servers/nebula/__init__.py:32
#: ../melon/servers/nebula/__init__.py:33
msgid "Password"
msgstr "Passwort"

#: ../melon/servers/nebula/__init__.py:33
#: ../melon/servers/nebula/__init__.py:34
msgid "Password associated with your account"
msgstr "Passwort zur Anmeldung mit deinem Konto"

#: ../melon/servers/nebula/__init__.py:41
msgid "Token"
msgstr ""

#: ../melon/servers/nebula/__init__.py:42
msgid "Automatically generated API access token"
msgstr ""

#: ../melon/servers/peertube/__init__.py:12
msgid "Decentralized video hosting network, based on free/libre software"
msgstr ""


@@ 665,11 673,11 @@ msgstr ""
msgid "Latest"
msgstr "Neuste"

#: ../melon/settings/__init__.py:18
#: ../melon/settings/__init__.py:19
msgid "Show Previews when browsing public feeds (incl. search)"
msgstr "Vorschaubilder für externe Inhalte anzeigen"

#: ../melon/settings/__init__.py:20
#: ../melon/settings/__init__.py:21
msgid ""
"Set to true to show previews when viewing channel contents, public feeds and "
"searching"


@@ 677,11 685,11 @@ msgstr ""
"Aktiviert Vorschaubilder beim Durchsuchen von Diensten, Ansehen von Kanälen "
"und Wiedergabelisten"

#: ../melon/settings/__init__.py:29
#: ../melon/settings/__init__.py:30
msgid "Show Previews in local feeds"
msgstr "Vorschaubilder für lokale Inhalte anzeigen"

#: ../melon/settings/__init__.py:31
#: ../melon/settings/__init__.py:32
msgid ""
"Set to true to show previews in the new feed, for subscribed channels, and "
"saved playlists"


@@ 689,12 697,12 @@ msgstr ""
"Aktiviert Vorschaubilder im Neues Tab, im Kanäle Tab und für selbst "
"erstellte Wiedergabelisten"

#: ../melon/settings/__init__.py:39
#: ../melon/settings/__init__.py:40
#, fuzzy
msgid "Show servers that may contain nsfw content"
msgstr "Dienste anzeigen, die teilweise NSFW Inhalte enthalten"

#: ../melon/settings/__init__.py:41
#: ../melon/settings/__init__.py:42
#, fuzzy
msgid ""
"Lists/Delists servers in the browse servers list, if they contain some nsfw "


@@ 702,12 710,12 @@ msgid ""
msgstr ""
"Zeige Dienste, die vereinzelt NSFW Inhalte beinhalten, beim Durchsuchen an"

#: ../melon/settings/__init__.py:49
#: ../melon/settings/__init__.py:50
#, fuzzy
msgid "Show servers that only contain nsfw content"
msgstr "Dienste anzeigen, die ausschließlich NSFW Inhalte enthalten"

#: ../melon/settings/__init__.py:51
#: ../melon/settings/__init__.py:52
#, fuzzy
msgid ""
"Lists/Delists servers in the browse servers list, if they contain only/"


@@ 715,41 723,41 @@ msgid ""
msgstr ""
"Zeige Dienste, die (fast) nur NSFW Inhalte beinhalten, beim Durchsuchen an"

#: ../melon/settings/__init__.py:59
#: ../melon/settings/__init__.py:60
msgid "Show servers that require login"
msgstr "Dienste anzeigen, die ein Konto benötigen"

#: ../melon/settings/__init__.py:61
#: ../melon/settings/__init__.py:62
msgid ""
"Lists/Delists servers in the browse servers list, if they require login to "
"function"
msgstr "Zeige Dienste, für die du einen Account brauchst, beim Durchsuchen an"

#: ../melon/settings/__init__.py:69
#: ../melon/settings/__init__.py:70
msgid "Use GPU acceleration for video player if available"
msgstr ""

#: ../melon/settings/__init__.py:70
#: ../melon/settings/__init__.py:71
msgid "Disable this if the video player doesn't work"
msgstr ""

#: ../melon/settings/__init__.py:81
#: ../melon/settings/__init__.py:82
msgid "Settings"
msgstr "Einstellungen"

#: ../melon/settings/__init__.py:94
#: ../melon/settings/__init__.py:95
msgid "General"
msgstr "Allgemein"

#: ../melon/settings/__init__.py:95
#: ../melon/settings/__init__.py:96
msgid "Global app settings"
msgstr "Globale App Einstellungen"

#: ../melon/settings/__init__.py:119
#: ../melon/settings/__init__.py:120
msgid "Enable Server"
msgstr "Dienst aktivieren"

#: ../melon/settings/__init__.py:121
#: ../melon/settings/__init__.py:122
msgid ""
"Disabled servers won't show up in the browser or on the local/home screen"
msgstr ""


@@ 768,80 776,84 @@ msgstr ""
msgid "View channel"
msgstr ""

#: ../melon/widgets/player.py:125
#: ../melon/widgets/player.py:130
msgid "No streams available"
msgstr ""

#: ../melon/widgets/player.py:187
#: ../melon/widgets/player.py:192
msgid "Toggle floating window"
msgstr ""

#: ../melon/widgets/player.py:193
#: ../melon/widgets/player.py:198
msgid "Toggle fullscreen"
msgstr ""

#: ../melon/widgets/player.py:215 ../melon/widgets/player.py:602
#: ../melon/widgets/player.py:611
#: ../melon/widgets/player.py:220 ../melon/widgets/player.py:611
#: ../melon/widgets/player.py:620
msgid "Play"
msgstr ""

#: ../melon/widgets/player.py:242
#: ../melon/widgets/player.py:247
msgid "Stream options"
msgstr ""

#: ../melon/widgets/player.py:472
#: ../melon/widgets/player.py:481
msgid "Resolution"
msgstr "Auflösung"

#: ../melon/widgets/player.py:593
#: ../melon/widgets/player.py:602
msgid "Pause"
msgstr "Pause"

#: ../melon/widgets/player.py:631
#: ../melon/widgets/player.py:640
msgid "The video is playing in separate window"
msgstr "Dieses Video spielt in einem separaten Fenster"

#: ../melon/widgets/player.py:768
#: ../melon/widgets/player.py:777
msgid "Player"
msgstr ""

#: ../melon/widgets/preferencerow.py:119
#: ../melon/widgets/preferencerow.py:73
msgid "Reset value"
msgstr ""

#: ../melon/widgets/preferencerow.py:129
msgid "Add"
msgstr "Hinzufügen"

#: ../melon/widgets/preferencerow.py:133
#: ../melon/widgets/preferencerow.py:143
msgid "Move up"
msgstr "Nach oben verschieben"

#: ../melon/widgets/preferencerow.py:141
#: ../melon/widgets/preferencerow.py:151
msgid "Move down"
msgstr "Nach unten verschieben"

#: ../melon/widgets/preferencerow.py:147
#: ../melon/widgets/preferencerow.py:157
msgid "Remove from list"
msgstr "Von der Liste entfernen"

#: ../melon/widgets/preferencerow.py:162
#: ../melon/widgets/preferencerow.py:172
msgid "Add Item"
msgstr "Eintrag hinzufügen"

#: ../melon/widgets/preferencerow.py:165
#: ../melon/widgets/preferencerow.py:175
msgid "Create a new list entry"
msgstr "Neuen Listeneintrag erstellen"

#: ../melon/widgets/preferencerow.py:166
#: ../melon/widgets/preferencerow.py:176
msgid "Enter the new value here"
msgstr "Gibt den neuen Wert hier ein"

#: ../melon/widgets/preferencerow.py:169
#: ../melon/widgets/preferencerow.py:179
msgid "Value"
msgstr "Wert"

#: ../melon/widgets/preferencerow.py:209
#: ../melon/widgets/preferencerow.py:219
msgid "Delete Item?"
msgstr ""

#: ../melon/widgets/preferencerow.py:211
#: ../melon/widgets/preferencerow.py:221
msgid ""
"Do you really want to delete this item? You won't be able to restore it "
"afterwards"

M po/fa.po => po/fa.po +61 -49
@@ 7,7 7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Melon 0.1.2\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-15 13:53+0200\n"
"POT-Creation-Date: 2024-08-15 15:36+0200\n"
"PO-Revision-Date: 2024-05-30 09:18+0000\n"
"Last-Translator: sohrabbehdani <sohrabbehdani@users.noreply.translate."
"codeberg.org>\n"


@@ 190,13 190,13 @@ msgstr "کانال‌ها"

#: ../melon/browse/search.py:101 ../melon/browse/server.py:51
#: ../melon/home/playlists.py:30 ../melon/home/playlists.py:74
#: ../melon/servers/nebula/__init__.py:203
#: ../melon/servers/nebula/__init__.py:212
#: ../melon/servers/peertube/__init__.py:209
msgid "Playlists"
msgstr "سیاههٔ پخش"

#: ../melon/browse/search.py:106 ../melon/browse/server.py:56
#: ../melon/servers/nebula/__init__.py:197
#: ../melon/servers/nebula/__init__.py:206
#: ../melon/servers/peertube/__init__.py:209
#: ../melon/servers/peertube/__init__.py:210
msgid "Videos"


@@ 507,12 507,12 @@ msgstr ""

#: ../melon/playlist/__init__.py:282 ../melon/playlist/create.py:49
#: ../melon/playlist/create.py:104 ../melon/playlist/pick.py:82
#: ../melon/playlist/pick.py:120 ../melon/widgets/preferencerow.py:175
#: ../melon/widgets/preferencerow.py:214
#: ../melon/playlist/pick.py:120 ../melon/widgets/preferencerow.py:185
#: ../melon/widgets/preferencerow.py:224
msgid "Cancel"
msgstr "لغو"

#: ../melon/playlist/__init__.py:284 ../melon/widgets/preferencerow.py:216
#: ../melon/playlist/__init__.py:284 ../melon/widgets/preferencerow.py:226
msgid "Delete"
msgstr "حذف"



@@ 541,7 541,7 @@ msgstr "سیاههٔ پخش بدون نام"
msgid "Do not create playlist"
msgstr "لیست پخش را ایجاد نکن."

#: ../melon/playlist/create.py:52 ../melon/widgets/preferencerow.py:178
#: ../melon/playlist/create.py:52 ../melon/widgets/preferencerow.py:188
msgid "Create"
msgstr "ایجاد"



@@ 601,29 601,37 @@ msgstr ""
msgid "Popular"
msgstr "معروف"

#: ../melon/servers/nebula/__init__.py:18
#: ../melon/servers/nebula/__init__.py:19
msgid ""
"Home of smart, thoughtful videos, podcasts, and classes from your favorite "
"creators"
msgstr ""
"خانه ویدیوها، پادکست‌ها و کلاس‌های هوشمند و متفکر از سازندگان مورد علاقه‌تان"

#: ../melon/servers/nebula/__init__.py:24
#: ../melon/servers/nebula/__init__.py:25
msgid "Email Address"
msgstr "آدرس رایانامه"

#: ../melon/servers/nebula/__init__.py:25
#: ../melon/servers/nebula/__init__.py:26
msgid "Email Address to login to your account"
msgstr "آدرس رایانامه برای ورود به حساب کاربری"

#: ../melon/servers/nebula/__init__.py:32
#: ../melon/servers/nebula/__init__.py:33
msgid "Password"
msgstr ""

#: ../melon/servers/nebula/__init__.py:33
#: ../melon/servers/nebula/__init__.py:34
msgid "Password associated with your account"
msgstr ""

#: ../melon/servers/nebula/__init__.py:41
msgid "Token"
msgstr ""

#: ../melon/servers/nebula/__init__.py:42
msgid "Automatically generated API access token"
msgstr ""

#: ../melon/servers/peertube/__init__.py:12
msgid "Decentralized video hosting network, based on free/libre software"
msgstr "شبکه میزبانی ویدیو غیرمتمرکز، بر اساس نرم افزار رایگان/آزاد"


@@ 660,11 668,11 @@ msgstr "محتوا را از کارساز های فدریتد بجای محلی 
msgid "Latest"
msgstr "آخرین"

#: ../melon/settings/__init__.py:18
#: ../melon/settings/__init__.py:19
msgid "Show Previews when browsing public feeds (incl. search)"
msgstr "نمایش پیش نمایش ها هنگام مرور خوراک‌های عمومی (از جمله جستجو)"

#: ../melon/settings/__init__.py:20
#: ../melon/settings/__init__.py:21
msgid ""
"Set to true to show previews when viewing channel contents, public feeds and "
"searching"


@@ 672,11 680,11 @@ msgstr ""
"برای نمایش پیش نمایش ها هنگام مشاهده محتوای کانال، فیدهای عمومی و جستجو، روی "
"بله تنظیم کنید"

#: ../melon/settings/__init__.py:29
#: ../melon/settings/__init__.py:30
msgid "Show Previews in local feeds"
msgstr "نمایش پیشنمایش ها در خوراک های محلی"

#: ../melon/settings/__init__.py:31
#: ../melon/settings/__init__.py:32
msgid ""
"Set to true to show previews in the new feed, for subscribed channels, and "
"saved playlists"


@@ 684,61 692,61 @@ msgstr ""
"برای نمایش پیش‌نمایش‌ها در فید جدید، برای کانال‌های مشترک و لیست‌های پخش "
"ذخیره‌شده، روی بله تنظیم کنید"

#: ../melon/settings/__init__.py:39
#: ../melon/settings/__init__.py:40
msgid "Show servers that may contain nsfw content"
msgstr "نمایش کارساز هایی که ممکن است دارای محتوای NSFW باشد"

#: ../melon/settings/__init__.py:41
#: ../melon/settings/__init__.py:42
msgid ""
"Lists/Delists servers in the browse servers list, if they contain some nsfw "
"content"
msgstr ""

#: ../melon/settings/__init__.py:49
#: ../melon/settings/__init__.py:50
msgid "Show servers that only contain nsfw content"
msgstr "نمایش کارساز هایی که تنها دارای محتوای NSFW هستند"

#: ../melon/settings/__init__.py:51
#: ../melon/settings/__init__.py:52
msgid ""
"Lists/Delists servers in the browse servers list, if they contain only/"
"mostly nsfw content"
msgstr ""

#: ../melon/settings/__init__.py:59
#: ../melon/settings/__init__.py:60
msgid "Show servers that require login"
msgstr "نمایش کارساز هایی که به ورود احتیاج دارند"

#: ../melon/settings/__init__.py:61
#: ../melon/settings/__init__.py:62
msgid ""
"Lists/Delists servers in the browse servers list, if they require login to "
"function"
msgstr ""

#: ../melon/settings/__init__.py:69
#: ../melon/settings/__init__.py:70
msgid "Use GPU acceleration for video player if available"
msgstr ""

#: ../melon/settings/__init__.py:70
#: ../melon/settings/__init__.py:71
msgid "Disable this if the video player doesn't work"
msgstr ""

#: ../melon/settings/__init__.py:81
#: ../melon/settings/__init__.py:82
msgid "Settings"
msgstr "تنظیمات"

#: ../melon/settings/__init__.py:94
#: ../melon/settings/__init__.py:95
msgid "General"
msgstr "کلی"

#: ../melon/settings/__init__.py:95
#: ../melon/settings/__init__.py:96
msgid "Global app settings"
msgstr "تنظیمات کلی کاره"

#: ../melon/settings/__init__.py:119
#: ../melon/settings/__init__.py:120
msgid "Enable Server"
msgstr "فعال کردن کارساز"

#: ../melon/settings/__init__.py:121
#: ../melon/settings/__init__.py:122
msgid ""
"Disabled servers won't show up in the browser or on the local/home screen"
msgstr ""


@@ 756,80 764,84 @@ msgstr ""
msgid "View channel"
msgstr ""

#: ../melon/widgets/player.py:125
#: ../melon/widgets/player.py:130
msgid "No streams available"
msgstr "جریان پخشی موجود نیست"

#: ../melon/widgets/player.py:187
#: ../melon/widgets/player.py:192
msgid "Toggle floating window"
msgstr ""

#: ../melon/widgets/player.py:193
#: ../melon/widgets/player.py:198
msgid "Toggle fullscreen"
msgstr ""

#: ../melon/widgets/player.py:215 ../melon/widgets/player.py:602
#: ../melon/widgets/player.py:611
#: ../melon/widgets/player.py:220 ../melon/widgets/player.py:611
#: ../melon/widgets/player.py:620
msgid "Play"
msgstr ""

#: ../melon/widgets/player.py:242
#: ../melon/widgets/player.py:247
msgid "Stream options"
msgstr "تنظیمات استریم"

#: ../melon/widgets/player.py:472
#: ../melon/widgets/player.py:481
msgid "Resolution"
msgstr "وضوح"

#: ../melon/widgets/player.py:593
#: ../melon/widgets/player.py:602
msgid "Pause"
msgstr ""

#: ../melon/widgets/player.py:631
#: ../melon/widgets/player.py:640
msgid "The video is playing in separate window"
msgstr ""

#: ../melon/widgets/player.py:768
#: ../melon/widgets/player.py:777
msgid "Player"
msgstr "پخش‌کننده"

#: ../melon/widgets/preferencerow.py:119
#: ../melon/widgets/preferencerow.py:73
msgid "Reset value"
msgstr ""

#: ../melon/widgets/preferencerow.py:129
msgid "Add"
msgstr "افزودن"

#: ../melon/widgets/preferencerow.py:133
#: ../melon/widgets/preferencerow.py:143
msgid "Move up"
msgstr "انتقال به بالا"

#: ../melon/widgets/preferencerow.py:141
#: ../melon/widgets/preferencerow.py:151
msgid "Move down"
msgstr "انتقال به پایین"

#: ../melon/widgets/preferencerow.py:147
#: ../melon/widgets/preferencerow.py:157
msgid "Remove from list"
msgstr "حذف از لیست"

#: ../melon/widgets/preferencerow.py:162
#: ../melon/widgets/preferencerow.py:172
msgid "Add Item"
msgstr "افزودن مورد"

#: ../melon/widgets/preferencerow.py:165
#: ../melon/widgets/preferencerow.py:175
msgid "Create a new list entry"
msgstr "ایجاد یک ورودی لیست جدید"

#: ../melon/widgets/preferencerow.py:166
#: ../melon/widgets/preferencerow.py:176
msgid "Enter the new value here"
msgstr "مقادیر را اینجا وارد کنید."

#: ../melon/widgets/preferencerow.py:169
#: ../melon/widgets/preferencerow.py:179
msgid "Value"
msgstr "مقدار"

#: ../melon/widgets/preferencerow.py:209
#: ../melon/widgets/preferencerow.py:219
msgid "Delete Item?"
msgstr ""

#: ../melon/widgets/preferencerow.py:211
#: ../melon/widgets/preferencerow.py:221
msgid ""
"Do you really want to delete this item? You won't be able to restore it "
"afterwards"

M po/melon.pot => po/melon.pot +61 -49
@@ 8,7 8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Melon 0.2.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-15 13:53+0200\n"
"POT-Creation-Date: 2024-08-15 15:36+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"


@@ 176,13 176,13 @@ msgstr ""

#: ../melon/browse/search.py:101 ../melon/browse/server.py:51
#: ../melon/home/playlists.py:30 ../melon/home/playlists.py:74
#: ../melon/servers/nebula/__init__.py:203
#: ../melon/servers/nebula/__init__.py:212
#: ../melon/servers/peertube/__init__.py:209
msgid "Playlists"
msgstr ""

#: ../melon/browse/search.py:106 ../melon/browse/server.py:56
#: ../melon/servers/nebula/__init__.py:197
#: ../melon/servers/nebula/__init__.py:206
#: ../melon/servers/peertube/__init__.py:209
#: ../melon/servers/peertube/__init__.py:210
msgid "Videos"


@@ 492,12 492,12 @@ msgstr ""

#: ../melon/playlist/__init__.py:282 ../melon/playlist/create.py:49
#: ../melon/playlist/create.py:104 ../melon/playlist/pick.py:82
#: ../melon/playlist/pick.py:120 ../melon/widgets/preferencerow.py:175
#: ../melon/widgets/preferencerow.py:214
#: ../melon/playlist/pick.py:120 ../melon/widgets/preferencerow.py:185
#: ../melon/widgets/preferencerow.py:224
msgid "Cancel"
msgstr ""

#: ../melon/playlist/__init__.py:284 ../melon/widgets/preferencerow.py:216
#: ../melon/playlist/__init__.py:284 ../melon/widgets/preferencerow.py:226
msgid "Delete"
msgstr ""



@@ 526,7 526,7 @@ msgstr ""
msgid "Do not create playlist"
msgstr ""

#: ../melon/playlist/create.py:52 ../melon/widgets/preferencerow.py:178
#: ../melon/playlist/create.py:52 ../melon/widgets/preferencerow.py:188
msgid "Create"
msgstr ""



@@ 581,28 581,36 @@ msgstr ""
msgid "Popular"
msgstr ""

#: ../melon/servers/nebula/__init__.py:18
#: ../melon/servers/nebula/__init__.py:19
msgid ""
"Home of smart, thoughtful videos, podcasts, and classes from your favorite "
"creators"
msgstr ""

#: ../melon/servers/nebula/__init__.py:24
#: ../melon/servers/nebula/__init__.py:25
msgid "Email Address"
msgstr ""

#: ../melon/servers/nebula/__init__.py:25
#: ../melon/servers/nebula/__init__.py:26
msgid "Email Address to login to your account"
msgstr ""

#: ../melon/servers/nebula/__init__.py:32
#: ../melon/servers/nebula/__init__.py:33
msgid "Password"
msgstr ""

#: ../melon/servers/nebula/__init__.py:33
#: ../melon/servers/nebula/__init__.py:34
msgid "Password associated with your account"
msgstr ""

#: ../melon/servers/nebula/__init__.py:41
msgid "Token"
msgstr ""

#: ../melon/servers/nebula/__init__.py:42
msgid "Automatically generated API access token"
msgstr ""

#: ../melon/servers/peertube/__init__.py:12
msgid "Decentralized video hosting network, based on free/libre software"
msgstr ""


@@ 637,81 645,81 @@ msgstr ""
msgid "Latest"
msgstr ""

#: ../melon/settings/__init__.py:18
#: ../melon/settings/__init__.py:19
msgid "Show Previews when browsing public feeds (incl. search)"
msgstr ""

#: ../melon/settings/__init__.py:20
#: ../melon/settings/__init__.py:21
msgid ""
"Set to true to show previews when viewing channel contents, public feeds and "
"searching"
msgstr ""

#: ../melon/settings/__init__.py:29
#: ../melon/settings/__init__.py:30
msgid "Show Previews in local feeds"
msgstr ""

#: ../melon/settings/__init__.py:31
#: ../melon/settings/__init__.py:32
msgid ""
"Set to true to show previews in the new feed, for subscribed channels, and "
"saved playlists"
msgstr ""

#: ../melon/settings/__init__.py:39
#: ../melon/settings/__init__.py:40
msgid "Show servers that may contain nsfw content"
msgstr ""

#: ../melon/settings/__init__.py:41
#: ../melon/settings/__init__.py:42
msgid ""
"Lists/Delists servers in the browse servers list, if they contain some nsfw "
"content"
msgstr ""

#: ../melon/settings/__init__.py:49
#: ../melon/settings/__init__.py:50
msgid "Show servers that only contain nsfw content"
msgstr ""

#: ../melon/settings/__init__.py:51
#: ../melon/settings/__init__.py:52
msgid ""
"Lists/Delists servers in the browse servers list, if they contain only/"
"mostly nsfw content"
msgstr ""

#: ../melon/settings/__init__.py:59
#: ../melon/settings/__init__.py:60
msgid "Show servers that require login"
msgstr ""

#: ../melon/settings/__init__.py:61
#: ../melon/settings/__init__.py:62
msgid ""
"Lists/Delists servers in the browse servers list, if they require login to "
"function"
msgstr ""

#: ../melon/settings/__init__.py:69
#: ../melon/settings/__init__.py:70
msgid "Use GPU acceleration for video player if available"
msgstr ""

#: ../melon/settings/__init__.py:70
#: ../melon/settings/__init__.py:71
msgid "Disable this if the video player doesn't work"
msgstr ""

#: ../melon/settings/__init__.py:81
#: ../melon/settings/__init__.py:82
msgid "Settings"
msgstr ""

#: ../melon/settings/__init__.py:94
#: ../melon/settings/__init__.py:95
msgid "General"
msgstr ""

#: ../melon/settings/__init__.py:95
#: ../melon/settings/__init__.py:96
msgid "Global app settings"
msgstr ""

#: ../melon/settings/__init__.py:119
#: ../melon/settings/__init__.py:120
msgid "Enable Server"
msgstr ""

#: ../melon/settings/__init__.py:121
#: ../melon/settings/__init__.py:122
msgid ""
"Disabled servers won't show up in the browser or on the local/home screen"
msgstr ""


@@ 728,80 736,84 @@ msgstr ""
msgid "View channel"
msgstr ""

#: ../melon/widgets/player.py:125
#: ../melon/widgets/player.py:130
msgid "No streams available"
msgstr ""

#: ../melon/widgets/player.py:187
#: ../melon/widgets/player.py:192
msgid "Toggle floating window"
msgstr ""

#: ../melon/widgets/player.py:193
#: ../melon/widgets/player.py:198
msgid "Toggle fullscreen"
msgstr ""

#: ../melon/widgets/player.py:215 ../melon/widgets/player.py:602
#: ../melon/widgets/player.py:611
#: ../melon/widgets/player.py:220 ../melon/widgets/player.py:611
#: ../melon/widgets/player.py:620
msgid "Play"
msgstr ""

#: ../melon/widgets/player.py:242
#: ../melon/widgets/player.py:247
msgid "Stream options"
msgstr ""

#: ../melon/widgets/player.py:472
#: ../melon/widgets/player.py:481
msgid "Resolution"
msgstr ""

#: ../melon/widgets/player.py:593
#: ../melon/widgets/player.py:602
msgid "Pause"
msgstr ""

#: ../melon/widgets/player.py:631
#: ../melon/widgets/player.py:640
msgid "The video is playing in separate window"
msgstr ""

#: ../melon/widgets/player.py:768
#: ../melon/widgets/player.py:777
msgid "Player"
msgstr ""

#: ../melon/widgets/preferencerow.py:119
#: ../melon/widgets/preferencerow.py:73
msgid "Reset value"
msgstr ""

#: ../melon/widgets/preferencerow.py:129
msgid "Add"
msgstr ""

#: ../melon/widgets/preferencerow.py:133
#: ../melon/widgets/preferencerow.py:143
msgid "Move up"
msgstr ""

#: ../melon/widgets/preferencerow.py:141
#: ../melon/widgets/preferencerow.py:151
msgid "Move down"
msgstr ""

#: ../melon/widgets/preferencerow.py:147
#: ../melon/widgets/preferencerow.py:157
msgid "Remove from list"
msgstr ""

#: ../melon/widgets/preferencerow.py:162
#: ../melon/widgets/preferencerow.py:172
msgid "Add Item"
msgstr ""

#: ../melon/widgets/preferencerow.py:165
#: ../melon/widgets/preferencerow.py:175
msgid "Create a new list entry"
msgstr ""

#: ../melon/widgets/preferencerow.py:166
#: ../melon/widgets/preferencerow.py:176
msgid "Enter the new value here"
msgstr ""

#: ../melon/widgets/preferencerow.py:169
#: ../melon/widgets/preferencerow.py:179
msgid "Value"
msgstr ""

#: ../melon/widgets/preferencerow.py:209
#: ../melon/widgets/preferencerow.py:219
msgid "Delete Item?"
msgstr ""

#: ../melon/widgets/preferencerow.py:211
#: ../melon/widgets/preferencerow.py:221
msgid ""
"Do you really want to delete this item? You won't be able to restore it "
"afterwards"

M po/nl.po => po/nl.po +61 -49
@@ 7,7 7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Melon 0.2.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-15 13:53+0200\n"
"POT-Creation-Date: 2024-08-15 15:36+0200\n"
"PO-Revision-Date: 2024-07-17 09:18+0000\n"
"Last-Translator: Vistaus <Vistaus@users.noreply.translate.codeberg.org>\n"
"Language-Team: Dutch <https://translate.codeberg.org/projects/melon/melon-"


@@ 191,13 191,13 @@ msgstr "Kanalen"

#: ../melon/browse/search.py:101 ../melon/browse/server.py:51
#: ../melon/home/playlists.py:30 ../melon/home/playlists.py:74
#: ../melon/servers/nebula/__init__.py:203
#: ../melon/servers/nebula/__init__.py:212
#: ../melon/servers/peertube/__init__.py:209
msgid "Playlists"
msgstr "Afspeellijsten"

#: ../melon/browse/search.py:106 ../melon/browse/server.py:56
#: ../melon/servers/nebula/__init__.py:197
#: ../melon/servers/nebula/__init__.py:206
#: ../melon/servers/peertube/__init__.py:209
#: ../melon/servers/peertube/__init__.py:210
msgid "Videos"


@@ 512,12 512,12 @@ msgstr ""

#: ../melon/playlist/__init__.py:282 ../melon/playlist/create.py:49
#: ../melon/playlist/create.py:104 ../melon/playlist/pick.py:82
#: ../melon/playlist/pick.py:120 ../melon/widgets/preferencerow.py:175
#: ../melon/widgets/preferencerow.py:214
#: ../melon/playlist/pick.py:120 ../melon/widgets/preferencerow.py:185
#: ../melon/widgets/preferencerow.py:224
msgid "Cancel"
msgstr "Annuleren"

#: ../melon/playlist/__init__.py:284 ../melon/widgets/preferencerow.py:216
#: ../melon/playlist/__init__.py:284 ../melon/widgets/preferencerow.py:226
msgid "Delete"
msgstr "Verwijderen"



@@ 546,7 546,7 @@ msgstr "Naamloze afspeellijst"
msgid "Do not create playlist"
msgstr "Geen afspeellijst maken"

#: ../melon/playlist/create.py:52 ../melon/widgets/preferencerow.py:178
#: ../melon/playlist/create.py:52 ../melon/widgets/preferencerow.py:188
msgid "Create"
msgstr "Maken"



@@ 605,7 605,7 @@ msgstr "Trending"
msgid "Popular"
msgstr "Populair"

#: ../melon/servers/nebula/__init__.py:18
#: ../melon/servers/nebula/__init__.py:19
msgid ""
"Home of smart, thoughtful videos, podcasts, and classes from your favorite "
"creators"


@@ 613,22 613,30 @@ msgstr ""
"Een tijdlijn met slimme, doordachte video's, podcasts en cursussen van uw "
"favoriete makers"

#: ../melon/servers/nebula/__init__.py:24
#: ../melon/servers/nebula/__init__.py:25
msgid "Email Address"
msgstr "E-mailadres"

#: ../melon/servers/nebula/__init__.py:25
#: ../melon/servers/nebula/__init__.py:26
msgid "Email Address to login to your account"
msgstr "Het e-mailadres waarmee u inlogt op uw account"

#: ../melon/servers/nebula/__init__.py:32
#: ../melon/servers/nebula/__init__.py:33
msgid "Password"
msgstr "Wachtwoord"

#: ../melon/servers/nebula/__init__.py:33
#: ../melon/servers/nebula/__init__.py:34
msgid "Password associated with your account"
msgstr "Het wachtwoord van uw account"

#: ../melon/servers/nebula/__init__.py:41
msgid "Token"
msgstr ""

#: ../melon/servers/nebula/__init__.py:42
msgid "Automatically generated API access token"
msgstr ""

#: ../melon/servers/peertube/__init__.py:12
msgid "Decentralized video hosting network, based on free/libre software"
msgstr ""


@@ 666,12 674,12 @@ msgstr ""
msgid "Latest"
msgstr "Nieuwste"

#: ../melon/settings/__init__.py:18
#: ../melon/settings/__init__.py:19
msgid "Show Previews when browsing public feeds (incl. search)"
msgstr ""
"Voorvertoningen inschakelen op openbare tijdlijnen (inclusief zoekpagina)"

#: ../melon/settings/__init__.py:20
#: ../melon/settings/__init__.py:21
msgid ""
"Set to true to show previews when viewing channel contents, public feeds and "
"searching"


@@ 679,11 687,11 @@ msgstr ""
"Schakel in om voorvertoningen in te schakelen op kanaalinhoud, openbare "
"tijdlijnen en de zoekpagina"

#: ../melon/settings/__init__.py:29
#: ../melon/settings/__init__.py:30
msgid "Show Previews in local feeds"
msgstr "Voorvertoningen inschakelen op lokale tijdlijnen"

#: ../melon/settings/__init__.py:31
#: ../melon/settings/__init__.py:32
msgid ""
"Set to true to show previews in the new feed, for subscribed channels, and "
"saved playlists"


@@ 691,22 699,22 @@ msgstr ""
"Schakel in om voorvertoningen in te schakelen op de tijdlijn, geabonneerde "
"kanalen en opgeslagen afspeellijsten"

#: ../melon/settings/__init__.py:39
#: ../melon/settings/__init__.py:40
msgid "Show servers that may contain nsfw content"
msgstr "Servers tonen die 18+-inhoud kunnen bevatten"

#: ../melon/settings/__init__.py:41
#: ../melon/settings/__init__.py:42
msgid ""
"Lists/Delists servers in the browse servers list, if they contain some nsfw "
"content"
msgstr ""
"Toon/Verberg servers op de verkenlijst als ze enige 18+-inhoud bevatten"

#: ../melon/settings/__init__.py:49
#: ../melon/settings/__init__.py:50
msgid "Show servers that only contain nsfw content"
msgstr "Servers tonen die alleen 18+-inhoud bevatten"

#: ../melon/settings/__init__.py:51
#: ../melon/settings/__init__.py:52
msgid ""
"Lists/Delists servers in the browse servers list, if they contain only/"
"mostly nsfw content"


@@ 714,41 722,41 @@ msgstr ""
"Toon/Verberg servers op de verkenlijst als ze alleen of veelal 18+-inhoud "
"bevatten"

#: ../melon/settings/__init__.py:59
#: ../melon/settings/__init__.py:60
msgid "Show servers that require login"
msgstr "Servers tonen die een account vereisen"

#: ../melon/settings/__init__.py:61
#: ../melon/settings/__init__.py:62
msgid ""
"Lists/Delists servers in the browse servers list, if they require login to "
"function"
msgstr "Toon/Verberg servers op de verkenlijst als ze een account vereisen"

#: ../melon/settings/__init__.py:69
#: ../melon/settings/__init__.py:70
msgid "Use GPU acceleration for video player if available"
msgstr "Hardwareversnelling gebruiken in videospeler (indien beschikbaar)"

#: ../melon/settings/__init__.py:70
#: ../melon/settings/__init__.py:71
msgid "Disable this if the video player doesn't work"
msgstr "Schakel dit uit als de videospeler niet werkt"

#: ../melon/settings/__init__.py:81
#: ../melon/settings/__init__.py:82
msgid "Settings"
msgstr "Voorkeuren"

#: ../melon/settings/__init__.py:94
#: ../melon/settings/__init__.py:95
msgid "General"
msgstr "Algemeen"

#: ../melon/settings/__init__.py:95
#: ../melon/settings/__init__.py:96
msgid "Global app settings"
msgstr "Algemene voorkeuren"

#: ../melon/settings/__init__.py:119
#: ../melon/settings/__init__.py:120
msgid "Enable Server"
msgstr "Server inschakelen"

#: ../melon/settings/__init__.py:121
#: ../melon/settings/__init__.py:122
msgid ""
"Disabled servers won't show up in the browser or on the local/home screen"
msgstr ""


@@ 766,80 774,84 @@ msgstr "Openen in webbrowser"
msgid "View channel"
msgstr "Kanaal bekijken"

#: ../melon/widgets/player.py:125
#: ../melon/widgets/player.py:130
msgid "No streams available"
msgstr "Er zijn geen streams beschikbaar"

#: ../melon/widgets/player.py:187
#: ../melon/widgets/player.py:192
msgid "Toggle floating window"
msgstr "Zwevend venster aan/uit"

#: ../melon/widgets/player.py:193
#: ../melon/widgets/player.py:198
msgid "Toggle fullscreen"
msgstr "Schermvullende weergave aan/uit"

#: ../melon/widgets/player.py:215 ../melon/widgets/player.py:602
#: ../melon/widgets/player.py:611
#: ../melon/widgets/player.py:220 ../melon/widgets/player.py:611
#: ../melon/widgets/player.py:620
msgid "Play"
msgstr "Afspelen"

#: ../melon/widgets/player.py:242
#: ../melon/widgets/player.py:247
msgid "Stream options"
msgstr "Streamopties"

#: ../melon/widgets/player.py:472
#: ../melon/widgets/player.py:481
msgid "Resolution"
msgstr "Resolutie"

#: ../melon/widgets/player.py:593
#: ../melon/widgets/player.py:602
msgid "Pause"
msgstr "Pauzeren"

#: ../melon/widgets/player.py:631
#: ../melon/widgets/player.py:640
msgid "The video is playing in separate window"
msgstr "De video wordt in een apart venster afgespeeld"

#: ../melon/widgets/player.py:768
#: ../melon/widgets/player.py:777
msgid "Player"
msgstr "Speler"

#: ../melon/widgets/preferencerow.py:119
#: ../melon/widgets/preferencerow.py:73
msgid "Reset value"
msgstr ""

#: ../melon/widgets/preferencerow.py:129
msgid "Add"
msgstr "Toevoegen"

#: ../melon/widgets/preferencerow.py:133
#: ../melon/widgets/preferencerow.py:143
msgid "Move up"
msgstr "Omhoog verplaatsen"

#: ../melon/widgets/preferencerow.py:141
#: ../melon/widgets/preferencerow.py:151
msgid "Move down"
msgstr "Omlaag verplaatsen"

#: ../melon/widgets/preferencerow.py:147
#: ../melon/widgets/preferencerow.py:157
msgid "Remove from list"
msgstr "Verwijderen van lijst"

#: ../melon/widgets/preferencerow.py:162
#: ../melon/widgets/preferencerow.py:172
msgid "Add Item"
msgstr "Item toevoegen"

#: ../melon/widgets/preferencerow.py:165
#: ../melon/widgets/preferencerow.py:175
msgid "Create a new list entry"
msgstr "Nieuw lijstitem"

#: ../melon/widgets/preferencerow.py:166
#: ../melon/widgets/preferencerow.py:176
msgid "Enter the new value here"
msgstr "Voer hier de nieuwe waarde in"

#: ../melon/widgets/preferencerow.py:169
#: ../melon/widgets/preferencerow.py:179
msgid "Value"
msgstr "Waarde"

#: ../melon/widgets/preferencerow.py:209
#: ../melon/widgets/preferencerow.py:219
msgid "Delete Item?"
msgstr ""

#: ../melon/widgets/preferencerow.py:211
#: ../melon/widgets/preferencerow.py:221
msgid ""
"Do you really want to delete this item? You won't be able to restore it "
"afterwards"