Skip to content
Commits on Source (106)
......@@ -25,12 +25,14 @@ nightly:
flake8:
stage: check
image: registry.fedoraproject.org/fedora:latest
script:
- dnf install -y python3-flake8
- flake8 --ignore E402,W503 --show-source gnomemusic/
mypy:
stage: check
image: registry.fedoraproject.org/fedora:latest
script:
- dnf install -y python3-mypy
- mypy --ignore-missing-imports --disallow-incomplete-defs gnomemusic
## Description
[Description of the bug or feature]
## Steps To Reproduce
- Step 1
- Step 2
- Step 3
## Expected Behaviour
[What you expected to happen]
## Actual Behaviour
[What actually happened]
## Specifications
Gnome Music Version:
Desktop Environment:
Wayland or Xorg:
Flatpak or Native:
Tracker Version:
Grilo Version:
## Additional Information
[submodule "subprojects/libgd"]
path = subprojects/libgd
url = https://gitlab.gnome.org/GNOME/libgd.git
[submodule "subprojects/shared-modules"]
path = subprojects/shared-modules
url = https://github.com/flathub/shared-modules.git
[submodule "subprojects/gfm"]
path = subprojects/gfm
url = https://gitlab.gnome.org/mschraal/gfm.git
Overview of changes in 42.1
Overview of changes in 44.0
===========================
• Update appdata for the 44.0 release
Overview of changes in 44.rc
============================
• Shortcuts menu cleanups
• Misc focus fixes in album widgets
• Decrease memory usage in SongsView
Bugs Fixed:
SongView popup is a memory hog (#495)
Shuffle on/off mixup (#543)
Default template for issues (#525)
Thanks to our contributors this release:
Andre Klapper
Automeris Naranja
Ezike Ebuka
Jean Felder
Marinus Schraal
Sabri Ünal
Overview of changes in 44.beta
==============================
• Make shuffle shuffle again
• Fix time display in RTL languages
• Port to soup 3
• Port about to AdwAboutWindow
• No longer mismatch art on scrolling
• Fix async queue block on fresh art retrieval
• Use new GNOME Settings app id in flatpak
• Fix welcome image rendering
Bugs fixed:
Rework ArtStack to handle cycling widgets better (#500)
......@@ -12,16 +42,54 @@ Bugs fixed:
Time is reversed in RTL (#509)
Thanks to our contributors this release:
Carlos Garnacho
Christopher Davis
Georges Basile Stavracas Neto
Jean Felder
Marinus Schraal
Yosef Or Boczko
Updated or added translations:
Latvian
Dutch
Abkhazian
Basque
Belarusian
Brazilian Portuguese
Bulgarian
Catalan
Icelandic
French
Chinese (China)
Chinese (Taiwan)
Croatian
Czech
Danish
Dutch
Finnish
French
Friulian
Galician
Georgian
German
Greek
Hebrew
Hungarian
Icelandic
Indonesian
Kazakh
Korean
Latvian
Lithuanian
Nepali
Occitan
Persian
Polish
Portuguese
Russian
Serbian
Slovak
Slovenian
Spanish
Swedish
Turkish
Ukrainian
Overview of changes in 42.0
......
Music is the new GNOME music playing application.
Music is the GNOME music playing application.
# Where can I find more?
Music has a wiki page at
https://wiki.gnome.org/Apps/Music.
Music has a wiki page at https://wiki.gnome.org/Apps/Music.
You can join the developers on IRC: [#gnome-music](irc://irc.gnome.org/gnome-music) on [GIMPNet](https://wiki.gnome.org/Community/GettingInTouch/IRC).
You can join the developers on IRC: [#gnome-music](irc://irc.libera.chat/gnome-music) on [Libera Chat](https://wiki.gnome.org/GettingInTouch/IRC).
# Join the development
......@@ -139,15 +138,6 @@ def selected(self, value: bool) -> None:
### PyGObject specifics
#### Treemodel
Use PyGObject shorthands for manipulating `GtkTreeModel` & `GtkListStore`:
```python
model[iter][0] = "artist"
artist, title = model[iter][1, 4]
```
#### Properties
Most objects in Music are derived from GObject and have properties. Use [PyGObject properties](https://pygobject.readthedocs.io/en/latest/guide/api/properties.html) through decorator usage if you add properties to your code.
......@@ -184,9 +174,7 @@ Note that GObject multi-word properties are separated by `-` as in `'selection-m
#### Templates
Recent PyGObject (3.29.1 and up) allows template usage and Music is [starting to convert](https://gitlab.gnome.org/GNOME/gnome-music/issues/183) to using this to build the user interface. More information can be found in the PyGObject source and [examples](https://gitlab.gnome.org/GNOME/gnome-music/blob/master/gnomemusic/widgets/songwidget.py) in the Music code.
The basic usage in Python is as follows, with the `widget.ui` file being a regular GTK template:
Music uses ui templates extensively for building the user interface. The basic usage in Python is as follows, with the `widget.ui` file being a regular GTK template:
```python
@Gtk.Template(resource_path="/org/gnome/Music/widget.ui")
......
This diff is collapsed.
......@@ -6,8 +6,7 @@ gnome.compile_resources(
gresource_bundle: true,
source_dir: meson.current_build_dir(),
install_dir: PKGDATA_DIR,
install: true,
dependencies: about_dialog
install: true
)
schema_src = PROJECT_RDNN_NAME + '.gschema.xml'
......
......@@ -28,6 +28,21 @@
</screenshot>
</screenshots>
<releases>
<release version="44.0" date="2023-03-22">
<description>
<p>
First stable release for GNOME 44. This version mostly consists
of stability improvements. There are also some notable
improvements:
</p>
<ul>
<li>Port to soup 3</li>
<li>Fix shuffle</li>
<li>Decrease memory usage in SongsView</li>
</ul>
<p>This release also updates translations.</p>
</description>
</release>
<release version="42.1" date="2022-04-25">
<description>
<ul>
......
......@@ -4,7 +4,6 @@
<file alias="gtk/help-overlay.ui" preprocess="xml-stripblanks">ui/help-overlay.ui</file>
<file>style.css</file>
<file>icons/welcome-music.svg</file>
<file preprocess="xml-stripblanks">ui/AboutDialog.ui</file>
<file preprocess="xml-stripblanks">ui/AlbumCover.ui</file>
<file preprocess="xml-stripblanks">ui/AlbumCoverListItem.ui</file>
<file preprocess="xml-stripblanks">ui/AlbumWidget.ui</file>
......
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<template class="AboutDialog" parent="GtkAboutDialog">
<property name="focusable">False</property>
<property name="modal">True</property>
<property name="program_name">@PROGRAM_NAME@</property>
<property name="version">@PACKAGE_VERSION@</property>
<property name="copyright" translatable="yes">Copyright © 2018 GNOME Music Developers</property>
<property name="comments" translatable="yes">A music player and management application for GNOME.</property>
<property name="website">@PACKAGE_URL@</property>
<property name="website_label" translatable="yes">Visit GNOME Music website</property>
<property name="license" translatable="yes">GNOME Music is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
GNOME Music is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with GNOME Music; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
The GNOME Music authors hereby grant permission for non-GPL compatible GStreamer plugins to be used and distributed together with GStreamer and GNOME Music. This permission is above and beyond the permissions granted by the GPL license by which GNOME Music is covered. If you modify this code, you may extend this exception to your version of the code, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.</property>
<property name="authors">Abhinav Singh
Adam Blanchet
Adrian Solom
Alberto Fanjul
Alexander Mikhaylenko
Andre Klapper
Andreas Nilsson
Apostol Bakalov
Arnel A. Borja
Ashwani Singh Tanwar
Ashwin Mohan
Atharva Veer
Benoît Legat
Bilal Elmoussaoui
Billy Barrow
Bruce Cowan
Carlos Garnacho
Carlos Soriano
Chinmay Gurjar
Christophe van den Abbeele
Christopher Davis
Clayton G. Hobbs
Divyanshu Vishwakarma
Eslam Mostafa
Elias Entrup
Erik Inkinen
Evan Nehring
Evandro Giovanini
Fabiano Fidêncio
Felipe Borges
Florian Darfeuille
Gaurav Narula
Georges Basile Stavracas Neto
Guillaume Quintard
Gyanesh Malhotra
Harry Xie
Hugo Posnic
Ishaan Shah
Islam Bahnasy
Jakub Steiner
James A. Baker
Jan Alexander Steffens
Janne Körkkö
Jan-Michael Brummer
Jean Felder
Jeremy Bicha
Jesus Bermudez Velazquez
Jordan Petridis
Juan José González
Juan Suarez
Kainaat Singh
Kalev Lember
Kevin Haller
Konstantin Pospelov
Koushik Sahu
Lucy Coleclough
Marinus Schraal
Michael Catanzaro
Mohanna Datta Yelugoti
Nick Richards
Niels De Graef
Nikolay Yanchuk
Nils Reuße
Pablo Palácios
Phil Dawson
Piotr Drąg
Prashant Tyagi
Rafael Coelho
Rashi Sah
Rasmus Thomsen
Reuben Dsouza
Robert Greener
Sabri Ünal
Sagar Lakhani
Sai Suman Prayaga
Sam Hewitt
Sam Thursfield
Sambhav Kothari
Seif Lotfy
Shivani Poddar
Shivansh Handa
Simon McVittie
Sophie Herold
Subhadip Jana
Sumaid Syed
Suyash Garg
Tapasweni Pathak
Taylor Garcia
Tjipke van der Heide
Vadim Rutkovsky
Veerasamy Sevagen
Vineet Reddy
Weifang Lai
Yann Delaby
Yash Singh
</property>
<property name="artists">Allan Day
Jakub Steiner
William Jon McCann
</property>
<property name="translator_credits">Adolfo Jayme Barrientos
அருள்ராஜன் அ லை
A S Alam
Alain Lojewski
Alan Mortensen
Aleksandr Melman
Alexander Shopov
Alexandre Franke
Anders Jonsson
Andika Triwidada
Anish Sheela
Arash Mousavi
Asier Sarasua Garmendia
Ask Hjorth Larsen
Aurimas Černius
Balázs Meskó
Balázs Úr
Baurzhan Muftakhidinov
Bruce Cowan
Boyuan Yang
Carmen Bianca Bakker
Cédric Valmary
Chao-Hsiung Liao
Charles Monzat
Cheng Lu
Cheng-Chia Tseng
Claude Paroz
Danial Behzadi
Daniel Korostil
Daniel Mustieles García
Daniel Șerbănescu
David King
Dušan Kazik
Efstathios Iosifidis
Emin Tufan Çetin
Enrico Nicoletto
Fábio Nogueira
Fabio Tomat
Florentina Mușat
Fran Diéguez
Furkan Tokaç
Gábor Kelemen
Gil Forcada Codinachs
Goran Vidović
Guillaume Bernard
Henrique Machado Campos
Hugo Carvalho
Inaki Larranaga Murgoitio
Jiri Grönroos
Joe Hansen
Jor Teron
Jordi Mas
Juliano Camargo
Julien Humbert
Justin van Steijn
Kjartan Maraas
Kristjan Schmidt
Kukuh Syafaat
Luna Jernberg
Марко Костић
Marek Černocký
Mario Blättermann
Matej Urbančič
Matheus Barbosa
Milo Casagrande
Mingcong Bai
Mpho Jele
Мирослав Николић
Милош Поповић
Nathan Follens
Osman Karagöz
Petr Kovář
Philipp Kiemle
Piotr Drąg
Quentin Pagès
Rafael Fontenelle
Rodrigo Lledó Milanca
Ryuta Fujii
Rūdolfs Mazurs
Sabri Ünal
Sebastian Rasmussen
Seong-ho Cho
Stas Solovey
Sveinn í Felli
Tiago Santos
Tim Sabsch
Tjipke van der Heide
Tom Tryfonidis
Trần Ngọc Quân
Vinzenz Vietzke
Xavi Ivars
Yaron Shahrabani
Yi-Jyun Pan
Yosef Or Boczko
Yuras Shumovich
Yuri Chornoivan
Yuri Myasoedov
Zander Brown
Zmicer Turok
</property>
<property name="logo_icon_name">@APPID@</property>
<property name="wrap_license">True</property>
</template>
</interface>
......@@ -2,7 +2,6 @@
<interface>
<requires lib="gtk" version="4.0"/>
<object class="GtkBox" id="_album_cover">
<property name="focusable">False</property>
<property name="has_tooltip">True</property>
<property name="valign">start</property>
<property name="orientation">vertical</property>
......
......@@ -10,32 +10,38 @@
</object>
</child>
</template>
<object class="GtkBox" id="_initial_state">
<property name="valign">start</property>
<property name="orientation">vertical</property>
<object class="AdwClamp" id="_initial_state">
<property name="maximum-size">620</property>
<property name="tightening-threshold">500</property>
<child>
<object class="GtkPicture">
<property name="can-shrink">true</property>
<property name="keep-aspect-ratio">true</property>
<property name="file">resource:///org/gnome/Music/icons/welcome-music.svg</property>
</object>
</child>
<child>
<object class="GtkLabel" id="_title_label">
<property name="justify">center</property>
<property name="label" translatable="yes">Welcome to Music</property>
<style>
<class name="large-title"/>
</style>
</object>
</child>
<child>
<object class="GtkLabel" id="_description_label">
<property name="justify">center</property>
<property name="use-markup">True</property>
<style>
<class name="body"/>
</style>
<object class="GtkBox">
<property name="valign">start</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkPicture">
<property name="can-shrink">true</property>
<property name="keep-aspect-ratio">true</property>
<property name="file">resource:///org/gnome/Music/icons/welcome-music.svg</property>
</object>
</child>
<child>
<object class="GtkLabel" id="_title_label">
<property name="justify">center</property>
<property name="label" translatable="yes">Welcome to Music</property>
<style>
<class name="title-1"/>
</style>
</object>
</child>
<child>
<object class="GtkLabel" id="_description_label">
<property name="justify">center</property>
<property name="use-markup">True</property>
<style>
<class name="body"/>
</style>
</object>
</child>
</object>
</child>
</object>
......
......@@ -13,6 +13,7 @@
<property name="valign">center</property>
<property name="sensitive">True</property>
<property name="icon-name">open-menu-symbolic</property>
<property name="primary">True</property>
<property name="tooltip_text" translatable="yes">Menu</property>
</object>
</child>
......
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<object class="InitialState" id="_initial_state">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="_title_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="justify">center</property>
<property name="text" translatable="yes">Welcome to Music</property>
<style>
<class name="title"/>
<class name="large-title"/>
</style>
</object>
</child>
<child>
<object class="GtkLabel" id="_description_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="justify">center</property>
<property name="text" translatable="yes">The contents of your Music Folder will appear here</property>
<style>
<class name="description"/>
<class name="body"/>
</style>
</object>
</child>
</object>
</interface>
......@@ -190,11 +190,13 @@
<child internal-child="action_area">
<object class="GtkBox">
<property name="focusable">False</property>
<property name="visible">False</property>
</object>
</child>
</template>
<object class="GtkHeaderBar" id="_title_bar">
<property name="focusable">False</property>
<property name="show_title_buttons">False</property>
<property name="title-widget">
<object class="GtkLabel">
<property name="label" translatable="yes">Add to Playlist</property>
......
......@@ -2,7 +2,6 @@
<interface>
<requires lib="gtk" version="4.0"/>
<template class="SongWidget" parent="GtkListBoxRow">
<property name="focusable">False</property>
<property name="selectable">False</property>
<child>
<object class="GtkBox" id="box1">
......
......@@ -12,7 +12,7 @@
<child>
<object class="GtkShortcutsShortcut">
<property name="title" translatable="yes" context="shortcut window">Close window</property>
<property name="accelerator">&lt;Primary&gt;Q</property>
<property name="action-name">app.quit</property>
</object>
</child>
<child>
......@@ -24,13 +24,13 @@
<child>
<object class="GtkShortcutsShortcut">
<property name="title" translatable="yes" context="shortcut window">Help</property>
<property name="accelerator">F1</property>
<property name="action-name">app.help</property>
</object>
</child>
<child>
<object class="GtkShortcutsShortcut">
<property name="title" translatable="yes" context="shortcut window">Shortcuts</property>
<property name="accelerator">&lt;Primary&gt;question</property>
<property name="action-name">win.show-help-overlay</property>
</object>
</child>
</object>
......
# AboutDialog.ui configuration
VCS_TAG = ''
if get_option('profile') != 'default'
git = find_program('git', required : false)
if git.found()
VCS_TAG = run_command('git', 'rev-parse', '--short', 'HEAD').stdout().strip()
endif
if VCS_TAG == ''
VCS_TAG = '-devel'
else
VCS_TAG = '-@0@'.format(VCS_TAG)
endif
endif
about_dialog_conf = configuration_data()
about_dialog_conf.set('PACKAGE_VERSION', '@0@@1@'.format(meson.project_version(), VCS_TAG))
about_dialog_conf.set('PACKAGE_URL', PACKAGE_URL)
about_dialog_conf.set('PROGRAM_NAME', 'Music' + NAME_SUFFIX)
about_dialog_conf.set('APPID', APPLICATION_ID)
about_dialog = configure_file(
input: 'AboutDialog.ui.in',
output: 'AboutDialog.ui',
configuration: about_dialog_conf
)
\ No newline at end of file
......@@ -51,7 +51,7 @@ Adw.init()
LOCALE_DIR = '@localedir@'
PKGDATA_DIR = '@pkgdatadir@'
VERSION = '@version@'
def set_exception_hook():
"""Configures sys.excepthook to enforce Gtk application exiting."""
......@@ -92,7 +92,7 @@ def run_application():
"""Runs GNOME Music application and returns its exit code."""
from gnomemusic.application import Application
app = Application('@application_id@')
app = Application('@application_id@', VERSION)
signal.signal(signal.SIGINT, signal.SIG_DFL)
return app.run(sys.argv)
......
# aboutwindow.py
#
# Copyright 2022 Christopher Davis <christopherdavis@gnome.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# SPDX-License-Identifier: GPL-2.0-or-later
from gettext import gettext as _
from gi.repository import Adw, Gtk
def show_about(app_id, version, parent):
developers = [
"Abhinav Singh",
"Adam Blanchet",
"Adrian Solom",
"Alberto Fanjul",
"Alexander Mikhaylenko",
"Andre Klapper",
"Andreas Nilsson",
"Apostol Bakalov",
"Arnel A. Borja",
"Ashwani Singh Tanwar",
"Ashwin Mohan",
"Atharva Veer",
"Automeris Naranja",
"Benoît Legat",
"Bilal Elmoussaoui",
"Billy Barrow",
"Bruce Cowan",
"Carlos Garnacho",
"Carlos Soriano",
"Chinmay Gurjar",
"Christophe van den Abbeele",
"Christopher Davis",
"Clayton G. Hobbs",
"Divyanshu Vishwakarma",
"Eslam Mostafa",
"Elias Entrup",
"Erik Inkinen",
"Evan Nehring",
"Evandro Giovanini",
"Ezike Ebuka",
"Fabiano Fidêncio",
"Felipe Borges",
"Florian Darfeuille",
"Gaurav Narula",
"Georges Basile Stavracas Neto",
"Guillaume Quintard",
"Gyanesh Malhotra",
"Harry Xie",
"Hugo Posnic",
"Ishaan Shah",
"Islam Bahnasy",
"Jakub Steiner",
"James A. Baker",
"Jan Alexander Steffens",
"Janne Körkkö",
"Jan-Michael Brummer",
"Jean Felder",
"Jeremy Bicha",
"Jesus Bermudez Velazquez",
"Jordan Petridis",
"Juan José González",
"Juan Suarez",
"Kainaat Singh",
"Kalev Lember",
"Kevin Haller",
"Konstantin Pospelov",
"Koushik Sahu",
"Lucy Coleclough",
"Marinus Schraal",
"Michael Catanzaro",
"Mohanna Datta Yelugoti",
"Nick Richards",
"Niels De Graef",
"Nikolay Yanchuk",
"Nils Reuße",
"Pablo Palácios",
"Phil Dawson",
"Piotr Drąg",
"Prashant Tyagi",
"Rafael Coelho",
"Rashi Sah",
"Rasmus Thomsen",
"Reuben Dsouza",
"Robert Greener",
"Sabri Ünal",
"Sagar Lakhani",
"Sai Suman Prayaga",
"Sam Hewitt",
"Sam Thursfield",
"Sambhav Kothari",
"Seif Lotfy",
"Shivani Poddar",
"Shivansh Handa",
"Simon McVittie",
"Sophie Herold",
"Subhadip Jana",
"Sumaid Syed",
"Suyash Garg",
"Tapasweni Pathak",
"Taylor Garcia",
"Tjipke van der Heide",
"Vadim Rutkovsky",
"Veerasamy Sevagen",
"Vineet Reddy",
"Weifang Lai",
"Yann Delaby",
"Yash Singh",
"Yosef Or Boczko"
]
designers = [
"Allan Day",
"Jakub Steiner",
"William Jon McCann"
]
translators = [
"Adolfo Jayme Barrientos",
"அருள்ராஜன் அ லை",
"A S Alam",
"Alain Lojewski",
"Alan Mortensen",
"Aleksandr Melman",
"Alexander Shopov",
"Alexandre Franke",
"Alexey Rubtsov",
"Anders Jonsson",
"Andika Triwidada",
"Anish Sheela",
"Arash Mousavi",
"Asier Sarasua Garmendia",
"Ask Hjorth Larsen",
"Aurimas Černius",
"Balázs Meskó",
"Balázs Úr",
"Baurzhan Muftakhidinov",
"Bruce Cowan",
"Boyuan Yang",
"Carmen Bianca Bakker",
"Cédric Valmary",
"Chao-Hsiung Liao",
"Charles Monzat",
"Cheng Lu",
"Cheng-Chia Tseng",
"Claude Paroz",
"Danial Behzadi",
"Daniel Korostil",
"Daniel Mustieles García",
"Daniel Șerbănescu",
"David King",
"Dušan Kazik",
"Efstathios Iosifidis",
"Emin Tufan Çetin",
"Enrico Nicoletto",
"Fábio Nogueira",
"Fabio Tomat",
"Florentina Mușat",
"Fran Diéguez",
"Furkan Tokaç",
"Gábor Kelemen",
"Gil Forcada Codinachs",
"Goran Vidović",
"Guillaume Bernard",
"Henrique Machado Campos",
"Hugo Carvalho",
"Inaki Larranaga Murgoitio",
"Jiri Grönroos",
"Joe Hansen",
"Jor Teron",
"Jordi Mas",
"Juliano Camargo",
"Julien Humbert",
"Justin van Steijn",
"Kjartan Maraas",
"Kristjan Schmidt",
"Kukuh Syafaat",
"Leônidas Araújo",
"Luna Jernberg",
"Марко Костић",
"Marek Černocký",
"Mario Blättermann",
"Matej Urbančič",
"Matheus Barbosa",
"Milo Casagrande",
"Mingcong Bai",
"Mpho Jele",
"Мирослав Николић",
"Милош Поповић",
"Nart Tlisha",
"Nathan Follens",
"Osman Karagöz",
"Pawan Chitrakar",
"Petr Kovář",
"Philipp Kiemle",
"Piotr Drąg",
"Quentin Pagès",
"Rafael Fontenelle",
"Rodrigo Lledó Milanca",
"Rūdolfs Mazurs",
"Ryuta Fujii",
"Rūdolfs Mazurs",
"Sabri Ünal",
"Sebastian Rasmussen",
"Seong-ho Cho",
"Stas Solovey",
"Sveinn í Felli",
"Tiago Santos",
"Tim Sabsch",
"Tjipke van der Heide",
"Tom Tryfonidis",
"Trần Ngọc Quân",
"Vasil Pupkin",
"Vinzenz Vietzke",
"Xavi Ivars",
"Yaron Shahrabani",
"Yi-Jyun Pan",
"Yosef Or Boczko",
"Yuras Shumovich",
"Yuri Chornoivan",
"Yuri Myasoedov",
"Zander Brown",
"Zmicer Turok",
"Zurab Kargareteli"
]
about = Adw.AboutWindow(
application_name=_("Music"),
application_icon=app_id,
developer_name=_("The GNOME Project"),
transient_for=parent,
developers=developers,
designers=designers,
translator_credits=_("translator-credits"),
version=version,
website="https://wiki.gnome.org/Apps/Music",
issue_url="https://gitlab.gnome.org/GNOME/gnome-music/-/issues/new",
copyright=_("Copyright The GNOME Music Developers"),
license_type=Gtk.License.GPL_2_0)
about.add_credit_section(_("Translated by"), translators)
about.present()