~comcloudway/melon

424314329e1fa976339262c3999a69e3a25cf2c3 — Jakob Meier a month ago abe1a35
Satisfy ruff check
M main.py => main.py +1 -0
@@ 1,6 1,7 @@
# manual quick-run script
import sys
from melon.application import Application

Application.application_id = "icu.ccw.melon"
app = Application()


M melon/__init__.py => melon/__init__.py +6 -0
@@ 0,0 1,6 @@
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Gdk", "4.0")
gi.require_version("Adw", "1")
gi.require_version("Gst", "1.0")

M melon/application.py => melon/application.py +3 -7
@@ 1,12 1,8 @@
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, Gio, GLib
from gi.repository import Adw, GLib

from melon.window import MainWindow
from melon.models import init_db, notify
from melon.servers.utils import get_server_instance, load_server, get_servers_list
from melon.models import init_db, notify, load_server
from melon.servers.utils import get_server_instance, get_servers_list


class Application(Adw.Application):

M melon/browse/__init__.py => melon/browse/__init__.py +3 -7
@@ 1,14 1,10 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, Gio, Gdk, GLib
from gi.repository import Gtk, Adw, Gdk, GLib
from gettext import gettext as _

from melon.widgets.iconbutton import IconButton
from melon.servers.utils import get_allowed_servers_list
from melon.models import get_app_settings, register_callback
from melon.models import get_app_settings
from melon.models.callbacks import register_callback


class BrowseScreen(Adw.NavigationPage):

M melon/browse/channel.py => melon/browse/channel.py +4 -10
@@ 1,16 1,10 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, Gio, Gdk, GLib
from gi.repository import Gtk, Adw, Gdk, GLib
from unidecode import unidecode
from gettext import gettext as _
import threading

from melon.servers.utils import get_server_instance, get_servers_list
from melon.servers.utils import pixbuf_from_url
from melon.servers import SearchMode
from melon.widgets.feeditem import AdaptiveFeedItem
from melon.widgets.preferencerow import PreferenceRow, PreferenceType, Preference
from melon.widgets.iconbutton import IconButton


@@ 47,7 41,7 @@ class BrowseChannelScreen(Adw.NavigationPage):
        change the feed and prepare layout
        """
        self.current_feed = feed_id
        if not self.results is None:
        if self.results is not None:
            self.box.remove(self.results)
        self.results = Adw.PreferencesGroup()
        feed_name = ""


@@ 92,7 86,7 @@ class BrowseChannelScreen(Adw.NavigationPage):
        # display channel info
        av = Adw.Avatar()
        av.set_size(64)
        if not texture is None:
        if texture is not None:
            av.set_custom_image(texture)
        else:
            av.set_text(self.channel.name)


@@ 133,7 127,7 @@ class BrowseChannelScreen(Adw.NavigationPage):
        if app_conf["show_images_in_browse"]:
            pixbuf = pixbuf_from_url(self.channel.avatar)
        texture = None
        if not pixbuf is None:
        if pixbuf is not None:
            texture = Gdk.Texture.new_for_pixbuf(pixbuf)
        GLib.idle_add(self.display_info, texture)


M melon/browse/playlist.py => melon/browse/playlist.py +3 -9
@@ 1,16 1,10 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, Gio, Gdk, GLib
from gi.repository import Gtk, Adw, Gdk, GLib
from unidecode import unidecode
from gettext import gettext as _
import threading

from melon.servers.utils import get_server_instance, get_servers_list
from melon.servers.utils import pixbuf_from_url
from melon.servers import SearchMode
from melon.widgets.feeditem import AdaptiveFeedItem
from melon.widgets.iconbutton import IconButton
from melon.widgets.preferencerow import PreferenceRow, PreferenceType, Preference


@@ 79,7 73,7 @@ class BrowsePlaylistScreen(Adw.NavigationPage):
        # display channel info
        av = Adw.Avatar()
        av.set_size(64)
        if not texture is None:
        if texture is not None:
            av.set_custom_image(texture)
        else:
            av.set_text(self.playlist.title)


@@ 96,7 90,7 @@ class BrowsePlaylistScreen(Adw.NavigationPage):
        if app_conf["show_images_in_browse"]:
            pixbuf = pixbuf_from_url(self.playlist.thumbnail)
        texture = None
        if not pixbuf is None:
        if pixbuf is not None:
            texture = Gdk.Texture.new_for_pixbuf(pixbuf)
        GLib.idle_add(self.display_info, texture)


M melon/browse/search.py => melon/browse/search.py +4 -8
@@ 1,9 1,4 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, Gio, Gdk, GLib
from gi.repository import Gtk, Adw
from gettext import gettext as _
from gettext import ngettext



@@ 11,8 6,9 @@ from melon.widgets.iconbutton import IconButton
from melon.widgets.feeditem import AdaptiveFeedItem
from melon.widgets.filterbutton import FilterButton
from melon.servers.utils import get_allowed_servers_list, get_server_instance
from melon.models import get_app_settings, register_callback
from melon.servers import SearchMode, Preference, PreferenceType
from melon.models import get_app_settings
from melon.models.callbacks import register_callback
from melon.servers import SearchMode


class GlobalSearchScreen(Adw.NavigationPage):

M melon/browse/server.py => melon/browse/server.py +4 -9
@@ 1,9 1,4 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, Gio, Gdk, GLib
from gi.repository import Gtk, Adw, GLib
import threading
from gettext import gettext as _



@@ 94,7 89,7 @@ class Search(ViewStackPage):
            self.reset()
            return
        # remove old results
        if not self.results is None:
        if self.results is not None:
            self.inner.remove(self.results)
        # add new result wrapper
        self.results = Adw.PreferencesGroup()


@@ 109,7 104,7 @@ class Search(ViewStackPage):
        self.inner.append(self.results)

    def reset(self):
        if not self.results is None:
        if self.results is not None:
            self.inner.remove(self.results)
        self.results = Adw.StatusPage()
        self.results.set_title(_("*crickets chirping*"))


@@ 221,7 216,7 @@ class BrowseServerScreen(Adw.NavigationPage):
        self.toolbar_view.add_bottom_bar(self.bottom_bar)
        self.set_child(self.toolbar_view)

        if not window is None:
        if window is not None:
            window.breakpoint.add_setter(self.header_bar, "title-widget", Gtk.Box())
            window.breakpoint.add_setter(self.bottom_bar, "reveal", True)


M melon/home/__init__.py => melon/home/__init__.py +0 -5
@@ 1,8 1,3 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, Gio
from gettext import gettext as _


M melon/home/history.py => melon/home/history.py +4 -8
@@ 1,8 1,3 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, GLib
import threading
from gettext import gettext as _


@@ 10,7 5,8 @@ from gettext import gettext as _
from melon.widgets.viewstackpage import ViewStackPage
from melon.widgets.iconbutton import IconButton
from melon.widgets.feeditem import AdaptiveFeedItem
from melon.models import get_history, register_callback, get_app_settings
from melon.models import get_history, get_app_settings
from melon.models.callbacks import register_callback
from melon.servers.utils import group_by_date, filter_resources




@@ 74,7 70,7 @@ class History(ViewStackPage):
            if self.focus_node is None:
                self.focus_node = group
        # remove old load more button
        if not self.next_ctr is None:
        if self.next_ctr is not None:
            self.results.remove(self.next_ctr)
        # show Load more button if there are more entries
        if len(self.data) > (page + 1) * self.page_size:


@@ 97,7 93,7 @@ class History(ViewStackPage):
        # auto scroll to it
        # NOTE: we have to delay this, because everything has to be layout first
        # and apparently GTK doesn't have an event for this
        if not self.focus_node is None:
        if self.focus_node is not None:
            GLib.timeout_add(500, lambda: self.wrapper.scroll_to(self.focus_node))

    def schedule(self):

M melon/home/new.py => melon/home/new.py +6 -11
@@ 1,9 1,4 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, GLib, Gio, GObject
from gi.repository import Gtk, Adw, GLib
import threading
from datetime import datetime
from gettext import gettext as _


@@ 11,8 6,8 @@ from gettext import gettext as _
from melon.widgets.viewstackpage import ViewStackPage
from melon.widgets.iconbutton import IconButton
from melon.widgets.feeditem import AdaptiveFeedItem
from melon.servers.utils import fetch_home_feed, group_by_date
from melon.models import register_callback
from melon.servers.utils import fetch_home_feed
from melon.models.callbacks import register_callback
from melon.models import get_subscribed_channels, get_app_settings
from melon.models import (
    get_cached_feed,


@@ 138,7 133,7 @@ class NewFeed(ViewStackPage):

    def load_overlay(self):
        last = get_last_playback()
        if not last is None:
        if last is not None:
            pos = last[1]
            dur = last[2]
            if pos is None or dur is None:


@@ 152,10 147,10 @@ class NewFeed(ViewStackPage):
                # TODO: move into settings menu
                last = None
        if last is None:
            if not self.ov_toast is None:
            if self.ov_toast is not None:
                self.ov_toast.dismiss()
            return
        if not self.ov_toast is None:
        if self.ov_toast is not None:
            self.ov_toast.dismiss()
            self.ov_toast = None
        resource = last[0]

M melon/home/playlists.py => melon/home/playlists.py +2 -6
@@ 1,8 1,3 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, GLib
import threading
from gettext import gettext as _


@@ 10,7 5,8 @@ from gettext import gettext as _
from melon.widgets.viewstackpage import ViewStackPage
from melon.widgets.iconbutton import IconButton
from melon.widgets.feeditem import AdaptivePlaylistFeedItem
from melon.models import register_callback, get_playlists, get_app_settings
from melon.models import get_playlists, get_app_settings
from melon.models.callbacks import register_callback
from melon.models import PlaylistWrapperType
from melon.servers.utils import server_is_allowed


M melon/home/subs.py => melon/home/subs.py +2 -6
@@ 1,8 1,3 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, GLib
import threading
from gettext import gettext as _


@@ 10,7 5,8 @@ from gettext import gettext as _
from melon.widgets.viewstackpage import ViewStackPage
from melon.widgets.iconbutton import IconButton
from melon.widgets.feeditem import AdaptiveFeedItem
from melon.models import get_subscribed_channels, register_callback, get_app_settings
from melon.models import get_subscribed_channels, get_app_settings
from melon.models.callbacks import register_callback
from melon.servers.utils import filter_resources



M melon/import_providers/newpipe.py => melon/import_providers/newpipe.py +3 -5
@@ 8,9 8,7 @@ from melon.servers import Channel, Playlist, Video
from melon.models import (
    ensure_subscribed_to_channel,
    ensure_bookmark_external_playlist,
    add_to_history,
    new_local_playlist,
    add_to_local_playlist,
    set_local_playlist_thumbnail,
    add_history_items,
    add_videos,


@@ 106,7 104,7 @@ class NewpipeImporter(ImportProvider, ABC):
                title = dt[2]
                channel_name = dt[5]
                channel_id = None
                if not dt[4] is None:
                if dt[4] is not None:
                    channel_id = dt[4].split("/")[-1]
                thumb = dt[6].replace("https://i.ytimg.com", self.img_url)
                # newpipe does not store description


@@ 150,7 148,7 @@ class NewpipeImporter(ImportProvider, ABC):
                    title = vdt[2]
                    channel_name = vdt[3]
                    channel_id = None
                    if not vdt[4] is None:
                    if vdt[4] is not None:
                        channel_id = vdt[4].split("/")[-1]
                    thumb = vdt[5].replace("https://i.ytimg.com", self.img_url)
                    # newpipe doesn't store descriptions


@@ 175,7 173,7 @@ class NewpipeImporter(ImportProvider, ABC):
            """,
                (dt[2],),
            ).fetchone()
            if not thumb is None:
            if thumb is not None:
                set_local_playlist_thumbnail(
                    pid, thumb[0].replace("https://i.ytimg.com", self.img_url)
                )

M melon/import_providers/utils.py => melon/import_providers/utils.py +1 -6
@@ 1,9 1,4 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, GLib, Gio
from gi.repository import Gtk, GLib, Gio
from melon.import_providers import ImportProvider, PickerMode



M melon/importer.py => melon/importer.py +3 -7
@@ 1,16 1,12 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, Gio
from gi.repository import Gtk, Adw
from gettext import gettext as _

from melon.import_providers.utils import ImportPicker
from melon.import_providers import ImportProvider, PickerMode
from melon.import_providers import ImportProvider
from melon.models.callbacks import freeze, unfreeze
from melon.servers.utils import get_allowed_servers_list, get_server_instance
from melon.models import get_app_settings
from melon.widgets.iconbutton import IconButton


class ImporterScreen(Adw.NavigationPage):

M melon/models/__init__.py => melon/models/__init__.py +4 -6
@@ 1,7 1,6 @@
from copy import deepcopy
from enum import Enum, auto
from datetime import datetime
from functools import cache
import sqlite3
import os
import json


@@ 9,7 8,7 @@ import sys

from melon.servers import Video, Channel, Playlist, Resource
from melon.utils import get_data_dir
from melon.models.callbacks import notify, register_callback
from melon.models.callbacks import notify


class LocalPlaylist:


@@ 447,7 446,7 @@ def get_server_settings(sid: str):
        try:
            # autoparse json
            value = convert_json(setting[1])
        except Exception as e:
        except Exception:
            # fallback to native type on error
            value = setting[1]
        base["custom"][setting[0]] = value


@@ 459,7 458,7 @@ def is_server_enabled(server_id: str):
    value = conn.execute(
        "SELECT enabled FROM servers WHERE server = ?", (server_id,)
    ).fetchone()
    if not value is None:
    if value is not None:
        value = value[0]
    else:
        value = server_settings_template["enabled"]


@@ 975,7 974,7 @@ def add_to_history(vid, uts=None):
    Takes :Video type and adds the video to the history
    automatically adds a uts to the video
    """
    if uts == None:
    if uts is None:
        uts = datetime.now().timestamp()
    ensure_video(vid)
    conn = connect_to_db()


@@ 1062,7 1061,6 @@ def update_cached_feed(ls: list[(Video, int)]):
    # stored in app settings
    # code same as set_app_setting
    # but the notify's in the normal function would cause an infinite loop
    app_conf = get_app_settings()
    execute_sql(
        conn,
        """

M melon/models/callbacks.py => melon/models/callbacks.py +3 -3
@@ 31,14 31,14 @@ def unfreeze():


def register_callback(target: str, callback_id: str, function):
    if not target in callbacks:
    if target not in callbacks:
        return
    callbacks[target][callback_id] = function
    return lambda: unregister_callback(target, callback_id)


def unregister_callback(target: str, callback_id: str):
    if not target in callbacks:
    if target not in callbacks:
        return
    if callback_id in callbacks[target]:
        callbacks[target].pop(callback_id)


@@ 47,7 47,7 @@ def unregister_callback(target: str, callback_id: str):
def notify(target: str):
    if frozen:
        return
    if not target in callbacks:
    if target not in callbacks:
        return
    for _, func in callbacks[target].items():
        func()

M melon/player/__init__.py => melon/player/__init__.py +7 -16
@@ 1,28 1,19 @@
import gi

gi.require_version("WebKit", "6.0")
gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
gi.require_version("Gst", "1.0")
from gi.repository import Gtk, Adw, WebKit, GLib, Gst
from gi.repository import Gtk, Adw, GLib
from unidecode import unidecode
from gettext import gettext as _
import threading

from melon.servers.utils import get_server_instance, get_servers_list
from melon.servers import SearchMode
from melon.widgets.player import VideoPlayer
from melon.widgets.feeditem import AdaptiveFeedItem
from melon.widgets.preferencerow import PreferenceRow, PreferenceType, Preference
from melon.widgets.iconbutton import IconButton
from melon.models import get_app_settings, add_to_history, register_callback
from melon.models import get_app_settings, add_to_history
from melon.models import (
    get_video_playback_position,
    set_video_playback_position,
    set_video_playback_position_force,
    get_video_duration,
)
from melon.utils import pass_me


class PlayerScreen(Adw.NavigationPage):


@@ 66,7 57,7 @@ class PlayerScreen(Adw.NavigationPage):
        settings = get_app_settings()
        self.player = VideoPlayer(self.streams, settings["with_gl"])
        pos = get_video_playback_position(self.video.server, self.video.id)
        if not pos is None:
        if pos is not None:
            self.position = pos
            self.player.goto(pos)
        self.player.connect_update(self.on_player_data)


@@ 79,7 70,7 @@ class PlayerScreen(Adw.NavigationPage):
        self.disconnect_player()

    def disconnect_player(self):
        if not self.player is None:
        if self.player is not None:
            self.player.connect_ended(None)
            self.player.connect_update(None)
            self.player.stop()


@@ 104,7 95,7 @@ class PlayerScreen(Adw.NavigationPage):
        self.duration = duration

    def display_channel(self):
        if not self.channel is None:
        if self.channel is not None:
            self.about.add(AdaptiveFeedItem(self.channel))
        return False



@@ 188,7 179,7 @@ class PlayerScreen(Adw.NavigationPage):
        # reset playback position if video was nearly completely watched
        pos = get_video_playback_position(server_id, video_id)
        dur = get_video_duration(server_id, video_id)
        if not pos is None and not dur is None:
        if pos is not None and dur is not None:
            # TODO consider moving this to the settings panel
            consider_done = 0.99 * dur
            # video was probably watched till end


@@ 203,7 194,7 @@ class PlayerScreen(Adw.NavigationPage):
        server = get_servers_list()[server_id]
        self.instance = get_server_instance(server)

        if not self.external_btn is None:
        if self.external_btn is not None:
            self.header_bar.remove(self.external_btn)
        self.external_btn = IconButton("", "modem-symbolic")
        self.external_btn.connect("clicked", self.on_open_in_browser)

M melon/player/playlist.py => melon/player/playlist.py +6 -20
@@ 1,28 1,14 @@
import gi

gi.require_version("WebKit", "6.0")
gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, WebKit, GLib
from unidecode import unidecode
from gi.repository import Gtk, Adw, GLib
from gettext import gettext as _
import threading
import random

from melon.servers.utils import get_server_instance, get_servers_list
from melon.servers import SearchMode
from melon.widgets.feeditem import AdaptiveFeedItem
from melon.widgets.preferencerow import PreferenceRow, PreferenceType, Preference
from melon.widgets.iconbutton import IconButton
from melon.models import get_app_settings, add_to_history, register_callback
from melon.models import (
    get_video_playback_position,
    set_video_playback_position,
    set_video_playback_position_force,
)
from melon.utils import pass_me

from melon.models import get_local_playlist, PlaylistWrapper, PlaylistWrapperType
from melon.models import get_local_playlist, PlaylistWrapper

from melon.player import PlayerScreen



@@ 116,12 102,12 @@ class PlaylistPlayerScreen(PlayerScreen):
            return

        ind = self.get_next_index(0)
        if not ind is None:
        if ind is not None:
            self.prepare(ind)

    def get_next_index(self, fallback=None):
        index = self.playlist_index + 1
        if not fallback is None:
        if fallback is not None:
            index = fallback

        if self.playlist_repeat_single:


@@ 154,7 140,7 @@ class PlaylistPlayerScreen(PlayerScreen):
    def on_player_end(self):
        super().on_player_end()
        ind = self.get_next_index()
        if not ind is None:
        if ind is not None:
            self.prepare(ind)

    def empty_playlist(self):


@@ 196,7 182,7 @@ class PlaylistPlayerScreen(PlayerScreen):

    def ctr_skip_video(self):
        ind = self.get_next_index()
        if not ind is None:
        if ind is not None:
            self.prepare(ind)

    def ctr_toggle_shuffle(self, state):

M melon/playlist/__init__.py => melon/playlist/__init__.py +4 -15
@@ 1,14 1,7 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Gdk, Adw, GLib, GObject
from unidecode import unidecode
from gettext import gettext as _

from melon.servers.utils import get_servers_list, get_server_instance
from melon.servers import Preference, PreferenceType, Resource
from melon.widgets.iconbutton import IconButton
from melon.widgets.feeditem import AdaptiveFeedItem
from melon.widgets.simpledialog import SimpleDialog


@@ 21,20 14,14 @@ from melon.models import (
    set_local_playlist_thumbnail,
    delete_from_local_playlist,
    set_local_playlist_content,
    is_server_enabled,
    ensure_server_disabled,
    ensure_server_enabled,
    register_callback,
)
from melon.models.callbacks import register_callback
from melon.utils import pass_me


class LocalPlaylistScreen(Adw.NavigationPage):
    def __init__(self, playlist_id, *args, **kwargs):
        super().__init__(*args, **kwargs)

        app_conf = get_app_settings()

        self.playlist_id = playlist_id
        # register update listener
        self.unregister = register_callback(


@@ 107,7 94,9 @@ class LocalPlaylistScreen(Adw.NavigationPage):
            for raw_index, (entry, index) in enumerate(
                sorted(playlist.content, key=lambda x: x[1])
            ):
                item = AdaptiveFeedItem(entry)
                item = AdaptiveFeedItem(
                    entry, show_preview=app_conf["show_images_in_feed"]
                )
                item.menuitems = [
                    (
                        _("Set as playlist thumbnail"),

M melon/playlist/create.py => melon/playlist/create.py +5 -10
@@ 1,9 1,4 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, Gio, GLib
from gi.repository import Gtk, Adw, GLib
from gettext import gettext as _
import threading



@@ 11,14 6,14 @@ from melon.widgets.iconbutton import IconButton
from melon.widgets.simpledialog import SimpleDialog
from melon.widgets.feeditem import AdaptiveFeedItem
from melon.models import new_local_playlist, Video
from melon.servers.utils import get_app_settings
from melon.servers.utils import get_app_settings, get_server_instance, get_servers_list


class PlaylistCreatorDialog(SimpleDialog):
    def display(self, video=None):
        page = Adw.PreferencesPage()
        self.content = []
        if not video is None:
        if video is not None:
            self.content = [video]
            # use preference group as preview for video element
            preview_group = Adw.PreferencesGroup()


@@ 83,7 78,7 @@ class PlaylistCreatorDialog(SimpleDialog):
        if isinstance(target, Video):
            # target is already a video object
            video = target
        elif not target is None:
        elif target is not None:
            # we have to fetch the video ourselves
            server_id = target[0]
            video_id = target[1]


@@ 91,7 86,7 @@ class PlaylistCreatorDialog(SimpleDialog):
            if server_id in servers:
                instance = get_server_instance(servers[server_id])
                video = instance.get_video_info(video_id)
        if (not target is None) and video is None:
        if (target is not None) and video is None:
            # tried loading video data but failed
            GLib.idle_add(self.err)
        else:

M melon/playlist/pick.py => melon/playlist/pick.py +4 -10
@@ 1,10 1,4 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, Gio, GLib, Gdk
from unidecode import unidecode
from gi.repository import Gtk, Adw, GLib
from gettext import gettext as _
import threading



@@ 14,7 8,6 @@ from melon.widgets.simpledialog import SimpleDialog
from melon.models import get_playlists, PlaylistWrapperType, add_to_local_playlist
from melon.servers.utils import (
    get_app_settings,
    pixbuf_from_url,
    get_servers_list,
    get_server_instance,
)


@@ 80,6 73,7 @@ class PlaylistPickerDialog(SimpleDialog):
                    playlist,
                    video,
                ),
                show_preview=app_conf["show_images_in_feed"],
            )
            group.add(row)



@@ 103,7 97,7 @@ class PlaylistPickerDialog(SimpleDialog):
    def background(self, target=None):
        video = None

        if not target is None:
        if target is not None:
            server_id = target[0]
            video_id = target[1]
            servers = get_servers_list()


@@ 111,7 105,7 @@ class PlaylistPickerDialog(SimpleDialog):
                instance = get_server_instance(servers[server_id])
                video = instance.get_video_info(video_id)

        if not video is None:
        if video is not None:
            GLib.idle_add(self.display, video)
        else:
            GLib.idle_add(self.error)

M melon/servers/__init__.py => melon/servers/__init__.py +2 -9
@@ 1,13 1,6 @@
from enum import Flag, Enum, auto
from enum import Enum, auto
from abc import ABC, abstractmethod
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
gi.require_version("WebKit", "6.0")
from gi.repository import GObject, WebKit
from typing import Callable

from gi.repository import GObject
from melon.servers.loader import server_finder
from melon.import_providers import ImportProvider


M melon/servers/invidious/__init__.py => melon/servers/invidious/__init__.py +4 -9
@@ 3,16 3,11 @@ import requests
from urllib.parse import urlparse, parse_qs
from datetime import datetime
from gettext import gettext as _
import gi

gi.require_version("WebKit", "6.0")
from gi.repository import GLib, WebKit

from melon.import_providers.newpipe import NewpipeImporter
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.utils import pass_me


class NewpipeInvidiousImporter(NewpipeImporter):


@@ 298,7 293,7 @@ class Invidious(Server):
                    current_page = query["page"][0]
                    try:
                        current_page = int(current_page)
                    except Exception as e:
                    except Exception:
                        current_page = 1
                instance = self.get_external_url()
                listings = soup.find_all("a", {"class": "pure-button"})


@@ 308,12 303,12 @@ class Invidious(Server):
                    iquery = parse_qs(iurlres.query)
                    if iurlres.path != urlres.path:
                        continue
                    if not "page" in iquery:
                    if "page" not in iquery:
                        continue
                    ipage = 1
                    try:
                        ipage = int(iquery["page"][0])
                    except Exception as e:
                    except Exception:
                        ipage = 1
                    if ipage <= current_page:
                        continue


@@ 358,7 353,7 @@ class Invidious(Server):
                    rel = src["src"]
                    stream_url = f"{instance}{rel}"
                    results.append(Stream(stream_url, src["label"]))
                except:
                except Exception as _:
                    continue
            return results
        return []

M melon/servers/nebula/__init__.py => melon/servers/nebula/__init__.py +5 -7
@@ 1,6 1,4 @@
from bs4 import BeautifulSoup
import requests
from urllib.parse import urlparse, parse_qs
from datetime import datetime
import json
from gettext import gettext as _


@@ 138,7 136,7 @@ class Nebula(Server):
                results = []
                for entry in listing["items"]:
                    res = self.parse_entry(entry)
                    if not res is None:
                    if res is not None:
                        results.append(res)

                return results


@@ 166,7 164,7 @@ class Nebula(Server):
                data = json.loads(r.text)
                for entry in data["results"]:
                    res = self.parse_entry(entry)
                    if not res is None:
                    if res is not None:
                        results.append(res)
        if mask == SearchMode.ANY or mask == SearchMode.VIDEOS:
            # fetch videos


@@ 175,7 173,7 @@ class Nebula(Server):
                data = json.loads(r.text)
                for entry in data["results"]:
                    res = self.parse_entry(entry)
                    if not res is None:
                    if res is not None:
                        results.append(res)
        return results



@@ 199,7 197,7 @@ class Nebula(Server):
        video_feed = Feed("videos", _("Videos"))
        if r.ok:
            data = json.loads(r.text)
            if (not "playlist" in data) or len(data["playlist"]) == 0:
            if ("playlist" not in data) or len(data["playlist"]) == 0:
                return [video_feed]
            else:
                return [video_feed, Feed("playlists", _("Playlists"))]


@@ 302,7 300,7 @@ class Nebula(Server):
        # 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 = f"https://nebula.tv/auth/login/"
        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"}

M melon/servers/peertube/__init__.py => melon/servers/peertube/__init__.py +3 -6
@@ 1,12 1,9 @@
import requests
from urllib.parse import urlparse, parse_qs
from datetime import datetime
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.import_providers.newpipe import NewpipeImporter


class Peertube(Server):


@@ 122,7 119,7 @@ class Peertube(Server):
                        item_host = item["host"]
                        channel_id = f"https://{item_host}::{item_id}"
                        avatar = None
                        if "avatar" in item and not item["avatar"] is None:
                        if "avatar" in item and item["avatar"] is not None:
                            path = item["avatar"]["path"]
                            avatar = f"{instance}{path}"
                        c = Channel(


@@ 194,7 191,7 @@ class Peertube(Server):
            channel_host = data["host"]
            channel_id = f"https://{channel_host}::{channel_slug}"
            avatar = None
            if "avatar" in data and not data["avatar"] is None:
            if "avatar" in data and data["avatar"] is not None:
                avatar_path = data["avatar"]["path"]
                avatar = f"{instance}{avatar_path}"
            return Channel(


@@ 307,7 304,7 @@ class Peertube(Server):
                    channel_slug = item["channel"]["name"]
                    channel_host = item["channel"]["host"]
                    channel_id = f"https://{channel_host}::{channel_slug}"
                except Exception as e:
                except Exception:
                    # skip invalid entries
                    # peertube keeps deleted videos in the playlist
                    # but doesn't set all attributes

M melon/servers/utils.py => melon/servers/utils.py +5 -11
@@ 1,23 1,21 @@
from operator import itemgetter
from pkgutil import iter_modules
import importlib
import inspect
from functools import cache
import threading
import os
import sys
from gi.repository import GLib, Gtk, Gdk, GdkPixbuf, Gio
from gi.repository import GLib, GdkPixbuf
import requests
import urllib
from datetime import datetime
from melon.servers.loader import server_finder
from melon.models import (
    get_server_settings,
    get_subscribed_channels,
    get_app_settings,
    load_server,
)
from melon.servers import Server
from melon.servers import Channel, Playlist, Resource
from melon.servers import Resource


def pixbuf_from_url(url: str) -> GdkPixbuf.Pixbuf:


@@ 39,7 37,7 @@ def pixbuf_from_url(url: str) -> GdkPixbuf.Pixbuf:
        loader.write_bytes(GLib.Bytes.new(content))
        loader.close()
        return loader.get_pixbuf()
    except:
    except Exception as _:
        return None




@@ 55,9 53,6 @@ def get_server_instance(server) -> Server:
    return instance


import threading


class NewsWorkerPool:
    threads = []
    tasks = []


@@ 74,7 69,6 @@ class NewsWorkerPool:
            self.threads.append(thread)

    def run(self):
        name = threading.currentThread().getName()
        while self.tasks:
            task = self.tasks.pop(0)
            instance = task[0]


@@ 101,7 95,7 @@ def fetch_home_feed() -> list[Resource]:
    # generate list of tasks
    tasks = []
    for server in servers:
        if not server["id"] in db:
        if server["id"] not in db:
            continue
        instance = get_server_instance(server)
        channels = db[server["id"]]

M melon/settings/__init__.py => melon/settings/__init__.py +0 -5
@@ 1,8 1,3 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw
from gettext import gettext as _


M melon/utils.py => melon/utils.py +1 -4
@@ 1,7 1,4 @@
import gi

gi.require_version("Gdk", "4.0")
from gi.repository import Gio, GLib
from gi.repository import GLib
from functools import cache
import os


M melon/widgets/feeditem.py => melon/widgets/feeditem.py +4 -11
@@ 1,14 1,7 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, GLib, Gdk
from melon.servers import Resource, Video, Playlist, Channel
from melon.servers.utils import pixbuf_from_url
from melon.widgets.iconbutton import IconButton
from melon.models import PlaylistWrapperType, PlaylistWrapper
import threading
from melon.background import queue
from unidecode import unidecode
from gettext import gettext as _


@@ 101,7 94,7 @@ class AdaptiveFeedItem(Adw.ActionRow):
            if self.onClick is None:
                self.set_action_name("win.browse_channel")

        if not self.onClick is None:
        if self.onClick is not None:
            self.connect("activated", self.onClick)

        self.preview = Adw.Avatar()


@@ 118,7 111,7 @@ class AdaptiveFeedItem(Adw.ActionRow):
            GLib.idle_add(self.complete_avatar, texture)
            return
        pixbuf = pixbuf_from_url(url)
        if not pixbuf is None:
        if pixbuf is not None:
            texture = Gdk.Texture.new_for_pixbuf(pixbuf)
            preview_cache[url] = texture
            GLib.idle_add(self.complete_avatar, texture)


@@ 195,7 188,7 @@ class AdaptivePlaylistFeedItem(Adw.ActionRow):
        super().__init__(*args, **kwargs)
        self.set_title(unidecode(playlist.inner.title).replace("&", "&amp;"))
        self.set_subtitle(unidecode(playlist.inner.description).replace("&", "&amp;"))
        if not onClick is None:
        if onClick is not None:
            # use custom click callback
            self.connect("activated", onClick)
        elif playlist.type == PlaylistWrapperType.EXTERNAL:


@@ 221,7 214,7 @@ class AdaptivePlaylistFeedItem(Adw.ActionRow):
            GLib.idle_add(self.complete_avatar, texture)
            return
        pixbuf = pixbuf_from_url(url)
        if not pixbuf is None:
        if pixbuf is not None:
            texture = Gdk.Texture.new_for_pixbuf(pixbuf)
            preview_cache[url] = texture
            GLib.idle_add(self.complete_avatar, texture)

M melon/widgets/filterbutton.py => melon/widgets/filterbutton.py +0 -3
@@ 1,6 1,3 @@
import gi

gi.require_version("Gtk", "4.0")
from gi.repository import Gtk



M melon/widgets/iconbutton.py => melon/widgets/iconbutton.py +1 -6
@@ 1,8 1,3 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw




@@ 27,5 22,5 @@ class IconButton(Gtk.Button):
    def update(self, name, icon, tooltip=None):
        self.set_name(name)
        self.set_icon(icon)
        if not tooltip is None:
        if tooltip is not None:
            self.set_tooltip(tooltip)

M melon/widgets/player.py => melon/widgets/player.py +21 -32
@@ 1,19 1,8 @@
import gi

gi.require_version("WebKit", "6.0")
gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
gi.require_version("Gst", "1.0")
from gi.repository import Gtk, Adw, WebKit, GLib, Gst, Gio
from unidecode import unidecode
from gi.repository import Gtk, Adw, GLib, Gst, Gio
from gettext import gettext as _
from datetime import datetime
from enum import Enum, auto

from melon.servers import Stream
from melon.widgets.iconbutton import IconButton
from melon.widgets.preferencerow import PreferenceRow, PreferenceType, Preference
from melon.utils import pass_me


def format_seconds(secs: float) -> str:


@@ 325,12 314,12 @@ class VideoPlayerBase(Gtk.Overlay):
        self.ended_callback = callback

    def _toggle_fullscreen(self):
        if not self.toggle_fullscreen is None:
            state = self.toggle_fullscreen()
        if self.toggle_fullscreen is not None:
            self.toggle_fullscreen()

    def _toggle_popout(self):
        if not self.toggle_popout is None:
            state = self.toggle_popout()
        if self.toggle_popout is not None:
            self.toggle_popout()

    def set_toggle_states(self, popout: bool, fullscreen: bool):
        if popout:


@@ 487,7 476,7 @@ class VideoPlayerBase(Gtk.Overlay):
        self.stream = stream
        self.source.set_state(Gst.State.NULL)
        self.source.set_property("uri", stream.url)
        if not self.position is None:
        if self.position is not None:
            self.target_position = self.position
        self.play()
        self._build_menu()


@@ 517,7 506,7 @@ class VideoPlayerBase(Gtk.Overlay):
        pos = self.source.query_position(Gst.Format.TIME)
        # compare the nanoseconds values before converting them to seconds
        # so we don't have to deal with float arithmetics
        if pos[0] and dur[0] and pos[1] == dur[1] and not self.ended_callback is None:
        if pos[0] and dur[0] and pos[1] == dur[1] and self.ended_callback is not None:
            self.ended_callback()
        if dur[0]:
            # convert nanoseconds to senconds


@@ 531,25 520,25 @@ class VideoPlayerBase(Gtk.Overlay):
            # so the preview shows the correct timestamp
            # has the amazing side effect of also sending
            # the requested timestamp on update
            if not self.target_position is None:
            if self.target_position is not None:
                pos = self.target_position
        else:
            pos = None
        if not pos is None and not dur is None:
        if pos is not None and dur is not None:
            # use combined method if we have a value for both
            # so we don't call the update function twice
            self.set_position_and_duration(pos, dur)

            # a video position was requested but not yet seeked to
            if not self.target_position is None:
            if self.target_position is not None:
                position = self.target_position
                self.target_position = None
                self.source.seek_simple(
                    Gst.Format.TIME, Gst.SeekFlags.FLUSH, position * Gst.SECOND
                )
        elif not pos is None:
        elif pos is not None:
            self.set_position(pos)
        elif not dur is None:
        elif dur is not None:
            self.set_duration(dur)

        return True


@@ 576,19 565,19 @@ class VideoPlayerBase(Gtk.Overlay):
    def _update_playhead(self):
        pos_text = "00:00"
        dur_text = "--:--"
        if not self.position is None:
        if self.position is not None:
            pos_text = format_seconds(self.position)
        elif not self.target_position is None:
        elif self.target_position is not None:
            pos_text = format_seconds(self.target_position)
        if not self.duration is None:
        if self.duration is not None:
            dur_text = format_seconds(self.duration)
        self.position_display.set_label(pos_text)
        self.duration_display.set_label(dur_text)

        if not self.duration is None and not self.position is None:
        if self.duration is not None and self.position is not None:
            self.progress_display.set_range(0, self.duration)
            self.progress_display.set_value(self.position)
            if not self.update_callback is None:
            if self.update_callback is not None:
                self.update_callback(self.position, self.duration)
        else:
            self.progress_display.set_value(0)


@@ 645,7 634,7 @@ class VideoPlayer(Gtk.Stack):

    def _show_player(self):
        has_player = self.get_child_by_name("player")
        if not has_player is None:
        if has_player is not None:
            # has player -> remove it
            self.remove(has_player)
        else:


@@ 655,7 644,7 @@ class VideoPlayer(Gtk.Stack):

    def _popout_player(self):
        has_player = self.get_child_by_name("player")
        if not has_player is None:
        if has_player is not None:
            self.remove(has_player)
        self.set_visible_child_name("placeholder")



@@ 783,11 772,11 @@ class VideoPlayerWindow(Adw.Window):
        if curr == self._lastfull:
            return
        self._lastfull = curr
        if not self.onfull is None:
        if self.onfull is not None:
            self.onfull(curr)

    def close(self):
        if not self.onclose is None:
        if self.onclose is not None:
            self.onclose()

    def connect_close(self, callback=None):

M melon/widgets/preferencerow.py => melon/widgets/preferencerow.py +5 -11
@@ 1,15 1,9 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, GLib, Gdk
from gi.repository import Gtk, Adw

from gettext import gettext as _
from copy import deepcopy as copy

from melon.servers import Resource, Video, Playlist, Channel, Preference, PreferenceType
from melon.servers.utils import pixbuf_from_url
from melon.servers import Preference, PreferenceType
from melon.widgets.iconbutton import IconButton
from melon.widgets.simpledialog import SimpleDialog
from melon.utils import pass_me, many


@@ 85,7 79,7 @@ class PreferenceRow:
            # because the "notify" signal might be called more than once
            return
        self.current_value = copy(value)
        if not self.callback is None:
        if self.callback is not None:
            self.callback(value)

    def get_widget(self):


@@ 95,7 89,7 @@ class PreferenceRow:
        self.callback = cb

    def on_active(self):
        if not self.callback is None:
        if self.callback is not None:
            self.callback(self.get_active())




@@ 159,7 153,7 @@ class MultiRow(Adw.PreferencesRow):
            counter += 1

    def notify(self):
        if not self.callback is None:
        if self.callback is not None:
            self.callback(copy(self.values))
        self.update()


M melon/widgets/simpledialog.py => melon/widgets/simpledialog.py +1 -5
@@ 1,8 1,4 @@
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, Gio, GLib
from gi.repository import Adw


class SimpleDialog(Adw.Dialog):

M melon/window.py => melon/window.py +1 -8
@@ 1,8 1,3 @@
import sys
import gi

gi.require_version("Gtk", "4.0")
gi.require_version("Adw", "1")
from gi.repository import Gtk, Adw, Gio, GLib
from gettext import gettext as _



@@ 12,7 7,6 @@ from melon.browse.server import BrowseServerScreen
from melon.browse.channel import BrowseChannelScreen
from melon.browse.playlist import BrowsePlaylistScreen
from melon.browse.search import GlobalSearchScreen
from melon.servers.utils import get_servers_list, get_server_instance
from melon.settings import SettingsScreen
from melon.importer import ImporterScreen
from melon.player import PlayerScreen


@@ 54,7 48,6 @@ class MainWindow(Adw.ApplicationWindow):
    def open_playlist_picker(self, action, prefs):
        server_id = prefs[0]
        video_id = prefs[1]
        servers = get_servers_list()
        video = (server_id, video_id)
        diag = PlaylistPickerDialog(video)
        diag.show(self)


@@ 156,7 149,7 @@ class MainWindow(Adw.ApplicationWindow):

    def reg_action(self, name, func, variant=None, target=None):
        vtype = None
        if not variant is None:
        if variant is not None:
            vtype = GLib.VariantType.new(variant)
        act = Gio.SimpleAction.new(name, vtype)
        act.connect("activate", func)

M po/de.po => po/de.po +194 -194
@@ 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 12:29+0200\n"
"POT-Creation-Date: 2024-08-15 13:53+0200\n"
"PO-Revision-Date: 2024-04-20 14:18+0000\n"
"Last-Translator: hurzelchen <hurzelchen@users.noreply.translate.codeberg."
"org>\n"


@@ 86,481 86,481 @@ msgid ""
"button"
msgstr ""

#: ../melon/browse/__init__.py:20 ../melon/browse/search.py:66
#: ../melon/browse/server.py:115 ../melon/browse/server.py:143
#: ../melon/home/history.py:25 ../melon/home/new.py:36
#: ../melon/home/playlists.py:23 ../melon/home/subs.py:22
#: ../melon/importer.py:63 ../melon/player/__init__.py:113
#: ../melon/player/playlist.py:164 ../melon/player/playlist.py:171
#: ../melon/playlist/__init__.py:82 ../melon/playlist/create.py:104
#: ../melon/playlist/pick.py:121
#: ../melon/browse/__init__.py:16 ../melon/browse/search.py:62
#: ../melon/browse/server.py:110 ../melon/browse/server.py:138
#: ../melon/home/history.py:21 ../melon/home/new.py:31
#: ../melon/home/playlists.py:19 ../melon/home/subs.py:18
#: ../melon/importer.py:59 ../melon/player/__init__.py:104
#: ../melon/player/playlist.py:150 ../melon/player/playlist.py:157
#: ../melon/playlist/__init__.py:69 ../melon/playlist/create.py:99
#: ../melon/playlist/pick.py:115
msgid "*crickets chirping*"
msgstr "*Grillen zirpen*"

#: ../melon/browse/__init__.py:21
#: ../melon/browse/__init__.py:17
msgid "There are no available servers"
msgstr "Es sind keine Dienste vorhanden"

#: ../melon/browse/__init__.py:24 ../melon/browse/search.py:72
#: ../melon/importer.py:67
#: ../melon/browse/__init__.py:20 ../melon/browse/search.py:68
#: ../melon/importer.py:63
msgid "Enable servers in the settings menu"
msgstr "Aktiviere Dienste im Einstellungsmenü"

#: ../melon/browse/__init__.py:33
#: ../melon/browse/__init__.py:29
msgid "Available Servers"
msgstr "Verfügbare Dienste"

#: ../melon/browse/__init__.py:35
#: ../melon/browse/__init__.py:31
msgid "You can enable/disable and filter servers in the settings menu"
msgstr ""
"Du kannst Dienste in den Einstellungen aktivieren, deaktivieren und filtern"

#: ../melon/browse/__init__.py:56
#: ../melon/browse/__init__.py:52
msgid "Servers"
msgstr "Dienste"

#: ../melon/browse/__init__.py:64 ../melon/browse/search.py:126
#: ../melon/browse/__init__.py:60 ../melon/browse/search.py:122
msgid "Global Search"
msgstr "Globale Suche"

#: ../melon/browse/channel.py:104
#: ../melon/browse/channel.py:98
msgid "Subscribe to channel"
msgstr "Kanal abonnieren"

#: ../melon/browse/channel.py:105
#: ../melon/browse/channel.py:99
msgid "Add latest uploads to home feed"
msgstr "Zeige neue Videos im Home-Feed an"

#: ../melon/browse/channel.py:117
#: ../melon/browse/channel.py:111
msgid "Channel feed"
msgstr ""

#: ../melon/browse/channel.py:118
#: ../melon/browse/channel.py:112
msgid "This channel provides multiple feeds, choose which one to view"
msgstr ""

#: ../melon/browse/channel.py:170
#: ../melon/browse/channel.py:164
msgid "Channel"
msgstr "Kanal"

#: ../melon/browse/playlist.py:48 ../melon/playlist/__init__.py:74
#: ../melon/browse/playlist.py:42 ../melon/playlist/__init__.py:61
msgid "Start playing"
msgstr "Wiedergeben"

#: ../melon/browse/playlist.py:69 ../melon/player/__init__.py:53
#: ../melon/browse/playlist.py:63 ../melon/player/__init__.py:44
msgid "Bookmark"
msgstr "Merken"

#: ../melon/browse/playlist.py:70
#: ../melon/browse/playlist.py:64
msgid "Add Playlist to your local playlist collection"
msgstr "Wiedergabeliste zur lokalen Sammlung hinzufügen"

#: ../melon/browse/playlist.py:124
#: ../melon/browse/playlist.py:118
msgid "Playlist"
msgstr "Wiedergabeliste"

#: ../melon/browse/search.py:49
#: ../melon/browse/search.py:45
msgid "No results"
msgstr "Keine Ergebnisse"

#: ../melon/browse/search.py:52
#: ../melon/browse/search.py:48
#, python-brace-format
msgid "{count} result"
msgid_plural "{count} results"
msgstr[0] "{count} Ergebnis"
msgstr[1] "{count} Ergebnisse"

#: ../melon/browse/search.py:68
#: ../melon/browse/search.py:64
msgid "There are no available servers, a search would yield no results"
msgstr ""
"Es gibt keine verfügbaren Dienste, eine Suche würde keine Ergebnisse liefern"

#: ../melon/browse/search.py:96 ../melon/browse/server.py:47
#: ../melon/browse/search.py:92 ../melon/browse/server.py:42
msgid "Any"
msgstr "Alle"

#: ../melon/browse/search.py:100 ../melon/browse/server.py:51
#: ../melon/browse/search.py:96 ../melon/browse/server.py:46
msgid "Channels"
msgstr "Kanäle"

#: ../melon/browse/search.py:105 ../melon/browse/server.py:56
#: ../melon/home/playlists.py:34 ../melon/home/playlists.py:78
#: ../melon/servers/nebula/__init__.py:206
#: ../melon/servers/peertube/__init__.py:213
#: ../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/peertube/__init__.py:209
msgid "Playlists"
msgstr "Wiedergabelisten"

#: ../melon/browse/search.py:110 ../melon/browse/server.py:61
#: ../melon/servers/nebula/__init__.py:200
#: ../melon/servers/peertube/__init__.py:213
#: ../melon/servers/peertube/__init__.py:214
#: ../melon/browse/search.py:106 ../melon/browse/server.py:56
#: ../melon/servers/nebula/__init__.py:197
#: ../melon/servers/peertube/__init__.py:209
#: ../melon/servers/peertube/__init__.py:210
msgid "Videos"
msgstr "Videos"

#: ../melon/browse/server.py:26
#: ../melon/browse/server.py:21
msgid "Search"
msgstr "Suchen"

#: ../melon/browse/server.py:116
#: ../melon/browse/server.py:111
msgid "Try searching for a term"
msgstr "Suche nach einem Suchbegriff"

#: ../melon/browse/server.py:118
#: ../melon/browse/server.py:113
msgid "Try using a different query"
msgstr "Versuche nach einem anderen Begriff zu suchen"

#: ../melon/browse/server.py:144
#: ../melon/browse/server.py:139
msgid "This feed is empty"
msgstr ""

#: ../melon/home/__init__.py:20
#: ../melon/home/__init__.py:15
msgid "Home"
msgstr "Startseite"

#: ../melon/home/__init__.py:41 ../melon/home/history.py:28
#: ../melon/home/new.py:49 ../melon/home/subs.py:25
#: ../melon/home/__init__.py:36 ../melon/home/history.py:24
#: ../melon/home/new.py:44 ../melon/home/subs.py:21
msgid "Browse Servers"
msgstr "Dienste durchsuchen"

#: ../melon/home/__init__.py:48
#: ../melon/home/__init__.py:43
msgid "Preferences"
msgstr "Einstellungen"

#: ../melon/home/__init__.py:49
#: ../melon/home/__init__.py:44
msgid "Import Data"
msgstr "Daten Importieren"

#: ../melon/home/__init__.py:50
#: ../melon/home/__init__.py:45
msgid "About Melon"
msgstr "Über Melon"

#: ../melon/home/history.py:26
#: ../melon/home/history.py:22
msgid "You haven't watched any videos yet"
msgstr "Du hast noch keine Videos geschaut"

#: ../melon/home/history.py:38 ../melon/home/history.py:125
#: ../melon/home/history.py:34 ../melon/home/history.py:121
msgid "History"
msgstr "Verlauf"

#: ../melon/home/history.py:39
#: ../melon/home/history.py:35
msgid "These are the videos you opened in the past"
msgstr "Diese Videos hast du in der Vergangenheit geöffnet"

#: ../melon/home/history.py:83
#: ../melon/home/history.py:79
msgid "Show more"
msgstr "Mehr anzeigen"

#: ../melon/home/history.py:84
#: ../melon/home/history.py:80
msgid "Load older videos"
msgstr ""

#: ../melon/home/new.py:30
#: ../melon/home/new.py:25
msgid "Refresh"
msgstr "Aktualisieren"

#: ../melon/home/new.py:40
#: ../melon/home/new.py:35
msgid "Subscribe to a channel first, to view new uploads"
msgstr "Du musst einem Kanal folgen, um neue Videos zu sehen."

#: ../melon/home/new.py:45
#: ../melon/home/new.py:40
msgid "The channels you are subscribed to haven't uploaded anything yet"
msgstr "Die Kanäle, die du abonniert hast, haben noch nichts hochgeladen"

#: ../melon/home/new.py:68
#: ../melon/home/new.py:63
#, python-brace-format
msgid "(Last refresh: {last_refresh})"
msgstr "(Zuletzt aktualisiert: {last_refresh})"

#: ../melon/home/new.py:72 ../melon/home/new.py:172
#: ../melon/home/new.py:67 ../melon/home/new.py:167
msgid "What's new"
msgstr "Neues"

#: ../melon/home/new.py:74
#: ../melon/home/new.py:69
msgid "These are the latest videos of channels you follow"
msgstr "Hier sind die neusten Videos von Kanälen, denen du folgst"

#: ../melon/home/new.py:162
#: ../melon/home/new.py:157
msgid "Pick up where you left off"
msgstr ""

#: ../melon/home/new.py:163
#: ../melon/home/new.py:158
msgid "Watch"
msgstr ""

#: ../melon/home/playlists.py:24
#: ../melon/home/playlists.py:20
msgid "You don't have any playlists yet"
msgstr "Du hast noch keine Wiedergabelisten"

#: ../melon/home/playlists.py:26 ../melon/home/playlists.py:39
#: ../melon/home/playlists.py:22 ../melon/home/playlists.py:35
msgid "Create a new playlist"
msgstr "Neue Wiedergabeliste erstellen"

#: ../melon/home/playlists.py:36
#: ../melon/home/playlists.py:32
msgid "Here are playlists you've bookmarked or created yourself"
msgstr ""
"Hier ist eine Liste an Wiedergabelisten, die du dir gemerkt oder selber "
"erstellt hast"

#: ../melon/home/playlists.py:39
#: ../melon/home/playlists.py:35
msgid "New"
msgstr "Neu"

#: ../melon/home/subs.py:23
#: ../melon/home/subs.py:19
msgid "You aren't yet subscribed to channels"
msgstr "Du folgst noch keinen Kanälen"

#: ../melon/home/subs.py:33 ../melon/home/subs.py:68
#: ../melon/home/subs.py:29 ../melon/home/subs.py:64
msgid "Subscriptions"
msgstr "Kanäle"

#: ../melon/home/subs.py:34
#: ../melon/home/subs.py:30
msgid "You are subscribed to the following channels"
msgstr "Du folgst den folgenden Kanälen"

#: ../melon/import_providers/newpipe.py:42
#: ../melon/import_providers/newpipe.py:40
msgid "Newpipe Database importer"
msgstr "NewPipe Datenbank Import"

#: ../melon/import_providers/newpipe.py:44
#: ../melon/import_providers/newpipe.py:42
msgid ""
"Import the .db file from inside the newpipe .zip export (as invidious "
"content)"
msgstr ""
"Importiere die .db Datei aus dem NewPipe .zip Export (als Invidious Inhalte)"

#: ../melon/import_providers/newpipe.py:46
#: ../melon/import_providers/newpipe.py:44
msgid "Select .db file"
msgstr "Wähle eine .db Datei"

#: ../melon/import_providers/newpipe.py:60
#: ../melon/import_providers/newpipe.py:58
msgid "Newpipe Database"
msgstr "NewPipe Datenbank"

#: ../melon/importer.py:19 ../melon/importer.py:37
#: ../melon/importer.py:15 ../melon/importer.py:33
msgid "Import"
msgstr "Importieren"

#: ../melon/importer.py:38
#: ../melon/importer.py:34
#, fuzzy
msgid "The following import methods have been found"
msgstr "Die folgenden Import-Methoden wurden gefunden"

#: ../melon/importer.py:64
#: ../melon/importer.py:60
#, fuzzy
msgid "There are no available importer methods"
msgstr "Es gibt keine verfügbaren Import-Methoden"

#: ../melon/player/__init__.py:41
#: ../melon/player/__init__.py:32
msgid "Description"
msgstr "Beschreibung"

#: ../melon/player/__init__.py:54
#: ../melon/player/__init__.py:45
msgid "Add this video to a playlist"
msgstr "Füge dieses Video einer Wiedergabeliste hinzu"

#: ../melon/player/__init__.py:114 ../melon/playlist/create.py:105
#: ../melon/playlist/pick.py:122
#: ../melon/player/__init__.py:105 ../melon/playlist/create.py:100
#: ../melon/playlist/pick.py:116
msgid "Video could not be loaded"
msgstr "Das Video konnte nicht geladen werden"

#: ../melon/player/__init__.py:152 ../melon/player/__init__.py:186
#: ../melon/player/playlist.py:57
#: ../melon/player/__init__.py:143 ../melon/player/__init__.py:177
#: ../melon/player/playlist.py:43
msgid "Loading..."
msgstr ""

#: ../melon/player/playlist.py:165
#: ../melon/player/playlist.py:151
msgid "This playlist is empty"
msgstr "Diese Wiedergabeliste ist leer"

#: ../melon/player/playlist.py:172
#: ../melon/player/playlist.py:158
msgid "There was an error loading the playlist"
msgstr "Beim Laden der Wiedergabeliste ist ein Fehler aufgetreten"

#: ../melon/player/playlist.py:225
#: ../melon/player/playlist.py:211
msgid "Previous"
msgstr "Vorheriges"

#: ../melon/player/playlist.py:227
#: ../melon/player/playlist.py:213
msgid "Play video that comes before this one in the playlist"
msgstr "Spielt das Video, was in der Wiedergabeliste vor diesem kommt"

#: ../melon/player/playlist.py:244
#: ../melon/player/playlist.py:230
msgid "Next"
msgstr "Nächstes"

#: ../melon/player/playlist.py:246
#: ../melon/player/playlist.py:232
msgid "Play video that comes after this one in the playlist"
msgstr "Spielt das Video, was in der Wiedergabeliste nach diesem kommt"

#: ../melon/player/playlist.py:258
#: ../melon/player/playlist.py:244
msgid "Skip"
msgstr "Überspringen"

#: ../melon/player/playlist.py:259
#: ../melon/player/playlist.py:245
msgid "Skip this video and pick a new one at random"
msgstr "Überspringt dieses Video und wählt zufällig ein Neues aus"

#: ../melon/player/playlist.py:270
#: ../melon/player/playlist.py:256
msgid "Shuffle"
msgstr ""

#: ../melon/player/playlist.py:271
#: ../melon/player/playlist.py:257
msgid "Chooses the next video at random"
msgstr "Wählt das nächste Video zufällig aus"

#: ../melon/player/playlist.py:282
#: ../melon/player/playlist.py:268
msgid "Repeat current video"
msgstr ""

#: ../melon/player/playlist.py:283
#: ../melon/player/playlist.py:269
msgid "Puts this video on loop"
msgstr ""

#: ../melon/player/playlist.py:298
#: ../melon/player/playlist.py:284
msgid "Repeat playlist"
msgstr ""

#: ../melon/player/playlist.py:300
#: ../melon/player/playlist.py:286
msgid "Start playling the playlist from the beginning after reaching the end"
msgstr ""
"Spielt die Wiedergabeliste erneut von Beginn, wenn das Ende erreicht wurde"

#: ../melon/player/playlist.py:312
#: ../melon/player/playlist.py:298
msgid "Playlist Content"
msgstr ""

#: ../melon/player/playlist.py:314
#: ../melon/player/playlist.py:300
msgid "Click on videos to continue playing the playlist from there"
msgstr "Klicke auf ein Video, um die Wiedergabeliste von dort fortzusetzen"

#: ../melon/playlist/__init__.py:70
#: ../melon/playlist/__init__.py:57
msgid "Edit"
msgstr "Bearbeiten"

#: ../melon/playlist/__init__.py:84
#: ../melon/playlist/__init__.py:71
msgid "You haven't added any videos to this playlist yet"
msgstr "Du hast noch keine Videos zu dieser Wiedergabeliste hinzugefügt"

#: ../melon/playlist/__init__.py:87
#: ../melon/playlist/__init__.py:74
msgid "Start watching"
msgstr "Videos anschauen"

#: ../melon/playlist/__init__.py:113
#: ../melon/playlist/__init__.py:102
msgid "Set as playlist thumbnail"
msgstr ""

#: ../melon/playlist/__init__.py:121
#: ../melon/playlist/__init__.py:110
msgid "Remove from playlist"
msgstr ""

#: ../melon/playlist/__init__.py:214
#: ../melon/playlist/__init__.py:203
msgid "Edit Playlist"
msgstr "Wiedergabeliste bearbeiten"

#: ../melon/playlist/__init__.py:220
#: ../melon/playlist/__init__.py:209
msgid "Playlist details"
msgstr "Wiedergabelistendetails"

#: ../melon/playlist/__init__.py:221
#: ../melon/playlist/__init__.py:210
msgid "Change playlist information"
msgstr "Wiedergabelistendetails ändern"

#: ../melon/playlist/__init__.py:223 ../melon/playlist/create.py:43
#: ../melon/playlist/__init__.py:212 ../melon/playlist/create.py:38
msgid "Playlist name"
msgstr "Name der Wiedergabeliste"

#: ../melon/playlist/__init__.py:226 ../melon/playlist/create.py:46
#: ../melon/playlist/__init__.py:215 ../melon/playlist/create.py:41
msgid "Playlist description"
msgstr "Beschreibung der Wiedergabeliste"

#: ../melon/playlist/__init__.py:231
#: ../melon/playlist/__init__.py:220
msgid "Save details"
msgstr "Details speichern"

#: ../melon/playlist/__init__.py:233
#: ../melon/playlist/__init__.py:222
msgid "Change playlist title and description. (Closes the dialog)"
msgstr ""
"Titel und Beschreibung der Wiedergabeliste ändern. (Schließt den Dialog)"

#: ../melon/playlist/__init__.py:244
#: ../melon/playlist/__init__.py:233
msgid "Delete Playlist"
msgstr "Wiedergabeliste löschen"

#: ../melon/playlist/__init__.py:246
#: ../melon/playlist/__init__.py:235
msgid "Delete this playlist and it's content. This can NOT be undone."
msgstr ""
"Diese Wiedergabeliste und ihren Inhalt löschen. Diese Aktion kann nicht "
"rückgängig gemacht werden."

#: ../melon/playlist/__init__.py:259
#: ../melon/playlist/__init__.py:248
msgid "Close"
msgstr "Schließen"

#: ../melon/playlist/__init__.py:261
#: ../melon/playlist/__init__.py:250
msgid "Close without changing anything"
msgstr ""

#: ../melon/playlist/__init__.py:290
#: ../melon/playlist/__init__.py:279
msgid "Delete Playlist?"
msgstr ""

#: ../melon/playlist/__init__.py:291
#: ../melon/playlist/__init__.py:280
msgid "Do you really want to delete this playlist? This can not be undone."
msgstr ""

#: ../melon/playlist/__init__.py:293 ../melon/playlist/create.py:54
#: ../melon/playlist/create.py:109 ../melon/playlist/pick.py:88
#: ../melon/playlist/pick.py:126 ../melon/widgets/preferencerow.py:181
#: ../melon/widgets/preferencerow.py:220
#: ../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
msgid "Cancel"
msgstr "Abbruch"

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

#: ../melon/playlist/create.py:25 ../melon/playlist/pick.py:35
#: ../melon/playlist/create.py:20 ../melon/playlist/pick.py:28
msgid "Video"
msgstr "Video"

#: ../melon/playlist/create.py:27
#: ../melon/playlist/create.py:22
msgid "The following video will be added to the new playlist"
msgstr "Das folgende Video wird zu der neuen Wiedergabeliste hinzugefügt"

#: ../melon/playlist/create.py:39 ../melon/playlist/create.py:125
#: ../melon/playlist/create.py:34 ../melon/playlist/create.py:120
msgid "New Playlist"
msgstr "Neue Wiedergabeliste"

#: ../melon/playlist/create.py:40
#: ../melon/playlist/create.py:35
msgid "Enter more playlist information"
msgstr "Gibt weitere Wiedergabelistendetails an"

#: ../melon/playlist/create.py:44
#: ../melon/playlist/create.py:39
msgid "Unnamed Playlist"
msgstr "Unbenannte Wiedergabeliste"

#: ../melon/playlist/create.py:54 ../melon/playlist/create.py:109
#: ../melon/playlist/pick.py:88 ../melon/playlist/pick.py:126
#: ../melon/playlist/create.py:49 ../melon/playlist/create.py:104
#: ../melon/playlist/pick.py:82 ../melon/playlist/pick.py:120
msgid "Do not create playlist"
msgstr "Wiedergabeliste nicht erstellen"

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

#: ../melon/playlist/create.py:57
#: ../melon/playlist/create.py:52
msgid "Create playlist"
msgstr "Wiedergabeliste erstellen"

#: ../melon/playlist/pick.py:37
#: ../melon/playlist/pick.py:30
msgid "The following video will be added to the playlist"
msgstr "Das folgende Video wird zur Wiedergabeliste hinzugefügt"

#: ../melon/playlist/pick.py:50 ../melon/widgets/feeditem.py:154
#: ../melon/playlist/pick.py:43 ../melon/widgets/feeditem.py:147
msgid "Add to playlist"
msgstr "Zur Wiedergabeliste hinzufügen"

#: ../melon/playlist/pick.py:53
#: ../melon/playlist/pick.py:46
msgid ""
"Choose a playlist to add the video to. Note that you can only add videos to "
"local playlists, not external bookmarked ones"


@@ 568,42 568,42 @@ msgstr ""
"Wähle die Wiedergabeliste, zu der das Video hinzugefügt werden soll. (Du "
"kannst Videos nur zu lokalen Wiedergabelisten hinzufügen, nicht in gemerkte)"

#: ../melon/playlist/pick.py:57
#: ../melon/playlist/pick.py:50
msgid "Create new playlist"
msgstr "Neue Wiedergabeliste erstellen"

#: ../melon/playlist/pick.py:58
#: ../melon/playlist/pick.py:51
msgid "Create a new playlist and add the video to it"
msgstr "Neue Wiedergabeliste erstellen und Video hinzufügen"

#: ../melon/playlist/pick.py:142
#: ../melon/playlist/pick.py:136
msgid "Add to Playlist"
msgstr "Zur Wiedergabeliste hinzufügen"

#: ../melon/servers/invidious/__init__.py:35
#: ../melon/servers/invidious/__init__.py:29
msgid "Open source alternative front-end to YouTube"
msgstr "Quelloffenes alternatives Frontend für YouTube"

#: ../melon/servers/invidious/__init__.py:40
#: ../melon/servers/invidious/__init__.py:34
msgid "Instance"
msgstr "Instanz"

#: ../melon/servers/invidious/__init__.py:42
#: ../melon/servers/invidious/__init__.py:36
msgid ""
"See https://docs.invidious.io/instances/ for a list of available instances"
msgstr ""
"Auf https://docs.invidious.io/instances/ kannst du eine liste verfügbarer "
"Instanzen finden"

#: ../melon/servers/invidious/__init__.py:55
#: ../melon/servers/invidious/__init__.py:49
msgid "Trending"
msgstr "Trends"

#: ../melon/servers/invidious/__init__.py:56
#: ../melon/servers/invidious/__init__.py:50
msgid "Popular"
msgstr "Beliebt"

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


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

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

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

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

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

#: ../melon/servers/peertube/__init__.py:16
#: ../melon/servers/peertube/__init__.py:12
msgid "Decentralized video hosting network, based on free/libre software"
msgstr ""
"Dezentralisiertes Video-Hosting-Netzwerk, basierend auf freier/libre Software"

#: ../melon/servers/peertube/__init__.py:21
#: ../melon/servers/peertube/__init__.py:17
msgid "Instances"
msgstr "Instanzen"

#: ../melon/servers/peertube/__init__.py:23
#: ../melon/servers/peertube/__init__.py:19
msgid ""
"List of peertube instances, from which to fetch content. See https://"
"joinpeertube.org/instances"


@@ 644,32 644,32 @@ msgstr ""
"Liste von PeerTube Instanzen, von denen Inhalte geladen werden sollen. Siehe "
"https://joinpeertube.org/instances"

#: ../melon/servers/peertube/__init__.py:31
#: ../melon/servers/peertube/__init__.py:27
msgid "Show NSFW content"
msgstr "NSFW Inhalte anzeigen"

#: ../melon/servers/peertube/__init__.py:32
#: ../melon/servers/peertube/__init__.py:28
#, fuzzy
msgid "Passes the nsfw filter to the peertube search API"
msgstr "Gibt den NSFW Filter an die PeerTube Such-API weiter"

#: ../melon/servers/peertube/__init__.py:39
#: ../melon/servers/peertube/__init__.py:35
msgid "Enable Federation"
msgstr ""

#: ../melon/servers/peertube/__init__.py:40
#: ../melon/servers/peertube/__init__.py:36
msgid "Returns content from federated instances instead of only local content"
msgstr ""

#: ../melon/servers/peertube/__init__.py:65
#: ../melon/servers/peertube/__init__.py:61
msgid "Latest"
msgstr "Neuste"

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

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


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

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

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


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

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

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


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

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

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


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

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

#: ../melon/settings/__init__.py:66
#: ../melon/settings/__init__.py:61
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:74
#: ../melon/settings/__init__.py:69
msgid "Use GPU acceleration for video player if available"
msgstr ""

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

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

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

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

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

#: ../melon/settings/__init__.py:126
#: ../melon/settings/__init__.py:121
msgid ""
"Disabled servers won't show up in the browser or on the local/home screen"
msgstr ""
"Deaktivierte Dienste werden beim Durchsuchen und auf dem Startbildschirm "
"nicht angezeigt"

#: ../melon/widgets/feeditem.py:148
#: ../melon/widgets/feeditem.py:141
msgid "Watch now"
msgstr ""

#: ../melon/widgets/feeditem.py:161
#: ../melon/widgets/feeditem.py:154
msgid "Open in browser"
msgstr ""

#: ../melon/widgets/feeditem.py:165
#: ../melon/widgets/feeditem.py:158
msgid "View channel"
msgstr ""

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

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

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

#: ../melon/widgets/player.py:226 ../melon/widgets/player.py:613
#: ../melon/widgets/player.py:622
#: ../melon/widgets/player.py:215 ../melon/widgets/player.py:602
#: ../melon/widgets/player.py:611
msgid "Play"
msgstr ""

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#: ../melon/window.py:93
#: ../melon/window.py:86
msgid "Stream videos on the go"
msgstr "Videos unterwegs streamen"


M po/fa.po => po/fa.po +194 -194
@@ 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 12:29+0200\n"
"POT-Creation-Date: 2024-08-15 13:53+0200\n"
"PO-Revision-Date: 2024-05-30 09:18+0000\n"
"Last-Translator: sohrabbehdani <sohrabbehdani@users.noreply.translate."
"codeberg.org>\n"


@@ 92,472 92,472 @@ msgid ""
msgstr ""
"صفحه ویدیو، با یک پخش‌کننده ویدیو در بالا، اطلاعات ویدیو و دکمه نشانک‌گذاری"

#: ../melon/browse/__init__.py:20 ../melon/browse/search.py:66
#: ../melon/browse/server.py:115 ../melon/browse/server.py:143
#: ../melon/home/history.py:25 ../melon/home/new.py:36
#: ../melon/home/playlists.py:23 ../melon/home/subs.py:22
#: ../melon/importer.py:63 ../melon/player/__init__.py:113
#: ../melon/player/playlist.py:164 ../melon/player/playlist.py:171
#: ../melon/playlist/__init__.py:82 ../melon/playlist/create.py:104
#: ../melon/playlist/pick.py:121
#: ../melon/browse/__init__.py:16 ../melon/browse/search.py:62
#: ../melon/browse/server.py:110 ../melon/browse/server.py:138
#: ../melon/home/history.py:21 ../melon/home/new.py:31
#: ../melon/home/playlists.py:19 ../melon/home/subs.py:18
#: ../melon/importer.py:59 ../melon/player/__init__.py:104
#: ../melon/player/playlist.py:150 ../melon/player/playlist.py:157
#: ../melon/playlist/__init__.py:69 ../melon/playlist/create.py:99
#: ../melon/playlist/pick.py:115
#, fuzzy
msgid "*crickets chirping*"
msgstr "*جیرجیرک جیرجیرک*"

#: ../melon/browse/__init__.py:21
#: ../melon/browse/__init__.py:17
msgid "There are no available servers"
msgstr ""

#: ../melon/browse/__init__.py:24 ../melon/browse/search.py:72
#: ../melon/importer.py:67
#: ../melon/browse/__init__.py:20 ../melon/browse/search.py:68
#: ../melon/importer.py:63
msgid "Enable servers in the settings menu"
msgstr "فعال کردن کارساز در منوی تنظیمات"

#: ../melon/browse/__init__.py:33
#: ../melon/browse/__init__.py:29
msgid "Available Servers"
msgstr "کارساز های موجود"

#: ../melon/browse/__init__.py:35
#: ../melon/browse/__init__.py:31
msgid "You can enable/disable and filter servers in the settings menu"
msgstr "شما می‌توانید کارسازها را در تنظیمات فعال/غیرفعال و پالایش کنید."

#: ../melon/browse/__init__.py:56
#: ../melon/browse/__init__.py:52
msgid "Servers"
msgstr "کارسازها"

#: ../melon/browse/__init__.py:64 ../melon/browse/search.py:126
#: ../melon/browse/__init__.py:60 ../melon/browse/search.py:122
msgid "Global Search"
msgstr "جستجو سراسری"

#: ../melon/browse/channel.py:104
#: ../melon/browse/channel.py:98
msgid "Subscribe to channel"
msgstr "مشترک کانال شوید"

#: ../melon/browse/channel.py:105
#: ../melon/browse/channel.py:99
msgid "Add latest uploads to home feed"
msgstr "افزودن آخرین بارگذاری‌ها به صفحه‌خانه"

#: ../melon/browse/channel.py:117
#: ../melon/browse/channel.py:111
msgid "Channel feed"
msgstr "خوراک کانال"

#: ../melon/browse/channel.py:118
#: ../melon/browse/channel.py:112
msgid "This channel provides multiple feeds, choose which one to view"
msgstr ""

#: ../melon/browse/channel.py:170
#: ../melon/browse/channel.py:164
msgid "Channel"
msgstr "کانال"

#: ../melon/browse/playlist.py:48 ../melon/playlist/__init__.py:74
#: ../melon/browse/playlist.py:42 ../melon/playlist/__init__.py:61
msgid "Start playing"
msgstr "شروع به پخش کردن"

#: ../melon/browse/playlist.py:69 ../melon/player/__init__.py:53
#: ../melon/browse/playlist.py:63 ../melon/player/__init__.py:44
msgid "Bookmark"
msgstr "نشانک گذاری"

#: ../melon/browse/playlist.py:70
#: ../melon/browse/playlist.py:64
msgid "Add Playlist to your local playlist collection"
msgstr "افزودن این لیست‌پخش به مجموعه لیست‌پخش های محلی"

#: ../melon/browse/playlist.py:124
#: ../melon/browse/playlist.py:118
msgid "Playlist"
msgstr "سیاهه‌ٔ پخش"

#: ../melon/browse/search.py:49
#: ../melon/browse/search.py:45
msgid "No results"
msgstr "بدون نتیجه"

#: ../melon/browse/search.py:52
#: ../melon/browse/search.py:48
#, python-brace-format
msgid "{count} result"
msgid_plural "{count} results"
msgstr[0] ""
msgstr[1] ""

#: ../melon/browse/search.py:68
#: ../melon/browse/search.py:64
msgid "There are no available servers, a search would yield no results"
msgstr ""

#: ../melon/browse/search.py:96 ../melon/browse/server.py:47
#: ../melon/browse/search.py:92 ../melon/browse/server.py:42
msgid "Any"
msgstr "همه"

#: ../melon/browse/search.py:100 ../melon/browse/server.py:51
#: ../melon/browse/search.py:96 ../melon/browse/server.py:46
msgid "Channels"
msgstr "کانال‌ها"

#: ../melon/browse/search.py:105 ../melon/browse/server.py:56
#: ../melon/home/playlists.py:34 ../melon/home/playlists.py:78
#: ../melon/servers/nebula/__init__.py:206
#: ../melon/servers/peertube/__init__.py:213
#: ../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/peertube/__init__.py:209
msgid "Playlists"
msgstr "سیاههٔ پخش"

#: ../melon/browse/search.py:110 ../melon/browse/server.py:61
#: ../melon/servers/nebula/__init__.py:200
#: ../melon/servers/peertube/__init__.py:213
#: ../melon/servers/peertube/__init__.py:214
#: ../melon/browse/search.py:106 ../melon/browse/server.py:56
#: ../melon/servers/nebula/__init__.py:197
#: ../melon/servers/peertube/__init__.py:209
#: ../melon/servers/peertube/__init__.py:210
msgid "Videos"
msgstr "ویدیوها"

#: ../melon/browse/server.py:26
#: ../melon/browse/server.py:21
msgid "Search"
msgstr "جست‌وجو"

#: ../melon/browse/server.py:116
#: ../melon/browse/server.py:111
msgid "Try searching for a term"
msgstr ""

#: ../melon/browse/server.py:118
#: ../melon/browse/server.py:113
msgid "Try using a different query"
msgstr ""

#: ../melon/browse/server.py:144
#: ../melon/browse/server.py:139
msgid "This feed is empty"
msgstr ""

#: ../melon/home/__init__.py:20
#: ../melon/home/__init__.py:15
msgid "Home"
msgstr "خانه"

#: ../melon/home/__init__.py:41 ../melon/home/history.py:28
#: ../melon/home/new.py:49 ../melon/home/subs.py:25
#: ../melon/home/__init__.py:36 ../melon/home/history.py:24
#: ../melon/home/new.py:44 ../melon/home/subs.py:21
msgid "Browse Servers"
msgstr "جستجو در کارساز ها"

#: ../melon/home/__init__.py:48
#: ../melon/home/__init__.py:43
msgid "Preferences"
msgstr "تنظیمات"

#: ../melon/home/__init__.py:49
#: ../melon/home/__init__.py:44
msgid "Import Data"
msgstr "وارد کردن دیتا"

#: ../melon/home/__init__.py:50
#: ../melon/home/__init__.py:45
msgid "About Melon"
msgstr "درباره Melon"

#: ../melon/home/history.py:26
#: ../melon/home/history.py:22
msgid "You haven't watched any videos yet"
msgstr ""

#: ../melon/home/history.py:38 ../melon/home/history.py:125
#: ../melon/home/history.py:34 ../melon/home/history.py:121
msgid "History"
msgstr "تاریخچه"

#: ../melon/home/history.py:39
#: ../melon/home/history.py:35
msgid "These are the videos you opened in the past"
msgstr ""

#: ../melon/home/history.py:83
#: ../melon/home/history.py:79
msgid "Show more"
msgstr "نمایش بیشتر"

#: ../melon/home/history.py:84
#: ../melon/home/history.py:80
msgid "Load older videos"
msgstr "دریافت ویدئوهای قدیمی‌تر"

#: ../melon/home/new.py:30
#: ../melon/home/new.py:25
msgid "Refresh"
msgstr "بازخوانی"

#: ../melon/home/new.py:40
#: ../melon/home/new.py:35
msgid "Subscribe to a channel first, to view new uploads"
msgstr "برای تماشای محتوای بارگذاری جدید، در کانال‌ها مشترک شوید."

#: ../melon/home/new.py:45
#: ../melon/home/new.py:40
msgid "The channels you are subscribed to haven't uploaded anything yet"
msgstr "کانالی که مشترک آن شدید هیچ محتوای بارگذاری شده ای ندارد"

#: ../melon/home/new.py:68
#: ../melon/home/new.py:63
#, python-brace-format
msgid "(Last refresh: {last_refresh})"
msgstr "(آخرین بازخوانی: {last_refresh})"

#: ../melon/home/new.py:72 ../melon/home/new.py:172
#: ../melon/home/new.py:67 ../melon/home/new.py:167
msgid "What's new"
msgstr "چه چیزی جدید است؟"

#: ../melon/home/new.py:74
#: ../melon/home/new.py:69
msgid "These are the latest videos of channels you follow"
msgstr ""

#: ../melon/home/new.py:162
#: ../melon/home/new.py:157
msgid "Pick up where you left off"
msgstr ""

#: ../melon/home/new.py:163
#: ../melon/home/new.py:158
msgid "Watch"
msgstr "تماشا"

#: ../melon/home/playlists.py:24
#: ../melon/home/playlists.py:20
msgid "You don't have any playlists yet"
msgstr "شما هنوز هیچ سیاههٔ پخشی ندارید."

#: ../melon/home/playlists.py:26 ../melon/home/playlists.py:39
#: ../melon/home/playlists.py:22 ../melon/home/playlists.py:35
msgid "Create a new playlist"
msgstr "ایجاد یک لیست‌پخش جدید"

#: ../melon/home/playlists.py:36
#: ../melon/home/playlists.py:32
msgid "Here are playlists you've bookmarked or created yourself"
msgstr "اینها لیست پخش هایی هستند که توسط شما نشانه‌گذاری و یا ایجاد شده‌اند."

#: ../melon/home/playlists.py:39
#: ../melon/home/playlists.py:35
msgid "New"
msgstr "جدید"

#: ../melon/home/subs.py:23
#: ../melon/home/subs.py:19
msgid "You aren't yet subscribed to channels"
msgstr "شما مشترک هیچ کانالی نیستید"

#: ../melon/home/subs.py:33 ../melon/home/subs.py:68
#: ../melon/home/subs.py:29 ../melon/home/subs.py:64
msgid "Subscriptions"
msgstr "اشتراک‌ها"

#: ../melon/home/subs.py:34
#: ../melon/home/subs.py:30
msgid "You are subscribed to the following channels"
msgstr "شما در کانال‌های زیر مشترک هستید"

#: ../melon/import_providers/newpipe.py:42
#: ../melon/import_providers/newpipe.py:40
msgid "Newpipe Database importer"
msgstr "درون‌ریز پایگاه‌دادهٔ نیوپایپ"

#: ../melon/import_providers/newpipe.py:44
#: ../melon/import_providers/newpipe.py:42
msgid ""
"Import the .db file from inside the newpipe .zip export (as invidious "
"content)"
msgstr ""
"درون‌ریزی پروندهٔ ‪.db‬ از داخل خروجی ‬‪.zip‬ نیوپایپ (به عنوان محتوای اینویدیوس)"

#: ../melon/import_providers/newpipe.py:46
#: ../melon/import_providers/newpipe.py:44
msgid "Select .db file"
msgstr "انتخاب فایل .db"

#: ../melon/import_providers/newpipe.py:60
#: ../melon/import_providers/newpipe.py:58
msgid "Newpipe Database"
msgstr "پایگاه‌دادهٔ نیوپایپ"

#: ../melon/importer.py:19 ../melon/importer.py:37
#: ../melon/importer.py:15 ../melon/importer.py:33
msgid "Import"
msgstr "واردکردن"

#: ../melon/importer.py:38
#: ../melon/importer.py:34
msgid "The following import methods have been found"
msgstr "روش های واردکردن پیدا شدند"

#: ../melon/importer.py:64
#: ../melon/importer.py:60
msgid "There are no available importer methods"
msgstr ""

#: ../melon/player/__init__.py:41
#: ../melon/player/__init__.py:32
msgid "Description"
msgstr "توضیحات"

#: ../melon/player/__init__.py:54
#: ../melon/player/__init__.py:45
msgid "Add this video to a playlist"
msgstr "افزودن این ویدئو به لیست‌پخش"

#: ../melon/player/__init__.py:114 ../melon/playlist/create.py:105
#: ../melon/playlist/pick.py:122
#: ../melon/player/__init__.py:105 ../melon/playlist/create.py:100
#: ../melon/playlist/pick.py:116
msgid "Video could not be loaded"
msgstr ""

#: ../melon/player/__init__.py:152 ../melon/player/__init__.py:186
#: ../melon/player/playlist.py:57
#: ../melon/player/__init__.py:143 ../melon/player/__init__.py:177
#: ../melon/player/playlist.py:43
msgid "Loading..."
msgstr "در حال بارکردن..."

#: ../melon/player/playlist.py:165
#: ../melon/player/playlist.py:151
msgid "This playlist is empty"
msgstr ""

#: ../melon/player/playlist.py:172
#: ../melon/player/playlist.py:158
msgid "There was an error loading the playlist"
msgstr ""

#: ../melon/player/playlist.py:225
#: ../melon/player/playlist.py:211
msgid "Previous"
msgstr "قبلی"

#: ../melon/player/playlist.py:227
#: ../melon/player/playlist.py:213
msgid "Play video that comes before this one in the playlist"
msgstr ""

#: ../melon/player/playlist.py:244
#: ../melon/player/playlist.py:230
msgid "Next"
msgstr "بعدی"

#: ../melon/player/playlist.py:246
#: ../melon/player/playlist.py:232
msgid "Play video that comes after this one in the playlist"
msgstr "ویدیو بعد از این را که در سیاههٔ‌پخش وجود دارد پخش کن."

#: ../melon/player/playlist.py:258
#: ../melon/player/playlist.py:244
msgid "Skip"
msgstr "ردکردن"

#: ../melon/player/playlist.py:259
#: ../melon/player/playlist.py:245
msgid "Skip this video and pick a new one at random"
msgstr "رد کردن این ویدئو و انتخاب یک عدد به صورت تصادفی"

#: ../melon/player/playlist.py:270
#: ../melon/player/playlist.py:256
msgid "Shuffle"
msgstr "مخلوط"

#: ../melon/player/playlist.py:271
#: ../melon/player/playlist.py:257
msgid "Chooses the next video at random"
msgstr "انتخاب ویدئو بعدی به صورت تصادفی"

#: ../melon/player/playlist.py:282
#: ../melon/player/playlist.py:268
msgid "Repeat current video"
msgstr "بازپخش این ویدئو"

#: ../melon/player/playlist.py:283
#: ../melon/player/playlist.py:269
msgid "Puts this video on loop"
msgstr "ویدئو را در حلقه قرار دهید."

#: ../melon/player/playlist.py:298
#: ../melon/player/playlist.py:284
msgid "Repeat playlist"
msgstr "بازپخش لیست‌پخش"

#: ../melon/player/playlist.py:300
#: ../melon/player/playlist.py:286
msgid "Start playling the playlist from the beginning after reaching the end"
msgstr ""

#: ../melon/player/playlist.py:312
#: ../melon/player/playlist.py:298
msgid "Playlist Content"
msgstr "محتوای سیاههٔ‌پخش"

#: ../melon/player/playlist.py:314
#: ../melon/player/playlist.py:300
msgid "Click on videos to continue playing the playlist from there"
msgstr "بر روی ویدئو ضربه بزنید تا پخش از لیست پخش از آن ویدئو ادامه پیدا کند."

#: ../melon/playlist/__init__.py:70
#: ../melon/playlist/__init__.py:57
msgid "Edit"
msgstr "ویرایش"

#: ../melon/playlist/__init__.py:84
#: ../melon/playlist/__init__.py:71
msgid "You haven't added any videos to this playlist yet"
msgstr ""

#: ../melon/playlist/__init__.py:87
#: ../melon/playlist/__init__.py:74
msgid "Start watching"
msgstr "شروع به تماشا کنید"

#: ../melon/playlist/__init__.py:113
#: ../melon/playlist/__init__.py:102
msgid "Set as playlist thumbnail"
msgstr ""

#: ../melon/playlist/__init__.py:121
#: ../melon/playlist/__init__.py:110
msgid "Remove from playlist"
msgstr ""

#: ../melon/playlist/__init__.py:214
#: ../melon/playlist/__init__.py:203
msgid "Edit Playlist"
msgstr "حذف لیست‌پخش"

#: ../melon/playlist/__init__.py:220
#: ../melon/playlist/__init__.py:209
msgid "Playlist details"
msgstr "جزئیات لیست‌پخش"

#: ../melon/playlist/__init__.py:221
#: ../melon/playlist/__init__.py:210
msgid "Change playlist information"
msgstr "تغییر اطلاعات لیست پخش"

#: ../melon/playlist/__init__.py:223 ../melon/playlist/create.py:43
#: ../melon/playlist/__init__.py:212 ../melon/playlist/create.py:38
msgid "Playlist name"
msgstr "نام لیست‌پخش"

#: ../melon/playlist/__init__.py:226 ../melon/playlist/create.py:46
#: ../melon/playlist/__init__.py:215 ../melon/playlist/create.py:41
msgid "Playlist description"
msgstr "اطلاعات سیاههٔ پخش"

#: ../melon/playlist/__init__.py:231
#: ../melon/playlist/__init__.py:220
msgid "Save details"
msgstr "ذخیره جزئیات"

#: ../melon/playlist/__init__.py:233
#: ../melon/playlist/__init__.py:222
msgid "Change playlist title and description. (Closes the dialog)"
msgstr "تغییر عنوان و توضیحات لیست پخش (این پنجره بسته می شود)"

#: ../melon/playlist/__init__.py:244
#: ../melon/playlist/__init__.py:233
msgid "Delete Playlist"
msgstr "حذف لیست پخش"

#: ../melon/playlist/__init__.py:246
#: ../melon/playlist/__init__.py:235
msgid "Delete this playlist and it's content. This can NOT be undone."
msgstr "این عملیات این لیست‌پخش و محتویات آن را حذف می‌کند و قابل بازگشت نیست."

#: ../melon/playlist/__init__.py:259
#: ../melon/playlist/__init__.py:248
msgid "Close"
msgstr "بستن"

#: ../melon/playlist/__init__.py:261
#: ../melon/playlist/__init__.py:250
msgid "Close without changing anything"
msgstr "بستن بدون تغییر دادن چیزی"

#: ../melon/playlist/__init__.py:290
#: ../melon/playlist/__init__.py:279
msgid "Delete Playlist?"
msgstr ""

#: ../melon/playlist/__init__.py:291
#: ../melon/playlist/__init__.py:280
msgid "Do you really want to delete this playlist? This can not be undone."
msgstr ""

#: ../melon/playlist/__init__.py:293 ../melon/playlist/create.py:54
#: ../melon/playlist/create.py:109 ../melon/playlist/pick.py:88
#: ../melon/playlist/pick.py:126 ../melon/widgets/preferencerow.py:181
#: ../melon/widgets/preferencerow.py:220
#: ../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
msgid "Cancel"
msgstr "لغو"

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

#: ../melon/playlist/create.py:25 ../melon/playlist/pick.py:35
#: ../melon/playlist/create.py:20 ../melon/playlist/pick.py:28
msgid "Video"
msgstr "ویدیو"

#: ../melon/playlist/create.py:27
#: ../melon/playlist/create.py:22
msgid "The following video will be added to the new playlist"
msgstr ""

#: ../melon/playlist/create.py:39 ../melon/playlist/create.py:125
#: ../melon/playlist/create.py:34 ../melon/playlist/create.py:120
msgid "New Playlist"
msgstr "سیاههٔ پخش جدید"

#: ../melon/playlist/create.py:40
#: ../melon/playlist/create.py:35
msgid "Enter more playlist information"
msgstr "وارد کردن توضیحات بیشتر برای لیست‌پخش"

#: ../melon/playlist/create.py:44
#: ../melon/playlist/create.py:39
msgid "Unnamed Playlist"
msgstr "سیاههٔ پخش بدون نام"

#: ../melon/playlist/create.py:54 ../melon/playlist/create.py:109
#: ../melon/playlist/pick.py:88 ../melon/playlist/pick.py:126
#: ../melon/playlist/create.py:49 ../melon/playlist/create.py:104
#: ../melon/playlist/pick.py:82 ../melon/playlist/pick.py:120
msgid "Do not create playlist"
msgstr "لیست پخش را ایجاد نکن."

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

#: ../melon/playlist/create.py:57
#: ../melon/playlist/create.py:52
msgid "Create playlist"
msgstr "ایجاد لیست‌پخش"

#: ../melon/playlist/pick.py:37
#: ../melon/playlist/pick.py:30
msgid "The following video will be added to the playlist"
msgstr ""

#: ../melon/playlist/pick.py:50 ../melon/widgets/feeditem.py:154
#: ../melon/playlist/pick.py:43 ../melon/widgets/feeditem.py:147
msgid "Add to playlist"
msgstr "افزودن به لیست‌پخش"

#: ../melon/playlist/pick.py:53
#: ../melon/playlist/pick.py:46
msgid ""
"Choose a playlist to add the video to. Note that you can only add videos to "
"local playlists, not external bookmarked ones"


@@ 566,73 566,73 @@ msgstr ""
"نکته: شما تنها می‌توانید ویدئو را به لیست پخش های محلی اضافه کنید، نه به "
"نشانک گذاری شده های خارجی."

#: ../melon/playlist/pick.py:57
#: ../melon/playlist/pick.py:50
msgid "Create new playlist"
msgstr "ایجاد یک لیست‌پخش جدید"

#: ../melon/playlist/pick.py:58
#: ../melon/playlist/pick.py:51
msgid "Create a new playlist and add the video to it"
msgstr "ایجاد یک لیست‌پخش جدید و افزودن ویدئو به آن"

#: ../melon/playlist/pick.py:142
#: ../melon/playlist/pick.py:136
msgid "Add to Playlist"
msgstr "افزودن به لیست‌پخش"

#: ../melon/servers/invidious/__init__.py:35
#: ../melon/servers/invidious/__init__.py:29
msgid "Open source alternative front-end to YouTube"
msgstr ""

#: ../melon/servers/invidious/__init__.py:40
#: ../melon/servers/invidious/__init__.py:34
msgid "Instance"
msgstr "نمونه"

#: ../melon/servers/invidious/__init__.py:42
#: ../melon/servers/invidious/__init__.py:36
msgid ""
"See https://docs.invidious.io/instances/ for a list of available instances"
msgstr ""
"برای مشاهده لیستی از کارساز های موجود به https://docs.invidious.io/"
"instances/ مراجعه کنید"

#: ../melon/servers/invidious/__init__.py:55
#: ../melon/servers/invidious/__init__.py:49
msgid "Trending"
msgstr ""

#: ../melon/servers/invidious/__init__.py:56
#: ../melon/servers/invidious/__init__.py:50
msgid "Popular"
msgstr "معروف"

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

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

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

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

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

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

#: ../melon/servers/peertube/__init__.py:21
#: ../melon/servers/peertube/__init__.py:17
msgid "Instances"
msgstr "نمونه‌ها"

#: ../melon/servers/peertube/__init__.py:23
#: ../melon/servers/peertube/__init__.py:19
msgid ""
"List of peertube instances, from which to fetch content. See https://"
"joinpeertube.org/instances"


@@ 640,31 640,31 @@ msgstr ""
"فهرست نمونه‌های پیرتیوب که محتوا از آن‌ها واکشی می‌شود. این نشانی را ببینید: "
"https://joinpeertube.org/instances"

#: ../melon/servers/peertube/__init__.py:31
#: ../melon/servers/peertube/__init__.py:27
msgid "Show NSFW content"
msgstr "نمایش محتوای nsfw"

#: ../melon/servers/peertube/__init__.py:32
#: ../melon/servers/peertube/__init__.py:28
msgid "Passes the nsfw filter to the peertube search API"
msgstr ""

#: ../melon/servers/peertube/__init__.py:39
#: ../melon/servers/peertube/__init__.py:35
msgid "Enable Federation"
msgstr "فعال کردن فدریشن"

#: ../melon/servers/peertube/__init__.py:40
#: ../melon/servers/peertube/__init__.py:36
msgid "Returns content from federated instances instead of only local content"
msgstr "محتوا را از کارساز های فدریتد بجای محلی نشان می‌دهد."

#: ../melon/servers/peertube/__init__.py:65
#: ../melon/servers/peertube/__init__.py:61
msgid "Latest"
msgstr "آخرین"

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

#: ../melon/settings/__init__.py:126
#: ../melon/settings/__init__.py:121
msgid ""
"Disabled servers won't show up in the browser or on the local/home screen"
msgstr ""
"کارساز های غیرفعال شده دیگر به شما در بخش محلی و صفحه‌خانه نشان داده نمی‌شوند."

#: ../melon/widgets/feeditem.py:148
#: ../melon/widgets/feeditem.py:141
msgid "Watch now"
msgstr ""

#: ../melon/widgets/feeditem.py:161
#: ../melon/widgets/feeditem.py:154
msgid "Open in browser"
msgstr ""

#: ../melon/widgets/feeditem.py:165
#: ../melon/widgets/feeditem.py:158
msgid "View channel"
msgstr ""

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

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

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

#: ../melon/widgets/player.py:226 ../melon/widgets/player.py:613
#: ../melon/widgets/player.py:622
#: ../melon/widgets/player.py:215 ../melon/widgets/player.py:602
#: ../melon/widgets/player.py:611
msgid "Play"
msgstr ""

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#: ../melon/window.py:93
#: ../melon/window.py:86
msgid "Stream videos on the go"
msgstr "ویدیو‌هارا استریم کن"


M po/melon.pot => po/melon.pot +194 -194
@@ 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 12:29+0200\n"
"POT-Creation-Date: 2024-08-15 13:53+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"


@@ 79,734 79,734 @@ msgid ""
"button"
msgstr ""

#: ../melon/browse/__init__.py:20 ../melon/browse/search.py:66
#: ../melon/browse/server.py:115 ../melon/browse/server.py:143
#: ../melon/home/history.py:25 ../melon/home/new.py:36
#: ../melon/home/playlists.py:23 ../melon/home/subs.py:22
#: ../melon/importer.py:63 ../melon/player/__init__.py:113
#: ../melon/player/playlist.py:164 ../melon/player/playlist.py:171
#: ../melon/playlist/__init__.py:82 ../melon/playlist/create.py:104
#: ../melon/playlist/pick.py:121
#: ../melon/browse/__init__.py:16 ../melon/browse/search.py:62
#: ../melon/browse/server.py:110 ../melon/browse/server.py:138
#: ../melon/home/history.py:21 ../melon/home/new.py:31
#: ../melon/home/playlists.py:19 ../melon/home/subs.py:18
#: ../melon/importer.py:59 ../melon/player/__init__.py:104
#: ../melon/player/playlist.py:150 ../melon/player/playlist.py:157
#: ../melon/playlist/__init__.py:69 ../melon/playlist/create.py:99
#: ../melon/playlist/pick.py:115
msgid "*crickets chirping*"
msgstr ""

#: ../melon/browse/__init__.py:21
#: ../melon/browse/__init__.py:17
msgid "There are no available servers"
msgstr ""

#: ../melon/browse/__init__.py:24 ../melon/browse/search.py:72
#: ../melon/importer.py:67
#: ../melon/browse/__init__.py:20 ../melon/browse/search.py:68
#: ../melon/importer.py:63
msgid "Enable servers in the settings menu"
msgstr ""

#: ../melon/browse/__init__.py:33
#: ../melon/browse/__init__.py:29
msgid "Available Servers"
msgstr ""

#: ../melon/browse/__init__.py:35
#: ../melon/browse/__init__.py:31
msgid "You can enable/disable and filter servers in the settings menu"
msgstr ""

#: ../melon/browse/__init__.py:56
#: ../melon/browse/__init__.py:52
msgid "Servers"
msgstr ""

#: ../melon/browse/__init__.py:64 ../melon/browse/search.py:126
#: ../melon/browse/__init__.py:60 ../melon/browse/search.py:122
msgid "Global Search"
msgstr ""

#: ../melon/browse/channel.py:104
#: ../melon/browse/channel.py:98
msgid "Subscribe to channel"
msgstr ""

#: ../melon/browse/channel.py:105
#: ../melon/browse/channel.py:99
msgid "Add latest uploads to home feed"
msgstr ""

#: ../melon/browse/channel.py:117
#: ../melon/browse/channel.py:111
msgid "Channel feed"
msgstr ""

#: ../melon/browse/channel.py:118
#: ../melon/browse/channel.py:112
msgid "This channel provides multiple feeds, choose which one to view"
msgstr ""

#: ../melon/browse/channel.py:170
#: ../melon/browse/channel.py:164
msgid "Channel"
msgstr ""

#: ../melon/browse/playlist.py:48 ../melon/playlist/__init__.py:74
#: ../melon/browse/playlist.py:42 ../melon/playlist/__init__.py:61
msgid "Start playing"
msgstr ""

#: ../melon/browse/playlist.py:69 ../melon/player/__init__.py:53
#: ../melon/browse/playlist.py:63 ../melon/player/__init__.py:44
msgid "Bookmark"
msgstr ""

#: ../melon/browse/playlist.py:70
#: ../melon/browse/playlist.py:64
msgid "Add Playlist to your local playlist collection"
msgstr ""

#: ../melon/browse/playlist.py:124
#: ../melon/browse/playlist.py:118
msgid "Playlist"
msgstr ""

#: ../melon/browse/search.py:49
#: ../melon/browse/search.py:45
msgid "No results"
msgstr ""

#: ../melon/browse/search.py:52
#: ../melon/browse/search.py:48
#, python-brace-format
msgid "{count} result"
msgid_plural "{count} results"
msgstr[0] ""
msgstr[1] ""

#: ../melon/browse/search.py:68
#: ../melon/browse/search.py:64
msgid "There are no available servers, a search would yield no results"
msgstr ""

#: ../melon/browse/search.py:96 ../melon/browse/server.py:47
#: ../melon/browse/search.py:92 ../melon/browse/server.py:42
msgid "Any"
msgstr ""

#: ../melon/browse/search.py:100 ../melon/browse/server.py:51
#: ../melon/browse/search.py:96 ../melon/browse/server.py:46
msgid "Channels"
msgstr ""

#: ../melon/browse/search.py:105 ../melon/browse/server.py:56
#: ../melon/home/playlists.py:34 ../melon/home/playlists.py:78
#: ../melon/servers/nebula/__init__.py:206
#: ../melon/servers/peertube/__init__.py:213
#: ../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/peertube/__init__.py:209
msgid "Playlists"
msgstr ""

#: ../melon/browse/search.py:110 ../melon/browse/server.py:61
#: ../melon/servers/nebula/__init__.py:200
#: ../melon/servers/peertube/__init__.py:213
#: ../melon/servers/peertube/__init__.py:214
#: ../melon/browse/search.py:106 ../melon/browse/server.py:56
#: ../melon/servers/nebula/__init__.py:197
#: ../melon/servers/peertube/__init__.py:209
#: ../melon/servers/peertube/__init__.py:210
msgid "Videos"
msgstr ""

#: ../melon/browse/server.py:26
#: ../melon/browse/server.py:21
msgid "Search"
msgstr ""

#: ../melon/browse/server.py:116
#: ../melon/browse/server.py:111
msgid "Try searching for a term"
msgstr ""

#: ../melon/browse/server.py:118
#: ../melon/browse/server.py:113
msgid "Try using a different query"
msgstr ""

#: ../melon/browse/server.py:144
#: ../melon/browse/server.py:139
msgid "This feed is empty"
msgstr ""

#: ../melon/home/__init__.py:20
#: ../melon/home/__init__.py:15
msgid "Home"
msgstr ""

#: ../melon/home/__init__.py:41 ../melon/home/history.py:28
#: ../melon/home/new.py:49 ../melon/home/subs.py:25
#: ../melon/home/__init__.py:36 ../melon/home/history.py:24
#: ../melon/home/new.py:44 ../melon/home/subs.py:21
msgid "Browse Servers"
msgstr ""

#: ../melon/home/__init__.py:48
#: ../melon/home/__init__.py:43
msgid "Preferences"
msgstr ""

#: ../melon/home/__init__.py:49
#: ../melon/home/__init__.py:44
msgid "Import Data"
msgstr ""

#: ../melon/home/__init__.py:50
#: ../melon/home/__init__.py:45
msgid "About Melon"
msgstr ""

#: ../melon/home/history.py:26
#: ../melon/home/history.py:22
msgid "You haven't watched any videos yet"
msgstr ""

#: ../melon/home/history.py:38 ../melon/home/history.py:125
#: ../melon/home/history.py:34 ../melon/home/history.py:121
msgid "History"
msgstr ""

#: ../melon/home/history.py:39
#: ../melon/home/history.py:35
msgid "These are the videos you opened in the past"
msgstr ""

#: ../melon/home/history.py:83
#: ../melon/home/history.py:79
msgid "Show more"
msgstr ""

#: ../melon/home/history.py:84
#: ../melon/home/history.py:80
msgid "Load older videos"
msgstr ""

#: ../melon/home/new.py:30
#: ../melon/home/new.py:25
msgid "Refresh"
msgstr ""

#: ../melon/home/new.py:40
#: ../melon/home/new.py:35
msgid "Subscribe to a channel first, to view new uploads"
msgstr ""

#: ../melon/home/new.py:45
#: ../melon/home/new.py:40
msgid "The channels you are subscribed to haven't uploaded anything yet"
msgstr ""

#: ../melon/home/new.py:68
#: ../melon/home/new.py:63
#, python-brace-format
msgid "(Last refresh: {last_refresh})"
msgstr ""

#: ../melon/home/new.py:72 ../melon/home/new.py:172
#: ../melon/home/new.py:67 ../melon/home/new.py:167
msgid "What's new"
msgstr ""

#: ../melon/home/new.py:74
#: ../melon/home/new.py:69
msgid "These are the latest videos of channels you follow"
msgstr ""

#: ../melon/home/new.py:162
#: ../melon/home/new.py:157
msgid "Pick up where you left off"
msgstr ""

#: ../melon/home/new.py:163
#: ../melon/home/new.py:158
msgid "Watch"
msgstr ""

#: ../melon/home/playlists.py:24
#: ../melon/home/playlists.py:20
msgid "You don't have any playlists yet"
msgstr ""

#: ../melon/home/playlists.py:26 ../melon/home/playlists.py:39
#: ../melon/home/playlists.py:22 ../melon/home/playlists.py:35
msgid "Create a new playlist"
msgstr ""

#: ../melon/home/playlists.py:36
#: ../melon/home/playlists.py:32
msgid "Here are playlists you've bookmarked or created yourself"
msgstr ""

#: ../melon/home/playlists.py:39
#: ../melon/home/playlists.py:35
msgid "New"
msgstr ""

#: ../melon/home/subs.py:23
#: ../melon/home/subs.py:19
msgid "You aren't yet subscribed to channels"
msgstr ""

#: ../melon/home/subs.py:33 ../melon/home/subs.py:68
#: ../melon/home/subs.py:29 ../melon/home/subs.py:64
msgid "Subscriptions"
msgstr ""

#: ../melon/home/subs.py:34
#: ../melon/home/subs.py:30
msgid "You are subscribed to the following channels"
msgstr ""

#: ../melon/import_providers/newpipe.py:42
#: ../melon/import_providers/newpipe.py:40
msgid "Newpipe Database importer"
msgstr ""

#: ../melon/import_providers/newpipe.py:44
#: ../melon/import_providers/newpipe.py:42
msgid ""
"Import the .db file from inside the newpipe .zip export (as invidious "
"content)"
msgstr ""

#: ../melon/import_providers/newpipe.py:46
#: ../melon/import_providers/newpipe.py:44
msgid "Select .db file"
msgstr ""

#: ../melon/import_providers/newpipe.py:60
#: ../melon/import_providers/newpipe.py:58
msgid "Newpipe Database"
msgstr ""

#: ../melon/importer.py:19 ../melon/importer.py:37
#: ../melon/importer.py:15 ../melon/importer.py:33
msgid "Import"
msgstr ""

#: ../melon/importer.py:38
#: ../melon/importer.py:34
msgid "The following import methods have been found"
msgstr ""

#: ../melon/importer.py:64
#: ../melon/importer.py:60
msgid "There are no available importer methods"
msgstr ""

#: ../melon/player/__init__.py:41
#: ../melon/player/__init__.py:32
msgid "Description"
msgstr ""

#: ../melon/player/__init__.py:54
#: ../melon/player/__init__.py:45
msgid "Add this video to a playlist"
msgstr ""

#: ../melon/player/__init__.py:114 ../melon/playlist/create.py:105
#: ../melon/playlist/pick.py:122
#: ../melon/player/__init__.py:105 ../melon/playlist/create.py:100
#: ../melon/playlist/pick.py:116
msgid "Video could not be loaded"
msgstr ""

#: ../melon/player/__init__.py:152 ../melon/player/__init__.py:186
#: ../melon/player/playlist.py:57
#: ../melon/player/__init__.py:143 ../melon/player/__init__.py:177
#: ../melon/player/playlist.py:43
msgid "Loading..."
msgstr ""

#: ../melon/player/playlist.py:165
#: ../melon/player/playlist.py:151
msgid "This playlist is empty"
msgstr ""

#: ../melon/player/playlist.py:172
#: ../melon/player/playlist.py:158
msgid "There was an error loading the playlist"
msgstr ""

#: ../melon/player/playlist.py:225
#: ../melon/player/playlist.py:211
msgid "Previous"
msgstr ""

#: ../melon/player/playlist.py:227
#: ../melon/player/playlist.py:213
msgid "Play video that comes before this one in the playlist"
msgstr ""

#: ../melon/player/playlist.py:244
#: ../melon/player/playlist.py:230
msgid "Next"
msgstr ""

#: ../melon/player/playlist.py:246
#: ../melon/player/playlist.py:232
msgid "Play video that comes after this one in the playlist"
msgstr ""

#: ../melon/player/playlist.py:258
#: ../melon/player/playlist.py:244
msgid "Skip"
msgstr ""

#: ../melon/player/playlist.py:259
#: ../melon/player/playlist.py:245
msgid "Skip this video and pick a new one at random"
msgstr ""

#: ../melon/player/playlist.py:270
#: ../melon/player/playlist.py:256
msgid "Shuffle"
msgstr ""

#: ../melon/player/playlist.py:271
#: ../melon/player/playlist.py:257
msgid "Chooses the next video at random"
msgstr ""

#: ../melon/player/playlist.py:282
#: ../melon/player/playlist.py:268
msgid "Repeat current video"
msgstr ""

#: ../melon/player/playlist.py:283
#: ../melon/player/playlist.py:269
msgid "Puts this video on loop"
msgstr ""

#: ../melon/player/playlist.py:298
#: ../melon/player/playlist.py:284
msgid "Repeat playlist"
msgstr ""

#: ../melon/player/playlist.py:300
#: ../melon/player/playlist.py:286
msgid "Start playling the playlist from the beginning after reaching the end"
msgstr ""

#: ../melon/player/playlist.py:312
#: ../melon/player/playlist.py:298
msgid "Playlist Content"
msgstr ""

#: ../melon/player/playlist.py:314
#: ../melon/player/playlist.py:300
msgid "Click on videos to continue playing the playlist from there"
msgstr ""

#: ../melon/playlist/__init__.py:70
#: ../melon/playlist/__init__.py:57
msgid "Edit"
msgstr ""

#: ../melon/playlist/__init__.py:84
#: ../melon/playlist/__init__.py:71
msgid "You haven't added any videos to this playlist yet"
msgstr ""

#: ../melon/playlist/__init__.py:87
#: ../melon/playlist/__init__.py:74
msgid "Start watching"
msgstr ""

#: ../melon/playlist/__init__.py:113
#: ../melon/playlist/__init__.py:102
msgid "Set as playlist thumbnail"
msgstr ""

#: ../melon/playlist/__init__.py:121
#: ../melon/playlist/__init__.py:110
msgid "Remove from playlist"
msgstr ""

#: ../melon/playlist/__init__.py:214
#: ../melon/playlist/__init__.py:203
msgid "Edit Playlist"
msgstr ""

#: ../melon/playlist/__init__.py:220
#: ../melon/playlist/__init__.py:209
msgid "Playlist details"
msgstr ""

#: ../melon/playlist/__init__.py:221
#: ../melon/playlist/__init__.py:210
msgid "Change playlist information"
msgstr ""

#: ../melon/playlist/__init__.py:223 ../melon/playlist/create.py:43
#: ../melon/playlist/__init__.py:212 ../melon/playlist/create.py:38
msgid "Playlist name"
msgstr ""

#: ../melon/playlist/__init__.py:226 ../melon/playlist/create.py:46
#: ../melon/playlist/__init__.py:215 ../melon/playlist/create.py:41
msgid "Playlist description"
msgstr ""

#: ../melon/playlist/__init__.py:231
#: ../melon/playlist/__init__.py:220
msgid "Save details"
msgstr ""

#: ../melon/playlist/__init__.py:233
#: ../melon/playlist/__init__.py:222
msgid "Change playlist title and description. (Closes the dialog)"
msgstr ""

#: ../melon/playlist/__init__.py:244
#: ../melon/playlist/__init__.py:233
msgid "Delete Playlist"
msgstr ""

#: ../melon/playlist/__init__.py:246
#: ../melon/playlist/__init__.py:235
msgid "Delete this playlist and it's content. This can NOT be undone."
msgstr ""

#: ../melon/playlist/__init__.py:259
#: ../melon/playlist/__init__.py:248
msgid "Close"
msgstr ""

#: ../melon/playlist/__init__.py:261
#: ../melon/playlist/__init__.py:250
msgid "Close without changing anything"
msgstr ""

#: ../melon/playlist/__init__.py:290
#: ../melon/playlist/__init__.py:279
msgid "Delete Playlist?"
msgstr ""

#: ../melon/playlist/__init__.py:291
#: ../melon/playlist/__init__.py:280
msgid "Do you really want to delete this playlist? This can not be undone."
msgstr ""

#: ../melon/playlist/__init__.py:293 ../melon/playlist/create.py:54
#: ../melon/playlist/create.py:109 ../melon/playlist/pick.py:88
#: ../melon/playlist/pick.py:126 ../melon/widgets/preferencerow.py:181
#: ../melon/widgets/preferencerow.py:220
#: ../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
msgid "Cancel"
msgstr ""

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

#: ../melon/playlist/create.py:25 ../melon/playlist/pick.py:35
#: ../melon/playlist/create.py:20 ../melon/playlist/pick.py:28
msgid "Video"
msgstr ""

#: ../melon/playlist/create.py:27
#: ../melon/playlist/create.py:22
msgid "The following video will be added to the new playlist"
msgstr ""

#: ../melon/playlist/create.py:39 ../melon/playlist/create.py:125
#: ../melon/playlist/create.py:34 ../melon/playlist/create.py:120
msgid "New Playlist"
msgstr ""

#: ../melon/playlist/create.py:40
#: ../melon/playlist/create.py:35
msgid "Enter more playlist information"
msgstr ""

#: ../melon/playlist/create.py:44
#: ../melon/playlist/create.py:39
msgid "Unnamed Playlist"
msgstr ""

#: ../melon/playlist/create.py:54 ../melon/playlist/create.py:109
#: ../melon/playlist/pick.py:88 ../melon/playlist/pick.py:126
#: ../melon/playlist/create.py:49 ../melon/playlist/create.py:104
#: ../melon/playlist/pick.py:82 ../melon/playlist/pick.py:120
msgid "Do not create playlist"
msgstr ""

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

#: ../melon/playlist/create.py:57
#: ../melon/playlist/create.py:52
msgid "Create playlist"
msgstr ""

#: ../melon/playlist/pick.py:37
#: ../melon/playlist/pick.py:30
msgid "The following video will be added to the playlist"
msgstr ""

#: ../melon/playlist/pick.py:50 ../melon/widgets/feeditem.py:154
#: ../melon/playlist/pick.py:43 ../melon/widgets/feeditem.py:147
msgid "Add to playlist"
msgstr ""

#: ../melon/playlist/pick.py:53
#: ../melon/playlist/pick.py:46
msgid ""
"Choose a playlist to add the video to. Note that you can only add videos to "
"local playlists, not external bookmarked ones"
msgstr ""

#: ../melon/playlist/pick.py:57
#: ../melon/playlist/pick.py:50
msgid "Create new playlist"
msgstr ""

#: ../melon/playlist/pick.py:58
#: ../melon/playlist/pick.py:51
msgid "Create a new playlist and add the video to it"
msgstr ""

#: ../melon/playlist/pick.py:142
#: ../melon/playlist/pick.py:136
msgid "Add to Playlist"
msgstr ""

#: ../melon/servers/invidious/__init__.py:35
#: ../melon/servers/invidious/__init__.py:29
msgid "Open source alternative front-end to YouTube"
msgstr ""

#: ../melon/servers/invidious/__init__.py:40
#: ../melon/servers/invidious/__init__.py:34
msgid "Instance"
msgstr ""

#: ../melon/servers/invidious/__init__.py:42
#: ../melon/servers/invidious/__init__.py:36
msgid ""
"See https://docs.invidious.io/instances/ for a list of available instances"
msgstr ""

#: ../melon/servers/invidious/__init__.py:55
#: ../melon/servers/invidious/__init__.py:49
msgid "Trending"
msgstr ""

#: ../melon/servers/invidious/__init__.py:56
#: ../melon/servers/invidious/__init__.py:50
msgid "Popular"
msgstr ""

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

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

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

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

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

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

#: ../melon/servers/peertube/__init__.py:21
#: ../melon/servers/peertube/__init__.py:17
msgid "Instances"
msgstr ""

#: ../melon/servers/peertube/__init__.py:23
#: ../melon/servers/peertube/__init__.py:19
msgid ""
"List of peertube instances, from which to fetch content. See https://"
"joinpeertube.org/instances"
msgstr ""

#: ../melon/servers/peertube/__init__.py:31
#: ../melon/servers/peertube/__init__.py:27
msgid "Show NSFW content"
msgstr ""

#: ../melon/servers/peertube/__init__.py:32
#: ../melon/servers/peertube/__init__.py:28
msgid "Passes the nsfw filter to the peertube search API"
msgstr ""

#: ../melon/servers/peertube/__init__.py:39
#: ../melon/servers/peertube/__init__.py:35
msgid "Enable Federation"
msgstr ""

#: ../melon/servers/peertube/__init__.py:40
#: ../melon/servers/peertube/__init__.py:36
msgid "Returns content from federated instances instead of only local content"
msgstr ""

#: ../melon/servers/peertube/__init__.py:65
#: ../melon/servers/peertube/__init__.py:61
msgid "Latest"
msgstr ""

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#: ../melon/widgets/feeditem.py:148
#: ../melon/widgets/feeditem.py:141
msgid "Watch now"
msgstr ""

#: ../melon/widgets/feeditem.py:161
#: ../melon/widgets/feeditem.py:154
msgid "Open in browser"
msgstr ""

#: ../melon/widgets/feeditem.py:165
#: ../melon/widgets/feeditem.py:158
msgid "View channel"
msgstr ""

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

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

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

#: ../melon/widgets/player.py:226 ../melon/widgets/player.py:613
#: ../melon/widgets/player.py:622
#: ../melon/widgets/player.py:215 ../melon/widgets/player.py:602
#: ../melon/widgets/player.py:611
msgid "Play"
msgstr ""

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#: ../melon/window.py:93
#: ../melon/window.py:86
msgid "Stream videos on the go"
msgstr ""

M po/nl.po => po/nl.po +194 -194
@@ 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 12:29+0200\n"
"POT-Creation-Date: 2024-08-15 13:53+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-"


@@ 92,240 92,240 @@ msgid ""
msgstr ""
"Het videoscherm met de videospeler, metagegevens en favorietenknop erboven"

#: ../melon/browse/__init__.py:20 ../melon/browse/search.py:66
#: ../melon/browse/server.py:115 ../melon/browse/server.py:143
#: ../melon/home/history.py:25 ../melon/home/new.py:36
#: ../melon/home/playlists.py:23 ../melon/home/subs.py:22
#: ../melon/importer.py:63 ../melon/player/__init__.py:113
#: ../melon/player/playlist.py:164 ../melon/player/playlist.py:171
#: ../melon/playlist/__init__.py:82 ../melon/playlist/create.py:104
#: ../melon/playlist/pick.py:121
#: ../melon/browse/__init__.py:16 ../melon/browse/search.py:62
#: ../melon/browse/server.py:110 ../melon/browse/server.py:138
#: ../melon/home/history.py:21 ../melon/home/new.py:31
#: ../melon/home/playlists.py:19 ../melon/home/subs.py:18
#: ../melon/importer.py:59 ../melon/player/__init__.py:104
#: ../melon/player/playlist.py:150 ../melon/player/playlist.py:157
#: ../melon/playlist/__init__.py:69 ../melon/playlist/create.py:99
#: ../melon/playlist/pick.py:115
msgid "*crickets chirping*"
msgstr "*tsjilpende krekels*"

#: ../melon/browse/__init__.py:21
#: ../melon/browse/__init__.py:17
msgid "There are no available servers"
msgstr "Er zijn geen servers beschikbaar"

#: ../melon/browse/__init__.py:24 ../melon/browse/search.py:72
#: ../melon/importer.py:67
#: ../melon/browse/__init__.py:20 ../melon/browse/search.py:68
#: ../melon/importer.py:63
msgid "Enable servers in the settings menu"
msgstr "Schakel servers in in het voorkeurenmenu"

#: ../melon/browse/__init__.py:33
#: ../melon/browse/__init__.py:29
msgid "Available Servers"
msgstr "Beschikbare servers"

#: ../melon/browse/__init__.py:35
#: ../melon/browse/__init__.py:31
msgid "You can enable/disable and filter servers in the settings menu"
msgstr "U kunt servers in- en uitschakelen en filteren in het voorkeurenmenu"

#: ../melon/browse/__init__.py:56
#: ../melon/browse/__init__.py:52
msgid "Servers"
msgstr "Servers"

#: ../melon/browse/__init__.py:64 ../melon/browse/search.py:126
#: ../melon/browse/__init__.py:60 ../melon/browse/search.py:122
msgid "Global Search"
msgstr "Globaal zoeken"

#: ../melon/browse/channel.py:104
#: ../melon/browse/channel.py:98
msgid "Subscribe to channel"
msgstr "Abonneren op kanaal"

#: ../melon/browse/channel.py:105
#: ../melon/browse/channel.py:99
msgid "Add latest uploads to home feed"
msgstr "Recentste uploads toevoegen aan tijdlijn"

#: ../melon/browse/channel.py:117
#: ../melon/browse/channel.py:111
msgid "Channel feed"
msgstr "Kanaaltijdlijn"

#: ../melon/browse/channel.py:118
#: ../melon/browse/channel.py:112
msgid "This channel provides multiple feeds, choose which one to view"
msgstr "Dit kanaal beschikt over meerdere tijdlijnen - kies er een"

#: ../melon/browse/channel.py:170
#: ../melon/browse/channel.py:164
msgid "Channel"
msgstr "Kanaal"

#: ../melon/browse/playlist.py:48 ../melon/playlist/__init__.py:74
#: ../melon/browse/playlist.py:42 ../melon/playlist/__init__.py:61
msgid "Start playing"
msgstr "Afspelen starten"

#: ../melon/browse/playlist.py:69 ../melon/player/__init__.py:53
#: ../melon/browse/playlist.py:63 ../melon/player/__init__.py:44
msgid "Bookmark"
msgstr "Toev. aan favorieten"

#: ../melon/browse/playlist.py:70
#: ../melon/browse/playlist.py:64
msgid "Add Playlist to your local playlist collection"
msgstr "Afspeellijst toevoegen aan lokale verzameling"

#: ../melon/browse/playlist.py:124
#: ../melon/browse/playlist.py:118
msgid "Playlist"
msgstr "Afspeellijst"

#: ../melon/browse/search.py:49
#: ../melon/browse/search.py:45
msgid "No results"
msgstr "Er zijn geen zoekresultaten"

#: ../melon/browse/search.py:52
#: ../melon/browse/search.py:48
#, python-brace-format
msgid "{count} result"
msgid_plural "{count} results"
msgstr[0] "{count} resultaat"
msgstr[1] "{count} resultaten"

#: ../melon/browse/search.py:68
#: ../melon/browse/search.py:64
msgid "There are no available servers, a search would yield no results"
msgstr ""
"Er zijn geen servers beschikbaar, dus een zoekopdracht zou geen resultaten "
"geven"

#: ../melon/browse/search.py:96 ../melon/browse/server.py:47
#: ../melon/browse/search.py:92 ../melon/browse/server.py:42
msgid "Any"
msgstr "Iedere"

#: ../melon/browse/search.py:100 ../melon/browse/server.py:51
#: ../melon/browse/search.py:96 ../melon/browse/server.py:46
msgid "Channels"
msgstr "Kanalen"

#: ../melon/browse/search.py:105 ../melon/browse/server.py:56
#: ../melon/home/playlists.py:34 ../melon/home/playlists.py:78
#: ../melon/servers/nebula/__init__.py:206
#: ../melon/servers/peertube/__init__.py:213
#: ../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/peertube/__init__.py:209
msgid "Playlists"
msgstr "Afspeellijsten"

#: ../melon/browse/search.py:110 ../melon/browse/server.py:61
#: ../melon/servers/nebula/__init__.py:200
#: ../melon/servers/peertube/__init__.py:213
#: ../melon/servers/peertube/__init__.py:214
#: ../melon/browse/search.py:106 ../melon/browse/server.py:56
#: ../melon/servers/nebula/__init__.py:197
#: ../melon/servers/peertube/__init__.py:209
#: ../melon/servers/peertube/__init__.py:210
msgid "Videos"
msgstr "Video's"

#: ../melon/browse/server.py:26
#: ../melon/browse/server.py:21
msgid "Search"
msgstr "Zoeken"

#: ../melon/browse/server.py:116
#: ../melon/browse/server.py:111
msgid "Try searching for a term"
msgstr "Voer een zoekopdracht in"

#: ../melon/browse/server.py:118
#: ../melon/browse/server.py:113
msgid "Try using a different query"
msgstr "Probeer een andere zoekopdracht"

#: ../melon/browse/server.py:144
#: ../melon/browse/server.py:139
msgid "This feed is empty"
msgstr "Deze tijdlijn is blanco"

#: ../melon/home/__init__.py:20
#: ../melon/home/__init__.py:15
msgid "Home"
msgstr "Tijdlijn"

#: ../melon/home/__init__.py:41 ../melon/home/history.py:28
#: ../melon/home/new.py:49 ../melon/home/subs.py:25
#: ../melon/home/__init__.py:36 ../melon/home/history.py:24
#: ../melon/home/new.py:44 ../melon/home/subs.py:21
msgid "Browse Servers"
msgstr "Servers verkennen"

#: ../melon/home/__init__.py:48
#: ../melon/home/__init__.py:43
msgid "Preferences"
msgstr "Voorkeuren"

#: ../melon/home/__init__.py:49
#: ../melon/home/__init__.py:44
msgid "Import Data"
msgstr "Gegevens importeren"

#: ../melon/home/__init__.py:50
#: ../melon/home/__init__.py:45
msgid "About Melon"
msgstr "Over Melon"

#: ../melon/home/history.py:26
#: ../melon/home/history.py:22
msgid "You haven't watched any videos yet"
msgstr "U heeft nog geen video's bekeken"

#: ../melon/home/history.py:38 ../melon/home/history.py:125
#: ../melon/home/history.py:34 ../melon/home/history.py:121
msgid "History"
msgstr "Geschiedenis"

#: ../melon/home/history.py:39
#: ../melon/home/history.py:35
msgid "These are the videos you opened in the past"
msgstr "Dit zijn video's die u in het verleden bekeken hebt"

#: ../melon/home/history.py:83
#: ../melon/home/history.py:79
msgid "Show more"
msgstr "Meer tonen"

#: ../melon/home/history.py:84
#: ../melon/home/history.py:80
msgid "Load older videos"
msgstr "Oudere video's laden"

#: ../melon/home/new.py:30
#: ../melon/home/new.py:25
msgid "Refresh"
msgstr "Herladen"

#: ../melon/home/new.py:40
#: ../melon/home/new.py:35
msgid "Subscribe to a channel first, to view new uploads"
msgstr "Abonneer op een kanaal om uploads te bekijken"

#: ../melon/home/new.py:45
#: ../melon/home/new.py:40
msgid "The channels you are subscribed to haven't uploaded anything yet"
msgstr "De kanalen waarop u geabonneerd bent hebben nog niks geüpload"

#: ../melon/home/new.py:68
#: ../melon/home/new.py:63
#, python-brace-format
msgid "(Last refresh: {last_refresh})"
msgstr "(Bijgewerkt op {last_refresh})"

#: ../melon/home/new.py:72 ../melon/home/new.py:172
#: ../melon/home/new.py:67 ../melon/home/new.py:167
msgid "What's new"
msgstr "Nieuw"

#: ../melon/home/new.py:74
#: ../melon/home/new.py:69
msgid "These are the latest videos of channels you follow"
msgstr "Dit zijn de nieuwste video's van de kanalen die u volgt"

#: ../melon/home/new.py:162
#: ../melon/home/new.py:157
msgid "Pick up where you left off"
msgstr "Hervatten vanaf pauzepunt"

#: ../melon/home/new.py:163
#: ../melon/home/new.py:158
msgid "Watch"
msgstr "Bekijken"

#: ../melon/home/playlists.py:24
#: ../melon/home/playlists.py:20
msgid "You don't have any playlists yet"
msgstr "Er zijn nog geen afspeellijsten"

#: ../melon/home/playlists.py:26 ../melon/home/playlists.py:39
#: ../melon/home/playlists.py:22 ../melon/home/playlists.py:35
msgid "Create a new playlist"
msgstr "Nieuwe afspeellijst"

#: ../melon/home/playlists.py:36
#: ../melon/home/playlists.py:32
msgid "Here are playlists you've bookmarked or created yourself"
msgstr "Hier vindt u de door u gemaakte en toegevoegde afspeellijsten"

#: ../melon/home/playlists.py:39
#: ../melon/home/playlists.py:35
msgid "New"
msgstr "Nieuw"

#: ../melon/home/subs.py:23
#: ../melon/home/subs.py:19
msgid "You aren't yet subscribed to channels"
msgstr "U bent nog niet geabonneerd op kanalen"

#: ../melon/home/subs.py:33 ../melon/home/subs.py:68
#: ../melon/home/subs.py:29 ../melon/home/subs.py:64
msgid "Subscriptions"
msgstr "Abonnementen"

#: ../melon/home/subs.py:34
#: ../melon/home/subs.py:30
msgid "You are subscribed to the following channels"
msgstr "U bent geabonneerd op de volgende kanalen"

#: ../melon/import_providers/newpipe.py:42
#: ../melon/import_providers/newpipe.py:40
msgid "Newpipe Database importer"
msgstr "NewPipe-databankimport"

#: ../melon/import_providers/newpipe.py:44
#: ../melon/import_providers/newpipe.py:42
msgid ""
"Import the .db file from inside the newpipe .zip export (as invidious "
"content)"


@@ 333,236 333,236 @@ msgstr ""
"Importeer het .db-bestand uit de .zip-export van NewPipe (als Invidious-"
"inhoud)"

#: ../melon/import_providers/newpipe.py:46
#: ../melon/import_providers/newpipe.py:44
msgid "Select .db file"
msgstr "Kies een .db-bestand"

#: ../melon/import_providers/newpipe.py:60
#: ../melon/import_providers/newpipe.py:58
msgid "Newpipe Database"
msgstr "NewPipe-databank"

#: ../melon/importer.py:19 ../melon/importer.py:37
#: ../melon/importer.py:15 ../melon/importer.py:33
msgid "Import"
msgstr "Importeren"

#: ../melon/importer.py:38
#: ../melon/importer.py:34
msgid "The following import methods have been found"
msgstr "De volgende importmogelijkheden zijn beschikbaar"

#: ../melon/importer.py:64
#: ../melon/importer.py:60
msgid "There are no available importer methods"
msgstr "Er zijn beschikbare importmogelijkheden"

#: ../melon/player/__init__.py:41
#: ../melon/player/__init__.py:32
msgid "Description"
msgstr "Beschrijving"

#: ../melon/player/__init__.py:54
#: ../melon/player/__init__.py:45
msgid "Add this video to a playlist"
msgstr "Video toevoegen aan afspeellijst"

#: ../melon/player/__init__.py:114 ../melon/playlist/create.py:105
#: ../melon/playlist/pick.py:122
#: ../melon/player/__init__.py:105 ../melon/playlist/create.py:100
#: ../melon/playlist/pick.py:116
msgid "Video could not be loaded"
msgstr "De video kan niet worden geladen"

#: ../melon/player/__init__.py:152 ../melon/player/__init__.py:186
#: ../melon/player/playlist.py:57
#: ../melon/player/__init__.py:143 ../melon/player/__init__.py:177
#: ../melon/player/playlist.py:43
msgid "Loading..."
msgstr "Bezig met laden…"

#: ../melon/player/playlist.py:165
#: ../melon/player/playlist.py:151
msgid "This playlist is empty"
msgstr "Deze afspeellijst is blanco"

#: ../melon/player/playlist.py:172
#: ../melon/player/playlist.py:158
msgid "There was an error loading the playlist"
msgstr "Er is een fout opgetreden tijdens het laden"

#: ../melon/player/playlist.py:225
#: ../melon/player/playlist.py:211
msgid "Previous"
msgstr "Vorige"

#: ../melon/player/playlist.py:227
#: ../melon/player/playlist.py:213
msgid "Play video that comes before this one in the playlist"
msgstr "Video hiervoor afspelen"

#: ../melon/player/playlist.py:244
#: ../melon/player/playlist.py:230
msgid "Next"
msgstr "Volgende"

#: ../melon/player/playlist.py:246
#: ../melon/player/playlist.py:232
msgid "Play video that comes after this one in the playlist"
msgstr "Video hierna afspelen"

#: ../melon/player/playlist.py:258
#: ../melon/player/playlist.py:244
msgid "Skip"
msgstr "Overslaan"

#: ../melon/player/playlist.py:259
#: ../melon/player/playlist.py:245
msgid "Skip this video and pick a new one at random"
msgstr "Sla deze video over en kies een willekeurige andere"

#: ../melon/player/playlist.py:270
#: ../melon/player/playlist.py:256
msgid "Shuffle"
msgstr "Willekeurig"

#: ../melon/player/playlist.py:271
#: ../melon/player/playlist.py:257
msgid "Chooses the next video at random"
msgstr "Kies een willekeurige video"

#: ../melon/player/playlist.py:282
#: ../melon/player/playlist.py:268
msgid "Repeat current video"
msgstr "Huidige video herhalen"

#: ../melon/player/playlist.py:283
#: ../melon/player/playlist.py:269
msgid "Puts this video on loop"
msgstr "Herhaalt de video"

#: ../melon/player/playlist.py:298
#: ../melon/player/playlist.py:284
msgid "Repeat playlist"
msgstr "Afspeellijst herhalen"

#: ../melon/player/playlist.py:300
#: ../melon/player/playlist.py:286
msgid "Start playling the playlist from the beginning after reaching the end"
msgstr "Starten met afspelen vanaf het begin na de laatste video"

#: ../melon/player/playlist.py:312
#: ../melon/player/playlist.py:298
msgid "Playlist Content"
msgstr "Afspeellijstinhoud"

#: ../melon/player/playlist.py:314
#: ../melon/player/playlist.py:300
msgid "Click on videos to continue playing the playlist from there"
msgstr "Klik op video's om het afspelen vanaf daar te hervatten"

#: ../melon/playlist/__init__.py:70
#: ../melon/playlist/__init__.py:57
msgid "Edit"
msgstr "Bewerken"

#: ../melon/playlist/__init__.py:84
#: ../melon/playlist/__init__.py:71
msgid "You haven't added any videos to this playlist yet"
msgstr "Deze afspeellijst bevat nog geen video's"

#: ../melon/playlist/__init__.py:87
#: ../melon/playlist/__init__.py:74
msgid "Start watching"
msgstr "Beginnen met kijken"

#: ../melon/playlist/__init__.py:113
#: ../melon/playlist/__init__.py:102
msgid "Set as playlist thumbnail"
msgstr "Instellen als afspeellijstminiatuur"

#: ../melon/playlist/__init__.py:121
#: ../melon/playlist/__init__.py:110
msgid "Remove from playlist"
msgstr "Verwijderen van afspeellijst"

#: ../melon/playlist/__init__.py:214
#: ../melon/playlist/__init__.py:203
msgid "Edit Playlist"
msgstr "Afspeellijst bewerken"

#: ../melon/playlist/__init__.py:220
#: ../melon/playlist/__init__.py:209
msgid "Playlist details"
msgstr "Afspeellijstinformatie"

#: ../melon/playlist/__init__.py:221
#: ../melon/playlist/__init__.py:210
msgid "Change playlist information"
msgstr "Afspeellijstinformatie wijzigen"

#: ../melon/playlist/__init__.py:223 ../melon/playlist/create.py:43
#: ../melon/playlist/__init__.py:212 ../melon/playlist/create.py:38
msgid "Playlist name"
msgstr "Afspeellijstnaam"

#: ../melon/playlist/__init__.py:226 ../melon/playlist/create.py:46
#: ../melon/playlist/__init__.py:215 ../melon/playlist/create.py:41
msgid "Playlist description"
msgstr "Afspeellijstbeschrijving"

#: ../melon/playlist/__init__.py:231
#: ../melon/playlist/__init__.py:220
msgid "Save details"
msgstr "Informatie opslaan"

#: ../melon/playlist/__init__.py:233
#: ../melon/playlist/__init__.py:222
msgid "Change playlist title and description. (Closes the dialog)"
msgstr ""
"Wijzig de afspeellijsttitel en -beschrijving (het venster wordt gesloten)"

#: ../melon/playlist/__init__.py:244
#: ../melon/playlist/__init__.py:233
msgid "Delete Playlist"
msgstr "Afspeellijst verwijderen"

#: ../melon/playlist/__init__.py:246
#: ../melon/playlist/__init__.py:235
msgid "Delete this playlist and it's content. This can NOT be undone."
msgstr ""
"Verwijder deze afspeellijst en alle bijbehorende inhoud. Let op: dit is "
"onomkeerbaar."

#: ../melon/playlist/__init__.py:259
#: ../melon/playlist/__init__.py:248
msgid "Close"
msgstr "Sluiten"

#: ../melon/playlist/__init__.py:261
#: ../melon/playlist/__init__.py:250
msgid "Close without changing anything"
msgstr "Sluiten zonder opslaan"

#: ../melon/playlist/__init__.py:290
#: ../melon/playlist/__init__.py:279
msgid "Delete Playlist?"
msgstr ""

#: ../melon/playlist/__init__.py:291
#: ../melon/playlist/__init__.py:280
msgid "Do you really want to delete this playlist? This can not be undone."
msgstr ""

#: ../melon/playlist/__init__.py:293 ../melon/playlist/create.py:54
#: ../melon/playlist/create.py:109 ../melon/playlist/pick.py:88
#: ../melon/playlist/pick.py:126 ../melon/widgets/preferencerow.py:181
#: ../melon/widgets/preferencerow.py:220
#: ../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
msgid "Cancel"
msgstr "Annuleren"

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

#: ../melon/playlist/create.py:25 ../melon/playlist/pick.py:35
#: ../melon/playlist/create.py:20 ../melon/playlist/pick.py:28
msgid "Video"
msgstr "Video"

#: ../melon/playlist/create.py:27
#: ../melon/playlist/create.py:22
msgid "The following video will be added to the new playlist"
msgstr "De volgende video zal worden toegevoegd aan de nieuwe afspeellijst"

#: ../melon/playlist/create.py:39 ../melon/playlist/create.py:125
#: ../melon/playlist/create.py:34 ../melon/playlist/create.py:120
msgid "New Playlist"
msgstr "Nieuwe afspeellijst"

#: ../melon/playlist/create.py:40
#: ../melon/playlist/create.py:35
msgid "Enter more playlist information"
msgstr "Voer meer afspeellijstinformatie in"

#: ../melon/playlist/create.py:44
#: ../melon/playlist/create.py:39
msgid "Unnamed Playlist"
msgstr "Naamloze afspeellijst"

#: ../melon/playlist/create.py:54 ../melon/playlist/create.py:109
#: ../melon/playlist/pick.py:88 ../melon/playlist/pick.py:126
#: ../melon/playlist/create.py:49 ../melon/playlist/create.py:104
#: ../melon/playlist/pick.py:82 ../melon/playlist/pick.py:120
msgid "Do not create playlist"
msgstr "Geen afspeellijst maken"

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

#: ../melon/playlist/create.py:57
#: ../melon/playlist/create.py:52
msgid "Create playlist"
msgstr "Afspeellijst maken"

#: ../melon/playlist/pick.py:37
#: ../melon/playlist/pick.py:30
msgid "The following video will be added to the playlist"
msgstr "De volgende video zal worden toegevoegd aan de afspeellijst"

#: ../melon/playlist/pick.py:50 ../melon/widgets/feeditem.py:154
#: ../melon/playlist/pick.py:43 ../melon/widgets/feeditem.py:147
msgid "Add to playlist"
msgstr "Toevoegen aan afspeellijst"

#: ../melon/playlist/pick.py:53
#: ../melon/playlist/pick.py:46
msgid ""
"Choose a playlist to add the video to. Note that you can only add videos to "
"local playlists, not external bookmarked ones"


@@ 570,42 570,42 @@ msgstr ""
"Kies een afspeellijst om de video aan toe te voegen. Let op: u kunt alleen "
"video's toevoegen aan lokale afspeellijsten."

#: ../melon/playlist/pick.py:57
#: ../melon/playlist/pick.py:50
msgid "Create new playlist"
msgstr "Nieuwe afspeellijst maken"

#: ../melon/playlist/pick.py:58
#: ../melon/playlist/pick.py:51
msgid "Create a new playlist and add the video to it"
msgstr "Nieuwe afspeellijst aanmaken en video toevoegen"

#: ../melon/playlist/pick.py:142
#: ../melon/playlist/pick.py:136
msgid "Add to Playlist"
msgstr "Toevoegen aan afspeellijst"

#: ../melon/servers/invidious/__init__.py:35
#: ../melon/servers/invidious/__init__.py:29
msgid "Open source alternative front-end to YouTube"
msgstr "Een alternatieve, opensourceclient voor YouTube"

#: ../melon/servers/invidious/__init__.py:40
#: ../melon/servers/invidious/__init__.py:34
msgid "Instance"
msgstr "Instantie"

#: ../melon/servers/invidious/__init__.py:42
#: ../melon/servers/invidious/__init__.py:36
msgid ""
"See https://docs.invidious.io/instances/ for a list of available instances"
msgstr ""
"Zie https://docs.invidious.io/instances/ voor een lijst met beschikbare "
"instanties"

#: ../melon/servers/invidious/__init__.py:55
#: ../melon/servers/invidious/__init__.py:49
msgid "Trending"
msgstr "Trending"

#: ../melon/servers/invidious/__init__.py:56
#: ../melon/servers/invidious/__init__.py:50
msgid "Popular"
msgstr "Populair"

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


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

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

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

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

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

#: ../melon/servers/peertube/__init__.py:16
#: ../melon/servers/peertube/__init__.py:12
msgid "Decentralized video hosting network, based on free/libre software"
msgstr ""
"Een gedecentraliseerd videonetwerk, gebaseerd op gratis, vrije software"

#: ../melon/servers/peertube/__init__.py:21
#: ../melon/servers/peertube/__init__.py:17
msgid "Instances"
msgstr "Instanties"

#: ../melon/servers/peertube/__init__.py:23
#: ../melon/servers/peertube/__init__.py:19
msgid ""
"List of peertube instances, from which to fetch content. See https://"
"joinpeertube.org/instances"
msgstr "Lijst met PeerTube-instanties om inhoud van op te halen. Zie"

#: ../melon/servers/peertube/__init__.py:31
#: ../melon/servers/peertube/__init__.py:27
msgid "Show NSFW content"
msgstr "18+-inhoud tonen"

#: ../melon/servers/peertube/__init__.py:32
#: ../melon/servers/peertube/__init__.py:28
msgid "Passes the nsfw filter to the peertube search API"
msgstr "Geeft het 18+-filter door aan de PeerTube-zoek-api"

#: ../melon/servers/peertube/__init__.py:39
#: ../melon/servers/peertube/__init__.py:35
msgid "Enable Federation"
msgstr "Federatie inschakelen"

#: ../melon/servers/peertube/__init__.py:40
#: ../melon/servers/peertube/__init__.py:36
msgid "Returns content from federated instances instead of only local content"
msgstr ""
"Haalt inhoud van gefedereerde instanties op in plaats van alleen lokale "
"inhoud"

#: ../melon/servers/peertube/__init__.py:65
#: ../melon/servers/peertube/__init__.py:61
msgid "Latest"
msgstr "Nieuwste"

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

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


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

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

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


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

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

#: ../melon/settings/__init__.py:46
#: ../melon/settings/__init__.py:41
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:54
#: ../melon/settings/__init__.py:49
msgid "Show servers that only contain nsfw content"
msgstr "Servers tonen die alleen 18+-inhoud bevatten"

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


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

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

#: ../melon/settings/__init__.py:66
#: ../melon/settings/__init__.py:61
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:74
#: ../melon/settings/__init__.py:69
msgid "Use GPU acceleration for video player if available"
msgstr "Hardwareversnelling gebruiken in videospeler (indien beschikbaar)"

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

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

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

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

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

#: ../melon/settings/__init__.py:126
#: ../melon/settings/__init__.py:121
msgid ""
"Disabled servers won't show up in the browser or on the local/home screen"
msgstr ""
"Uitgeschakelde servers worden niet getoond op het verken- en tijdlijnscherm"

#: ../melon/widgets/feeditem.py:148
#: ../melon/widgets/feeditem.py:141
msgid "Watch now"
msgstr "Nu bekijken"

#: ../melon/widgets/feeditem.py:161
#: ../melon/widgets/feeditem.py:154
msgid "Open in browser"
msgstr "Openen in webbrowser"

#: ../melon/widgets/feeditem.py:165
#: ../melon/widgets/feeditem.py:158
msgid "View channel"
msgstr "Kanaal bekijken"

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

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

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

#: ../melon/widgets/player.py:226 ../melon/widgets/player.py:613
#: ../melon/widgets/player.py:622
#: ../melon/widgets/player.py:215 ../melon/widgets/player.py:602
#: ../melon/widgets/player.py:611
msgid "Play"
msgstr "Afspelen"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#: ../melon/window.py:93
#: ../melon/window.py:86
msgid "Stream videos on the go"
msgstr "Video's onderweg streamen"