From 65bc08524e2559ef67ba5124c564b4535451c467 Mon Sep 17 00:00:00 2001 From: Tomahawk CI Date: Thu, 3 May 2012 22:16:28 +0000 Subject: [PATCH 01/47] Automatic merge of Transifex translations --- lang/tomahawk_bg.ts | 261 ++++++++++++++++++++++------------------- lang/tomahawk_de.ts | 176 +++++++++++++++------------ lang/tomahawk_en.ts | 176 +++++++++++++++------------ lang/tomahawk_es.ts | 176 +++++++++++++++------------ lang/tomahawk_fr.ts | 176 +++++++++++++++------------ lang/tomahawk_ja.ts | 176 +++++++++++++++------------ lang/tomahawk_pl.ts | 176 +++++++++++++++------------ lang/tomahawk_pt_BR.ts | 176 +++++++++++++++------------ lang/tomahawk_ru.ts | 176 +++++++++++++++------------ lang/tomahawk_sv.ts | 176 +++++++++++++++------------ lang/tomahawk_zh_CN.ts | 176 +++++++++++++++------------ lang/tomahawk_zh_TW.ts | 176 +++++++++++++++------------ 12 files changed, 1218 insertions(+), 979 deletions(-) diff --git a/lang/tomahawk_bg.ts b/lang/tomahawk_bg.ts index 9c1cbbbba..09908d3e8 100644 --- a/lang/tomahawk_bg.ts +++ b/lang/tomahawk_bg.ts @@ -55,17 +55,17 @@ connect and stream from you? &Listen Along - &Слушай заедно + &Слушай заедно с Stop &Listening Along - Спри & да слушаш заедно + Спри &да слушаш заедно с &Follow in real-time - &Последвай + &Следвай в реално време @@ -190,7 +190,7 @@ connect and stream from you? This collection doesn't have any recent albums. - В тази колекция все още няма добавени наскоро албуми + В тази колекция все още няма добавени наскоро албуми. @@ -419,8 +419,7 @@ connect and stream from you? <p><b>Sorry!</b>&nbsp;Tomahawk crashed. Information about the crash is now being sent to Tomahawk HQ so that we can fix the bug.</p> - <p><b>Извинявай</b>! - Tomahawk спря да работи. Информация относно проблемът се изпраща към нашата централа, за да можем да го отстраним. + <p><b>Извинявай</b>&nbsp;Tomahawk спря да работи. Информация относно проблемът се изпраща към нашата централа, за да можем да го отстраним.</p> @@ -435,7 +434,7 @@ connect and stream from you? Uploaded %L1 of %L2 KB. - Качени %L1 от %В2 КБ + Качени %L1 от %В2 КБ. @@ -446,7 +445,7 @@ connect and stream from you? Sent! <b>Many thanks</b>. - Изпращането приключи. Благодарим ви за отзивчивостта! :) + Изпращането приключи. <b>Благодарим ви за отзивчивостта!</b> :-). @@ -656,7 +655,7 @@ connect and stream from you? Enter a title for the new playlist: - Въведи име за новият списък + Въведи име за новият списък: @@ -671,7 +670,7 @@ connect and stream from you? &Create Playlist - Създай списък + &Създай списък @@ -751,7 +750,7 @@ connect and stream from you? Just a regular old playlist... Give it a name, drag in some tracks, and go! - Обикновен списък. Име, няколко песни и си ти на ход! ;) + Обикновен списък. Име, няколко песни и си ти на ход! ;-) @@ -766,7 +765,7 @@ connect and stream from you? New Playlist... - Нов списък + Нов списък... @@ -795,58 +794,53 @@ connect and stream from you? Proxy настройки - + Hostname of proxy server Адрес на proxy сървър - + Host Адрес - + Port Порт - + Proxy login Настройка на влизане - + User Потребител - + Password Парола - + Proxy password Парола за proxy - - Type - Тип - - - + No Proxy Hosts: (Overrides system proxy) Без адреси за Proxy (Отменя системните настройки) - + localhost *.example.com (space separated) localhost *.example.com (отделени с интервал) - + Use proxy for DNS lookups? Използване на Proxy за DNS заявки? @@ -1006,40 +1000,40 @@ connect and stream from you? SettingsDialog - + Collection Колекция - + Advanced Разширени - + All Всички - + + Some changed settings will not take effect until Tomahawk is restarted + + + + Services Услуги - + Install resolver from file Инсталирай услиги за търсене от файл - + Information Информация - - - Changing this setting requires a restart of Tomahawk! - Промяната на тази настройка(и) изисква рестартиране на програмата! - SocialPlaylistWidget @@ -1349,7 +1343,7 @@ connect and stream from you? Right click on any Tomahawk playlist to sync it to Spotify. - Щракни с десен бутон върху, който и да е списък в Tomahawk, за да го добавиш и в Spotify + Щракни с десен бутон върху, който и да е списък в Tomahawk, за да го добавиш и в Spotify. @@ -1369,7 +1363,7 @@ connect and stream from you? Username: - Потребителско име + Потребителско име: @@ -1433,6 +1427,46 @@ connect and stream from you? Time between scans, in seconds: Време между две сканирания, в секунди + + + Advanced Settings + + + + + Remote Peer Connection Method + + + + + None (outgoing connections only) + + + + + Use UPnP to establish port forward (recommended) + + + + + Use static external IP address/host name and port + + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + + + + + SOCKS Proxy + + + + + Use SOCKS Proxy + + Internet Services @@ -1449,50 +1483,35 @@ connect and stream from you? Филтрирай по възможности: - - Advanced Network Settings - Разширени мрежови настройки - - - - If you're having difficulty connecting to peers, try setting this to your external IP address/host name and a port number (default 50210). Make sure to forward that port to this machine! - Ако изпитваш затруднения при свързването, пробвай да настроиш тук твоят външен IP адрес или име на хост. - - - + Static Host Name: Статичен адрес: - + Static Port: Статичен порт: - - Always use static host name/port? (Overrides UPnP discovery/port forwarding) - Винаги ползвай статичен порт. (Това ще премахне настройките зададени от UPnP) - - - + Proxy Settings... Настройка на Proxy: - - Send reports after Tomahawk crashed - Изпрати сервизна информация след забиване. + + Other Settings + - + + Send reports after Tomahawk crashed + Изпрати сервизна информация след счупването на програмата. + + + Allow web browsers to interact with Tomahawk (recommended) Позволи на браузърите да работят съвместно с Tomahawk (препоръчително) - - - Use UPnP to establish port forward - Ползвай UPnP за настройка на прехвърляне на портове. - Tomahawk::Accounts::AccountDelegate @@ -1542,7 +1561,7 @@ connect and stream from you? Enter your Google login to connect with your friends using Tomahawk! - Въведи твоята Google регистрация за да можеш да се свържеш с твоите приятели, ползващи Tomahawk + Въведи твоята Google регистрация за да можеш да се свържеш с твоите приятели, ползващи Tomahawk! @@ -1595,7 +1614,7 @@ connect and stream from you? Success - Ура! + Успешно! @@ -1662,7 +1681,7 @@ connect and stream from you? Tweet! - Чурулик! + Tweet! @@ -1681,7 +1700,7 @@ connect and stream from you? Status: Credentials saved for %1 - Няма запазени данни за вход + Статус: данните са запаметени за %1 @@ -1725,7 +1744,7 @@ You may wish to try re-authenticating. Send Message! - Чурулик! + Изпрати съобщението! @@ -1735,7 +1754,7 @@ You may wish to try re-authenticating. Send Mention! - Чурулик! + Изпрати споменаването! @@ -1782,7 +1801,7 @@ You may wish to try re-authenticating. Your message has been posted! - Съобщението беще побликувано. + Съобщението беще побликувано! @@ -2060,72 +2079,72 @@ Try tweaking the filters for a new set of songs to play. Major - Major + Мажор Minor - Minor + Минор C - C + до C Sharp - C# + до# D - + ре E Flat - + ре \flat E - + ми F - + фа F Sharp - + фа# G - + сол A Flat - + ла \flat A - + ла B Flat - + си \flat B - + си @@ -2185,7 +2204,7 @@ Try tweaking the filters for a new set of songs to play. Key - Бутон + Ключ @@ -2648,7 +2667,7 @@ enter the displayed PIN number here: &Stop Playback after current Track - Спри възпроизвеждането след текущата песен + &Спри възпроизвеждането след текущата песен @@ -2679,7 +2698,7 @@ enter the displayed PIN number here: &Continue Playback after current Track - Продължи възпроизвеждането след текущата песен + &Продължи възпроизвеждането след текущата песен @@ -2772,7 +2791,7 @@ enter the displayed PIN number here: Create New &Station - Създай нова станция + Създай нова &Станция @@ -2821,7 +2840,7 @@ enter the displayed PIN number here: - + Play Изпълни @@ -2852,129 +2871,129 @@ enter the displayed PIN number here: Провери за обновления... - - - + + + Connect To Peer Свържи се с друг потребител - + Enter peer address: - Въведи адресът на отдалеченият потребител + Въведи адресът на отдалеченият потребител: - + Enter peer port: Въведи порт: - + Enter peer key: Въведи ключът за удостоверяване: - + XSPF Error XSPF Грешка - + This is not a valid XSPF playlist. Това не е валиден XSPF списък - + Failed to save tracks Не мога да запазя списъкът с песни - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Някои от песните в този списък нямат артист и заглавие. Те ще бъдат игнорирани. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. Съжалявам. Има проблем с достъпа до твоето аудио-устройство или до избраната песен - тя ще бъде прескочена. Моля, увери се, че са инсталирани подходящ Phonon и приставки. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Съжалявам. Има проблем с достъпа до твоето аудио устройство или избраната песен. Тя ще бъде пропусната. - + Create New Station Създай нова станция - + Name: Име: - + New Station Нова станция - + New Playlist Нов списък - + Pause Пауза - + Go &offline Излез &извън линия - + Go &online Свържи &се - + Authentication Error Грешка при удостоверяване - + %1 by %2 track, artist name %1 от %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson Всички права запазени 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/> Благодарности на: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson - + About Tomahawk Относно Tomahawk @@ -3345,7 +3364,7 @@ You can re-send a sync message at any time simply by sending another tweet using Terms for %1: - Условия за %1 + Условия за %1: diff --git a/lang/tomahawk_de.ts b/lang/tomahawk_de.ts index 7ab084a42..abb1a5df5 100644 --- a/lang/tomahawk_de.ts +++ b/lang/tomahawk_de.ts @@ -793,59 +793,54 @@ connect and stream from you? Proxy-Einstellungen - + Hostname of proxy server Rechnername des Proxy Servers - + Host Rechnername - + Port Port - + Proxy login Proxy Nutzername - + User Benutzer - + Password Passwort - + Proxy password Proxy Passwort - - Type - Typ - - - + No Proxy Hosts: (Overrides system proxy) Proxy Ausnahmen: (Hat Vorrang vor System Proxy) - + localhost *.example.com (space separated) localhost *.beispiel.de (Getrennt durch Leerzeichen) - + Use proxy for DNS lookups? Proxy für DNS Anfragen verwenden? @@ -1005,40 +1000,40 @@ connect and stream from you? SettingsDialog - + Collection Sammlung - + Advanced Erweitert - + All Alle - + + Some changed settings will not take effect until Tomahawk is restarted + + + + Services Dienste - + Install resolver from file Installiere Resolver Datei - + Information Information - - - Changing this setting requires a restart of Tomahawk! - Diese Einstellung benötigt einen Neustart von Tomahawk um aktiv zu werden! - SocialPlaylistWidget @@ -1429,6 +1424,46 @@ connect and stream from you? Time between scans, in seconds: Zeitinterval (in Sekunden) zwischen zwei Scans: + + + Advanced Settings + + + + + Remote Peer Connection Method + + + + + None (outgoing connections only) + + + + + Use UPnP to establish port forward (recommended) + + + + + Use static external IP address/host name and port + + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + + + + + SOCKS Proxy + + + + + Use SOCKS Proxy + + Internet Services @@ -1445,50 +1480,35 @@ connect and stream from you? Nach Fähigkeiten filtern: - - Advanced Network Settings - Erweiterte Netzwerkeinstellungen - - - - If you're having difficulty connecting to peers, try setting this to your external IP address/host name and a port number (default 50210). Make sure to forward that port to this machine! - Wenn du Schwierigkeiten hast, dich mit anderen Leuten zu verbinden, versuche deine externe IP-Adresse/Rechnernamen und eine Portnummer (Standard 50210) hier einzutragen. Stelle sicher, den Port entsprechend an diesen Rechner weiterzuleiten! - - - + Static Host Name: Statischer Rechnername: - + Static Port: Statischer Port: - - Always use static host name/port? (Overrides UPnP discovery/port forwarding) - Statischen Rechnernamen/Port immer benutzen? (Überschreibt UPnP-discovery/Portweiterleitung) - - - + Proxy Settings... Proxy-Einstellungen… - + + Other Settings + + + + Send reports after Tomahawk crashed Übermittlung von Fehlerberichten nach Tomahawk Absturz - + Allow web browsers to interact with Tomahawk (recommended) Erlaube Web Browser mit Tomahawk zu interagieren (empfohlen) - - - Use UPnP to establish port forward - Benutze UPnP um die Portweiterleitung einzurichten - Tomahawk::Accounts::AccountDelegate @@ -2814,7 +2834,7 @@ Tomahawk auf Twitter's Website authentifiziert hast: - + Play Abspielen @@ -2845,126 +2865,126 @@ Tomahawk auf Twitter's Website authentifiziert hast: Nach Updates suchen... - - - + + + Connect To Peer Mit anderem Tomahawk verbinden - + Enter peer address: Gib die Adresse der Gegenstelle ein: - + Enter peer port: Gib den Port der Gegenstelle ein: - + Enter peer key: Gib den Schlüssel der Gegenstelle ein: - + XSPF Error XSPF-Fehler - + This is not a valid XSPF playlist. Dies ist keine gültige XSPF-Playliste. - + Failed to save tracks Konnte Stücke nicht abspeichern - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Einige Stücke in der Playliste enthalten weder Künstler noch Titel. Diese werden ignoriert. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. Es tut uns leid, Tomahawk kann auf dein Audio-Gerät oder das gewünschte Stück nicht zugreifen und überspringt es deshalb. Vergewisser dich, dass ein geignetes Phonon-Backend mitsamt benötigten Plugins installiert ist. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Es tut uns leid, Tomahawk kann auf dein Audio-Gerät oder das gewünschte Stück nicht zugreifen und überspringt es deshalb. - + Create New Station Neue Station erstellen - + Name: Name: - + New Station Neue Station - + New Playlist Neue Playliste - + Pause Pause - + Go &offline Verbindung &trennen - + Go &online &Verbindung herstellen - + Authentication Error Authentifizierungsfehler - + %1 by %2 track, artist name %1 von %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Danke an: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter und Steve Robertson - + About Tomahawk Über Tomahawk diff --git a/lang/tomahawk_en.ts b/lang/tomahawk_en.ts index 59dfa9bdc..26510cd6b 100644 --- a/lang/tomahawk_en.ts +++ b/lang/tomahawk_en.ts @@ -794,59 +794,54 @@ connect and stream from you? Proxy Settings - + Hostname of proxy server Hostname of proxy server - + Host Host - + Port Port - + Proxy login Proxy login - + User User - + Password Password - + Proxy password Proxy password - - Type - Type - - - + No Proxy Hosts: (Overrides system proxy) No Proxy Hosts: (Overrides system proxy) - + localhost *.example.com (space separated) localhost *.example.com (space separated) - + Use proxy for DNS lookups? Use proxy for DNS lookups? @@ -1006,40 +1001,40 @@ connect and stream from you? SettingsDialog - + Collection Collection - + Advanced Advanced - + All All - + + Some changed settings will not take effect until Tomahawk is restarted + Some changed settings will not take effect until Tomahawk is restarted + + + Services Services - + Install resolver from file Install resolver from file - + Information Information - - - Changing this setting requires a restart of Tomahawk! - Changing this setting requires a restart of Tomahawk! - SocialPlaylistWidget @@ -1433,6 +1428,46 @@ connect and stream from you? Time between scans, in seconds: Time between scans, in seconds: + + + Advanced Settings + Advanced Settings + + + + Remote Peer Connection Method + Remote Peer Connection Method + + + + None (outgoing connections only) + None (outgoing connections only) + + + + Use UPnP to establish port forward (recommended) + Use UPnP to establish port forward (recommended) + + + + Use static external IP address/host name and port + Use static external IP address/host name and port + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + Set this to your external IP address or host name. Make sure to forward the port to this host! + + + + SOCKS Proxy + SOCKS Proxy + + + + Use SOCKS Proxy + Use SOCKS Proxy + Internet Services @@ -1449,50 +1484,35 @@ connect and stream from you? Filter by capability: - - Advanced Network Settings - Advanced Network Settings - - - - If you're having difficulty connecting to peers, try setting this to your external IP address/host name and a port number (default 50210). Make sure to forward that port to this machine! - If you're having difficulty connecting to peers, try setting this to your external IP address/host name and a port number (default 50210). Make sure to forward that port to this machine! - - - + Static Host Name: Static Host Name: - + Static Port: Static Port: - - Always use static host name/port? (Overrides UPnP discovery/port forwarding) - Always use static host name/port? (Overrides UPnP discovery/port forwarding) - - - + Proxy Settings... Proxy Settings... - + + Other Settings + Other Settings + + + Send reports after Tomahawk crashed Send reports after Tomahawk crashed - + Allow web browsers to interact with Tomahawk (recommended) Allow web browsers to interact with Tomahawk (recommended) - - - Use UPnP to establish port forward - Use UPnP to establish port forward - Tomahawk::Accounts::AccountDelegate @@ -2820,7 +2840,7 @@ enter the displayed PIN number here: - + Play Play @@ -2851,126 +2871,126 @@ enter the displayed PIN number here: Check For Updates... - - - + + + Connect To Peer Connect To Peer - + Enter peer address: Enter peer address: - + Enter peer port: Enter peer port: - + Enter peer key: Enter peer key: - + XSPF Error XSPF Error - + This is not a valid XSPF playlist. This is not a valid XSPF playlist. - + Failed to save tracks Failed to save tracks - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Some tracks in the playlist do not contain an artist and a title. They will be ignored. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Create New Station Create New Station - + Name: Name: - + New Station New Station - + New Playlist New Playlist - + Pause Pause - + Go &offline Go &offline - + Go &online Go &online - + Authentication Error Authentication Error - + %1 by %2 track, artist name %1 by %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson - + About Tomahawk About Tomahawk diff --git a/lang/tomahawk_es.ts b/lang/tomahawk_es.ts index e55fedb41..b857e4f7f 100644 --- a/lang/tomahawk_es.ts +++ b/lang/tomahawk_es.ts @@ -793,58 +793,53 @@ connect and stream from you? Configuración del proxy - + Hostname of proxy server Hostname del servidor proxy - + Host Host - + Port Puerto - + Proxy login Proxy login - + User Usuario - + Password Contraseña - + Proxy password Contraseña del proxy - - Type - Tipo - - - + No Proxy Hosts: (Overrides system proxy) - + localhost *.example.com (space separated) localhost *.ejemplo.com (separados por espacios) - + Use proxy for DNS lookups? ¿Usar proxy para búsquedas DNS? @@ -1004,40 +999,40 @@ connect and stream from you? SettingsDialog - + Collection Colección - + Advanced Avanzado - + All - + + Some changed settings will not take effect until Tomahawk is restarted + + + + Services - + Install resolver from file - + Information Información - - - Changing this setting requires a restart of Tomahawk! - ¡Cambiar esta configuración requiere el reinicio de Tomahawk! - SocialPlaylistWidget @@ -1431,6 +1426,46 @@ y estaciones basadas en sus gustos personales. Time between scans, in seconds: Tiempo entre escaneo, en segundos: + + + Advanced Settings + + + + + Remote Peer Connection Method + + + + + None (outgoing connections only) + + + + + Use UPnP to establish port forward (recommended) + + + + + Use static external IP address/host name and port + + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + + + + + SOCKS Proxy + + + + + Use SOCKS Proxy + + Internet Services @@ -1447,50 +1482,35 @@ y estaciones basadas en sus gustos personales. - - Advanced Network Settings - Configuración avanzada de red - - - - If you're having difficulty connecting to peers, try setting this to your external IP address/host name and a port number (default 50210). Make sure to forward that port to this machine! - Si tiene dificultades para conectarse con los pares, intente establecer su dirección IP externa/nombre del host y el número de puerto (por defecto 50210). ¡Asegúrese de redireccionar ese puerto a esta máquina! - - - + Static Host Name: Nombre estático del host: - + Static Port: Puerto estático: - - Always use static host name/port? (Overrides UPnP discovery/port forwarding) - ¿Siempre usar nombre eśtático del host/puerto? (Sobreescribe descubrimiento UPnP/redirección de puertos) - - - + Proxy Settings... Configuración del proxy... - + + Other Settings + + + + Send reports after Tomahawk crashed Mandar reportes después de que Tomahawk falle - + Allow web browsers to interact with Tomahawk (recommended) - - - Use UPnP to establish port forward - Utilizar UPnP para establecer redirección de puertos - Tomahawk::Accounts::AccountDelegate @@ -2813,7 +2833,7 @@ introduzca su número PIN aquí: - + Play Reproducir @@ -2844,126 +2864,126 @@ introduzca su número PIN aquí: Buscar actualizaciones... - - - + + + Connect To Peer Conectar a un par - + Enter peer address: Introducir dirección del par: - + Enter peer port: Introducir puerto del par: - + Enter peer key: Introducir contraseña del par: - + XSPF Error Error XSPF - + This is not a valid XSPF playlist. Esta no es una lista de reproducción XSPF válida. - + Failed to save tracks Fallo al guardar pistas - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Algunas pistas en la lista de reproducción no contienen artista ni título. Serán ignoradas. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Create New Station Crear nueva estación - + Name: Nombre: - + New Station Nueva estación - + New Playlist Nueva lista de reproducción - + Pause Pausar - + Go &offline &Desconectarse - + Go &online &Conectarse - + Authentication Error Error de autenticación - + %1 by %2 track, artist name %1 por %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson - + About Tomahawk diff --git a/lang/tomahawk_fr.ts b/lang/tomahawk_fr.ts index ad9fd14b6..adeec426c 100644 --- a/lang/tomahawk_fr.ts +++ b/lang/tomahawk_fr.ts @@ -793,59 +793,54 @@ connect and stream from you? Paramètres de proxy - + Hostname of proxy server Nom d'hôte du serveur proxy - + Host Hôte - + Port Port - + Proxy login Login du proxy - + User Utilisateur - + Password Mot de passe - + Proxy password Mot de passe du proxy - - Type - Type - - - + No Proxy Hosts: (Overrides system proxy) Pas de proxy pour : (remplace les paramètres système) - + localhost *.example.com (space separated) localhost *.example.com (séparé par espace) - + Use proxy for DNS lookups? Utiliser le proxy pour les requêtes DNS ? @@ -1005,40 +1000,40 @@ connect and stream from you? SettingsDialog - + Collection Collection - + Advanced Avancés - + All Tous - + + Some changed settings will not take effect until Tomahawk is restarted + + + + Services Services - + Install resolver from file - + Information Information - - - Changing this setting requires a restart of Tomahawk! - Le changement de ce paramètre requiert un redémarrage de Tomahawk - SocialPlaylistWidget @@ -1432,6 +1427,46 @@ et des stations basés sur vos goûts. Time between scans, in seconds: Période de scan, en secondes : + + + Advanced Settings + + + + + Remote Peer Connection Method + + + + + None (outgoing connections only) + + + + + Use UPnP to establish port forward (recommended) + + + + + Use static external IP address/host name and port + + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + + + + + SOCKS Proxy + + + + + Use SOCKS Proxy + + Internet Services @@ -1448,50 +1483,35 @@ et des stations basés sur vos goûts. - - Advanced Network Settings - Paramètres réseaux avancés - - - - If you're having difficulty connecting to peers, try setting this to your external IP address/host name and a port number (default 50210). Make sure to forward that port to this machine! - Si vous rencontrez des difficultés à vous connecter, essayez de saisir ici votre adresse IP externe et un port (défaut 50210). Vérifiez que vous redirigez ce port vers cette machine ! - - - + Static Host Name: Nom d'hôte statique : - + Static Port: Port statique : - - Always use static host name/port? (Overrides UPnP discovery/port forwarding) - Toujours utiliser un nom d'hôte/port statique? (remplace la découverte UPnP/le transfer de port) - - - + Proxy Settings... Paramètres du proxy... - + + Other Settings + + + + Send reports after Tomahawk crashed Envoyer un rapport apès un crash de Tomahawk - + Allow web browsers to interact with Tomahawk (recommended) Permettrre aux navigateurs web pour intéragir avec Tomahawk (recommandé) - - - Use UPnP to establish port forward - Utiliser UPnP pour établir la redirection de port - Tomahawk::Accounts::AccountDelegate @@ -2819,7 +2839,7 @@ saisissez le numéro PIN ici : - + Play Lecture @@ -2850,126 +2870,126 @@ saisissez le numéro PIN ici : Rechercher une mise à jour... - - - + + + Connect To Peer - + Enter peer address: - + Enter peer port: - + Enter peer key: - + XSPF Error Erreur XSPF - + This is not a valid XSPF playlist. Ceci n'est pas une liste de lecture XSPF valide. - + Failed to save tracks Échec de la sauvegarde des pistes - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Certaines pistes dans la liste de lecture ne contiennent pas d'artiste ou de titre. Elles seront ignorées. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. Désolé, il y a un problème d'accès à votre matériel audio ou la piste en cours va être sauter. Vérifiez que vous avez un backend Phonon et les plugins requis installés. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Désolé, il y a un problème d'accès à votre matériel audio ou la piste en cours va être sauter. - + Create New Station Créer une nouvelle station - + Name: Nom : - + New Station Nouvelle station - + New Playlist Nouvelle liste de lecture - + Pause Pause - + Go &offline Se &déconnecter - + Go &online Se c&onnecter - + Authentication Error Erreur d'authentification - + %1 by %2 track, artist name %1 par %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson - + About Tomahawk diff --git a/lang/tomahawk_ja.ts b/lang/tomahawk_ja.ts index 10239045c..3b634e79e 100644 --- a/lang/tomahawk_ja.ts +++ b/lang/tomahawk_ja.ts @@ -793,58 +793,53 @@ connect and stream from you? プロクシ設定 - + Hostname of proxy server - + Host ホスト - + Port ポート - + Proxy login - + User - + Password - + Proxy password - - Type - - - - + No Proxy Hosts: (Overrides system proxy) - + localhost *.example.com (space separated) - + Use proxy for DNS lookups? @@ -1006,40 +1001,40 @@ other: %n年前 SettingsDialog - + Collection - + Advanced - + All - + + Some changed settings will not take effect until Tomahawk is restarted + + + + Services - + Install resolver from file - + Information 情報 - - - Changing this setting requires a restart of Tomahawk! - - SocialPlaylistWidget @@ -1430,6 +1425,46 @@ other: %n年前 Time between scans, in seconds: + + + Advanced Settings + + + + + Remote Peer Connection Method + + + + + None (outgoing connections only) + + + + + Use UPnP to establish port forward (recommended) + + + + + Use static external IP address/host name and port + + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + + + + + SOCKS Proxy + + + + + Use SOCKS Proxy + + Internet Services @@ -1446,50 +1481,35 @@ other: %n年前 - - Advanced Network Settings - - - - - If you're having difficulty connecting to peers, try setting this to your external IP address/host name and a port number (default 50210). Make sure to forward that port to this machine! - - - - + Static Host Name: - + Static Port: - - Always use static host name/port? (Overrides UPnP discovery/port forwarding) - - - - + Proxy Settings... - + + Other Settings + + + + Send reports after Tomahawk crashed - + Allow web browsers to interact with Tomahawk (recommended) - - - Use UPnP to establish port forward - - Tomahawk::Accounts::AccountDelegate @@ -2809,7 +2829,7 @@ enter the displayed PIN number here: - + Play @@ -2840,126 +2860,126 @@ enter the displayed PIN number here: - - - + + + Connect To Peer - + Enter peer address: - + Enter peer port: - + Enter peer key: - + XSPF Error - + This is not a valid XSPF playlist. - + Failed to save tracks - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Create New Station 新規ステーションを作成 - + Name: - + New Station - + New Playlist - + Pause - + Go &offline - + Go &online - + Authentication Error - + %1 by %2 track, artist name - + %1 - %2 current track, some window title - + <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson - + About Tomahawk diff --git a/lang/tomahawk_pl.ts b/lang/tomahawk_pl.ts index 7dc4e2eb2..0ef38bb4b 100644 --- a/lang/tomahawk_pl.ts +++ b/lang/tomahawk_pl.ts @@ -793,58 +793,53 @@ connect and stream from you? Ustawienia Proxy - + Hostname of proxy server Host serwera proxy - + Host Host - + Port Port - + Proxy login Login Proxy - + User Użytkownik - + Password Hasło - + Proxy password Hasło Proxy - - Type - Typ - - - + No Proxy Hosts: (Overrides system proxy) - + localhost *.example.com (space separated) localhost *.example.com (oddzielone spacją) - + Use proxy for DNS lookups? Używać proxy dla zapytań DNS? @@ -1004,40 +999,40 @@ connect and stream from you? SettingsDialog - + Collection Kolekcje - + Advanced Zaawansowane - + All Wszystkie - + + Some changed settings will not take effect until Tomahawk is restarted + + + + Services Usługi - + Install resolver from file - + Information Informacja - - - Changing this setting requires a restart of Tomahawk! - Zmiana tych ustawień wymaga ponownego uruchomienia Tomahawka! - SocialPlaylistWidget @@ -1432,6 +1427,46 @@ indywidualnego profilu gustu. Time between scans, in seconds: Czas pomiędzy skanami, w sekundach: + + + Advanced Settings + + + + + Remote Peer Connection Method + + + + + None (outgoing connections only) + + + + + Use UPnP to establish port forward (recommended) + + + + + Use static external IP address/host name and port + + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + + + + + SOCKS Proxy + + + + + Use SOCKS Proxy + + Internet Services @@ -1448,50 +1483,35 @@ indywidualnego profilu gustu. - - Advanced Network Settings - Zaawansowane Ustawienia Sieci - - - - If you're having difficulty connecting to peers, try setting this to your external IP address/host name and a port number (default 50210). Make sure to forward that port to this machine! - Jeśli masz problemy z łączeniem się z innymi, spróbuj ustawić tutaj swój zewnętrzny adres IP/nazwę hosta i numer portu (domyślnie 50210). Upewnij się, że przekierowujesz port na tą maszynę! - - - + Static Host Name: Nazwa statycznego hosta: - + Static Port: Statyczny Port: - - Always use static host name/port? (Overrides UPnP discovery/port forwarding) - Zawsze używać statycznej nazwy hosta/portu? (Nadpisuje wykrywanie/przekierowanie UPnP) - - - + Proxy Settings... Ustawienia Proxy... - + + Other Settings + + + + Send reports after Tomahawk crashed Wysyłaj zgłoszenia po awarii Tomahawka - + Allow web browsers to interact with Tomahawk (recommended) - - - Use UPnP to establish port forward - Używaj UPnP, aby uzyskać przekierowanie portu - Tomahawk::Accounts::AccountDelegate @@ -2814,7 +2834,7 @@ wprowadź pokazany numer PIN tutaj: - + Play Odtwarzaj @@ -2845,126 +2865,126 @@ wprowadź pokazany numer PIN tutaj: Sprawdź uaktualnienia... - - - + + + Connect To Peer - + Enter peer address: - + Enter peer port: - + Enter peer key: - + XSPF Error Błąd XSPF - + This is not a valid XSPF playlist. To nie jest poprawna lista XSPF. - + Failed to save tracks Nie udało się zapisać utworów - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Niektóre utwory na liście nie zawierają artysty i tytułu. Zostaną one zignorowane. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Create New Station Utwórz Nową Stację - + Name: Nazwa: - + New Station Nowa stacja - + New Playlist Nowa Lista - + Pause Pauza - + Go &offline Przejdź do trybu &offline - + Go &online Przejdź do trybu &online - + Authentication Error Błąd uwierzytelniania - + %1 by %2 track, artist name %1 wykonawcy %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson - + About Tomahawk diff --git a/lang/tomahawk_pt_BR.ts b/lang/tomahawk_pt_BR.ts index 010abfd32..59f331174 100644 --- a/lang/tomahawk_pt_BR.ts +++ b/lang/tomahawk_pt_BR.ts @@ -793,58 +793,53 @@ connect and stream from you? Configurações de proxy - + Hostname of proxy server Endereço do servidor proxy - + Host Servidor - + Port Porta - + Proxy login Usuário do servidor proxy - + User Usuário - + Password Senha - + Proxy password Senha do servidor proxy - - Type - Tipo - - - + No Proxy Hosts: (Overrides system proxy) - + localhost *.example.com (space separated) localhost *.exemplo.com (separado por espaço) - + Use proxy for DNS lookups? Usar proxy para resolução DNS? @@ -1004,40 +999,40 @@ connect and stream from you? SettingsDialog - + Collection Biblioteca - + Advanced Avançado - + All - + + Some changed settings will not take effect until Tomahawk is restarted + + + + Services - + Install resolver from file - + Information Informação - - - Changing this setting requires a restart of Tomahawk! - Mudando essas contigurações será necessário reiniciar o Tomahawk! - SocialPlaylistWidget @@ -1431,6 +1426,46 @@ connect and stream from you? Time between scans, in seconds: Tempo entre os escaneos, em segundos: + + + Advanced Settings + + + + + Remote Peer Connection Method + + + + + None (outgoing connections only) + + + + + Use UPnP to establish port forward (recommended) + + + + + Use static external IP address/host name and port + + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + + + + + SOCKS Proxy + + + + + Use SOCKS Proxy + + Internet Services @@ -1447,50 +1482,35 @@ connect and stream from you? - - Advanced Network Settings - Configurações de rede avançadas - - - - If you're having difficulty connecting to peers, try setting this to your external IP address/host name and a port number (default 50210). Make sure to forward that port to this machine! - Se você está tendo dificuldade em conectar-se com outros pares tente colocar o seu endereço IP externo e número da porta (padrão 50210) Não se esqueça de redirecionar essa porta para este dispositivo! - - - + Static Host Name: Nome do servidor estático: - + Static Port: Porta estática: - - Always use static host name/port? (Overrides UPnP discovery/port forwarding) - Usar sempre nome de dispositivo/porta? (Substituirá as configurações de UPnP/port forwarding) - - - + Proxy Settings... Configurações de proxy... - + + Other Settings + + + + Send reports after Tomahawk crashed Enviar informações caso o Tomahawk trave - + Allow web browsers to interact with Tomahawk (recommended) Permitir que navegadores web interajam com o Tomahawk (recomendado) - - - Use UPnP to establish port forward - Usar UPnP para estabelecer port forward - Tomahawk::Accounts::AccountDelegate @@ -2813,7 +2833,7 @@ colocar o número PIN mostrado aqui: - + Play Reporduzir @@ -2844,126 +2864,126 @@ colocar o número PIN mostrado aqui: Buscar atualizações... - - - + + + Connect To Peer Conectar-se ao par - + Enter peer address: Coloque o endereço do par: - + Enter peer port: Coloque a porta do par: - + Enter peer key: Coloque a chave do par: - + XSPF Error Erro de XSPF - + This is not a valid XSPF playlist. Esta não é uma lista de reprodução XSPF válida. - + Failed to save tracks Falha ao salvar faixas - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Algumas faixas da lista de reprodução não contem artista e título. Estas serão ignoradas. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Create New Station Criar uma nova estação - + Name: Nome: - + New Station Nova estação - + New Playlist Nova lista de reprodução - + Pause Pausar - + Go &offline Desc&onectar - + Go &online C&onectar - + Authentication Error Erro de autenticação - + %1 by %2 track, artist name %1 de %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson - + About Tomahawk Sobre o Tomahawk diff --git a/lang/tomahawk_ru.ts b/lang/tomahawk_ru.ts index 69eb9ba41..bfa56cb2e 100644 --- a/lang/tomahawk_ru.ts +++ b/lang/tomahawk_ru.ts @@ -794,59 +794,54 @@ connect and stream from you? Настройки прокси - + Hostname of proxy server Имя хоста прокси сервера - + Host Хост - + Port Порт - + Proxy login Введите логин - + User Логин - + Password Пароль - + Proxy password Введите пароль - - Type - Тип прокси - - - + No Proxy Hosts: (Overrides system proxy) Не использовать прокси: (Переопределение прокси) - + localhost *.example.com (space separated) - + Use proxy for DNS lookups? Использовать прокси для поиска DNS? @@ -1006,40 +1001,40 @@ connect and stream from you? SettingsDialog - + Collection Коллекция - + Advanced Дополнительны - + All Все - + + Some changed settings will not take effect until Tomahawk is restarted + + + + Services Сервисы - + Install resolver from file Установить resolver из файла - + Information Инофрмация - - - Changing this setting requires a restart of Tomahawk! - Изменение этого параметра требует перезапуска Tomahawk! - SocialPlaylistWidget @@ -1430,6 +1425,46 @@ connect and stream from you? Time between scans, in seconds: Время между сканированием, в секундах: + + + Advanced Settings + + + + + Remote Peer Connection Method + + + + + None (outgoing connections only) + + + + + Use UPnP to establish port forward (recommended) + + + + + Use static external IP address/host name and port + + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + + + + + SOCKS Proxy + + + + + Use SOCKS Proxy + + Internet Services @@ -1446,50 +1481,35 @@ connect and stream from you? Фильтр по возможности: - - Advanced Network Settings - Дополнительные настройки сети - - - - If you're having difficulty connecting to peers, try setting this to your external IP address/host name and a port number (default 50210). Make sure to forward that port to this machine! - Если у вас возникли трудности при подключении к друзьям, попробуйте установить ваш внешний IP адрес / имя хоста и номер порта (по умолчанию 50210). Убедитесь в том, что порт сободен на этой машине! - - - + Static Host Name: Статическое имя хоста: - + Static Port: Статический порт: - - Always use static host name/port? (Overrides UPnP discovery/port forwarding) - Всегда используйте статическое имя хоста / порта? (Переопределяет UPnP открытие / перенаправления портов) - - - + Proxy Settings... Настройки прокси... - + + Other Settings + + + + Send reports after Tomahawk crashed Отправить отчет после падения Tomahawk - + Allow web browsers to interact with Tomahawk (recommended) - - - Use UPnP to establish port forward - Использовать UPnP для установки портов - Tomahawk::Accounts::AccountDelegate @@ -2814,7 +2834,7 @@ enter the displayed PIN number here: - + Play Играть @@ -2845,126 +2865,126 @@ enter the displayed PIN number here: Проверить обновления... - - - + + + Connect To Peer Связаться с Peer - + Enter peer address: Введите адрес узла: - + Enter peer port: Введите адрес порта: - + Enter peer key: Введите адрес ключа: - + XSPF Error Ошибка XSPF - + This is not a valid XSPF playlist. Это не является допустимым XSPF плейлистом. - + Failed to save tracks Не удалось сохранить песни - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Некоторые треки в плейлисте не содержат исполнителя и название. Они будут проигнорированы. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Create New Station Создать новую станцию - + Name: Имя: - + New Station Новая станция - + New Playlist Новый плейлист - + Pause Пауза - + Go &offline Отключиться - + Go &online Подлючиться - + Authentication Error Ошибка авторизации - + %1 by %2 track, artist name - + %1 - %2 current track, some window title - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson - + About Tomahawk О Tomahawk diff --git a/lang/tomahawk_sv.ts b/lang/tomahawk_sv.ts index 097092dca..715d4c326 100644 --- a/lang/tomahawk_sv.ts +++ b/lang/tomahawk_sv.ts @@ -793,59 +793,54 @@ connect and stream from you? Proxyinställningar - + Hostname of proxy server Värdnamn för proxyservern - + Host Värdnamn - + Port Port - + Proxy login Proxy login - + User Användare - + Password Lösenord - + Proxy password Proxy lösenord - - Type - Typ - - - + No Proxy Hosts: (Overrides system proxy) Ingen Proxy host (Skriver över systemproxyn) - + localhost *.example.com (space separated) localhost *.example.com (separeras med mellanslag) - + Use proxy for DNS lookups? Använd proxy för DNS kontroll? @@ -1005,40 +1000,40 @@ connect and stream from you? SettingsDialog - + Collection Samling - + Advanced Avancerat - + All Alla - + + Some changed settings will not take effect until Tomahawk is restarted + + + + Services Tjänster - + Install resolver from file Installera resolver från fil - + Information Information - - - Changing this setting requires a restart of Tomahawk! - Ändring av detta kräver omstart av Tomahawk! - SocialPlaylistWidget @@ -1429,6 +1424,46 @@ connect and stream from you? Time between scans, in seconds: + + + Advanced Settings + + + + + Remote Peer Connection Method + + + + + None (outgoing connections only) + + + + + Use UPnP to establish port forward (recommended) + + + + + Use static external IP address/host name and port + + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + + + + + SOCKS Proxy + + + + + Use SOCKS Proxy + + Internet Services @@ -1445,50 +1480,35 @@ connect and stream from you? - - Advanced Network Settings - Avancerade nätverksinställningar - - - - If you're having difficulty connecting to peers, try setting this to your external IP address/host name and a port number (default 50210). Make sure to forward that port to this machine! - - - - + Static Host Name: - + Static Port: Statisk port: - - Always use static host name/port? (Overrides UPnP discovery/port forwarding) - - - - + Proxy Settings... Proxyinställningar... - + + Other Settings + + + + Send reports after Tomahawk crashed - + Allow web browsers to interact with Tomahawk (recommended) - - - Use UPnP to establish port forward - - Tomahawk::Accounts::AccountDelegate @@ -2808,7 +2828,7 @@ enter the displayed PIN number here: - + Play Spela upp @@ -2839,126 +2859,126 @@ enter the displayed PIN number here: Leta efter uppdateringar... - - - + + + Connect To Peer Anslut till klient - + Enter peer address: Ange klientadress: - + Enter peer port: Ange klientport: - + Enter peer key: Ange klientnyckel: - + XSPF Error XSPF-fel - + This is not a valid XSPF playlist. Detta är inte en giltig XSPF-spellista. - + Failed to save tracks Misslyckades med att spara spår - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. Några spår i spellistan innehåller inte någon artist och titel. De kommer att ignoreras. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Create New Station Skapa ny station - + Name: Namn: - + New Station Ny station - + New Playlist Ny spellista - + Pause Paus - + Go &offline Koppla &från - + Go &online A&nslut - + Authentication Error Autentiseringsfel - + %1 by %2 track, artist name %1 av %2 - + %1 - %2 current track, some window title %1 - %2 - + <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson - + About Tomahawk diff --git a/lang/tomahawk_zh_CN.ts b/lang/tomahawk_zh_CN.ts index d89929406..e56f1bdb8 100644 --- a/lang/tomahawk_zh_CN.ts +++ b/lang/tomahawk_zh_CN.ts @@ -793,58 +793,53 @@ connect and stream from you? - + Hostname of proxy server - + Host - + Port - + Proxy login - + User - + Password - + Proxy password - - Type - - - - + No Proxy Hosts: (Overrides system proxy) - + localhost *.example.com (space separated) - + Use proxy for DNS lookups? @@ -1004,40 +999,40 @@ connect and stream from you? SettingsDialog - + Collection - + Advanced - + All - + + Some changed settings will not take effect until Tomahawk is restarted + + + + Services - + Install resolver from file - + Information - - - Changing this setting requires a restart of Tomahawk! - - SocialPlaylistWidget @@ -1428,6 +1423,46 @@ connect and stream from you? Time between scans, in seconds: + + + Advanced Settings + + + + + Remote Peer Connection Method + + + + + None (outgoing connections only) + + + + + Use UPnP to establish port forward (recommended) + + + + + Use static external IP address/host name and port + + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + + + + + SOCKS Proxy + + + + + Use SOCKS Proxy + + Internet Services @@ -1444,50 +1479,35 @@ connect and stream from you? - - Advanced Network Settings - - - - - If you're having difficulty connecting to peers, try setting this to your external IP address/host name and a port number (default 50210). Make sure to forward that port to this machine! - - - - + Static Host Name: - + Static Port: - - Always use static host name/port? (Overrides UPnP discovery/port forwarding) - - - - + Proxy Settings... - + + Other Settings + + + + Send reports after Tomahawk crashed - + Allow web browsers to interact with Tomahawk (recommended) - - - Use UPnP to establish port forward - - Tomahawk::Accounts::AccountDelegate @@ -2807,7 +2827,7 @@ enter the displayed PIN number here: - + Play @@ -2838,126 +2858,126 @@ enter the displayed PIN number here: - - - + + + Connect To Peer - + Enter peer address: - + Enter peer port: - + Enter peer key: - + XSPF Error - + This is not a valid XSPF playlist. - + Failed to save tracks - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Create New Station - + Name: - + New Station - + New Playlist - + Pause - + Go &offline - + Go &online - + Authentication Error - + %1 by %2 track, artist name - + %1 - %2 current track, some window title - + <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson - + About Tomahawk diff --git a/lang/tomahawk_zh_TW.ts b/lang/tomahawk_zh_TW.ts index 215c21670..df5fc4e93 100644 --- a/lang/tomahawk_zh_TW.ts +++ b/lang/tomahawk_zh_TW.ts @@ -793,58 +793,53 @@ connect and stream from you? 代理服務器設定 - + Hostname of proxy server 代理服務器的主機名稱 - + Host 主機 - + Port - + Proxy login Proxy 登錄 - + User 用戶 - + Password 密碼 - + Proxy password Proxy 密碼 - - Type - 類型 - - - + No Proxy Hosts: (Overrides system proxy) - + localhost *.example.com (space separated) - + Use proxy for DNS lookups? @@ -1004,40 +999,40 @@ connect and stream from you? SettingsDialog - + Collection 收藏 - + Advanced 進階 - + All 所有 - + + Some changed settings will not take effect until Tomahawk is restarted + + + + Services 服務 - + Install resolver from file 從檔案安裝解析器 - + Information 資訊 - - - Changing this setting requires a restart of Tomahawk! - 更改這個設定需要重新啟動 Tomahawk ! - SocialPlaylistWidget @@ -1428,6 +1423,46 @@ connect and stream from you? Time between scans, in seconds: + + + Advanced Settings + + + + + Remote Peer Connection Method + + + + + None (outgoing connections only) + + + + + Use UPnP to establish port forward (recommended) + + + + + Use static external IP address/host name and port + + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + + + + + SOCKS Proxy + + + + + Use SOCKS Proxy + + Internet Services @@ -1444,50 +1479,35 @@ connect and stream from you? 按能力篩選: - - Advanced Network Settings - 進階網路設定 - - - - If you're having difficulty connecting to peers, try setting this to your external IP address/host name and a port number (default 50210). Make sure to forward that port to this machine! - - - - + Static Host Name: 靜態主機名稱: - + Static Port: 靜態通訊埠: - - Always use static host name/port? (Overrides UPnP discovery/port forwarding) - - - - + Proxy Settings... 代理服務器設定... - + + Other Settings + + + + Send reports after Tomahawk crashed - + Allow web browsers to interact with Tomahawk (recommended) 允許 Web 瀏覽器與 Tomahawk 互動 (推薦) - - - Use UPnP to establish port forward - - Tomahawk::Accounts::AccountDelegate @@ -2807,7 +2827,7 @@ enter the displayed PIN number here: - + Play 播放 @@ -2838,126 +2858,126 @@ enter the displayed PIN number here: 檢查更新... - - - + + + Connect To Peer 連接點對點 - + Enter peer address: 輸入對等地址: - + Enter peer port: 輸入對等連接埠: - + Enter peer key: 輸入對等密鑰: - + XSPF Error XSPF 錯誤 - + This is not a valid XSPF playlist. - + Failed to save tracks 無法儲存曲目 - + Some tracks in the playlist do not contain an artist and a title. They will be ignored. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Create New Station - + Name: 名稱: - + New Station - + New Playlist 新增播放清單 - + Pause 暫停 - + Go &offline 離線 - + Go &online 上網 - + Authentication Error 驗證錯誤 - + %1 by %2 track, artist name - + %1 - %2 current track, some window title - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1</h2> <h2><b>Tomahawk %1</h2> - + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson - + About Tomahawk From 9326813f3f106938e49ae34bfc90c38f439c2ae4 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Fri, 4 May 2012 10:38:04 -0400 Subject: [PATCH 02/47] Synchronize liblastfm structure a bit, other than src/ --- thirdparty/liblastfm2/{README => README.md} | 26 +--- thirdparty/liblastfm2/admin/lastfm.h.rb | 5 - thirdparty/liblastfm2/admin/utils.rb | 34 ----- thirdparty/liblastfm2/configure | 46 ------- thirdparty/liblastfm2/lastfm.pro | 142 ++++++++++++++++++++ 5 files changed, 149 insertions(+), 104 deletions(-) rename thirdparty/liblastfm2/{README => README.md} (84%) delete mode 100755 thirdparty/liblastfm2/admin/lastfm.h.rb delete mode 100644 thirdparty/liblastfm2/admin/utils.rb delete mode 100755 thirdparty/liblastfm2/configure create mode 100644 thirdparty/liblastfm2/lastfm.pro diff --git a/thirdparty/liblastfm2/README b/thirdparty/liblastfm2/README.md similarity index 84% rename from thirdparty/liblastfm2/README rename to thirdparty/liblastfm2/README.md index d39417ecc..4132ce5ea 100644 --- a/thirdparty/liblastfm2/README +++ b/thirdparty/liblastfm2/README.md @@ -4,19 +4,17 @@ liblastfm is a collection of libraries to help you integrate Last.fm services into your rich desktop software. It is officially supported software developed by Last.fm staff. -Max Howell http://twitter.com/mxcl -Jono Cole http://twitter.com/jonocole -Doug Mansell http://twitter.com/dougma +Michael Coffey http://twitter.com/eartle -Fork it: http://github.com/mxcl/liblastfm +Fork it: http://github.com/eartle/liblastfm Dependencies ============ liblastfm dynamically links to: -* Qt 4.4 - http://www.qtsoftware.com +* Qt 4.8 + http://qt.nokia.com/ * FFTW 3.2 Compiled with single precision http://www.fftw.org @@ -31,14 +29,6 @@ Mac OS X sudo port upgrade installed sudo port install libsamplerate fftw-3 qt4-mac-devel -qt4-mac-devel will take a long time to build. So you may want to install the -Trolltech binary package instead. - -MacPorts carries liblastfm now, so you may have downloaded this package simply -to perform this next line: - - sudo port install liblastfm - Linux/*NIX ---------- Do something like this: @@ -49,11 +39,11 @@ Additionally on Linux the configure process requires lsb_release. This is usually already installed (correct me if I'm wrong). Please note, we have only tested on Linux, but we think it'll work on all -varieties of UNIX. If it doesn't, report the bug to mxcl on GitHub. +varieties of UNIX. If it doesn't, report the bug to eartle on GitHub. Windows ------- -Install Ruby. Install Visual Studio 2005 or higher. Install Qt. Install the +Install Ruby. Install Visual Studio 2008 or higher. Install Qt. Install the Windows Server 2003 Platform SDK r2: http://www.microsoft.com/Downloads/details.aspx?FamilyID=484269e2-3b89-47e3-8eb7-1f2be6d7123a @@ -69,12 +59,10 @@ see the next section. Installing liblastfm ==================== - ruby configure --release --prefix /usr/local && make && sudo make install + qmake && make && sudo make install Packaging liblastfm ------------------- -DESTDIR is supported. - liblastfm builds to two dynamic libraries (liblastfm.so and liblastfm_fingerprint.so). liblastfm.so links only to Qt, but the fingerprinting part has additional dependencies. So ideally, you would diff --git a/thirdparty/liblastfm2/admin/lastfm.h.rb b/thirdparty/liblastfm2/admin/lastfm.h.rb deleted file mode 100755 index 1582b7086..000000000 --- a/thirdparty/liblastfm2/admin/lastfm.h.rb +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/ruby -f = File.new(ARGV[0], "w") -Dir["_include/lastfm/*"].each do |h| - f.write %Q{#include "lastfm/#{File.basename h}"\n} -end \ No newline at end of file diff --git a/thirdparty/liblastfm2/admin/utils.rb b/thirdparty/liblastfm2/admin/utils.rb deleted file mode 100644 index 5a6772c4c..000000000 --- a/thirdparty/liblastfm2/admin/utils.rb +++ /dev/null @@ -1,34 +0,0 @@ -cwd = File.dirname( __FILE__ ) - -def h(s, n) - puts '==> '+s -end - -def h1 s - h(s, 34) -end - -def h2 s - h(s, 33) - yield -end - -def qmake_env(env, qenv) - env=Array.new(1,env) if env.instance_of? String - values=Array.new - env.each { |x| values << ENV[x] if ENV[x] } - if values.size > 0 - "#{qenv} = #{values.join(' ')}\n" - else - nil - end -end - -class PkgConfigNotFound < RuntimeError; end -class PkgNotFound < RuntimeError; end - -def pkgconfig pkg, prettyname - system "pkg-config --exists '#{pkg}'" - raise PkgConfigNotFound if $? == 127 - raise PkgNotFound.new(prettyname) if $? != 0 -end diff --git a/thirdparty/liblastfm2/configure b/thirdparty/liblastfm2/configure deleted file mode 100755 index f6c02fa88..000000000 --- a/thirdparty/liblastfm2/configure +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/ruby -cwd = File.dirname( __FILE__ ) -require "#{cwd}/admin/utils.rb" - - h2 'Determining installation prefix' do - if ARGV.include? '--prefix' - n=ARGV.index '--prefix' - ENV['LFM_PREFIX'] = ARGV[n+1] - end - ENV['LFM_PREFIX'] = '/usr/local' if ENV['LFM_PREFIX'].nil? - if File.exists? ENV['LFM_PREFIX'] and !File.directory? ENV['LFM_PREFIX'] - abort "Installation prefix exists but isn't a directory: "+ENV['LFM_PREFIX'] - end - puts "Will install to: "+ENV['LFM_PREFIX'] - end - - h2 "Configuring qmake..." do - args=Array.new - if ARGV.include? '--release' - args << '-config release' - else - args << '-config debug' - end - if ARGV.include? '--no-strip' - args << '"CONFIG += nostrip"' - end - ENV['LFM_QMAKE'] = "#{$qmake} #{args.join(' ')}" - end - - h2 "Generating Makefile..." do - hs = Array.new - hs << 'global.h' - hs << 'core/UrlBuilder.h' << 'core/XmlQuery.h' << 'core/misc.h' - hs << 'fingerprint/Fingerprint.h' << 'fingerprint/FingerprintableSource.h' - hs << 'radio/RadioStation.h' << 'radio/RadioTuner.h' - hs << 'scrobble/Audioscrobbler.h' << 'scrobble/ScrobblePoint.h' << 'scrobble/ScrobbleCache.h' - hs << 'types/Tasteometer.h' << 'types/AbstractType.h' << 'types/Track.h' << 'types/Mbid.h' << 'types/Artist.h' << 'types/Album.h' << 'types/FingerprintId.h' << 'types/Playlist.h' << 'types/Tag.h' << 'types/User.h' << 'types/Xspf.h' - hs << 'ws/ws.h' << 'ws/InternetConnectionMonitor.h' << 'ws/NetworkAccessManager.h' - uname = `uname` - ENV['LFM_VERSION']="0.4.0" - File.new("#{cwd}/Makefile", 'w').write `ruby admin/Makefile.rb #{hs.join(' ')}` - end - - puts - puts "Good, your configure is finished! Now type: make" - diff --git a/thirdparty/liblastfm2/lastfm.pro b/thirdparty/liblastfm2/lastfm.pro new file mode 100644 index 000000000..32839418e --- /dev/null +++ b/thirdparty/liblastfm2/lastfm.pro @@ -0,0 +1,142 @@ +TEMPLATE = lib +CONFIG += dll +QT = core network xml + +ROOT_DIR = . + +BUILD_DIR = _build +DESTDIR = $$ROOT_DIR/_bin + +OBJECTS_DIR = $$BUILD_DIR +MOC_DIR = $$BUILD_DIR +UI_DIR = $$BUILD_DIR +RCC_DIR = $$BUILD_DIR +INCLUDEPATH += $$ROOT_DIR/_include + +win32:DEFINES += _CRT_SECURE_NO_WARNINGS WIN32_LEAN_AND_MEAN + +mac { + QMAKE_PKGINFO_TYPEINFO = last + QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.4 +} + +*g++* { + # allow use of 'and', 'or', etc. as symbols + QMAKE_CXXFLAGS += -fno-operator-names + QMAKE_CXXFLAGS_RELEASE += -fvisibility-inlines-hidden -fvisibility=hidden +} + +# used to determine if we should statically link the fingerprint library +# used by lastfm-desktop and other projects +CONFIG -= app_bundle + +win32{ +INSTALLS = headers +headers.path = _include/lastfm +headers.files = src/*.h +} +else{ + isEmpty( PREFIX ) { + PREFIX=/usr/local + } +INSTALLS = target headers +target.path = $${PREFIX}/lib +headers.path = $${PREFIX}/include/lastfm +headers.files = src/*.h +} + +INCLUDEPATH += src + +win32{ + DEFINES += LASTFM_LIB _ATL_DLL + LIBS += winhttp.lib wbemuuid.lib # ws configuration +} +mac{ + LIBS += -framework SystemConfiguration # ws configuration + #TODO we should only use these with the carbon version of Qt! + LIBS += -framework CoreFoundation # various +} + +unix:!mac{ + QT += dbus +} + +SOURCES += \ + src/ws.cpp \ + src/NetworkConnectionMonitor.cpp \ + src/NetworkAccessManager.cpp \ + src/InternetConnectionMonitor.cpp \ + src/Xspf.cpp \ + src/User.cpp \ + src/Track.cpp \ + src/Tasteometer.cpp \ + src/Tag.cpp \ + src/Playlist.cpp \ + src/Mbid.cpp \ + src/FingerprintId.cpp \ + src/Artist.cpp \ + src/Album.cpp \ + src/ScrobbleCache.cpp \ + src/ScrobblePoint.cpp \ + src/Audioscrobbler.cpp \ + src/RadioTuner.cpp \ + src/RadioStation.cpp \ + src/XmlQuery.cpp \ + src/UrlBuilder.cpp \ + src/misc.cpp \ + src/Chart.cpp \ + src/Auth.cpp \ + src/Library.cpp + +HEADERS += \ + src/ws.h \ + src/NetworkConnectionMonitor.h \ + src/NetworkAccessManager.h \ + src/InternetConnectionMonitor.h \ + src/Xspf.h \ + src/User.h \ + src/Track.h \ + src/Tasteometer.h \ + src/Tag.h \ + src/Playlist.h \ + src/Mbid.h \ + src/FingerprintId.h \ + src/Artist.h \ + src/Album.h \ + src/AbstractType.h \ + src/ScrobblePoint.h \ + src/ScrobbleCache.h \ + src/Audioscrobbler.h \ + src/RadioTuner.h \ + src/RadioStation.h \ + src/global.h \ + src/XmlQuery.h \ + src/UrlBuilder.h \ + src/misc.h \ + src/Chart.h \ + src/Auth.h \ + src/Library.h + +win32:SOURCES += src/win/WNetworkConnectionMonitor_win.cpp \ + src/win/WmiSink.cpp \ + src/win/Pac.cpp \ + src/win/NdisEvents.cpp + +win32:HEADERS += src/win/WNetworkConnectionMonitor.h \ + src/win/WmiSink.h \ + src/win/Pac.h \ + src/win/NdisEvents.h \ + src/win/IeSettings.h \ + src/win/ComSetup.h + +mac:SOURCES += src/mac/MNetworkConnectionMonitor_mac.cpp + +mac:HEADERS += src/mac/ProxyDict.h \ + src/mac/MNetworkConnectionMonitor.h + +unix:!mac:SOURCES += src/linux/LNetworkConnectionMonitor_linux.cpp +unix:!mac:HEADERS += src/linux/LNetworkConnectionMonitor.h + +!win32:VERSION = 1.0.0 + + From a453934d08567dafb7a7e2761b1f7bca1cb1da1c Mon Sep 17 00:00:00 2001 From: Tomahawk CI Date: Fri, 4 May 2012 22:16:27 +0000 Subject: [PATCH 03/47] Automatic merge of Transifex translations --- lang/tomahawk_bg.ts | 50 +++++++++++++++++++------------------- lang/tomahawk_zh_CN.ts | 54 +++++++++++++++++++++--------------------- 2 files changed, 53 insertions(+), 51 deletions(-) diff --git a/lang/tomahawk_bg.ts b/lang/tomahawk_bg.ts index 09908d3e8..e947a99ac 100644 --- a/lang/tomahawk_bg.ts +++ b/lang/tomahawk_bg.ts @@ -4,12 +4,12 @@ Dialog - Диалогов + Description goes here - Описанието идва тук + @@ -125,7 +125,7 @@ connect and stream from you? Form - Форма + @@ -198,7 +198,7 @@ connect and stream from you? Form - Форма + @@ -219,12 +219,14 @@ connect and stream from you? Click to show SuperCollection Albums - Покажи албумите от супер колекцията + Покажи албумите от супер колекцията +/Сборен излед от локалните и наличните в колекциите на приятелите ти/ Click to show Official Albums - Покажи само официалните албуми + Покажи само официалните албуми +/Албумите означени като "Официални" в БД на Misicbrainz, Rovi, и др.п./ @@ -445,7 +447,7 @@ connect and stream from you? Sent! <b>Many thanks</b>. - Изпращането приключи. <b>Благодарим ви за отзивчивостта!</b> :-). + Изпращането приключи. <b>Благодарим ви за отзивчивостта!</b>. @@ -510,7 +512,7 @@ connect and stream from you? Form - Форма + @@ -557,7 +559,7 @@ connect and stream from you? Form - Форма + @@ -1017,7 +1019,7 @@ connect and stream from you? Some changed settings will not take effect until Tomahawk is restarted - + Някои промени няма да имат ефект, докато програмата не бъде рестартирана. @@ -1323,7 +1325,7 @@ connect and stream from you? Form - Форма + @@ -1430,42 +1432,42 @@ connect and stream from you? Advanced Settings - + Разширени настройки Remote Peer Connection Method - + Начин за свързване None (outgoing connections only) - + Без. (само изходящи връзки) Use UPnP to establish port forward (recommended) - + Ползвай UPnP (препоръчително) Use static external IP address/host name and port - + Ползвай статичен IP адрес/име и порт Set this to your external IP address or host name. Make sure to forward the port to this host! - + Настрой тук, своят външен IP адрес или име. Моля увери се, че си настроил прехвърляне на избраният порт, към адресът ти от локалната мрежа. SOCKS Proxy - + SOCKS Proxy Use SOCKS Proxy - + Ползвай SOCKS Proxy @@ -1500,7 +1502,7 @@ connect and stream from you? Other Settings - + Други настройки @@ -1614,7 +1616,7 @@ connect and stream from you? Success - Успешно! + Ура! @@ -1681,7 +1683,7 @@ connect and stream from you? Tweet! - Tweet! + Чурулик! @@ -3003,7 +3005,7 @@ enter the displayed PIN number here: Form - Форма + @@ -3687,7 +3689,7 @@ Lyrics for "%1" by %2: Form - Форма + diff --git a/lang/tomahawk_zh_CN.ts b/lang/tomahawk_zh_CN.ts index e56f1bdb8..1f84c09ef 100644 --- a/lang/tomahawk_zh_CN.ts +++ b/lang/tomahawk_zh_CN.ts @@ -9,7 +9,7 @@ Description goes here - + 注释于此处 @@ -71,13 +71,13 @@ connect and stream from you? &Listen Privately - + 私下收听 &Listen Publicly - + 公开收听 @@ -142,13 +142,13 @@ connect and stream from you? Click to show SuperCollection Tracks - + 点击显示超级收藏中的曲目 Click to show SuperCollection Albums - + 点击显示超级收藏中的专辑 @@ -219,12 +219,12 @@ connect and stream from you? Click to show SuperCollection Albums - + 点击显示超级收藏中的专辑 Click to show Official Albums - + 点击显示官方发行专辑 @@ -237,12 +237,12 @@ connect and stream from you? This collection is currently empty. - + 此收藏目前为空 Sorry, your filter '%1' did not match any results. - + 抱歉,你的过滤条件 '%1' 未匹配任何结果 @@ -405,7 +405,7 @@ connect and stream from you? Hide Footnotes - + 隐藏脚注 @@ -413,43 +413,43 @@ connect and stream from you? Tomahawk Crash Reporter - + Tomahawk 崩溃报告 <p><b>Sorry!</b>&nbsp;Tomahawk crashed. Information about the crash is now being sent to Tomahawk HQ so that we can fix the bug.</p> - + <p><b>抱歉!</b>&nbsp;Tomahawk 出错了。相关信息正被上传到 Tomahawk HQ 以便我们修复此错误。</p> Abort - + 中止 You can disable sending crash reports in the configuration dialog. - + 你可以在设置中禁用发送崩溃报告 Uploaded %L1 of %L2 KB. - + 已发送 %L2 KB 中的 %L1 Close - + 关闭 Sent! <b>Many thanks</b>. - + 已发送!<b>非常感谢</b>。 Failed to send crash info. - + 发送崩溃信息失败。 @@ -457,7 +457,7 @@ connect and stream from you? Unknown - + 未知 @@ -470,7 +470,7 @@ connect and stream from you? Delete Account - + 删除账户 @@ -483,17 +483,17 @@ connect and stream from you? Tomahawk Diagnostics - + Tomahawk 诊断信息 Update - + 更新 Copy to Clipboard - + 复制到剪贴板 @@ -517,7 +517,7 @@ connect and stream from you? Indexing database - + 正在索引数据库 @@ -566,17 +566,17 @@ connect and stream from you? Username: - + 用户名 Password: - + 密码 Test Login - + 测试登录 From 07ba8d307ca0123d00f972c17dedcd88110b8f69 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Sat, 5 May 2012 10:03:15 -0400 Subject: [PATCH 04/47] Rename LastFmPlugin to LastFmInfoPlugin for clarity --- src/CMakeLists.txt | 2 +- src/accounts/lastfm/LastFmAccount.cpp | 4 +- src/accounts/lastfm/LastFmAccount.h | 4 +- ...{LastFmPlugin.cpp => LastFmInfoPlugin.cpp} | 60 +++++++++---------- .../{LastFmPlugin.h => LastFmInfoPlugin.h} | 6 +- 5 files changed, 38 insertions(+), 38 deletions(-) rename src/accounts/lastfm/{LastFmPlugin.cpp => LastFmInfoPlugin.cpp} (93%) rename src/accounts/lastfm/{LastFmPlugin.h => LastFmInfoPlugin.h} (95%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1f3990aee..6349911ad 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -72,7 +72,7 @@ SET( tomahawkSourcesGui ${tomahawkSourcesGui} accounts/lastfm/LastFmAccount.cpp accounts/lastfm/LastFmConfig.cpp - accounts/lastfm/LastFmPlugin.cpp + accounts/lastfm/LastFmInfoPlugin.cpp accounts/spotify/SpotifyAccount.cpp accounts/spotify/SpotifyAccountConfig.cpp diff --git a/src/accounts/lastfm/LastFmAccount.cpp b/src/accounts/lastfm/LastFmAccount.cpp index c781cd45c..938f66503 100644 --- a/src/accounts/lastfm/LastFmAccount.cpp +++ b/src/accounts/lastfm/LastFmAccount.cpp @@ -20,7 +20,7 @@ #include "LastFmConfig.h" #include "infosystem/InfoSystem.h" -#include "LastFmPlugin.h" +#include "LastFmInfoPlugin.h" #include "utils/TomahawkUtils.h" #include "resolvers/QtScriptResolver.h" #include "AtticaManager.h" @@ -167,7 +167,7 @@ InfoPluginPtr LastFmAccount::infoPlugin() { if ( m_infoPlugin.isNull() ) - m_infoPlugin = QWeakPointer< LastFmPlugin >( new LastFmPlugin( this ) ); + m_infoPlugin = QWeakPointer< LastFmInfoPlugin >( new LastFmInfoPlugin( this ) ); return InfoPluginPtr( m_infoPlugin.data() ); } diff --git a/src/accounts/lastfm/LastFmAccount.h b/src/accounts/lastfm/LastFmAccount.h index e7fc5adf6..90ca37737 100644 --- a/src/accounts/lastfm/LastFmAccount.h +++ b/src/accounts/lastfm/LastFmAccount.h @@ -30,7 +30,7 @@ namespace Tomahawk { class ExternalResolverGui; namespace InfoSystem { - class LastFmPlugin; + class LastFmInfoPlugin; } namespace Accounts { @@ -103,7 +103,7 @@ private: void hookupResolver(); QWeakPointer m_resolver; - QWeakPointer m_infoPlugin; + QWeakPointer m_infoPlugin; QWeakPointer m_configWidget; QPixmap m_icon; }; diff --git a/src/accounts/lastfm/LastFmPlugin.cpp b/src/accounts/lastfm/LastFmInfoPlugin.cpp similarity index 93% rename from src/accounts/lastfm/LastFmPlugin.cpp rename to src/accounts/lastfm/LastFmInfoPlugin.cpp index 67d909ae3..5803ba6ee 100644 --- a/src/accounts/lastfm/LastFmPlugin.cpp +++ b/src/accounts/lastfm/LastFmInfoPlugin.cpp @@ -17,7 +17,7 @@ * along with Tomahawk. If not, see . */ -#include "LastFmPlugin.h" +#include "LastFmInfoPlugin.h" #include #include @@ -40,7 +40,7 @@ using namespace Tomahawk::Accounts; using namespace Tomahawk::InfoSystem; -LastFmPlugin::LastFmPlugin( LastFmAccount* account ) +LastFmInfoPlugin::LastFmInfoPlugin( LastFmAccount* account ) : InfoPlugin() , m_account( account ) , m_scrobbler( 0 ) @@ -51,7 +51,7 @@ LastFmPlugin::LastFmPlugin( LastFmAccount* account ) void -LastFmPlugin::init() +LastFmInfoPlugin::init() { if ( Tomahawk::InfoSystem::InfoSystem::instance()->workerThread() && thread() != Tomahawk::InfoSystem::InfoSystem::instance()->workerThread().data() ) { @@ -84,7 +84,7 @@ LastFmPlugin::init() } -LastFmPlugin::~LastFmPlugin() +LastFmInfoPlugin::~LastFmInfoPlugin() { qDebug() << Q_FUNC_INFO; delete m_scrobbler; @@ -93,7 +93,7 @@ LastFmPlugin::~LastFmPlugin() void -LastFmPlugin::dataError( Tomahawk::InfoSystem::InfoRequestData requestData ) +LastFmInfoPlugin::dataError( Tomahawk::InfoSystem::InfoRequestData requestData ) { emit info( requestData, QVariant() ); return; @@ -101,7 +101,7 @@ LastFmPlugin::dataError( Tomahawk::InfoSystem::InfoRequestData requestData ) void -LastFmPlugin::getInfo( Tomahawk::InfoSystem::InfoRequestData requestData ) +LastFmInfoPlugin::getInfo( Tomahawk::InfoSystem::InfoRequestData requestData ) { switch ( requestData.type ) { @@ -135,7 +135,7 @@ LastFmPlugin::getInfo( Tomahawk::InfoSystem::InfoRequestData requestData ) void -LastFmPlugin::pushInfo( Tomahawk::InfoSystem::InfoPushData pushData ) +LastFmInfoPlugin::pushInfo( Tomahawk::InfoSystem::InfoPushData pushData ) { switch ( pushData.type ) { @@ -159,11 +159,11 @@ LastFmPlugin::pushInfo( Tomahawk::InfoSystem::InfoPushData pushData ) void -LastFmPlugin::nowPlaying( const QVariant &input ) +LastFmInfoPlugin::nowPlaying( const QVariant &input ) { if ( !input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() || !m_scrobbler ) { - tLog() << "LastFmPlugin::nowPlaying no m_scrobbler, or cannot convert input!"; + tLog() << "LastFmInfoPlugin::nowPlaying no m_scrobbler, or cannot convert input!"; if ( !m_scrobbler ) tLog() << "No scrobbler!"; return; @@ -188,7 +188,7 @@ LastFmPlugin::nowPlaying( const QVariant &input ) void -LastFmPlugin::scrobble() +LastFmInfoPlugin::scrobble() { if ( !m_scrobbler || m_track.isNull() ) return; @@ -200,13 +200,13 @@ LastFmPlugin::scrobble() void -LastFmPlugin::sendLoveSong( const InfoType type, QVariant input ) +LastFmInfoPlugin::sendLoveSong( const InfoType type, QVariant input ) { qDebug() << Q_FUNC_INFO; if ( !input.toMap().contains( "trackinfo" ) || !input.toMap()[ "trackinfo" ].canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) { - tLog() << "LastFmPlugin::nowPlaying cannot convert input!"; + tLog() << "LastFmInfoPlugin::nowPlaying cannot convert input!"; return; } @@ -236,7 +236,7 @@ LastFmPlugin::sendLoveSong( const InfoType type, QVariant input ) void -LastFmPlugin::fetchSimilarArtists( Tomahawk::InfoSystem::InfoRequestData requestData ) +LastFmInfoPlugin::fetchSimilarArtists( Tomahawk::InfoSystem::InfoRequestData requestData ) { if ( !requestData.input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) { @@ -258,7 +258,7 @@ LastFmPlugin::fetchSimilarArtists( Tomahawk::InfoSystem::InfoRequestData request void -LastFmPlugin::fetchTopTracks( Tomahawk::InfoSystem::InfoRequestData requestData ) +LastFmInfoPlugin::fetchTopTracks( Tomahawk::InfoSystem::InfoRequestData requestData ) { if ( !requestData.input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) { @@ -279,7 +279,7 @@ LastFmPlugin::fetchTopTracks( Tomahawk::InfoSystem::InfoRequestData requestData } void -LastFmPlugin::fetchChart( Tomahawk::InfoSystem::InfoRequestData requestData ) +LastFmInfoPlugin::fetchChart( Tomahawk::InfoSystem::InfoRequestData requestData ) { if ( !requestData.input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) { @@ -300,7 +300,7 @@ LastFmPlugin::fetchChart( Tomahawk::InfoSystem::InfoRequestData requestData ) } void -LastFmPlugin::fetchChartCapabilities( Tomahawk::InfoSystem::InfoRequestData requestData ) +LastFmInfoPlugin::fetchChartCapabilities( Tomahawk::InfoSystem::InfoRequestData requestData ) { if ( !requestData.input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) { @@ -314,7 +314,7 @@ LastFmPlugin::fetchChartCapabilities( Tomahawk::InfoSystem::InfoRequestData requ } void -LastFmPlugin::fetchCoverArt( Tomahawk::InfoSystem::InfoRequestData requestData ) +LastFmInfoPlugin::fetchCoverArt( Tomahawk::InfoSystem::InfoRequestData requestData ) { if ( !requestData.input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) { @@ -337,7 +337,7 @@ LastFmPlugin::fetchCoverArt( Tomahawk::InfoSystem::InfoRequestData requestData ) void -LastFmPlugin::fetchArtistImages( Tomahawk::InfoSystem::InfoRequestData requestData ) +LastFmInfoPlugin::fetchArtistImages( Tomahawk::InfoSystem::InfoRequestData requestData ) { if ( !requestData.input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) { @@ -359,7 +359,7 @@ LastFmPlugin::fetchArtistImages( Tomahawk::InfoSystem::InfoRequestData requestDa void -LastFmPlugin::notInCacheSlot( QHash criteria, Tomahawk::InfoSystem::InfoRequestData requestData ) +LastFmInfoPlugin::notInCacheSlot( QHash criteria, Tomahawk::InfoSystem::InfoRequestData requestData ) { if ( !TomahawkUtils::nam() ) { @@ -504,7 +504,7 @@ LastFmPlugin::notInCacheSlot( QHash criteria, Tomahawk::InfoSy void -LastFmPlugin::similarArtistsReturned() +LastFmInfoPlugin::similarArtistsReturned() { QNetworkReply* reply = qobject_cast( sender() ); @@ -542,7 +542,7 @@ LastFmPlugin::similarArtistsReturned() void -LastFmPlugin::chartReturned() +LastFmInfoPlugin::chartReturned() { QNetworkReply* reply = qobject_cast( sender() ); @@ -587,7 +587,7 @@ LastFmPlugin::chartReturned() void -LastFmPlugin::topTracksReturned() +LastFmInfoPlugin::topTracksReturned() { QNetworkReply* reply = qobject_cast( sender() ); @@ -609,7 +609,7 @@ LastFmPlugin::topTracksReturned() void -LastFmPlugin::coverArtReturned() +LastFmInfoPlugin::coverArtReturned() { QNetworkReply* reply = qobject_cast( sender() ); QUrl redir = reply->attribute( QNetworkRequest::RedirectionTargetAttribute ).toUrl(); @@ -662,7 +662,7 @@ LastFmPlugin::coverArtReturned() void -LastFmPlugin::artistImagesReturned() +LastFmInfoPlugin::artistImagesReturned() { QNetworkReply* reply = qobject_cast( sender() ); QUrl redir = reply->attribute( QNetworkRequest::RedirectionTargetAttribute ).toUrl(); @@ -713,7 +713,7 @@ LastFmPlugin::artistImagesReturned() void -LastFmPlugin::settingsChanged() +LastFmInfoPlugin::settingsChanged() { if ( m_account.isNull() ) return; @@ -750,7 +750,7 @@ LastFmPlugin::settingsChanged() void -LastFmPlugin::onAuthenticated() +LastFmInfoPlugin::onAuthenticated() { QNetworkReply* authJob = dynamic_cast( sender() ); if ( !authJob || m_account.isNull() ) @@ -789,14 +789,14 @@ LastFmPlugin::onAuthenticated() void -LastFmPlugin::createScrobbler() +LastFmInfoPlugin::createScrobbler() { if ( m_account.isNull() || lastfm::ws::Username.isEmpty() ) return; if ( m_account.data()->sessionKey().isEmpty() ) // no session key, so get one { - qDebug() << "LastFmPlugin::createScrobbler Session key is empty"; + qDebug() << "LastFmInfoPlugin::createScrobbler Session key is empty"; QString authToken = TomahawkUtils::md5( ( lastfm::ws::Username.toLower() + TomahawkUtils::md5( m_pw.toUtf8() ) ).toUtf8() ); QMap query; @@ -809,7 +809,7 @@ LastFmPlugin::createScrobbler() } else { - qDebug() << "LastFmPlugin::createScrobbler Already have session key"; + qDebug() << "LastFmInfoPlugin::createScrobbler Already have session key"; lastfm::ws::SessionKey = m_account.data()->sessionKey(); m_scrobbler = new lastfm::Audioscrobbler( "thk" ); @@ -818,7 +818,7 @@ LastFmPlugin::createScrobbler() QList -LastFmPlugin::parseTrackList( QNetworkReply* reply ) +LastFmInfoPlugin::parseTrackList( QNetworkReply* reply ) { QList tracks; try diff --git a/src/accounts/lastfm/LastFmPlugin.h b/src/accounts/lastfm/LastFmInfoPlugin.h similarity index 95% rename from src/accounts/lastfm/LastFmPlugin.h rename to src/accounts/lastfm/LastFmInfoPlugin.h index 3f1a22fb1..6f3d219c7 100644 --- a/src/accounts/lastfm/LastFmPlugin.h +++ b/src/accounts/lastfm/LastFmInfoPlugin.h @@ -42,13 +42,13 @@ namespace Accounts namespace InfoSystem { -class LastFmPlugin : public InfoPlugin +class LastFmInfoPlugin : public InfoPlugin { Q_OBJECT public: - LastFmPlugin( Accounts::LastFmAccount* account ); - virtual ~LastFmPlugin(); + LastFmInfoPlugin( Accounts::LastFmAccount* account ); + virtual ~LastFmInfoPlugin(); public slots: void init(); From 7b89460aa1f9c9c5805f277502fc0870b36f4ca5 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Sat, 5 May 2012 10:10:25 -0400 Subject: [PATCH 05/47] Do not scrobble or show current track on Last.fm when listening privately --- src/Scrobbler.cpp | 9 +++++++-- src/accounts/lastfm/LastFmInfoPlugin.cpp | 23 +++++++++++++++++------ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/Scrobbler.cpp b/src/Scrobbler.cpp index 5c2041565..dd2f41942 100644 --- a/src/Scrobbler.cpp +++ b/src/Scrobbler.cpp @@ -79,16 +79,21 @@ Scrobbler::trackStarted( const Tomahawk::result_ptr& track ) scrobble(); } + QVariantMap playInfo; + Tomahawk::InfoSystem::InfoStringHash trackInfo; - trackInfo["title"] = track->track(); trackInfo["artist"] = track->artist()->name(); trackInfo["album"] = track->album()->name(); trackInfo["duration"] = QString::number( track->duration() ); + trackInfo["albumpos"] = QString::number( track->albumpos() ); + + playInfo["trackinfo"] = QVariant::fromValue< Tomahawk::InfoSystem::InfoStringHash >( trackInfo ); + playInfo["private"] = TomahawkSettings::instance()->privateListeningMode(); Tomahawk::InfoSystem::InfoPushData pushData ( s_scInfoIdentifier, Tomahawk::InfoSystem::InfoSubmitNowPlaying, - QVariant::fromValue< Tomahawk::InfoSystem::InfoStringHash >( trackInfo ), + playInfo, Tomahawk::InfoSystem::PushNoFlag ); Tomahawk::InfoSystem::InfoSystem::instance()->pushInfo( pushData ); diff --git a/src/accounts/lastfm/LastFmInfoPlugin.cpp b/src/accounts/lastfm/LastFmInfoPlugin.cpp index 5803ba6ee..7d3bcf79a 100644 --- a/src/accounts/lastfm/LastFmInfoPlugin.cpp +++ b/src/accounts/lastfm/LastFmInfoPlugin.cpp @@ -161,19 +161,30 @@ LastFmInfoPlugin::pushInfo( Tomahawk::InfoSystem::InfoPushData pushData ) void LastFmInfoPlugin::nowPlaying( const QVariant &input ) { - if ( !input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() || !m_scrobbler ) + m_track = lastfm::MutableTrack(); + if ( !input.canConvert< QVariantMap >() ) { - tLog() << "LastFmInfoPlugin::nowPlaying no m_scrobbler, or cannot convert input!"; - if ( !m_scrobbler ) - tLog() << "No scrobbler!"; + tDebug() << Q_FUNC_INFO << "Failed to convert data to a QVariantMap"; return; } - InfoStringHash hash = input.value< Tomahawk::InfoSystem::InfoStringHash >(); + QVariantMap map = input.toMap(); + if ( map.contains( "private" ) && map[ "private" ] == TomahawkSettings::FullyPrivate ) + return; + + if ( !map.contains( "trackinfo" ) || !map[ "trackinfo" ].canConvert< Tomahawk::InfoSystem::InfoStringHash >() || !m_scrobbler ) + { + tLog() << Q_FUNC_INFO << "LastFmInfoPlugin::nowPlaying no m_scrobbler, or cannot convert input!"; + if ( !m_scrobbler ) + tLog() << Q_FUNC_INFO << "No scrobbler!"; + return; + } + + Tomahawk::InfoSystem::InfoStringHash hash = map[ "trackinfo" ].value< Tomahawk::InfoSystem::InfoStringHash >(); + if ( !hash.contains( "title" ) || !hash.contains( "artist" ) || !hash.contains( "album" ) || !hash.contains( "duration" ) ) return; - m_track = lastfm::MutableTrack(); m_track.stamp(); m_track.setTitle( hash["title"] ); From fc9a36e28eeddd374470878d61e5a7ff6c351574 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 16:38:19 +0200 Subject: [PATCH 06/47] * Don't assume the current track of a remote source is always resolveable. --- src/libtomahawk/SourcePlaylistInterface.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/libtomahawk/SourcePlaylistInterface.cpp b/src/libtomahawk/SourcePlaylistInterface.cpp index 40bd9bc20..c2d818bcc 100644 --- a/src/libtomahawk/SourcePlaylistInterface.cpp +++ b/src/libtomahawk/SourcePlaylistInterface.cpp @@ -75,7 +75,12 @@ SourcePlaylistInterface::nextItem() } m_gotNextItem = false; - m_currentItem = m_source.data()->currentTrack()->results().first(); + + if ( m_source.data()->currentTrack()->numResults() ) + m_currentItem = m_source.data()->currentTrack()->results().first(); + else + m_currentItem = result_ptr(); + return m_currentItem; } From f59bbc111f0766e0c3ca3cb4c74959906d4e75f4 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 16:39:32 +0200 Subject: [PATCH 07/47] * Also update cover when the updated() signal is emitted. This happens when we couldn't retrieve any cover. --- src/libtomahawk/utils/PixmapDelegateFader.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/libtomahawk/utils/PixmapDelegateFader.cpp b/src/libtomahawk/utils/PixmapDelegateFader.cpp index c0a72fd63..9148150b1 100644 --- a/src/libtomahawk/utils/PixmapDelegateFader.cpp +++ b/src/libtomahawk/utils/PixmapDelegateFader.cpp @@ -51,7 +51,8 @@ PixmapDelegateFader::PixmapDelegateFader( const artist_ptr& artist, const QSize& { if ( !m_artist.isNull() ) { - connect( m_artist.data(), SIGNAL( coverChanged() ), this, SLOT( artistChanged() ) ); + connect( m_artist.data(), SIGNAL( updated() ), SLOT( trackChanged() ) ); + connect( m_artist.data(), SIGNAL( coverChanged() ), SLOT( artistChanged() ) ); m_currentReference = m_artist->cover( size, forceLoad ); } @@ -68,7 +69,8 @@ PixmapDelegateFader::PixmapDelegateFader( const album_ptr& album, const QSize& s { if ( !m_album.isNull() ) { - connect( m_album.data(), SIGNAL( coverChanged() ), this, SLOT( albumChanged() ) ); + connect( m_album.data(), SIGNAL( updated() ), SLOT( trackChanged() ) ); + connect( m_album.data(), SIGNAL( coverChanged() ), SLOT( albumChanged() ) ); m_currentReference = m_album->cover( size, forceLoad ); } @@ -86,7 +88,8 @@ PixmapDelegateFader::PixmapDelegateFader( const query_ptr& track, const QSize& s { if ( !m_track.isNull() ) { - connect( m_track.data(), SIGNAL( coverChanged() ), this, SLOT( trackChanged() ) ); + connect( m_track.data(), SIGNAL( updated() ), SLOT( trackChanged() ) ); + connect( m_track.data(), SIGNAL( coverChanged() ), SLOT( trackChanged() ) ); m_currentReference = m_track->cover( size, forceLoad ); } From 913663eef098950ade976cc108f47599199acf52 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 16:40:09 +0200 Subject: [PATCH 08/47] * Added similar tracks method to liblastfm. --- thirdparty/liblastfm2/src/types/Track.cpp | 40 +++++++++++++++++++++++ thirdparty/liblastfm2/src/types/Track.h | 8 +++++ 2 files changed, 48 insertions(+) diff --git a/thirdparty/liblastfm2/src/types/Track.cpp b/thirdparty/liblastfm2/src/types/Track.cpp index 0111b8a9d..e8cfc9fa3 100644 --- a/thirdparty/liblastfm2/src/types/Track.cpp +++ b/thirdparty/liblastfm2/src/types/Track.cpp @@ -454,6 +454,46 @@ lastfm::Track::params( const QString& method, bool use_mbid ) const } +QNetworkReply* +lastfm::Track::getSimilar( int limit ) const +{ + QMap map = params("getSimilar"); + if ( limit != -1 ) map["limit"] = QString::number( limit ); + map["autocorrect"] = "1"; + return ws::get( map ); +} + + +QMap > /* static */ +lastfm::Track::getSimilar( QNetworkReply* r ) +{ + QMap > tracks; + try + { + QByteArray b = r->readAll(); + XmlQuery lfm = b; + foreach (XmlQuery e, lfm.children( "track" )) + { + QPair< QString, QString > track; + track.first = e["name"].text(); + + XmlQuery artist = e.children( "artist" ).first(); + track.second = artist["name"].text(); + + // convert floating percentage to int in range 0 to 10,000 + int const match = e["match"].text().toFloat() * 100; + tracks.insertMulti( match, track ); + } + } + catch (ws::ParseError& e) + { + qWarning() << e.what(); + } + + return tracks; +} + + QNetworkReply* lastfm::Track::getTopTags() const { diff --git a/thirdparty/liblastfm2/src/types/Track.h b/thirdparty/liblastfm2/src/types/Track.h index 56e97b272..4fa0c7043 100644 --- a/thirdparty/liblastfm2/src/types/Track.h +++ b/thirdparty/liblastfm2/src/types/Track.h @@ -244,6 +244,14 @@ public: /** See last.fm/api Track section */ QNetworkReply* share( const QStringList& recipients, const QString& message = "", bool isPublic = true ) const; + QNetworkReply* getSimilar( int limit = -1 ) const; + /** The match percentage is returned from last.fm as a 4 significant + * figure floating point value. So we multply it by 100 to make an + * integer in the range of 0 to 10,000. This is possible confusing + * for you, but I felt it best not to lose any precision, and floats + * aren't much fun. */ + static QMap > getSimilar( QNetworkReply* ); + /** you can get any QNetworkReply TagList using Tag::list( QNetworkReply* ) */ QNetworkReply* getTags() const; // for the logged in user QNetworkReply* getTopTags() const; From e95efe6f767683cd9aefb133dd57ac0ff5a4f8e5 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 16:41:01 +0200 Subject: [PATCH 09/47] * Added similar tracks infosystem call. --- src/accounts/lastfm/LastFmInfoPlugin.cpp | 101 ++++++++++++++++++++++- src/accounts/lastfm/LastFmInfoPlugin.h | 2 + src/libtomahawk/infosystem/InfoSystem.h | 1 + 3 files changed, 101 insertions(+), 3 deletions(-) diff --git a/src/accounts/lastfm/LastFmInfoPlugin.cpp b/src/accounts/lastfm/LastFmInfoPlugin.cpp index 7d3bcf79a..d7fe53fc0 100644 --- a/src/accounts/lastfm/LastFmInfoPlugin.cpp +++ b/src/accounts/lastfm/LastFmInfoPlugin.cpp @@ -45,7 +45,7 @@ LastFmInfoPlugin::LastFmInfoPlugin( LastFmAccount* account ) , m_account( account ) , m_scrobbler( 0 ) { - m_supportedGetTypes << InfoAlbumCoverArt << InfoArtistImages << InfoArtistSimilars << InfoArtistSongs << InfoChart << InfoChartCapabilities; + m_supportedGetTypes << InfoAlbumCoverArt << InfoArtistImages << InfoArtistSimilars << InfoArtistSongs << InfoChart << InfoChartCapabilities << InfoTrackSimilars; m_supportedPushTypes << InfoSubmitScrobble << InfoSubmitNowPlaying << InfoLove << InfoUnLove; } @@ -128,6 +128,11 @@ LastFmInfoPlugin::getInfo( Tomahawk::InfoSystem::InfoRequestData requestData ) case InfoChartCapabilities: fetchChartCapabilities( requestData ); break; + + case InfoTrackSimilars: + fetchSimilarTracks( requestData ); + break; + default: dataError( requestData ); } @@ -269,7 +274,30 @@ LastFmInfoPlugin::fetchSimilarArtists( Tomahawk::InfoSystem::InfoRequestData req void -LastFmInfoPlugin::fetchTopTracks( Tomahawk::InfoSystem::InfoRequestData requestData ) +LastFmPlugin::fetchSimilarTracks( Tomahawk::InfoSystem::InfoRequestData requestData ) +{ + if ( !requestData.input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) + { + dataError( requestData ); + return; + } + InfoStringHash hash = requestData.input.value< Tomahawk::InfoSystem::InfoStringHash >(); + if ( !hash.contains( "artist" ) || !hash.contains( "track" ) ) + { + dataError( requestData ); + return; + } + + Tomahawk::InfoSystem::InfoStringHash criteria; + criteria["artist"] = hash["artist"]; + criteria["track"] = hash["track"]; + + emit getCachedInfo( criteria, 2419200000, requestData ); +} + + +void +LastFmPlugin::fetchTopTracks( Tomahawk::InfoSystem::InfoRequestData requestData ) { if ( !requestData.input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) { @@ -310,6 +338,7 @@ LastFmInfoPlugin::fetchChart( Tomahawk::InfoSystem::InfoRequestData requestData emit getCachedInfo( criteria, 0, requestData ); } + void LastFmInfoPlugin::fetchChartCapabilities( Tomahawk::InfoSystem::InfoRequestData requestData ) { @@ -324,6 +353,7 @@ LastFmInfoPlugin::fetchChartCapabilities( Tomahawk::InfoSystem::InfoRequestData emit getCachedInfo( criteria, 0, requestData ); } + void LastFmInfoPlugin::fetchCoverArt( Tomahawk::InfoSystem::InfoRequestData requestData ) { @@ -454,6 +484,19 @@ LastFmInfoPlugin::notInCacheSlot( QHash criteria, Tomahawk::In return; } + case InfoTrackSimilars: + { + lastfm::MutableTrack t; + t.setArtist( criteria["artist"] ); + t.setTitle( criteria["track"] ); + + QNetworkReply* reply = t.getSimilar(); + reply->setProperty( "requestData", QVariant::fromValue< Tomahawk::InfoSystem::InfoRequestData >( requestData ) ); + + connect( reply, SIGNAL( finished() ), SLOT( similarTracksReturned() ) ); + return; + } + case InfoArtistSongs: { lastfm::Artist a( criteria["artist"] ); @@ -553,7 +596,58 @@ LastFmInfoPlugin::similarArtistsReturned() void +<<<<<<< HEAD:src/accounts/lastfm/LastFmInfoPlugin.cpp LastFmInfoPlugin::chartReturned() +======= +LastFmPlugin::similarTracksReturned() +{ + QNetworkReply* reply = qobject_cast( sender() ); + + QMap< int, QPair< QString, QString > > similarTracks = lastfm::Track::getSimilar( reply ); + + QStringList sortedArtists; + QStringList sortedTracks; + QStringList sortedScores; + QStringList al; + QStringList tl; + QStringList sl; + + QPair< QString, QString > track; + foreach ( track, similarTracks.values() ) + { + tl << track.first; + al << track.second; + } + foreach ( int score, similarTracks.keys() ) + sl << QString::number( score ); + + for ( int i = tl.count() - 1; i >= 0; i-- ) + { + sortedTracks << tl.at( i ); + sortedArtists << al.at( i ); + sortedScores << sl.at( i ); + } + + QVariantMap returnedData; + returnedData["tracks"] = sortedTracks; + returnedData["artists"] = sortedArtists; + returnedData["score"] = sortedScores; + + Tomahawk::InfoSystem::InfoRequestData requestData = reply->property( "requestData" ).value< Tomahawk::InfoSystem::InfoRequestData >(); + + emit info( requestData, returnedData ); + + Tomahawk::InfoSystem::InfoStringHash origData = requestData.input.value< Tomahawk::InfoSystem::InfoStringHash>(); + Tomahawk::InfoSystem::InfoStringHash criteria; + criteria["artist"] = origData["artist"]; + criteria["track"] = origData["track"]; + emit updateCache( criteria, 2419200000, requestData.type, returnedData ); +} + + +void +LastFmPlugin::chartReturned() +>>>>>>> * Added similar tracks infosystem call.:src/accounts/lastfm/LastFmPlugin.cpp { QNetworkReply* reply = qobject_cast( sender() ); @@ -566,7 +660,8 @@ LastFmInfoPlugin::chartReturned() { QList tracks = parseTrackList( reply ); QList top_tracks; - foreach( const lastfm::Track &t, tracks ) { + foreach( const lastfm::Track& t, tracks ) + { InfoStringHash pair; pair[ "artist" ] = t.artist().toString(); pair[ "track" ] = t.title(); diff --git a/src/accounts/lastfm/LastFmInfoPlugin.h b/src/accounts/lastfm/LastFmInfoPlugin.h index 6f3d219c7..443192b03 100644 --- a/src/accounts/lastfm/LastFmInfoPlugin.h +++ b/src/accounts/lastfm/LastFmInfoPlugin.h @@ -60,6 +60,7 @@ public slots: void similarArtistsReturned(); void topTracksReturned(); void chartReturned(); + void similarTracksReturned(); protected slots: virtual void getInfo( Tomahawk::InfoSystem::InfoRequestData requestData ); @@ -74,6 +75,7 @@ private: void fetchTopTracks( Tomahawk::InfoSystem::InfoRequestData requestData ); void fetchChart( Tomahawk::InfoSystem::InfoRequestData requestData ); void fetchChartCapabilities( Tomahawk::InfoSystem::InfoRequestData requestData ); + void fetchSimilarTracks( Tomahawk::InfoSystem::InfoRequestData requestData ); void createScrobbler(); void nowPlaying( const QVariant &input ); diff --git a/src/libtomahawk/infosystem/InfoSystem.h b/src/libtomahawk/infosystem/InfoSystem.h index 8298c8166..1689e2bbb 100644 --- a/src/libtomahawk/infosystem/InfoSystem.h +++ b/src/libtomahawk/infosystem/InfoSystem.h @@ -73,6 +73,7 @@ enum InfoType { // as items are saved in cache, mark them here to not change the InfoTrackDanceability = 20, InfoTrackTempo = 21, InfoTrackLoudness = 22, + InfoTrackSimilars = 23, // cached -- do not change InfoArtistID = 25, InfoArtistName = 26, From 01f98ddc7f3e97f7852e834c97b7bef171c777bd Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 16:43:05 +0200 Subject: [PATCH 10/47] * Added similar tracks and playback history methods to Query. --- src/libtomahawk/Query.cpp | 154 +++++++++++++++++++++++++++++++++++--- src/libtomahawk/Query.h | 40 +++++++++- 2 files changed, 179 insertions(+), 15 deletions(-) diff --git a/src/libtomahawk/Query.cpp b/src/libtomahawk/Query.cpp index 58c6ffa0f..6e9c284a3 100644 --- a/src/libtomahawk/Query.cpp +++ b/src/libtomahawk/Query.cpp @@ -24,10 +24,10 @@ #include "database/Database.h" #include "database/DatabaseImpl.h" #include "database/DatabaseCommand_LogPlayback.h" -#include "database/DatabaseCommand_PlaybackHistory.h" #include "database/DatabaseCommand_LoadPlaylistEntries.h" #include "database/DatabaseCommand_LoadSocialActions.h" #include "database/DatabaseCommand_SocialAction.h" +#include "database/DatabaseCommand_TrackStats.h" #include "Album.h" #include "Collection.h" #include "Pipeline.h" @@ -74,6 +74,8 @@ Query::Query( const QString& artist, const QString& track, const QString& album, , m_album( album ) , m_track( track ) , m_socialActionsLoaded( false ) + , m_simTracksLoaded( false ) + , m_infoJobs( 0 ) { init(); @@ -505,6 +507,55 @@ Query::playedBy() const } +void +Query::loadStats() +{ + query_ptr q = m_ownRef.toStrongRef(); + + DatabaseCommand_TrackStats* cmd = new DatabaseCommand_TrackStats( q ); + Database::instance()->enqueue( QSharedPointer(cmd) ); +} + + +QList< Tomahawk::PlaybackLog > +Query::playbackHistory( const Tomahawk::source_ptr& source ) const +{ + QList< Tomahawk::PlaybackLog > history; + + foreach ( const PlaybackLog& log, m_playbackHistory ) + { + if ( source.isNull() || log.source == source ) + { + history << log; + } + } + + return history; +} + + +void +Query::setPlaybackHistory( const QList< Tomahawk::PlaybackLog >& playbackData ) +{ + m_playbackHistory = playbackData; + emit statsLoaded(); +} + + +unsigned int +Query::playbackCount( const source_ptr& source ) +{ + unsigned int count = 0; + foreach ( const PlaybackLog& log, m_playbackHistory ) + { + if ( source.isNull() || log.source == source ) + count++; + } + + return count; +} + + void Query::loadSocialActions() { @@ -512,24 +563,17 @@ Query::loadSocialActions() query_ptr q = m_ownRef.toStrongRef(); DatabaseCommand_LoadSocialActions* cmd = new DatabaseCommand_LoadSocialActions( q ); - connect( cmd, SIGNAL( finished() ), SLOT( onSocialActionsLoaded() ) ); Database::instance()->enqueue( QSharedPointer(cmd) ); } -void -Query::onSocialActionsLoaded() -{ - parseSocialActions(); - - emit socialActionsLoaded(); -} - - void Query::setAllSocialActions( const QList< SocialAction >& socialActions ) { m_allSocialActions = socialActions; + parseSocialActions(); + + emit socialActionsLoaded(); } @@ -690,7 +734,7 @@ Query::cover( const QSize& size, bool forceLoad ) const if ( !m_albumPtr->cover( size ).isNull() ) return m_albumPtr->cover( size ); - return m_artistPtr->cover( size ); + return m_artistPtr->cover( size, forceLoad ); } return QPixmap(); @@ -698,6 +742,92 @@ Query::cover( const QSize& size, bool forceLoad ) const #endif +QList +Query::similarTracks() const +{ + if ( !m_simTracksLoaded ) + { + Tomahawk::InfoSystem::InfoStringHash trackInfo; + trackInfo["artist"] = artist(); + trackInfo["track"] = track(); + + Tomahawk::InfoSystem::InfoRequestData requestData; + requestData.caller = id(); + requestData.customData = QVariantMap(); + + requestData.input = QVariant::fromValue< Tomahawk::InfoSystem::InfoStringHash >( trackInfo ); + requestData.type = Tomahawk::InfoSystem::InfoTrackSimilars; + requestData.requestId = TomahawkUtils::infosystemRequestId(); + + connect( Tomahawk::InfoSystem::InfoSystem::instance(), + SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), + SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), Qt::UniqueConnection ); + + connect( Tomahawk::InfoSystem::InfoSystem::instance(), + SIGNAL( finished( QString ) ), + SLOT( infoSystemFinished( QString ) ), Qt::UniqueConnection ); + + m_infoJobs++; + Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData ); + } + + return m_similarTracks; +} + + +void +Query::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVariant output ) +{ + if ( requestData.caller != id() ) + return; + + QVariantMap returnedData = output.value< QVariantMap >(); + switch ( requestData.type ) + { + case InfoSystem::InfoTrackSimilars: + { + const QStringList artists = returnedData["artists"].toStringList(); + const QStringList tracks = returnedData["tracks"].toStringList(); + + for ( int i = 0; i < tracks.count() && i < 50; i++ ) + { + m_similarTracks << Query::get( artists.at( i ), tracks.at( i ), QString(), uuid(), true ); + } + + m_simTracksLoaded = true; + emit similarTracksLoaded(); + + break; + } + + default: + Q_ASSERT( false ); + } +} + + +void +Query::infoSystemFinished( QString target ) +{ + tDebug() << Q_FUNC_INFO; + Q_UNUSED( target ); + + if ( target != id() ) + return; + + if ( --m_infoJobs == 0 ) + { + disconnect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), + this, SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ) ); + + disconnect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( finished( QString ) ), + this, SLOT( infoSystemFinished( QString ) ) ); + } + + emit updated(); +} + + int Query::levenshtein( const QString& source, const QString& target ) { diff --git a/src/libtomahawk/Query.h b/src/libtomahawk/Query.h index 6565c2e55..a2656684e 100644 --- a/src/libtomahawk/Query.h +++ b/src/libtomahawk/Query.h @@ -27,6 +27,7 @@ #include "Typedefs.h" #include "Result.h" +#include "infosystem/InfoSystem.h" #include "DllMacro.h" @@ -39,6 +40,22 @@ namespace Tomahawk class Resolver; +struct SocialAction +{ + QVariant action; + QVariant value; + QVariant timestamp; + Tomahawk::source_ptr source; +}; + +struct PlaybackLog +{ + Tomahawk::source_ptr source; + unsigned int timestamp; + unsigned int secsPlayed; +}; + + class DLLEXPORT Query : public QObject { Q_OBJECT @@ -119,11 +136,18 @@ public: void setLoved( bool loved ); bool loved(); + void loadStats(); + QList< Tomahawk::PlaybackLog > playbackHistory( const Tomahawk::source_ptr& source = Tomahawk::source_ptr() ) const; + void setPlaybackHistory( const QList< Tomahawk::PlaybackLog >& playbackData ); + unsigned int playbackCount( const Tomahawk::source_ptr& source = Tomahawk::source_ptr() ); + void loadSocialActions(); QList< Tomahawk::SocialAction > allSocialActions() const; void setAllSocialActions( const QList< Tomahawk::SocialAction >& socialActions ); QString socialActionDescription( const QString& action, DescriptionMode mode ) const; + QList similarTracks() const; + QWeakPointer< Tomahawk::Query > weakRef() { return m_ownRef; } void setWeakRef( QWeakPointer< Tomahawk::Query > weakRef ) { m_ownRef = weakRef; } @@ -141,8 +165,9 @@ signals: void coverChanged(); - // emitted when social actions are loaded void socialActionsLoaded(); + void statsLoaded(); + void similarTracksLoaded(); void updated(); public slots: @@ -160,9 +185,11 @@ public slots: void onResolverRemoved(); private slots: + void infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVariant output ); + void infoSystemFinished( QString target ); + void onResultStatusChanged(); void refreshResults(); - void onSocialActionsLoaded(); private: Query(); @@ -211,12 +238,19 @@ private: QList< QWeakPointer< Tomahawk::Resolver > > m_resolvers; mutable QMutex m_mutex; - QWeakPointer< Tomahawk::Query > m_ownRef; + bool m_playbackHistoryLoaded; + QList< PlaybackLog > m_playbackHistory; + bool m_socialActionsLoaded; QHash< QString, QVariant > m_currentSocialActions; QList< SocialAction > m_allSocialActions; + + bool m_simTracksLoaded; + QList m_similarTracks; + + mutable int m_infoJobs; }; }; //ns From b9e772f3e3bcc2faaa90216607b4b821a88e84d8 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 16:43:47 +0200 Subject: [PATCH 11/47] * Added similar tracks and playback history methods to Artist. --- src/libtomahawk/Artist.cpp | 111 ++++++++++++++++++++++++++++++++++--- src/libtomahawk/Artist.h | 16 ++++++ 2 files changed, 119 insertions(+), 8 deletions(-) diff --git a/src/libtomahawk/Artist.cpp b/src/libtomahawk/Artist.cpp index 3bd9bfec0..b0d79c1e8 100644 --- a/src/libtomahawk/Artist.cpp +++ b/src/libtomahawk/Artist.cpp @@ -23,8 +23,8 @@ #include "Collection.h" #include "database/Database.h" #include "database/DatabaseImpl.h" -#include "Query.h" #include "database/DatabaseCommand_AllAlbums.h" +#include "database/DatabaseCommand_TrackStats.h" #include "utils/Logger.h" @@ -83,6 +83,7 @@ Artist::Artist( unsigned int id, const QString& name ) , m_name( name ) , m_infoLoaded( false ) , m_infoLoading( false ) + , m_simArtistsLoaded( false ) , m_infoJobs( 0 ) #ifndef ENABLE_HEADLESS , m_cover( 0 ) @@ -138,12 +139,12 @@ Artist::albums( ModelMode mode, const Tomahawk::collection_ptr& collection ) con requestData.type = Tomahawk::InfoSystem::InfoArtistReleases; connect( Tomahawk::InfoSystem::InfoSystem::instance(), - SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), - SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), Qt::UniqueConnection ); + SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), + SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), Qt::UniqueConnection ); connect( Tomahawk::InfoSystem::InfoSystem::instance(), - SIGNAL( finished( QString ) ), - SLOT( infoSystemFinished( QString ) ), Qt::UniqueConnection ); + SIGNAL( finished( QString ) ), + SLOT( infoSystemFinished( QString ) ), Qt::UniqueConnection ); m_infoJobs++; Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData ); @@ -164,6 +165,87 @@ Artist::albums( ModelMode mode, const Tomahawk::collection_ptr& collection ) con } +QList +Artist::similarArtists() const +{ + if ( !m_simArtistsLoaded ) + { + Tomahawk::InfoSystem::InfoStringHash artistInfo; + artistInfo["artist"] = name(); + + Tomahawk::InfoSystem::InfoRequestData requestData; + requestData.caller = m_uuid; + requestData.customData = QVariantMap(); + + requestData.input = QVariant::fromValue< Tomahawk::InfoSystem::InfoStringHash >( artistInfo ); + requestData.type = Tomahawk::InfoSystem::InfoArtistSimilars; + requestData.requestId = TomahawkUtils::infosystemRequestId(); + + connect( Tomahawk::InfoSystem::InfoSystem::instance(), + SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), + SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), Qt::UniqueConnection ); + + connect( Tomahawk::InfoSystem::InfoSystem::instance(), + SIGNAL( finished( QString ) ), + SLOT( infoSystemFinished( QString ) ), Qt::UniqueConnection ); + + m_infoJobs++; + Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData ); + } + + return m_similarArtists; +} + + +void +Artist::loadStats() +{ + artist_ptr a = m_ownRef.toStrongRef(); + + DatabaseCommand_TrackStats* cmd = new DatabaseCommand_TrackStats( a ); + Database::instance()->enqueue( QSharedPointer(cmd) ); +} + + +QList< Tomahawk::PlaybackLog > +Artist::playbackHistory( const Tomahawk::source_ptr& source ) const +{ + QList< Tomahawk::PlaybackLog > history; + + foreach ( const PlaybackLog& log, m_playbackHistory ) + { + if ( source.isNull() || log.source == source ) + { + history << log; + } + } + + return history; +} + + +void +Artist::setPlaybackHistory( const QList< Tomahawk::PlaybackLog >& playbackData ) +{ + m_playbackHistory = playbackData; + emit statsLoaded(); +} + + +unsigned int +Artist::playbackCount( const source_ptr& source ) +{ + unsigned int count = 0; + foreach ( const PlaybackLog& log, m_playbackHistory ) + { + if ( source.isNull() || log.source == source ) + count++; + } + + return count; +} + + void Artist::onAlbumsFound( const QList< album_ptr >& albums, const QVariant& data ) { @@ -183,11 +265,11 @@ Artist::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVari if ( requestData.caller != m_uuid ) return; + QVariantMap returnedData = output.value< QVariantMap >(); switch ( requestData.type ) { case Tomahawk::InfoSystem::InfoArtistReleases: { - QVariantMap returnedData = output.value< QVariantMap >(); QStringList albumNames = returnedData[ "albums" ].toStringList(); Tomahawk::InfoSystem::InfoStringHash inputInfo; inputInfo = requestData.input.value< InfoSystem::InfoStringHash >(); @@ -212,7 +294,6 @@ Artist::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVari { if ( !output.isNull() && output.isValid() ) { - QVariantMap returnedData = output.value< QVariantMap >(); const QByteArray ba = returnedData["imgbytes"].toByteArray(); if ( ba.length() ) { @@ -224,7 +305,21 @@ Artist::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVari break; } - + + case InfoSystem::InfoArtistSimilars: + { + const QStringList artists = returnedData["artists"].toStringList(); + foreach ( const QString& artist, artists ) + { + m_similarArtists << Artist::get( artist ); + } + + m_simArtistsLoaded = true; + emit similarArtistsLoaded(); + + break; + } + default: Q_ASSERT( false ); } diff --git a/src/libtomahawk/Artist.h b/src/libtomahawk/Artist.h index 8f9459422..eee1da918 100644 --- a/src/libtomahawk/Artist.h +++ b/src/libtomahawk/Artist.h @@ -30,6 +30,7 @@ #include "Typedefs.h" #include "DllMacro.h" +#include "Query.h" #include "infosystem/InfoSystem.h" namespace Tomahawk @@ -53,6 +54,13 @@ public: bool infoLoaded() const { return m_infoLoaded; } QList albums( ModelMode mode = Mixed, const Tomahawk::collection_ptr& collection = Tomahawk::collection_ptr() ) const; + QList similarArtists() const; + + void loadStats(); + QList< Tomahawk::PlaybackLog > playbackHistory( const Tomahawk::source_ptr& source = Tomahawk::source_ptr() ) const; + void setPlaybackHistory( const QList< Tomahawk::PlaybackLog >& playbackData ); + unsigned int playbackCount( const Tomahawk::source_ptr& source = Tomahawk::source_ptr() ); + #ifndef ENABLE_HEADLESS QPixmap cover( const QSize& size, bool forceLoad = true ) const; #endif @@ -68,6 +76,8 @@ signals: void updated(); void coverChanged(); + void similarArtistsLoaded(); + void statsLoaded(); private slots: void onTracksAdded( const QList& tracks ); @@ -86,11 +96,17 @@ private: bool m_infoLoaded; mutable bool m_infoLoading; QHash m_albumsLoaded; + bool m_simArtistsLoaded; + mutable QString m_uuid; mutable int m_infoJobs; QList m_databaseAlbums; QList m_officialAlbums; + QList m_similarArtists; + + bool m_playbackHistoryLoaded; + QList< PlaybackLog > m_playbackHistory; mutable QByteArray m_coverBuffer; #ifndef ENABLE_HEADLESS From e27976c8a1d419d2f19161df7feaf1de00f40878 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 16:44:25 +0200 Subject: [PATCH 12/47] * Added DatabaseCommand_TrackStats. This will eventually be merged with PlaybackHistory. --- src/libtomahawk/CMakeLists.txt | 3 + .../database/DatabaseCommand_TrackStats.cpp | 90 +++++++++++++++++++ .../database/DatabaseCommand_TrackStats.h | 51 +++++++++++ 3 files changed, 144 insertions(+) create mode 100644 src/libtomahawk/database/DatabaseCommand_TrackStats.cpp create mode 100644 src/libtomahawk/database/DatabaseCommand_TrackStats.h diff --git a/src/libtomahawk/CMakeLists.txt b/src/libtomahawk/CMakeLists.txt index c77b302e5..afeed00ef 100644 --- a/src/libtomahawk/CMakeLists.txt +++ b/src/libtomahawk/CMakeLists.txt @@ -151,6 +151,7 @@ set( libGuiSources widgets/infowidgets/SourceInfoWidget.cpp widgets/infowidgets/ArtistInfoWidget.cpp widgets/infowidgets/AlbumInfoWidget.cpp + widgets/infowidgets/TrackInfoWidget.cpp widgets/Breadcrumb.cpp widgets/BreadcrumbButton.cpp ) @@ -218,6 +219,7 @@ set( libSources database/DatabaseCommand_AddSource.cpp database/DatabaseCommand_SourceOffline.cpp database/DatabaseCommand_CollectionStats.cpp + database/DatabaseCommand_TrackStats.cpp database/DatabaseCommand_LoadPlaylistEntries.cpp database/DatabaseCommand_ModifyPlaylist.cpp database/DatabaseCommand_PlaybackHistory.cpp @@ -312,6 +314,7 @@ set( libUI ${libUI} widgets/infowidgets/SourceInfoWidget.ui widgets/infowidgets/ArtistInfoWidget.ui widgets/infowidgets/AlbumInfoWidget.ui + widgets/infowidgets/TrackInfoWidget.ui playlist/topbar/TopBar.ui playlist/QueueView.ui context/ContextWidget.ui diff --git a/src/libtomahawk/database/DatabaseCommand_TrackStats.cpp b/src/libtomahawk/database/DatabaseCommand_TrackStats.cpp new file mode 100644 index 000000000..a85397dee --- /dev/null +++ b/src/libtomahawk/database/DatabaseCommand_TrackStats.cpp @@ -0,0 +1,90 @@ +/* === This file is part of Tomahawk Player - === + * + * Copyright 2012, Christian Muehlhaeuser + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk 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 Tomahawk. If not, see . + */ + +#include "DatabaseCommand_TrackStats.h" + +#include "DatabaseImpl.h" +#include "SourceList.h" +#include "utils/Logger.h" + +using namespace Tomahawk; + + +DatabaseCommand_TrackStats::DatabaseCommand_TrackStats( const query_ptr& query, QObject* parent ) + : DatabaseCommand( parent ) + , m_query( query ) +{ +} + + +DatabaseCommand_TrackStats::DatabaseCommand_TrackStats( const artist_ptr& artist, QObject* parent ) + : DatabaseCommand( parent ) + , m_artist( artist ) +{ +} + + +void +DatabaseCommand_TrackStats::exec( DatabaseImpl* dbi ) +{ + TomahawkSqlQuery query = dbi->newquery(); + + if ( !m_query.isNull() ) + { + int artid = dbi->artistId( m_query->artist(), false ); + if( artid < 1 ) + return; + + int trkid = dbi->trackId( artid, m_query->track(), false ); + if( trkid < 1 ) + return; + + query.prepare( "SELECT * " + "FROM playback_log " + "WHERE track = ?" ); + query.addBindValue( trkid ); + query.exec(); + } + else if ( !m_artist.isNull() ) + { + query.prepare( "SELECT playback_log.* " + "FROM playback_log, track " + "WHERE playback_log.track = track.id AND track.artist = ?" ); + query.addBindValue( m_artist->id() ); + query.exec(); + } + + QList< Tomahawk::PlaybackLog > playbackData; + while ( query.next() ) + { + Tomahawk::PlaybackLog log; + log.source = SourceList::instance()->get( query.value( 1 ).toInt() ); // source + log.timestamp = query.value( 3 ).toUInt(); + log.secsPlayed = query.value( 4 ).toUInt(); + + if ( !log.source.isNull() ) + playbackData.append( log ); + } + + if ( !m_query.isNull() ) + m_query->setPlaybackHistory( playbackData ); + else + m_artist->setPlaybackHistory( playbackData ); + + emit done( playbackData ); +} diff --git a/src/libtomahawk/database/DatabaseCommand_TrackStats.h b/src/libtomahawk/database/DatabaseCommand_TrackStats.h new file mode 100644 index 000000000..2b8b5483b --- /dev/null +++ b/src/libtomahawk/database/DatabaseCommand_TrackStats.h @@ -0,0 +1,51 @@ +/* === This file is part of Tomahawk Player - === + * + * Copyright 2012, Christian Muehlhaeuser + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk 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 Tomahawk. If not, see . + */ + +#ifndef DATABASECOMMAND_TRACKSTATS_H +#define DATABASECOMMAND_TRACKSTATS_H + +#include + +#include "DatabaseCommand.h" +#include "Typedefs.h" +#include "Query.h" +#include "Artist.h" + +#include "DllMacro.h" + +class DLLEXPORT DatabaseCommand_TrackStats : public DatabaseCommand +{ +Q_OBJECT + +public: + explicit DatabaseCommand_TrackStats( const Tomahawk::query_ptr& query, QObject* parent = 0 ); + explicit DatabaseCommand_TrackStats( const Tomahawk::artist_ptr& artist, QObject* parent = 0 ); + + virtual void exec( DatabaseImpl* lib ); + virtual bool doesMutates() const { return false; } + virtual QString commandname() const { return "trackstats"; } + +signals: + void done( QList< Tomahawk::PlaybackLog >& playbackData ); + +private: + Tomahawk::query_ptr m_query; + Tomahawk::artist_ptr m_artist; +}; + +#endif // DATABASECOMMAND_TRACKSTATS_H From 7b801270c2290569fa2abaf59589e0b4f18f93ec Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 16:57:01 +0200 Subject: [PATCH 13/47] * Added queries to AlbumModel. This will be renamed to ItemModel soon. --- src/libtomahawk/playlist/AlbumItem.cpp | 26 ++++++++++ src/libtomahawk/playlist/AlbumItem.h | 4 ++ .../playlist/AlbumItemDelegate.cpp | 52 ++++++++++++++----- src/libtomahawk/playlist/AlbumModel.cpp | 29 +++++++++++ src/libtomahawk/playlist/AlbumModel.h | 1 + 5 files changed, 98 insertions(+), 14 deletions(-) diff --git a/src/libtomahawk/playlist/AlbumItem.cpp b/src/libtomahawk/playlist/AlbumItem.cpp index 5759c861e..d97b222bf 100644 --- a/src/libtomahawk/playlist/AlbumItem.cpp +++ b/src/libtomahawk/playlist/AlbumItem.cpp @@ -103,3 +103,29 @@ AlbumItem::AlbumItem( const Tomahawk::artist_ptr& artist, AlbumItem* parent, int connect( artist.data(), SIGNAL( updated() ), SIGNAL( dataChanged() ) ); } + + +AlbumItem::AlbumItem( const Tomahawk::query_ptr& query, AlbumItem* parent, int row ) + : QObject( parent ) + , m_query( query ) +{ + this->parent = parent; + if ( parent ) + { + if ( row < 0 ) + { + parent->children.append( this ); + row = parent->children.count() - 1; + } + else + { + parent->children.insert( row, this ); + } + + this->model = parent->model; + } + + toberemoved = false; + + connect( query.data(), SIGNAL( updated() ), SIGNAL( dataChanged() ) ); +} diff --git a/src/libtomahawk/playlist/AlbumItem.h b/src/libtomahawk/playlist/AlbumItem.h index f5f70e0d6..7ced56118 100644 --- a/src/libtomahawk/playlist/AlbumItem.h +++ b/src/libtomahawk/playlist/AlbumItem.h @@ -26,6 +26,7 @@ #include "Artist.h" #include "Album.h" +#include "Query.h" #include "DllMacro.h" @@ -39,9 +40,11 @@ public: explicit AlbumItem( AlbumItem* parent = 0, QAbstractItemModel* model = 0 ); explicit AlbumItem( const Tomahawk::artist_ptr& artist, AlbumItem* parent = 0, int row = -1 ); explicit AlbumItem( const Tomahawk::album_ptr& album, AlbumItem* parent = 0, int row = -1 ); + explicit AlbumItem( const Tomahawk::query_ptr& query, AlbumItem* parent = 0, int row = -1 ); const Tomahawk::artist_ptr& artist() const { return m_artist; } const Tomahawk::album_ptr& album() const { return m_album; } + const Tomahawk::query_ptr& query() const { return m_query; } AlbumItem* parent; QList children; @@ -57,6 +60,7 @@ signals: private: Tomahawk::artist_ptr m_artist; Tomahawk::album_ptr m_album; + Tomahawk::query_ptr m_query; }; #endif // ALBUMITEM_H diff --git a/src/libtomahawk/playlist/AlbumItemDelegate.cpp b/src/libtomahawk/playlist/AlbumItemDelegate.cpp index db0a0a74f..533ed8fb2 100644 --- a/src/libtomahawk/playlist/AlbumItemDelegate.cpp +++ b/src/libtomahawk/playlist/AlbumItemDelegate.cpp @@ -96,10 +96,40 @@ AlbumItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, QRect r = option.rect.adjusted( 6, 5, -6, -41 ); + QString top, bottom; + if ( !item->album().isNull() ) + { + top = item->album()->name(); + + if ( !item->album()->artist().isNull() ) + bottom = item->album()->artist()->name(); + } + else if ( !item->artist().isNull() ) + { + top = item->artist()->name(); + } + else + { + top = item->query()->track(); + bottom = item->query()->artist(); + } + if ( !m_covers.contains( index ) ) { - m_covers.insert( index, QSharedPointer< Tomahawk::PixmapDelegateFader >( new Tomahawk::PixmapDelegateFader( item->album(), r.size(), TomahawkUtils::CoverInCase ) ) ); - _detail::Closure* closure = NewClosure( m_covers[ index ], SIGNAL( repaintRequest() ), const_cast(this), SLOT( doUpdateIndex( const QPersistentModelIndex& ) ), QPersistentModelIndex( index ) ); + if ( !item->album().isNull() ) + { + m_covers.insert( index, QSharedPointer< Tomahawk::PixmapDelegateFader >( new Tomahawk::PixmapDelegateFader( item->album(), r.size(), TomahawkUtils::CoverInCase ) ) ); + } + else if ( !item->artist().isNull() ) + { + m_covers.insert( index, QSharedPointer< Tomahawk::PixmapDelegateFader >( new Tomahawk::PixmapDelegateFader( item->artist(), r.size(), TomahawkUtils::CoverInCase ) ) ); + } + else + { + m_covers.insert( index, QSharedPointer< Tomahawk::PixmapDelegateFader >( new Tomahawk::PixmapDelegateFader( item->query(), r.size(), TomahawkUtils::CoverInCase ) ) ); + } + + _detail::Closure* closure = NewClosure( m_covers[ index ], SIGNAL( repaintRequest() ), const_cast(this), SLOT( doUpdateIndex( QPersistentModelIndex ) ), QPersistentModelIndex( index ) ); closure->setAutoDelete( false ); } @@ -138,30 +168,24 @@ AlbumItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, QRect textRect = option.rect.adjusted( 0, option.rect.height() - 32, 0, -2 ); - QString name; - if ( !item->album().isNull() ) - name = item->album()->name(); - else if ( !item->artist().isNull() ) - name = item->artist()->name(); - painter->setFont( boldFont ); bool oneLiner = false; - if ( item->album().isNull() || item->album()->artist().isNull() ) + if ( bottom.isEmpty() ) oneLiner = true; else - oneLiner = ( textRect.height() / 2 < painter->fontMetrics().boundingRect( item->album()->name() ).height() || - textRect.height() / 2 < painter->fontMetrics().boundingRect( item->album()->artist()->name() ).height() ); + oneLiner = ( textRect.height() / 2 < painter->fontMetrics().boundingRect( top ).height() || + textRect.height() / 2 < painter->fontMetrics().boundingRect( bottom ).height() ); if ( oneLiner ) { to.setAlignment( Qt::AlignHCenter | Qt::AlignVCenter ); - text = painter->fontMetrics().elidedText( name, Qt::ElideRight, textRect.width() - 3 ); + text = painter->fontMetrics().elidedText( top, Qt::ElideRight, textRect.width() - 3 ); painter->drawText( textRect, text, to ); } else { to.setAlignment( Qt::AlignHCenter | Qt::AlignTop ); - text = painter->fontMetrics().elidedText( item->album()->name(), Qt::ElideRight, textRect.width() - 3 ); + text = painter->fontMetrics().elidedText( top, Qt::ElideRight, textRect.width() - 3 ); painter->drawText( textRect, text, to ); // If the user is hovering over an artist rect, draw a background so she knows it's clickable @@ -184,7 +208,7 @@ AlbumItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, } to.setAlignment( Qt::AlignHCenter | Qt::AlignBottom ); - text = painter->fontMetrics().elidedText( item->album()->artist()->name(), Qt::ElideRight, textRect.width() - 10 ); + text = painter->fontMetrics().elidedText( bottom, Qt::ElideRight, textRect.width() - 10 ); painter->drawText( textRect.adjusted( 5, -1, -5, -1 ), text, to ); // Calculate rect of artist on-hover button click area diff --git a/src/libtomahawk/playlist/AlbumModel.cpp b/src/libtomahawk/playlist/AlbumModel.cpp index 2b709ff1a..b04a8e203 100644 --- a/src/libtomahawk/playlist/AlbumModel.cpp +++ b/src/libtomahawk/playlist/AlbumModel.cpp @@ -399,6 +399,35 @@ AlbumModel::addArtists( const QList& artists ) } +void +AlbumModel::addQueries( const QList& queries ) +{ + emit loadingFinished(); + + if ( m_overwriteOnAdd ) + clear(); + + int c = rowCount( QModelIndex() ); + QPair< int, int > crows; + crows.first = c; + crows.second = c + queries.count() - 1; + + emit beginInsertRows( QModelIndex(), crows.first, crows.second ); + + AlbumItem* albumitem; + foreach ( const query_ptr& query, queries ) + { + albumitem = new AlbumItem( query, m_rootItem ); + albumitem->index = createIndex( m_rootItem->children.count() - 1, 0, albumitem ); + + connect( albumitem, SIGNAL( dataChanged() ), SLOT( onDataChanged() ) ); + } + + emit endInsertRows(); + emit itemCountChanged( rowCount( QModelIndex() ) ); +} + + void AlbumModel::onSourceAdded( const Tomahawk::source_ptr& source ) { diff --git a/src/libtomahawk/playlist/AlbumModel.h b/src/libtomahawk/playlist/AlbumModel.h index 297e600c6..71d7743d8 100644 --- a/src/libtomahawk/playlist/AlbumModel.h +++ b/src/libtomahawk/playlist/AlbumModel.h @@ -91,6 +91,7 @@ public slots: void addAlbums( const QList& albums ); void addArtists( const QList& artists ); + void addQueries( const QList& queries ); signals: void repeatModeChanged( Tomahawk::PlaylistInterface::RepeatMode mode ); From 2b139103d0ee8edf99ef53c6272fc5bdec29abe5 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 16:58:49 +0200 Subject: [PATCH 14/47] * Moved SocialActions to Query. --- src/libtomahawk/Result.h | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/libtomahawk/Result.h b/src/libtomahawk/Result.h index be86e0157..bfa6ded64 100644 --- a/src/libtomahawk/Result.h +++ b/src/libtomahawk/Result.h @@ -36,16 +36,6 @@ class DatabaseCommand_LoadFile; namespace Tomahawk { - -struct SocialAction -{ - QVariant action; - QVariant value; - QVariant timestamp; - Tomahawk::source_ptr source; -}; - - class DLLEXPORT Result : public QObject { Q_OBJECT From f40500452b1278ffe49c4714dfc93889958b8b3f Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 16:59:09 +0200 Subject: [PATCH 15/47] * Added query/track pages. --- src/libtomahawk/ViewManager.cpp | 20 ++++++++++++++++++++ src/libtomahawk/ViewManager.h | 3 +++ 2 files changed, 23 insertions(+) diff --git a/src/libtomahawk/ViewManager.cpp b/src/libtomahawk/ViewManager.cpp index 56a57df17..983e4bbe1 100644 --- a/src/libtomahawk/ViewManager.cpp +++ b/src/libtomahawk/ViewManager.cpp @@ -51,6 +51,7 @@ #include "widgets/infowidgets/SourceInfoWidget.h" #include "widgets/infowidgets/ArtistInfoWidget.h" #include "widgets/infowidgets/AlbumInfoWidget.h" +#include "widgets/infowidgets/TrackInfoWidget.h" #include "widgets/NewPlaylistWidget.h" #include "widgets/AnimatedSplitter.h" @@ -256,6 +257,25 @@ ViewManager::show( const Tomahawk::album_ptr& album, Tomahawk::ModelMode initial } +Tomahawk::ViewPage* +ViewManager::show( const Tomahawk::query_ptr& query ) +{ + TrackInfoWidget* swidget; + if ( !m_trackViews.contains( query ) || m_trackViews.value( query ).isNull() ) + { + swidget = new TrackInfoWidget( query ); + m_trackViews.insert( query, swidget ); + } + else + { + swidget = m_trackViews.value( query ).data(); + } + + setPage( swidget ); + return swidget; +} + + Tomahawk::ViewPage* ViewManager::show( const Tomahawk::collection_ptr& collection ) { diff --git a/src/libtomahawk/ViewManager.h b/src/libtomahawk/ViewManager.h index f84511476..31d86012e 100644 --- a/src/libtomahawk/ViewManager.h +++ b/src/libtomahawk/ViewManager.h @@ -55,6 +55,7 @@ class TrackView; class SourceInfoWidget; class InfoBar; class TopBar; +class TrackInfoWidget; class WelcomeWidget; class WhatsHotWidget; class QPushButton; @@ -151,6 +152,7 @@ public slots: Tomahawk::ViewPage* show( const Tomahawk::dynplaylist_ptr& playlist ); Tomahawk::ViewPage* show( const Tomahawk::artist_ptr& artist ); Tomahawk::ViewPage* show( const Tomahawk::album_ptr& album, Tomahawk::ModelMode withInitialMode = Tomahawk::InfoSystemMode ); + Tomahawk::ViewPage* show( const Tomahawk::query_ptr& query ); Tomahawk::ViewPage* show( const Tomahawk::collection_ptr& collection ); Tomahawk::ViewPage* show( const Tomahawk::source_ptr& source ); @@ -217,6 +219,7 @@ private: QHash< Tomahawk::collection_ptr, QWeakPointer > m_collectionAlbumViews; QHash< Tomahawk::artist_ptr, QWeakPointer > m_artistViews; QHash< Tomahawk::album_ptr, QWeakPointer > m_albumViews; + QHash< Tomahawk::query_ptr, QWeakPointer > m_trackViews; QHash< Tomahawk::playlist_ptr, QWeakPointer > m_playlistViews; QHash< Tomahawk::source_ptr, QWeakPointer > m_sourceViews; From 906e1147e54d0cc11058e050bd770b2d28ba6c0b Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 16:59:36 +0200 Subject: [PATCH 16/47] * Support activating queries in Album (Items-)Views. --- src/libtomahawk/playlist/AlbumView.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libtomahawk/playlist/AlbumView.cpp b/src/libtomahawk/playlist/AlbumView.cpp index 881a566b8..b9af8d5ff 100644 --- a/src/libtomahawk/playlist/AlbumView.cpp +++ b/src/libtomahawk/playlist/AlbumView.cpp @@ -144,6 +144,8 @@ AlbumView::onItemActivated( const QModelIndex& index ) ViewManager::instance()->show( item->album() ); else if ( !item->artist().isNull() ) ViewManager::instance()->show( item->artist() ); + else if ( item->query()->numResults() ) + AudioEngine::instance()->playItem( playlistinterface_ptr(), item->query()->results().first() ); } } From 61fb4744f3de0203b59eb54662c242a9fe8e75d9 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 17:00:06 +0200 Subject: [PATCH 17/47] * Added TrackInfoWidget. WIP. --- .../widgets/infowidgets/TrackInfoWidget.cpp | 212 ++++++++++++++++++ .../widgets/infowidgets/TrackInfoWidget.h | 95 ++++++++ .../widgets/infowidgets/TrackInfoWidget.ui | 202 +++++++++++++++++ 3 files changed, 509 insertions(+) create mode 100644 src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp create mode 100644 src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h create mode 100644 src/libtomahawk/widgets/infowidgets/TrackInfoWidget.ui diff --git a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp new file mode 100644 index 000000000..d4e606a11 --- /dev/null +++ b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp @@ -0,0 +1,212 @@ +/* === This file is part of Tomahawk Player - === + * + * Copyright 2010-2011, Christian Muehlhaeuser + * Copyright 2010-2012, Jeff Mitchell + * Copyright 2010-2011, Leo Franchi + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk 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 Tomahawk. If not, see . + */ + +#include "TrackInfoWidget.h" +#include "ui_TrackInfoWidget.h" + +#include "ViewManager.h" +#include "SourceList.h" +#include "playlist/AlbumModel.h" + +#include "utils/TomahawkUtils.h" +#include "utils/Logger.h" + +using namespace Tomahawk; + + +TrackInfoWidget::TrackInfoWidget( const Tomahawk::query_ptr& query, QWidget* parent ) + : QWidget( parent ) + , ui( new Ui::TrackInfoWidget ) + , m_infoId( uuid() ) +{ + ui->setupUi( this ); + + layout()->setSpacing( 0 ); + ui->headerWidget->setStyleSheet( "QWidget#headerWidget { background-image: url(" RESPATH "images/playlist-header-tiled.png); }" ); + ui->tracksWidget->setStyleSheet( "background-color: #bababa;" ); + ui->statsLabel->setStyleSheet( "QLabel { background-image:url(); border: 2px solid #dddddd; background-color: #faf9f9; border-radius: 4px; padding: 12px; }" ); + + QFont f = font(); + f.setBold( true ); + f.setPixelSize( 18 ); + ui->trackLabel->setFont( f ); + ui->similarTracksLabel->setFont( f ); + + f.setPixelSize( 14 ); + ui->artistLabel->setFont( f ); + ui->albumLabel->setFont( f ); + ui->byLabel->setFont( f ); + ui->fromLabel->setFont( f ); + + f.setPixelSize( 12 ); + ui->statsLabel->setFont( f ); + + ui->similarTracksView->setFrameShape( QFrame::NoFrame ); + ui->similarTracksView->setAttribute( Qt::WA_MacShowFocusRect, 0 ); + ui->similarTracksView->setStyleSheet( "QListView { background-color: transparent; } QListView::item { background-color: transparent; }" ); + + QPalette p = ui->trackLabel->palette(); + p.setColor( QPalette::Foreground, Qt::white ); + ui->trackLabel->setPalette( p ); + ui->artistLabel->setPalette( p ); + ui->albumLabel->setPalette( p ); + ui->byLabel->setPalette( p ); + ui->fromLabel->setPalette( p ); + + m_albumsModel = new AlbumModel( ui->similarTracksView ); + ui->similarTracksView->setAlbumModel( m_albumsModel ); + ui->similarTracksView->proxyModel()->sort( -1 ); + + m_pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultAlbumCover, TomahawkUtils::ScaledCover, QSize( 48, 48 ) ); + + load( query ); +} + + +TrackInfoWidget::~TrackInfoWidget() +{ + delete ui; +} + + +Tomahawk::playlistinterface_ptr +TrackInfoWidget::playlistInterface() const +{ + return ui->similarTracksView->playlistInterface(); +} + + +bool +TrackInfoWidget::isBeingPlayed() const +{ + //tDebug() << Q_FUNC_INFO << "audioengine playlistInterface = " << AudioEngine::instance()->currentTrackPlaylist()->id(); + //tDebug() << Q_FUNC_INFO << "albumsView playlistInterface = " << ui->albumsView->playlistInterface()->id(); + //tDebug() << Q_FUNC_INFO << "tracksView playlistInterface = " << ui->tracksView->playlistInterface()->id(); + if ( ui->similarTracksView->playlistInterface() == AudioEngine::instance()->currentTrackPlaylist() ) + return true; + + return false; +} + + +void +TrackInfoWidget::load( const query_ptr& query ) +{ + m_query = query; + m_artist = Artist::get( m_query->artist() ); + + if ( !m_query.isNull() ) + { + disconnect( m_query.data(), SIGNAL( statsLoaded() ), this, SLOT( onStatsLoaded() ) ); + disconnect( m_query.data(), SIGNAL( updated() ), this, SLOT( onCoverUpdated() ) ); + disconnect( m_artist.data(), SIGNAL( statsLoaded() ), this, SLOT( onStatsLoaded() ) ); + disconnect( m_artist.data(), SIGNAL( similarArtistsLoaded() ), this, SLOT( onSimilarArtistsLoaded() ) ); + } + + connect( m_artist.data(), SIGNAL( similarArtistsLoaded() ), SLOT( onSimilarArtistsLoaded() ) ); + connect( m_artist.data(), SIGNAL( statsLoaded() ), SLOT( onStatsLoaded() ) ); + connect( m_query.data(), SIGNAL( similarTracksLoaded() ), SLOT( onSimilarTracksLoaded() ) ); + connect( m_query.data(), SIGNAL( updated() ), SLOT( onCoverUpdated() ) ); + connect( m_query.data(), SIGNAL( statsLoaded() ), SLOT( onStatsLoaded() ) ); + + m_artist->loadStats(); + m_query->loadStats(); + onCoverUpdated(); + + ui->trackLabel->setText( query->track() ); + ui->artistLabel->setText( query->artist() ); + ui->albumLabel->setText( query->album() ); + ui->fromLabel->setVisible( !query->album().isEmpty() ); + + m_query->similarTracks(); + m_albumsModel->addArtists( m_artist->similarArtists() ); + m_albumsModel->clear(); +} + + +void +TrackInfoWidget::onCoverUpdated() +{ + if ( m_query->cover( QSize( 0, 0 ) ).isNull() ) + return; + + m_pixmap = m_query->cover( ui->cover->size() ); + ui->cover->setPixmap( m_pixmap ); +} + + +void +TrackInfoWidget::onStatsLoaded() +{ + QList< Tomahawk::PlaybackLog > history = m_query->playbackHistory( SourceList::instance()->getLocal() ); + const unsigned int trackCounter = m_query->playbackCount( SourceList::instance()->getLocal() ); + const unsigned int artistCounter = m_artist->playbackCount( SourceList::instance()->getLocal() ); + + QString stats; + + if ( trackCounter ) + stats = tr( "You've listened to this track %n time(s).", "", trackCounter ); + else + stats = tr( "You've never listened to this track before." ); + + if ( history.count() ) + { + stats += "\n" + tr( "You first listened to it on %1." ).arg( QDateTime::fromTime_t( history.first().timestamp ).toString( "dd MMM yyyy" ) ); + } + + if ( artistCounter ) + stats += "\n" + tr( "You've listened to %1 %n time(s).", "", artistCounter ).arg( m_artist->name() ); + else + stats += "\n" + tr( "You've never listened to %1 before." ).arg( m_artist->name() ); + + ui->statsLabel->setText( stats ); +} + + +void +TrackInfoWidget::onSimilarArtistsLoaded() +{ + Artist* artist = qobject_cast( sender() ); + +// m_albumsModel->addArtists( artist->similarArtists() ); +} + + +void +TrackInfoWidget::onSimilarTracksLoaded() +{ + m_albumsModel->addQueries( m_query->similarTracks() ); +} + + +void +TrackInfoWidget::changeEvent( QEvent* e ) +{ + QWidget::changeEvent( e ); + switch ( e->type() ) + { + case QEvent::LanguageChange: + ui->retranslateUi( this ); + break; + + default: + break; + } +} diff --git a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h new file mode 100644 index 000000000..2526a867d --- /dev/null +++ b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h @@ -0,0 +1,95 @@ +/* === This file is part of Tomahawk Player - === + * + * Copyright 2010-2011, Christian Muehlhaeuser + * Copyright 2010-2011, Jeff Mitchell + * Copyright 2010-2011, Leo Franchi + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk 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 Tomahawk. If not, see . + */ + +/** + * \class TrackInfoWidget + * \brief ViewPage, which displays a track + * + * This Tomahawk ViewPage displays a track + * It is our default ViewPage when showing an track via ViewManager. + * + */ + +#ifndef TRACKINFOWIDGET_H +#define TRACKINFOWIDGET_H + +#include + +#include "PlaylistInterface.h" +#include "ViewPage.h" +#include "infosystem/InfoSystem.h" + +#include "DllMacro.h" +#include "Typedefs.h" + +class AlbumModel; + +namespace Ui +{ + class TrackInfoWidget; +} + +class DLLEXPORT TrackInfoWidget : public QWidget, public Tomahawk::ViewPage +{ +Q_OBJECT + +public: + TrackInfoWidget( const Tomahawk::query_ptr& query, QWidget* parent = 0 ); + ~TrackInfoWidget(); + + virtual QWidget* widget() { return this; } + virtual Tomahawk::playlistinterface_ptr playlistInterface() const; + + virtual QString title() const { return QString(); } + virtual QString description() const { return QString(); } + virtual QString longDescription() const { return QString(); } + virtual QPixmap pixmap() const { if ( m_pixmap.isNull() ) return Tomahawk::ViewPage::pixmap(); else return m_pixmap; } + + virtual bool isTemporaryPage() const { return true; } + virtual bool showStatsBar() const { return false; } + virtual bool showInfoBar() const { return false; } + + virtual bool jumpToCurrentTrack() { return false; } + virtual bool isBeingPlayed() const; + +public slots: + void load( const Tomahawk::query_ptr& query ); + +protected: + void changeEvent( QEvent* e ); + +private slots: + void onCoverUpdated(); + void onStatsLoaded(); + void onSimilarArtistsLoaded(); + void onSimilarTracksLoaded(); + +private: + Ui::TrackInfoWidget *ui; + + Tomahawk::query_ptr m_query; + Tomahawk::artist_ptr m_artist; + + AlbumModel* m_albumsModel; + QPixmap m_pixmap; + QString m_infoId; +}; + +#endif // TRACKINFOWIDGET_H diff --git a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.ui b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.ui new file mode 100644 index 000000000..d6387b683 --- /dev/null +++ b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.ui @@ -0,0 +1,202 @@ + + + TrackInfoWidget + + + + 0 + 0 + 852 + 571 + + + + Form + + + + 0 + + + + + + 12 + + + + + + 0 + 0 + + + + + 128 + 128 + + + + Cover + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 16 + 20 + + + + + + + + + + Track + + + + + + + + + + 0 + 0 + + + + by + + + + + + + Artist + + + + + + + + + + + + 0 + 0 + + + + from + + + + + + + Album + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 40 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 16 + 20 + + + + + + + + Statistics + + + Qt::AlignCenter + + + + + + + + + + + + + Similar Tracks + + + 8 + + + + + + + + 0 + 0 + + + + + + + + + + + + AlbumView + QListView +
playlist/AlbumView.h
+
+
+ + +
From a9b3ad786c05710bcbf23a728b4938b8e0b97857 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 17:00:35 +0200 Subject: [PATCH 18/47] * Info button for tracks. --- src/libtomahawk/playlist/TrackView.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/libtomahawk/playlist/TrackView.cpp b/src/libtomahawk/playlist/TrackView.cpp index 74651b917..a49f5cc4c 100644 --- a/src/libtomahawk/playlist/TrackView.cpp +++ b/src/libtomahawk/playlist/TrackView.cpp @@ -600,7 +600,7 @@ TrackView::updateHoverIndex( const QPoint& pos ) if ( !m_model || m_model->style() != TrackModel::Detailed ) return; - if ( idx.column() == TrackModel::Artist || idx.column() == TrackModel::Album ) + if ( idx.column() == TrackModel::Artist || idx.column() == TrackModel::Album || idx.column() == TrackModel::Track ) { if ( pos.x() > header()->sectionViewportPosition( idx.column() ) + header()->sectionSize( idx.column() ) - 16 && pos.x() < header()->sectionViewportPosition( idx.column() ) + header()->sectionSize( idx.column() ) ) @@ -686,6 +686,12 @@ TrackView::mousePressEvent( QMouseEvent* event ) break; } + case TrackModel::Track: + { + ViewManager::instance()->show( item->query() ); + break; + } + default: break; } From 7789c1ec2cf39af0c4f7d611698b495f7b3b39b8 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 17:01:02 +0200 Subject: [PATCH 19/47] * Supprt info button for Tracks. --- src/libtomahawk/playlist/PlaylistItemDelegate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libtomahawk/playlist/PlaylistItemDelegate.cpp b/src/libtomahawk/playlist/PlaylistItemDelegate.cpp index cfe4a03eb..d324e1dab 100644 --- a/src/libtomahawk/playlist/PlaylistItemDelegate.cpp +++ b/src/libtomahawk/playlist/PlaylistItemDelegate.cpp @@ -232,7 +232,7 @@ PlaylistItemDelegate::paintDetailed( QPainter* painter, const QStyleOptionViewIt qApp->style()->drawControl( QStyle::CE_ItemViewItem, &opt, painter ); if ( m_view->hoveredIndex().row() == index.row() && m_view->hoveredIndex().column() == index.column() && - ( index.column() == TrackModel::Artist || index.column() == TrackModel::Album ) ) + ( index.column() == TrackModel::Artist || index.column() == TrackModel::Album || index.column() == TrackModel::Track ) ) { opt.rect.setWidth( opt.rect.width() - 16 ); QRect arrowRect( opt.rect.x() + opt.rect.width(), opt.rect.y() + 1, opt.rect.height() - 2, opt.rect.height() - 2 ); From 22e05bd6ea0da0b1b75689abf990171285d81c9b Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 17:11:23 +0200 Subject: [PATCH 20/47] * Fixed Last.fm plugin. --- src/accounts/lastfm/LastFmInfoPlugin.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/accounts/lastfm/LastFmInfoPlugin.cpp b/src/accounts/lastfm/LastFmInfoPlugin.cpp index d7fe53fc0..f016cf312 100644 --- a/src/accounts/lastfm/LastFmInfoPlugin.cpp +++ b/src/accounts/lastfm/LastFmInfoPlugin.cpp @@ -274,7 +274,7 @@ LastFmInfoPlugin::fetchSimilarArtists( Tomahawk::InfoSystem::InfoRequestData req void -LastFmPlugin::fetchSimilarTracks( Tomahawk::InfoSystem::InfoRequestData requestData ) +LastFmInfoPlugin::fetchSimilarTracks( Tomahawk::InfoSystem::InfoRequestData requestData ) { if ( !requestData.input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) { @@ -297,7 +297,7 @@ LastFmPlugin::fetchSimilarTracks( Tomahawk::InfoSystem::InfoRequestData requestD void -LastFmPlugin::fetchTopTracks( Tomahawk::InfoSystem::InfoRequestData requestData ) +LastFmInfoPlugin::fetchTopTracks( Tomahawk::InfoSystem::InfoRequestData requestData ) { if ( !requestData.input.canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) { @@ -317,6 +317,7 @@ LastFmPlugin::fetchTopTracks( Tomahawk::InfoSystem::InfoRequestData requestData emit getCachedInfo( criteria, 2419200000, requestData ); } + void LastFmInfoPlugin::fetchChart( Tomahawk::InfoSystem::InfoRequestData requestData ) { @@ -596,10 +597,7 @@ LastFmInfoPlugin::similarArtistsReturned() void -<<<<<<< HEAD:src/accounts/lastfm/LastFmInfoPlugin.cpp -LastFmInfoPlugin::chartReturned() -======= -LastFmPlugin::similarTracksReturned() +LastFmInfoPlugin::similarTracksReturned() { QNetworkReply* reply = qobject_cast( sender() ); @@ -646,8 +644,7 @@ LastFmPlugin::similarTracksReturned() void -LastFmPlugin::chartReturned() ->>>>>>> * Added similar tracks infosystem call.:src/accounts/lastfm/LastFmPlugin.cpp +LastFmInfoPlugin::chartReturned() { QNetworkReply* reply = qobject_cast( sender() ); From 79c2c12631526f16c6a0044e4392034d7e6daac0 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 17:13:08 +0200 Subject: [PATCH 21/47] * Added ViewPage title for TrackInfoWidget. --- src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp | 1 + src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp index d4e606a11..33783121f 100644 --- a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp +++ b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp @@ -111,6 +111,7 @@ TrackInfoWidget::load( const query_ptr& query ) { m_query = query; m_artist = Artist::get( m_query->artist() ); + m_title = QString( "%1 - %2" ).arg( query->artist() ).arg( query->track() ); if ( !m_query.isNull() ) { diff --git a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h index 2526a867d..d03968dcd 100644 --- a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h +++ b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h @@ -57,7 +57,7 @@ public: virtual QWidget* widget() { return this; } virtual Tomahawk::playlistinterface_ptr playlistInterface() const; - virtual QString title() const { return QString(); } + virtual QString title() const { return m_title; } virtual QString description() const { return QString(); } virtual QString longDescription() const { return QString(); } virtual QPixmap pixmap() const { if ( m_pixmap.isNull() ) return Tomahawk::ViewPage::pixmap(); else return m_pixmap; } @@ -88,6 +88,7 @@ private: Tomahawk::artist_ptr m_artist; AlbumModel* m_albumsModel; + QString m_title; QPixmap m_pixmap; QString m_infoId; }; From 789536c49fbbf6f81bf1059f57840fc48d536014 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Sat, 5 May 2012 17:24:12 +0200 Subject: [PATCH 22/47] * Added title & description for latest special ViewPages. --- src/libtomahawk/ViewManager.cpp | 2 ++ src/sourcetree/items/SourceItem.cpp | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/libtomahawk/ViewManager.cpp b/src/libtomahawk/ViewManager.cpp index 983e4bbe1..f8aa166e3 100644 --- a/src/libtomahawk/ViewManager.cpp +++ b/src/libtomahawk/ViewManager.cpp @@ -494,6 +494,8 @@ ViewManager::showRecentPlaysPage() pv->setAttribute( Qt::WA_MacShowFocusRect, 0 ); RecentlyPlayedModel* raModel = new RecentlyPlayedModel( source_ptr(), pv ); + raModel->setTitle( tr( "Recently Played Tracks" ) ); + raModel->setDescription( tr( "Recently played tracks from all your friends" ) ); raModel->setStyle( TrackModel::Large ); PlaylistLargeItemDelegate* del = new PlaylistLargeItemDelegate( PlaylistLargeItemDelegate::RecentlyPlayed, pv, pv->proxyModel() ); diff --git a/src/sourcetree/items/SourceItem.cpp b/src/sourcetree/items/SourceItem.cpp index e6a6ee32c..1a4caa914 100644 --- a/src/sourcetree/items/SourceItem.cpp +++ b/src/sourcetree/items/SourceItem.cpp @@ -534,6 +534,12 @@ SourceItem::latestAdditionsClicked() RecentlyAddedModel* raModel = new RecentlyAddedModel( m_source, cv ); raModel->setStyle( TrackModel::Large ); + raModel->setTitle( tr( "Latest Additions" ) ); + + if ( m_source->isLocal() ) + raModel->setDescription( tr( "Latest additions to your collection" ) ); + else + raModel->setDescription( tr( "Latest additions to %1's collection" ).arg( m_source->friendlyName() ) ); PlaylistLargeItemDelegate* del = new PlaylistLargeItemDelegate( PlaylistLargeItemDelegate::LatestAdditions, cv, cv->proxyModel() ); connect( del, SIGNAL( updateIndex( QModelIndex ) ), cv, SLOT( update( QModelIndex ) ) ); @@ -568,6 +574,12 @@ SourceItem::recentPlaysClicked() RecentlyPlayedModel* raModel = new RecentlyPlayedModel( m_source, pv ); raModel->setStyle( TrackModel::Large ); + raModel->setTitle( tr( "Recently Played Tracks" ) ); + + if ( m_source->isLocal() ) + raModel->setDescription( tr( "Your recently played tracks" ) ); + else + raModel->setDescription( tr( "%1's recently played tracks" ).arg( m_source->friendlyName() ) ); PlaylistLargeItemDelegate* del = new PlaylistLargeItemDelegate( PlaylistLargeItemDelegate::RecentlyPlayed, pv, pv->proxyModel() ); connect( del, SIGNAL( updateIndex( QModelIndex ) ), pv, SLOT( update( QModelIndex ) ) ); From cbd25df44de651e2a73f039e176a98ce6e19f598 Mon Sep 17 00:00:00 2001 From: Jason Herskowitz Date: Sat, 5 May 2012 13:01:17 -0400 Subject: [PATCH 23/47] Add jump link icon for use in Now Playing area - go back to current playing list view --- data/images/jump-link.png | Bin 0 -> 4926 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/images/jump-link.png diff --git a/data/images/jump-link.png b/data/images/jump-link.png new file mode 100644 index 0000000000000000000000000000000000000000..09a0cf0fb57d1d06e86da694ccfbc77effb2a232 GIT binary patch literal 4926 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 Date: Sat, 5 May 2012 22:16:30 +0000 Subject: [PATCH 24/47] Automatic merge of Transifex translations --- lang/tomahawk_bg.ts | 155 +- lang/tomahawk_de.ts | 155 +- lang/tomahawk_en.ts | 145 +- lang/tomahawk_es.ts | 269 ++- lang/tomahawk_fr.ts | 153 +- lang/tomahawk_ja.ts | 145 +- lang/tomahawk_pl.ts | 145 +- lang/tomahawk_pt_BR.ts | 155 +- lang/tomahawk_ru.ts | 151 +- lang/tomahawk_sv.ts | 145 +- lang/tomahawk_tr.ts | 3791 ++++++++++++++++++++++++++++++++++++++++ lang/tomahawk_zh_CN.ts | 145 +- lang/tomahawk_zh_TW.ts | 151 +- 13 files changed, 5402 insertions(+), 303 deletions(-) create mode 100644 lang/tomahawk_tr.ts diff --git a/lang/tomahawk_bg.ts b/lang/tomahawk_bg.ts index e947a99ac..cd1fb8e6c 100644 --- a/lang/tomahawk_bg.ts +++ b/lang/tomahawk_bg.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. След като бъде сканирана музикалната ти колекция, ще откриеш тук най-скоро добавените албуми. - + This collection doesn't have any recent albums. В тази колекция все още няма добавени наскоро албуми. @@ -724,7 +724,7 @@ connect and stream from you? A playlist by %1, created %2 - A playlist by %1, created %2 + Списък - създател %1, от %2 @@ -1195,6 +1195,7 @@ connect and stream from you? + Latest Additions Последно добавени @@ -1213,6 +1214,31 @@ connect and stream from you? SuperCollection Супер колекция + + + Latest additions to your collection + Последно добавени към колекцията + + + + Latest additions to %1's collection + Последно добавени в колекцията на %1 + + + + Recently Played Tracks + Наскоро изпълнени песни + + + + Your recently played tracks + Наскоро изпълнени песни от теб + + + + %1's recently played tracks + Наскоро изпълнените песни от %1 + SourceTreeView @@ -2443,31 +2469,31 @@ Try tweaking the filters for a new set of songs to play. - Tomahawk::InfoSystem::LastFmPlugin + Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - Най-актуални песни + Най-слушани песни - + Loved Tracks - Харесвани песни + Харесани песни - + Hyped Tracks - Песни слушани най-често + Песни, изпъкващи сред останалите - + Top Artists Най-слушани артисти - + Hyped Artists - Артисти слушани най-често + Изпълнители, изпъкващи сред останалите @@ -2539,37 +2565,37 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::Query - + and и - + You Ти - + you ти - + and и - + %n other(s) %n друг%n други - + %1 people %1 хора - + loved this track хареса тази песен @@ -3071,6 +3097,79 @@ enter the displayed PIN number here: Най-слушани + + TrackInfoWidget + + + Form + + + + + Cover + Обложка + + + + Track + Песен + + + + by + от + + + + Artist + Изпълнител + + + + from + от + + + + Album + Албум + + + + Statistics + Статистика + + + + Similar Tracks + Подобни песни + + + + You've listened to this track %n time(s). + Ти си слушал тази песен %n път(и)Ти си слушал тази песен %n път(и) + + + + You've never listened to this track before. + Никога не си слушал тази песен преди + + + + You first listened to it on %1. + Първоначално си я слушал на %1 + + + + You've listened to %1 %n time(s). + Слушал си %1 път(и)Слушал си %1 %n път(и) + + + + You've never listened to %1 before. + Никога не си слушал %1 преди + + TrackModel @@ -3300,20 +3399,30 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + SuperCollection Супер колекция - + Combined libraries of all your online friends Комбинирани библиотеки от всичките ми приятели на линия - + All available albums Всички налични албуми + + + Recently Played Tracks + Наскоро изпълени песни + + + + Recently played tracks from all your friends + Наскоро изпълнени песни от всичките ти приятели + WelcomeWidget diff --git a/lang/tomahawk_de.ts b/lang/tomahawk_de.ts index abb1a5df5..3a4f7820d 100644 --- a/lang/tomahawk_de.ts +++ b/lang/tomahawk_de.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. Nachdem Tomahawk deine Sammlung durchsucht hast siehst du hier deine neuesten Alben. - + This collection doesn't have any recent albums. Diese Sammlung ist leer. @@ -1193,6 +1193,7 @@ connect and stream from you? + Latest Additions Kürzlich hinzugekommen @@ -1211,6 +1212,31 @@ connect and stream from you? SuperCollection Supersammlung + + + Latest additions to your collection + + + + + Latest additions to %1's collection + + + + + Recently Played Tracks + + + + + Your recently played tracks + + + + + %1's recently played tracks + + SourceTreeView @@ -2435,31 +2461,31 @@ Versuch die Filter anzupassen für neue Lieder.
- Tomahawk::InfoSystem::LastFmPlugin + Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - Größte Hits + - + Loved Tracks - Lieblings Lieder + - + Hyped Tracks - Angesagte Stücke + - + Top Artists - Top Künstler + - + Hyped Artists - Gehypte Künstler + @@ -2531,37 +2557,37 @@ Versuch die Filter anzupassen für neue Lieder.
Tomahawk::Query - + and und - + You Du - + you du - + and und - + %n other(s) %n anderer%n andere - + %1 people %1 Leute - + loved this track liebte dieses Lied @@ -3060,6 +3086,79 @@ Tomahawk auf Twitter's Website authentifiziert hast: Top Hits + + TrackInfoWidget + + + Form + + + + + Cover + + + + + Track + + + + + by + + + + + Artist + + + + + from + + + + + Album + + + + + Statistics + + + + + Similar Tracks + + + + + You've listened to this track %n time(s). + + + + + You've never listened to this track before. + + + + + You first listened to it on %1. + + + + + You've listened to %1 %n time(s). + + + + + You've never listened to %1 before. + + + TrackModel @@ -3283,20 +3382,30 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + SuperCollection SuperCollection - + Combined libraries of all your online friends Kombinierte Sammlung all deiner Freunde - + All available albums Alle verfügbaren Alben + + + Recently Played Tracks + + + + + Recently played tracks from all your friends + + WelcomeWidget diff --git a/lang/tomahawk_en.ts b/lang/tomahawk_en.ts index 26510cd6b..02517d38f 100644 --- a/lang/tomahawk_en.ts +++ b/lang/tomahawk_en.ts @@ -184,12 +184,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. After you have scanned your music collection you will find your latest album additions right here. - + This collection doesn't have any recent albums. This collection doesn't have any recent albums. @@ -1194,6 +1194,7 @@ connect and stream from you? + Latest Additions Latest Additions @@ -1212,6 +1213,31 @@ connect and stream from you? SuperCollection SuperCollection + + + Latest additions to your collection + Latest additions to your collection + + + + Latest additions to %1's collection + Latest additions to %1's collection + + + + Recently Played Tracks + Recently Played Tracks + + + + Your recently played tracks + Your recently played tracks + + + + %1's recently played tracks + %1's recently played tracks + SourceTreeView @@ -2441,29 +2467,29 @@ Try tweaking the filters for a new set of songs to play. - Tomahawk::InfoSystem::LastFmPlugin + Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks Top Tracks - + Loved Tracks Loved Tracks - + Hyped Tracks Hyped Tracks - + Top Artists Top Artists - + Hyped Artists Hyped Artists @@ -2537,37 +2563,37 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::Query - + and and - + You You - + you you - + and and - + %n other(s) %n other%n others - + %1 people %1 people - + loved this track loved this track @@ -3066,6 +3092,79 @@ enter the displayed PIN number here: Top Hits + + TrackInfoWidget + + + Form + Form + + + + Cover + Cover + + + + Track + Track + + + + by + by + + + + Artist + Artist + + + + from + from + + + + Album + Album + + + + Statistics + Statistics + + + + Similar Tracks + Similar Tracks + + + + You've listened to this track %n time(s). + You've listened to this track %n time(s).You've listened to this track %n time(s). + + + + You've never listened to this track before. + You've never listened to this track before. + + + + You first listened to it on %1. + You first listened to it on %1. + + + + You've listened to %1 %n time(s). + You've listened to %1 %n time(s).You've listened to %1 %n time(s). + + + + You've never listened to %1 before. + You've never listened to %1 before. + + TrackModel @@ -3294,20 +3393,30 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + SuperCollection SuperCollection - + Combined libraries of all your online friends Combined libraries of all your online friends - + All available albums All available albums + + + Recently Played Tracks + Recently Played Tracks + + + + Recently played tracks from all your friends + Recently played tracks from all your friends + WelcomeWidget diff --git a/lang/tomahawk_es.ts b/lang/tomahawk_es.ts index b857e4f7f..4254f828b 100644 --- a/lang/tomahawk_es.ts +++ b/lang/tomahawk_es.ts @@ -4,17 +4,17 @@ Dialog - + Diálogo Description goes here - + Descripción Add Account - + Añadir Cuenta @@ -22,17 +22,17 @@ Online - + Conectado Connecting... - + Conectando... Offline - + Desconectado @@ -40,7 +40,7 @@ Error displaying ACL info - + Error mostrando informacion de ACL @@ -65,7 +65,7 @@ connect and stream from you? &Follow in real-time - + &Seguir en tiempo real @@ -142,18 +142,18 @@ connect and stream from you? Click to show SuperCollection Tracks - + Mostrar pistas en SuperColección Click to show SuperCollection Albums - + Mostrar álbumes en SuperColección Click to show Official Albums - + Mostrar álbumes oficiales @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. Tras haber escaneado su colección aquí encontrará los últimos álbumes añadidos. - + This collection doesn't have any recent albums. Esta colección no tiene álbumes recientes. @@ -219,12 +219,12 @@ connect and stream from you? Click to show SuperCollection Albums - + Mostrar álbumes en SuperColección Click to show Official Albums - + Mostrar álbumes oficiales @@ -285,7 +285,7 @@ connect and stream from you? social - + social @@ -465,17 +465,17 @@ connect and stream from you? About - + Acerca de Delete Account - + Eliminar Cuenta About this Account - + Acerca de esta Cuenta @@ -501,7 +501,7 @@ connect and stream from you? No tracks found for given %1 - + Ninguna pista fue encontrada para %1 @@ -561,22 +561,22 @@ connect and stream from you? Scrobble tracks to Last.fm - + Hacer scrobble a las pistas en Last.fm Username: - + Usuario: Password: - + Contraseña: Test Login - + Probar conexión @@ -605,7 +605,7 @@ connect and stream from you? Playlist URL - + URL de lista de reproducción @@ -682,7 +682,7 @@ connect and stream from you? New Releases - + Últimas novedades @@ -703,17 +703,17 @@ connect and stream from you? played %1 by you - + %1 reproducido por usted played %1 by %2 - + %1 reproducido por %2 added %1 - + añadio %1 @@ -914,17 +914,17 @@ connect and stream from you? Friend Finders - + Buscador de amigos Music Finders - + Buscador de musica Status Updaters - + Actualizadores de estado @@ -1011,17 +1011,17 @@ connect and stream from you? All - + Todo Some changed settings will not take effect until Tomahawk is restarted - + Algunos cambios no tomarán efecto hasta reiniciar Tomahawk Services - + Servicios @@ -1062,17 +1062,17 @@ connect and stream from you? Facebook - + Facebook Twitter - + Twitter Cover - + Portada @@ -1141,13 +1141,13 @@ connect and stream from you? Show - + Mostrar Hide - + Ocultar @@ -1188,26 +1188,52 @@ connect and stream from you? Collection - + Colección + Latest Additions - + Añadidos recientemente Recently Played - + Reproducido recientemente Loved Tracks - + Pistas favoritas SuperCollection + SuperColección + + + + Latest additions to your collection + + + + + Latest additions to %1's collection + + + + + Recently Played Tracks + + + + + Your recently played tracks + + + + + %1's recently played tracks @@ -1274,22 +1300,22 @@ connect and stream from you? Search History - + Historial de Búsqueda My Music - + Mi Musica SuperCollection - + SuperColección Top Loved Tracks - + Pistas favoritas @@ -1299,7 +1325,7 @@ connect and stream from you? Recently Played - + Reproducido recientemente @@ -1309,12 +1335,12 @@ connect and stream from you? New Releases - + Últimas novedades Friends - + Amigos @@ -1517,12 +1543,12 @@ y estaciones basadas en sus gustos personales. Add Account - + Añadir Cuenta Remove Account - + Eliminar Cuenta @@ -1532,17 +1558,17 @@ y estaciones basadas en sus gustos personales. Online - + Conectado Connecting... - + Conectando... Offline - + Desconectado @@ -1565,7 +1591,7 @@ y estaciones basadas en sus gustos personales. username@gmail.com - + usuario@gmail.com @@ -2434,31 +2460,31 @@ Try tweaking the filters for a new set of songs to play. - Tomahawk::InfoSystem::LastFmPlugin + Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - Pistas más escuchadas + - + Loved Tracks - Pistas favoritas + - + Hyped Tracks - Pistas en alza + - + Top Artists - Artistas más escuchados + - + Hyped Artists - Artistas en alza + @@ -2530,37 +2556,37 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::Query - + and - + You - + you - + and - + %n other(s) - + %1 people - + loved this track @@ -3059,6 +3085,79 @@ introduzca su número PIN aquí: Grandes éxitos + + TrackInfoWidget + + + Form + + + + + Cover + + + + + Track + + + + + by + + + + + Artist + + + + + from + + + + + Album + + + + + Statistics + + + + + Similar Tracks + + + + + You've listened to this track %n time(s). + + + + + You've never listened to this track before. + + + + + You first listened to it on %1. + + + + + You've listened to %1 %n time(s). + + + + + You've never listened to %1 before. + + + TrackModel @@ -3191,7 +3290,7 @@ introduzca su número PIN aquí: Composer - + Compositor @@ -3287,20 +3386,30 @@ Puede reenviar el mensaje de sincronización en cualquier momento simplemente en ViewManager - + SuperCollection - + SuperColección - + Combined libraries of all your online friends - + All available albums Todos los álbumes disponibles + + + Recently Played Tracks + + + + + Recently played tracks from all your friends + + WelcomeWidget diff --git a/lang/tomahawk_fr.ts b/lang/tomahawk_fr.ts index adeec426c..8138f2510 100644 --- a/lang/tomahawk_fr.ts +++ b/lang/tomahawk_fr.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. Après avoir scanné votre collection musicale, vous trouverez les derniers albums ajoutés ici. - + This collection doesn't have any recent albums. Cette collection n'a pas d'albums récents @@ -1193,6 +1193,7 @@ connect and stream from you? + Latest Additions Derniers ajouts @@ -1211,6 +1212,31 @@ connect and stream from you? SuperCollection SuperCollection + + + Latest additions to your collection + + + + + Latest additions to %1's collection + + + + + Recently Played Tracks + + + + + Your recently played tracks + + + + + %1's recently played tracks + + SourceTreeView @@ -2440,31 +2466,31 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer. - Tomahawk::InfoSystem::LastFmPlugin + Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - Top des pistes + - + Loved Tracks - + Hyped Tracks - Pistes à la mode + - + Top Artists - Top Artistes + - + Hyped Artists - Artistes à la mode + @@ -2536,37 +2562,37 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer. Tomahawk::Query - + and et - + You Vous - + you vous - + and et - + %n other(s) %n autre%n autres - + %1 people %1 personnes - + loved this track @@ -3065,6 +3091,79 @@ saisissez le numéro PIN ici : + + TrackInfoWidget + + + Form + + + + + Cover + + + + + Track + + + + + by + + + + + Artist + + + + + from + + + + + Album + + + + + Statistics + + + + + Similar Tracks + + + + + You've listened to this track %n time(s). + + + + + You've never listened to this track before. + + + + + You first listened to it on %1. + + + + + You've listened to %1 %n time(s). + + + + + You've never listened to %1 before. + + + TrackModel @@ -3293,20 +3392,30 @@ Vous pouvez envoyer un message de synchronisation quand vous le souhaitez en env ViewManager - + SuperCollection SuperCollection - + Combined libraries of all your online friends Collections regroupant toutes celles de vos amis en ligne - + All available albums Tous les albums disponibles + + + Recently Played Tracks + + + + + Recently played tracks from all your friends + + WelcomeWidget diff --git a/lang/tomahawk_ja.ts b/lang/tomahawk_ja.ts index 3b634e79e..7604d2a43 100644 --- a/lang/tomahawk_ja.ts +++ b/lang/tomahawk_ja.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. - + This collection doesn't have any recent albums. @@ -1194,6 +1194,7 @@ other: %n年前 + Latest Additions @@ -1212,6 +1213,31 @@ other: %n年前 SuperCollection スーパーコレクション + + + Latest additions to your collection + + + + + Latest additions to %1's collection + + + + + Recently Played Tracks + + + + + Your recently played tracks + + + + + %1's recently played tracks + + SourceTreeView @@ -2431,29 +2457,29 @@ Try tweaking the filters for a new set of songs to play. - Tomahawk::InfoSystem::LastFmPlugin + Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - + Loved Tracks - + Hyped Tracks - + Top Artists - + Hyped Artists @@ -2527,37 +2553,37 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::Query - + and - + You - + you - + and - + %n other(s) - + %1 people - + loved this track @@ -3055,6 +3081,79 @@ enter the displayed PIN number here: + + TrackInfoWidget + + + Form + + + + + Cover + + + + + Track + + + + + by + + + + + Artist + + + + + from + + + + + Album + + + + + Statistics + + + + + Similar Tracks + + + + + You've listened to this track %n time(s). + + + + + You've never listened to this track before. + + + + + You first listened to it on %1. + + + + + You've listened to %1 %n time(s). + + + + + You've never listened to %1 before. + + + TrackModel @@ -3278,20 +3377,30 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + SuperCollection - + Combined libraries of all your online friends - + All available albums + + + Recently Played Tracks + + + + + Recently played tracks from all your friends + + WelcomeWidget diff --git a/lang/tomahawk_pl.ts b/lang/tomahawk_pl.ts index 0ef38bb4b..13f8bbb30 100644 --- a/lang/tomahawk_pl.ts +++ b/lang/tomahawk_pl.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. Po zeskanowaniu swojej kolekcji muzycznej w tym miejscu znajdziesz ostatnio dodane albumy. - + This collection doesn't have any recent albums. Ta kolekcja nie zawiera żadnych nowo dodanych albumów. @@ -1192,6 +1192,7 @@ connect and stream from you? + Latest Additions Ostatnio Dodane @@ -1210,6 +1211,31 @@ connect and stream from you? SuperCollection Superkolekcja + + + Latest additions to your collection + + + + + Latest additions to %1's collection + + + + + Recently Played Tracks + + + + + Your recently played tracks + + + + + %1's recently played tracks + + SourceTreeView @@ -2435,29 +2461,29 @@ Try tweaking the filters for a new set of songs to play. - Tomahawk::InfoSystem::LastFmPlugin + Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - + Loved Tracks - + Hyped Tracks - + Top Artists - + Hyped Artists @@ -2531,37 +2557,37 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::Query - + and i - + You Ty - + you ty - + and i - + %n other(s) %n inny%n inne%n innych - + %1 people - + loved this track @@ -3060,6 +3086,79 @@ wprowadź pokazany numer PIN tutaj: Hity na Topie + + TrackInfoWidget + + + Form + + + + + Cover + + + + + Track + + + + + by + + + + + Artist + + + + + from + + + + + Album + + + + + Statistics + + + + + Similar Tracks + + + + + You've listened to this track %n time(s). + + + + + You've never listened to this track before. + + + + + You first listened to it on %1. + + + + + You've listened to %1 %n time(s). + + + + + You've never listened to %1 before. + + + TrackModel @@ -3288,20 +3387,30 @@ Zawsze możesz ponownie wysłać wiadomość synchronizacyjną - po prostu wyśl ViewManager - + SuperCollection SuperKolekcja - + Combined libraries of all your online friends Połączone biblioteki wszystkich twoich znajomych online - + All available albums Wszystkie dostępne albumy + + + Recently Played Tracks + + + + + Recently played tracks from all your friends + + WelcomeWidget diff --git a/lang/tomahawk_pt_BR.ts b/lang/tomahawk_pt_BR.ts index 59f331174..2049d15c2 100644 --- a/lang/tomahawk_pt_BR.ts +++ b/lang/tomahawk_pt_BR.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. Depois que você escanear a sua biblioteca musical você encontrará aqui o último álbum adicionado. - + This collection doesn't have any recent albums. Essa biblioteca não tem nenhum álbum recente. @@ -1192,6 +1192,7 @@ connect and stream from you? + Latest Additions @@ -1210,6 +1211,31 @@ connect and stream from you? SuperCollection + + + Latest additions to your collection + + + + + Latest additions to %1's collection + + + + + Recently Played Tracks + + + + + Your recently played tracks + + + + + %1's recently played tracks + + SourceTreeView @@ -2434,31 +2460,31 @@ Try tweaking the filters for a new set of songs to play. - Tomahawk::InfoSystem::LastFmPlugin + Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - Faixas principais + - + Loved Tracks - Faixas favoritas + - + Hyped Tracks - Faixas mais populares + - + Top Artists - Artistas principais + - + Hyped Artists - Artistas mais populares + @@ -2530,37 +2556,37 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::Query - + and e - + You - + you - + and e - + %n other(s) - + %1 people %1 pessoas - + loved this track @@ -3059,6 +3085,79 @@ colocar o número PIN mostrado aqui: Maiores sucessos + + TrackInfoWidget + + + Form + + + + + Cover + + + + + Track + + + + + by + + + + + Artist + + + + + from + + + + + Album + + + + + Statistics + + + + + Similar Tracks + + + + + You've listened to this track %n time(s). + + + + + You've never listened to this track before. + + + + + You first listened to it on %1. + + + + + You've listened to %1 %n time(s). + + + + + You've never listened to %1 before. + + + TrackModel @@ -3287,20 +3386,30 @@ Você pode enviar uma outra mensagem de sincronia a qualquer momento simplesment ViewManager - + SuperCollection - + Combined libraries of all your online friends - + All available albums Todos os álbuns disponíveis + + + Recently Played Tracks + + + + + Recently played tracks from all your friends + + WelcomeWidget diff --git a/lang/tomahawk_ru.ts b/lang/tomahawk_ru.ts index bfa56cb2e..9b3b9ebdc 100644 --- a/lang/tomahawk_ru.ts +++ b/lang/tomahawk_ru.ts @@ -184,12 +184,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. После сканирования вашей музыкальной коллекции вы найдете свой альбомы тут. - + This collection doesn't have any recent albums. Эта коллекция не имеет последних альбомов. @@ -1194,6 +1194,7 @@ connect and stream from you? + Latest Additions Последние добавленные @@ -1212,6 +1213,31 @@ connect and stream from you? SuperCollection Общая коллекция + + + Latest additions to your collection + + + + + Latest additions to %1's collection + + + + + Recently Played Tracks + + + + + Your recently played tracks + + + + + %1's recently played tracks + + SourceTreeView @@ -2436,29 +2462,29 @@ Try tweaking the filters for a new set of songs to play. - Tomahawk::InfoSystem::LastFmPlugin + Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - Топ песен + - + Loved Tracks - Любимые песни + - + Hyped Tracks - + Top Artists - Любимые исполнители + - + Hyped Artists @@ -2532,37 +2558,37 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::Query - + and и - + You Ты - + you ты - + and и - + %n other(s) - + %1 people %1 человек - + loved this track любимый @@ -3060,6 +3086,79 @@ enter the displayed PIN number here: Хиты + + TrackInfoWidget + + + Form + + + + + Cover + + + + + Track + + + + + by + + + + + Artist + + + + + from + + + + + Album + + + + + Statistics + + + + + Similar Tracks + + + + + You've listened to this track %n time(s). + + + + + You've never listened to this track before. + + + + + You first listened to it on %1. + + + + + You've listened to %1 %n time(s). + + + + + You've never listened to %1 before. + + + TrackModel @@ -3287,20 +3386,30 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + SuperCollection Общая коллекция - + Combined libraries of all your online friends Комбинированные библиотек всех ваших друзей онлайн - + All available albums Доступные альбомы + + + Recently Played Tracks + + + + + Recently played tracks from all your friends + + WelcomeWidget diff --git a/lang/tomahawk_sv.ts b/lang/tomahawk_sv.ts index 715d4c326..7313bf206 100644 --- a/lang/tomahawk_sv.ts +++ b/lang/tomahawk_sv.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. Efter att du har scannat din musiksamling kommer du finna dina senaste tillagda album här. - + This collection doesn't have any recent albums. Den här samlingen inga nya album. @@ -1193,6 +1193,7 @@ connect and stream from you? + Latest Additions Senast tillagda @@ -1211,6 +1212,31 @@ connect and stream from you? SuperCollection SuperCollection + + + Latest additions to your collection + + + + + Latest additions to %1's collection + + + + + Recently Played Tracks + + + + + Your recently played tracks + + + + + %1's recently played tracks + + SourceTreeView @@ -2430,29 +2456,29 @@ Try tweaking the filters for a new set of songs to play. - Tomahawk::InfoSystem::LastFmPlugin + Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - + Loved Tracks - + Hyped Tracks - + Top Artists - + Hyped Artists @@ -2526,37 +2552,37 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::Query - + and - + You - + you - + and - + %n other(s) - + %1 people - + loved this track @@ -3054,6 +3080,79 @@ enter the displayed PIN number here: + + TrackInfoWidget + + + Form + + + + + Cover + + + + + Track + + + + + by + + + + + Artist + + + + + from + + + + + Album + + + + + Statistics + + + + + Similar Tracks + + + + + You've listened to this track %n time(s). + + + + + You've never listened to this track before. + + + + + You first listened to it on %1. + + + + + You've listened to %1 %n time(s). + + + + + You've never listened to %1 before. + + + TrackModel @@ -3277,20 +3376,30 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + SuperCollection - + Combined libraries of all your online friends - + All available albums Alla tillgängliga album + + + Recently Played Tracks + + + + + Recently played tracks from all your friends + + WelcomeWidget diff --git a/lang/tomahawk_tr.ts b/lang/tomahawk_tr.ts new file mode 100644 index 000000000..9faf9d27f --- /dev/null +++ b/lang/tomahawk_tr.ts @@ -0,0 +1,3791 @@ + + + AccountFactoryWrapper + + + Dialog + İletişim Kutusu + + + + Description goes here + Buraya açıklama gelecek + + + + Add Account + Hesap Ekle + + + + AccountFactoryWrapperDelegate + + + Online + Çevrimiçi + + + + Connecting... + Bağlanıyor... + + + + Offline + Çevrimdışı + + + + AclJobDelegate + + + Error displaying ACL info + + + + + + Allow %1 to +connect and stream from you? + + + + + ActionCollection + + + &Listen Along + &Birlikte Dinle + + + + Stop &Listening Along + &Birlikte Dinlemeyi Durdur + + + + &Follow in real-time + &Gerçek zamanlı takip et + + + + + &Listen Privately + &Gizli Dinle + + + + + &Listen Publicly + &Yayınlayarak Dinle + + + + &Load Playlist + &Şarkı Listesini Yükle + + + + &Rename Playlist + &Şarkı Listesini Yeniden Adlandır + + + + &Copy Playlist Link + &Şarkı Listesinin Bağlantısını Kopyala + + + + &Play + &Yürüt + + + + &Stop + &Durdur + + + + &Previous Track + &Önceki Parça + + + + &Next Track + &Sonraki Parça + + + + &Quit + &Çıkış + + + + AlbumInfoWidget + + + Form + Form + + + + Other Albums by Artist + Sanatçının Diğer Albümleri + + + + + Click to show Official Tracks + Resmi Parçaları Göstermek için Tıklayın + + + + + Click to show SuperCollection Tracks + SüperKoleksiyon Parçalarını Göstermek için Tıklayın + + + + + Click to show SuperCollection Albums + SüperKoleksiyon Albümlerini Göstermek için Tıklayın + + + + Click to show Official Albums + Resmi Albümleri Göstermek için Tıklayın + + + + Other Albums by %1 + Diğer %1 Albümleri + + + + AlbumModel + + + Album + Albüm + + + + + All albums from %1 + Bütün %1 albümleri + + + + All albums + Bütün albümler + + + + AlbumView + + + After you have scanned your music collection you will find your latest album additions right here. + Müzik koleksiyonunuzu taradıktan sonra en son eklenen albümleri burada bulacaksınız. + + + + This collection doesn't have any recent albums. + Bu koleksiyonda en son eklenen bir albüm yok. + + + + ArtistInfoWidget + + + Form + Form + + + + Top Hits + En Çok Dinlenenler + + + + Related Artists + Benzer Sanatçılar + + + + Albums + Albümler + + + + + Click to show SuperCollection Albums + SüperKoleksiyon Albümlerini göstermek için tıklayın + + + + Click to show Official Albums + Resmi Albümleri görmek için tıklayın + + + + ArtistView + + + After you have scanned your music collection you will find your tracks right here. + Müzik koleksiyonunuzu taradıktan parçalarınız tam burada bulacaksınız. + + + + This collection is currently empty. + Bu koleksiyon şu anda boş. + + + + Sorry, your filter '%1' did not match any results. + Üzgünüm, '%1' filtresi hiçbir sonuç getirmedi. + + + + AudioControls + + + Prev + Geri + + + + Play + Yürüt + + + + Pause + Duraklat + + + + Next + Sonraki + + + + Artist + Sanatçı + + + + Album + Albüm + + + + Owner + Sahibi + + + + social + + + + + love + beğen + + + + Time + Süre + + + + Time Left + Kalan Süre + + + + Shuffle + Karışık + + + + Repeat + Yenile + + + + Low + Düşük + + + + High + Yüksek + + + + CategoryAddItem + + + + New Playlist + Yeni Şarkı Listesi + + + + + + + New Station + Yeni İstasyon + + + + + + %1 Station + %1 İstasyon + + + + CategoryItem + + + Playlists + Şarkı Listeleri + + + + Stations + İstasyonlar + + + + ClearButton + + + Clear + Temizle + + + + CollectionFlatModel + + + My Collection + Koleksiyonum + + + + Collection of %1 + %1 Koleksiyonu + + + + CollectionView + + + This collection is empty. + Bu koleksiyon boş. + + + + ContextWidget + + + InfoBar + BilgiÇubuğu + + + + + Show Footnotes + Dipnotları Göster + + + + Hide Footnotes + Dipnotları Gizle + + + + CrashReporter + + + Tomahawk Crash Reporter + Tomahawk Çökme Raporcusu + + + + <p><b>Sorry!</b>&nbsp;Tomahawk crashed. Information about the crash is now being sent to Tomahawk HQ so that we can fix the bug.</p> + <p><b>Üzgünüm!</b>&nbsp; Tomahawk çöktü. Hatayı çözmebilmemiz için çökme ile ilgili bilgi şu anda Tomahawk Merkezine gönderiliyor.<p> + + + + Abort + Vazgeç + + + + You can disable sending crash reports in the configuration dialog. + Çökme raporu göndermeyi yapılandırma iletişim kutusundan devre dışı bırakabilirsiz. + + + + Uploaded %L1 of %L2 KB. + %L2 içinden %L1 KB karşıya yüklendin. + + + + + Close + Kapat. + + + + Sent! <b>Many thanks</b>. + Gönderildi! <b>Çok teşekkürler.</b>. + + + + Failed to send crash info. + Çökme bilgisi gönderimi başarısız. + + + + DatabaseCommand_AllAlbums + + + Unknown + Bilinmeyen + + + + DelegateConfigWrapper + + + About + + + + + Delete Account + Hesabı Sil + + + + About this Account + + + + + DiagnosticsDialog + + + Tomahawk Diagnostics + Tomahawk Tanılama + + + + Update + Güncelle + + + + Copy to Clipboard + Pano'ya Kopyala + + + + DropJob + + + No tracks found for given %1 + Verilen %1 için hiç parça bulunamadı. + + + + GlobalSearchWidget + + + Form + Form + + + + IndexingJobItem + + + Indexing database + Veritabanı dizini oluşturuluyor + + + + InfoBar + + + InfoBar + BilgiÇubuğu + + + + Filter... + Filtre... + + + + JobStatusView + + + Searching For + Şunu Ara: + + + + Pending + Beklemede + + + + Idle + Boşta + + + + LastFmConfig + + + Form + Form + + + + Scrobble tracks to Last.fm + Dinlediğim şarkıların bilgisini Last.fm'e gönder. + + + + Username: + Kullanıcı adı: + + + + Password: + Parola: + + + + Test Login + Bilgileri Test Et + + + + LastfmContext + + + Last.fm + Last.fm + + + + LatchedStatusItem + + + %1 is listening along to you! + %1 sizle birlikte dinliyor! + + + + LoadXSPF + + + Load XSPF + XSPF Yükle + + + + Playlist URL + Şarkı Listesi URL'si + + + + Enter URL... + URL Girin... + + + + ... + ... + + + + Automatically update + Otomatik güncelle + + + + LoadXSPFDialog + + + Load XSPF File + XSPF Dosyası Yükle + + + + XSPF Files (*.xspf) + XSPF Dosyaları (*.xspf) + + + + LocalCollection + + + Bookmarks + Sık Kullanılanlar + + + + Saved tracks + Kaydedilen parçalar + + + + NewPlaylistWidget + + + Enter a title for the new playlist: + Yeni şarkı listesi için bir başlık girin: + + + + Tomahawk offers a variety of ways to help you create playlists and find music you enjoy! + Tomahawk şarkı listeleri yaratmak ve zevk alacağınız şarkılar bulmanıza yardımcı olmak için çeşitli yollar sunar! + + + + Just enter a genre or tag name and Tomahawk will suggest a few songs to get you started with your new playlist: + Bir tarz yada etiket girin ve Tomahawk size yeni şarkı listenizi başlatmak için birkaç şarkı sunacak. + + + + &Create Playlist + &Şarkı Listesi Yarat + + + + Create a new playlist + Yeni şarkı listesi yarat + + + + NewReleasesWidget + + + New Releases + + + + + PlaylistItemDelegate + + + played %1 by you + + + + + played %1 by %2 + + + + + PlaylistLargeItemDelegate + + + played %1 by you + + + + + played %1 by %2 + + + + + added %1 + + + + + PlaylistModel + + + A playlist by %1, created %2 + + + + + you + + + + + All tracks by %1 on album %2 + + + + + All tracks by %1 + + + + + PlaylistTypeSelectorDlg + + + New Playlist + + + + + Just a regular old playlist... Give it a name, drag in some tracks, and go! + + + + + Don't know exactly what you want? Give Tomahawk a few pointers and let it build a playlist for you! + + + + + Name: + + + + + New Playlist... + + + + + Create Manual Playlist + + + + + Create Automatic Playlist + + + + + PlaylistView + + + This playlist is currently empty. Add some tracks to it and enjoy the music! + + + + + ProxyDialog + + + Proxy Settings + + + + + Hostname of proxy server + + + + + Host + + + + + Port + + + + + Proxy login + + + + + User + + + + + Password + + + + + Proxy password + + + + + No Proxy Hosts: +(Overrides system proxy) + + + + + localhost *.example.com (space separated) + + + + + Use proxy for DNS lookups? + + + + + QObject + + + %n year(s) ago + + + + + %n year(s) + + + + + %n month(s) ago + + + + + %n month(s) + + + + + %n week(s) ago + + + + + %n week(s) + + + + + %n day(s) ago + + + + + %n day(s) + + + + + %n hour(s) ago + + + + + %n hour(s) + + + + + %1 minutes ago + + + + + %1 minutes + + + + + just now + + + + + Friend Finders + + + + + Music Finders + + + + + Status Updaters + + + + + QuaZipFilePrivate + + + ZIP/UNZIP API error %1 + + + + + QueueView + + + InfoBar + + + + + + Show Queue + + + + + Hide Queue + + + + + RelatedArtistsContext + + + Related Artists + + + + + ResolverConfigDelegate + + + Not found: %1 + + + + + Failed to load: %1 + + + + + SearchLineEdit + + + Search + + + + + SearchWidget + + + Search: %1 + + + + + Results for '%1' + + + + + SettingsDialog + + + Collection + + + + + Advanced + + + + + All + + + + + Some changed settings will not take effect until Tomahawk is restarted + + + + + Services + + + + + Install resolver from file + + + + + Information + + + + + SocialPlaylistWidget + + + Popular New Albums From Your Friends + + + + + Most Played Playlists + + + + + Most Played Tracks You Don't Have + + + + + SocialWidget + + + Form + + + + + Facebook + + + + + Twitter + + + + + Cover + + + + + TextLabel + + + + + Listening to "%1" by %2 and loving it! %3 + + + + + Listening to "%1" by %2 on "%3" and loving it! %4 + + + + + %1 characters left + + + + + SourceDelegate + + + Track + + + + + Album + + + + + Artist + + + + + Local + + + + + Top 10 + + + + + Offline + + + + + All available tracks + + + + + Online + + + + + + Show + + + + + + Hide + + + + + SourceInfoWidget + + + Recent Albums + + + + + Latest Additions + + + + + Recently Played Tracks + + + + + New Additions + + + + + My recent activity + + + + + Recent activity from %1 + + + + + SourceItem + + + Collection + + + + + + Latest Additions + + + + + Recently Played + + + + + Loved Tracks + + + + + SuperCollection + + + + + Latest additions to your collection + + + + + Latest additions to %1's collection + + + + + Recently Played Tracks + + + + + Your recently played tracks + + + + + %1's recently played tracks + + + + + SourceTreeView + + + &Copy Link + + + + + &Delete %1 + + + + + &Export Playlist + + + + + Save XSPF + + + + + Playlists (*.xspf) + + + + + SourcesModel + + + Group + + + + + Collection + + + + + Playlist + + + + + Automatic Playlist + + + + + Station + + + + + Browse + + + + + Search History + + + + + My Music + + + + + SuperCollection + + + + + Top Loved Tracks + + + + + Dashboard + + + + + Recently Played + + + + + Charts + + + + + New Releases + + + + + Friends + + + + + SpotifyConfig + + + Form + + + + + Configure your Spotify account + + + + + Username or Facebook Email + + + + + Log In + + + + + Right click on any Tomahawk playlist to sync it to Spotify. + + + + + High Quality Streams + + + + + Spotify playlists to keep in sync: + + + + + Delete Tomahawk playlist when removing synchronization + + + + + Username: + + + + + Password: + + + + + SpotifyPlaylistUpdater + + + Delete in Spotify? + + + + + Would you like to delete the corresponding Spotify playlist as well? + + + + + StackedSettingsDialog + + + Tomahawk Settings + + + + + Local Music Information + + + + + Path to scan for music files: + + + + + The Echo Nest supports keeping track of your catalog metadata + and using it to craft personalized radios. Enabling this option + will allow you (and all your friends) to create automatic playlists + and stations based on your personal taste profile. + + + + + Upload collection list to The Echo Nest to enable user radio + + + + + Watch for changes + + + + + Time between scans, in seconds: + + + + + Advanced Settings + + + + + Remote Peer Connection Method + + + + + None (outgoing connections only) + + + + + Use UPnP to establish port forward (recommended) + + + + + Use static external IP address/host name and port + + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + + + + + SOCKS Proxy + + + + + Use SOCKS Proxy + + + + + Internet Services + + + + + Install from file... + + + + + Filter by capability: + + + + + Static Host Name: + + + + + Static Port: + + + + + Proxy Settings... + + + + + Other Settings + + + + + Send reports after Tomahawk crashed + + + + + Allow web browsers to interact with Tomahawk (recommended) + + + + + Tomahawk::Accounts::AccountDelegate + + + Add Account + + + + + Remove Account + + + + + %1 downloads + + + + + Online + + + + + Connecting... + + + + + Offline + + + + + Tomahawk::Accounts::GoogleWrapper + + + Configure this Google Account + + + + + Google Address + + + + + Enter your Google login to connect with your friends using Tomahawk! + + + + + username@gmail.com + + + + + Tomahawk::Accounts::GoogleWrapperFactory + + + Connect to Google Talk to find your friends + + + + + Tomahawk::Accounts::GoogleWrapperSip + + + Add Friend + + + + + Enter Google Address: + + + + + Tomahawk::Accounts::LastFmAccountFactory + + + Scrobble your tracks to last.fm, and find freely downloadable tracks to play + + + + + Tomahawk::Accounts::LastFmConfig + + + Test Login + + + + + + Failed + + + + + Success + + + + + Could not contact server + + + + + Tomahawk::Accounts::SpotifyAccount + + + Sync with Spotify + + + + + Stop syncing with Spotify + + + + + Tomahawk::Accounts::SpotifyAccountConfig + + + Logging in... + + + + + Logged in! + + + + + Failed: %1 + + + + + Log In + + + + + Tomahawk::Accounts::SpotifyAccountFactory + + + Play music from and sync your playlists with Spotify Premium + + + + + Tomahawk::Accounts::TwitterAccountFactory + + + Connect to your Twitter followers. + + + + + Tomahawk::Accounts::TwitterConfigWidget + + + + + Tweet! + + + + + + Status: No saved credentials + + + + + + + Authenticate + + + + + + Status: Credentials saved for %1 + + + + + + De-authenticate + + + + + + + + + + + Tweetin' Error + + + + + The credentials could not be verified. +You may wish to try re-authenticating. + + + + + Status: Error validating credentials + + + + + Global Tweet + + + + + Direct Message + + + + + Send Message! + + + + + @Mention + + + + + Send Mention! + + + + + You must enter a user name for this type of tweet. + + + + + Your saved credentials could not be loaded. +You may wish to try re-authenticating. + + + + + Your saved credentials could not be verified. +You may wish to try re-authenticating. + + + + + + There was an error posting your status -- sorry! + + + + + + Tweeted! + + + + + Your tweet has been posted! + + + + + There was an error posting your direct message -- sorry! + + + + + Your message has been posted! + + + + + Tomahawk::Accounts::XmppAccountFactory + + + Log on to your Jabber/XMPP account to connect to your friends + + + + + Tomahawk::Accounts::ZeroconfFactory + + + Automatically connect to Tomahawks on the local network + + + + + Tomahawk::ContextMenu + + + &Play + + + + + + + Add to &Queue + + + + + + &Love + + + + + &Copy Track Link + + + + + Show &Album page + + + + + Show &Artist page + + + + + Un-&Love + + + + + &Delete Items + + + + + &Continue Playback after this Track + + + + + &Stop Playback after this Track + + + + + &Delete Item + + + + + Tomahawk::CustomPlaylistView + + + Top Loved Tracks + + + + + Your loved tracks + + + + + %1's loved tracks + + + + + The most loved tracks from all your friends + + + + + All of your loved tracks + + + + + All of %1's loved tracks + + + + + Tomahawk::DropJobNotifier + + + Fetching %1 from database + + + + + Parsing %1 %2 + + + + + Tomahawk::DynamicControlList + + + Click to collapse + + + + + Tomahawk::DynamicModel + + + + Could not find a playable track. + +Please change the filters or try again. + + + + + Failed to generate preview with the desired filters + + + + + Tomahawk::DynamicSetupWidget + + + Type: + + + + + Generate + + + + + Tomahawk::DynamicView + + + Add some filters above to seed this station! + + + + + Press Generate to get started! + + + + + Add some filters above, and press Generate to get started! + + + + + Tomahawk::DynamicWidget + + + Station ran out of tracks! + +Try tweaking the filters for a new set of songs to play. + + + + + Tomahawk::EchonestControl + + + + + + + + is + + + + + from user + + + + + + No users with Echo Nest Catalogs enabled. Try enabling option in Collection settings + + + + + similar to + + + + + + + + + + + Less + + + + + + + + + + + More + + + + + 0 BPM + + + + + 500 BPM + + + + + 0 secs + + + + + 3600 secs + + + + + -100 dB + + + + + 100 dB + + + + + Major + + + + + Minor + + + + + C + + + + + C Sharp + + + + + D + + + + + E Flat + + + + + E + + + + + F + + + + + F Sharp + + + + + G + + + + + A Flat + + + + + A + + + + + B Flat + + + + + B + + + + + Ascending + + + + + Descending + + + + + Tempo + + + + + Duration + + + + + Loudness + + + + + Artist Familiarity + + + + + Artist Hotttnesss + + + + + Song Hotttnesss + + + + + Latitude + + + + + Longitude + + + + + Mode + + + + + Key + + + + + Energy + + + + + Danceability + + + + + only by ~%1 + + + + + similar to ~%1 + + + + + with genre ~%1 + + + + + + from no one + + + + + My Collection + + + + + from %1 radio + + + + + with %1 %2 + + + + + about %1 BPM + + + + + about %n minute(s) long + + + + + about %1 dB + + + + + at around %1%2 %3 + + + + + in %1 + + + + + in a %1 key + + + + + sorted in %1 %2 order + + + + + with a %1 mood + + + + + in a %1 style + + + + + Tomahawk::EchonestSteerer + + + Steer this station: + + + + + Much less + + + + + Less + + + + + A bit less + + + + + Keep at current + + + + + A bit more + + + + + More + + + + + Much more + + + + + Tempo + + + + + Loudness + + + + + Danceability + + + + + Energy + + + + + Song Hotttnesss + + + + + Artist Hotttnesss + + + + + Artist Familiarity + + + + + By Description + + + + + Enter a description + + + + + Apply steering command + + + + + Reset all steering commands + + + + + Tomahawk::GroovesharkParser + + + Error fetching Grooveshark information from the network! + + + + + Tomahawk::InfoSystem::ChartsPlugin + + + Top Overall + + + + + Artists + + + + + Albums + + + + + Tracks + + + + + Tomahawk::InfoSystem::FdoNotifyPlugin + + + Tomahawk is playing "%1" by %2%3. + + + + + on "%1" + + + + + Tomahawk::InfoSystem::LastFmInfoPlugin + + + Top Tracks + + + + + Loved Tracks + + + + + Hyped Tracks + + + + + Top Artists + + + + + Hyped Artists + + + + + Tomahawk::InfoSystem::NewReleasesPlugin + + + Albums + + + + + Tomahawk::InfoSystem::TwitterInfoPlugin + + + Listening to "%1" by %2 and loving it! %3 + + + + + Tomahawk::ItunesParser + + + Error fetching iTunes information from the network! + + + + + Tomahawk::JSPFLoader + + + New Playlist + + + + + Failed to save tracks + + + + + Some tracks in the playlist do not contain an artist and a title. They will be ignored. + + + + + XSPF Error + + + + + This is not a valid XSPF playlist. + + + + + Tomahawk::LatchManager + + + &Catch Up + + + + + + &Listen Along + + + + + Tomahawk::Query + + + and + + + + + You + + + + + you + + + + + and + + + + + %n other(s) + + + + + %1 people + + + + + loved this track + + + + + Tomahawk::RdioParser + + + Error fetching Rdio information from the network! + + + + + Tomahawk::ShortenedLinkParser + + + Network error parsing shortened link! + + + + + Tomahawk::Source + + + + Scanning (%L1 tracks) + + + + + Scanning + + + + + Checking + + + + + Fetching + + + + + Parsing + + + + + Saving (%1%) + + + + + Tomahawk::SpotifyParser + + + Error fetching Spotify information from the network! + + + + + Tomahawk::XspfUpdater + + + Automatically update from XSPF + + + + + TomahawkApp + + + My Collection + + + + + TomahawkOAuthTwitter + + + Twitter PIN + + + + + After authenticating on Twitter's web site, +enter the displayed PIN number here: + + + + + TomahawkTrayIcon + + + + &Stop Playback after current Track + + + + + + Hide Tomahawk Window + + + + + Show Tomahawk Window + + + + + Currently not playing. + + + + + Play + + + + + Pause + + + + + &Continue Playback after current Track + + + + + TomahawkWindow + + + Tomahawk + + + + + &Settings + + + + + &Controls + + + + + &Network + + + + + &Window + + + + + &Help + + + + + &Quit + + + + + Ctrl+Q + + + + + Go &Online + + + + + Add &Friend... + + + + + U&pdate Collection + + + + + Update Collection + + + + + &Configure Tomahawk... + + + + + Load &XSPF... + + + + + Create &New Playlist... + + + + + About &Tomahawk... + + + + + Create New &Automatic Playlist + + + + + Create New &Station + + + + + Show Offline Sources + + + + + Hide Offline Sources + + + + + Minimize + + + + + Ctrl+M + + + + + Zoom + + + + + Meta+Ctrl+Z + + + + + Diagnostics... + + + + + Fully &Rescan Collection + + + + + Fully Rescan Collection + + + + + + Play + + + + + Space + + + + + Previous + + + + + Next + + + + + Global Search... + + + + + + Check For Updates... + + + + + + + Connect To Peer + + + + + Enter peer address: + + + + + Enter peer port: + + + + + Enter peer key: + + + + + XSPF Error + + + + + This is not a valid XSPF playlist. + + + + + Failed to save tracks + + + + + Some tracks in the playlist do not contain an artist and a title. They will be ignored. + + + + + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. + + + + + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. + + + + + Create New Station + + + + + Name: + + + + + New Station + + + + + New Playlist + + + + + Pause + + + + + Go &offline + + + + + Go &online + + + + + Authentication Error + + + + + %1 by %2 + track, artist name + + + + + %1 - %2 + current track, some window title + + + + + <h2><b>Tomahawk %1<br/>(%2)</h2> + + + + + <h2><b>Tomahawk %1</h2> + + + + + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson + + + + + About Tomahawk + + + + + TopBar + + + Form + + + + + 0 Sources + + + + + 0 Tracks + + + + + 0 Artists + + + + + 0 Shown + + + + + Tracks + + + + + Artists + + + + + Filter + + + + + Artist View + + + + + Flat View + + + + + Sources + + + + + Shown + + + + + TopTracksContext + + + Top Hits + + + + + TrackInfoWidget + + + Form + + + + + Cover + + + + + Track + + + + + by + + + + + Artist + + + + + from + + + + + Album + + + + + Statistics + + + + + Similar Tracks + + + + + You've listened to this track %n time(s). + + + + + You've never listened to this track before. + + + + + You first listened to it on %1. + + + + + You've listened to %1 %n time(s). + + + + + You've never listened to %1 before. + + + + + TrackModel + + + Artist + + + + + Title + + + + + Album + + + + + Track + + + + + Duration + + + + + Bitrate + + + + + Age + + + + + Year + + + + + Size + + + + + Origin + + + + + Score + + + + + Composer + + + + + TrackView + + + Sorry, your filter '%1' did not match any results. + + + + + TransferStatusItem + + + from + + + + + to + + + + + TreeItemDelegate + + + Unknown + + + + + TreeModel + + + Name + + + + + Duration + + + + + Bitrate + + + + + Age + + + + + Year + + + + + Size + + + + + Origin + + + + + Composer + + + + + All Artists + + + + + + My Collection + + + + + + Collection of %1 + + + + + TwitterConfigWidget + + + Configure this Twitter account + + + + + The Twitter plugin allows you to discover and play music from your Twitter friends running Tomahawk and post messages to your account. + + + + + Status: No saved credentials + + + + + Authenticate with Twitter + + + + + Twitter Connections + + + + + +If you only want to post tweets, you're done. + +If you want to connect Tomahawk to your friends using Twitter, select the type of tweet and press the button below to send a sync message. You must both be following each other as Direct Messages are used. Then be (very) patient -- it can take several minutes! + +You can re-send a sync message at any time simply by sending another tweet using the button. + + + + + Select the kind of tweet you would like, then press the button to post it: + + + + + Global Tweet + + + + + @Mention + + + + + Direct Message + + + + + e.g. @tomahawk + + + + + Send Message + + + + + ViewManager + + + SuperCollection + + + + + Combined libraries of all your online friends + + + + + All available albums + + + + + Recently Played Tracks + + + + + Recently played tracks from all your friends + + + + + WelcomeWidget + + + Recent Additions + + + + + Newest Stations & Playlists + + + + + Recently Played Tracks + + + + + No recently created playlists in your network. + + + + + Welcome to Tomahawk + + + + + WhatsHotWidget + + + Charts + + + + + WikipediaContext + + + Wikipedia + + + + + XMPPBot + + + +Terms for %1: + + + + + + No terms found, sorry. + + + + + +Hotttness for %1: %2 + + + + + + +Familiarity for %1: %2 + + + + + + +Lyrics for "%1" by %2: + +%3 + + + + + + XSPFLoader + + + Failed to parse contents of XSPF playlist + + + + + Some playlist entries were found without artist and track name, they will be omitted + + + + + Failed to fetch the desired playlist from the network, or the desired file does not exist + + + + + New Playlist + + + + + XmlConsole + + + Xml stream console + + + + + + Filter + + + + + Save log + + + + + Disabled + + + + + By JID + + + + + By namespace uri + + + + + By all attributes + + + + + Visible stanzas + + + + + Information query + + + + + Message + + + + + Presence + + + + + Custom + + + + + Close + + + + + Save XMPP log to file + + + + + OpenDocument Format (*.odf);;HTML file (*.html);;Plain text (*.txt) + + + + + XmppConfigWidget + + + Xmpp Configuration + + + + + Configure this Xmpp account + + + + + Enter your Xmpp login to connect with your friends using Tomahawk! + + + + + Login Information + + + + + Xmpp ID: + + + + + e.g. user@example.com + + + + + Password: + + + + + An account with this name already exists! + + + + + Advanced Xmpp Settings + + + + + Server: + + + + + Port: + + + + + Lots of servers don't support this (e.g. GTalk, jabber.org) + + + + + Publish currently playing track + + + + + Enforce secure connection + + + + + XmppSipPlugin + + + User Interaction + + + + + Host is unknown + + + + + Item not found + + + + + Authorization Error + + + + + Remote Stream Error + + + + + Remote Connection failed + + + + + Internal Server Error + + + + + System shutdown + + + + + Conflict + + + + + Unknown + + + + + No Compression Support + + + + + No Encryption Support + + + + + No Authorization Support + + + + + No Supported Feature + + + + + Add Friend + + + + + Enter Xmpp ID: + + + + + Add Friend... + + + + + XML Console... + + + + + I'm sorry -- I'm just an automatic presence used by Tomahawk Player (http://gettomahawk.com). If you are getting this message, the person you are trying to reach is probably not signed on, so please try again later! + + + + + Authorize User + + + + + Do you want to grant <b>%1</b> access to your Collection? + + + + + ZeroconfConfig + + + Form + + + + + Local Network configuration + + + + + This plugin will automatically find other users running Tomahawk on your local network + + + + + Connect automatically when Tomahawk starts + + + + \ No newline at end of file diff --git a/lang/tomahawk_zh_CN.ts b/lang/tomahawk_zh_CN.ts index 1f84c09ef..eca67b6ef 100644 --- a/lang/tomahawk_zh_CN.ts +++ b/lang/tomahawk_zh_CN.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. - + This collection doesn't have any recent albums. @@ -1192,6 +1192,7 @@ connect and stream from you? + Latest Additions @@ -1210,6 +1211,31 @@ connect and stream from you? SuperCollection + + + Latest additions to your collection + + + + + Latest additions to %1's collection + + + + + Recently Played Tracks + + + + + Your recently played tracks + + + + + %1's recently played tracks + + SourceTreeView @@ -2429,29 +2455,29 @@ Try tweaking the filters for a new set of songs to play. - Tomahawk::InfoSystem::LastFmPlugin + Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - + Loved Tracks - + Hyped Tracks - + Top Artists - + Hyped Artists @@ -2525,37 +2551,37 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::Query - + and - + You - + you - + and - + %n other(s) - + %1 people - + loved this track @@ -3053,6 +3079,79 @@ enter the displayed PIN number here: + + TrackInfoWidget + + + Form + + + + + Cover + + + + + Track + + + + + by + + + + + Artist + + + + + from + + + + + Album + + + + + Statistics + + + + + Similar Tracks + + + + + You've listened to this track %n time(s). + + + + + You've never listened to this track before. + + + + + You first listened to it on %1. + + + + + You've listened to %1 %n time(s). + + + + + You've never listened to %1 before. + + + TrackModel @@ -3276,20 +3375,30 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + SuperCollection - + Combined libraries of all your online friends - + All available albums + + + Recently Played Tracks + + + + + Recently played tracks from all your friends + + WelcomeWidget diff --git a/lang/tomahawk_zh_TW.ts b/lang/tomahawk_zh_TW.ts index df5fc4e93..ff44fcbdf 100644 --- a/lang/tomahawk_zh_TW.ts +++ b/lang/tomahawk_zh_TW.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. 當您掃描您的音樂收藏,您會發現您的最新專輯添加在這裡。 - + This collection doesn't have any recent albums. 這個收藏沒有任何最新專輯。 @@ -1192,6 +1192,7 @@ connect and stream from you? + Latest Additions 最新加入 @@ -1210,6 +1211,31 @@ connect and stream from you? SuperCollection 超級收藏 + + + Latest additions to your collection + + + + + Latest additions to %1's collection + + + + + Recently Played Tracks + + + + + Your recently played tracks + + + + + %1's recently played tracks + + SourceTreeView @@ -2429,29 +2455,29 @@ Try tweaking the filters for a new set of songs to play. - Tomahawk::InfoSystem::LastFmPlugin + Tomahawk::InfoSystem::LastFmInfoPlugin - + Top Tracks - 最佳單曲 + - + Loved Tracks - 喜愛曲目 + - + Hyped Tracks - + Top Artists - 頂尖演出者 + - + Hyped Artists @@ -2525,37 +2551,37 @@ Try tweaking the filters for a new set of songs to play. Tomahawk::Query - + and - + You - + you - + and - + %n other(s) - + %1 people - + loved this track @@ -3053,6 +3079,79 @@ enter the displayed PIN number here: 流行精選 + + TrackInfoWidget + + + Form + + + + + Cover + + + + + Track + + + + + by + + + + + Artist + + + + + from + + + + + Album + + + + + Statistics + + + + + Similar Tracks + + + + + You've listened to this track %n time(s). + + + + + You've never listened to this track before. + + + + + You first listened to it on %1. + + + + + You've listened to %1 %n time(s). + + + + + You've never listened to %1 before. + + + TrackModel @@ -3277,20 +3376,30 @@ You can re-send a sync message at any time simply by sending another tweet using ViewManager - + SuperCollection 超級收藏 - + Combined libraries of all your online friends 聯合您所有線上朋友的音樂庫 - + All available albums 所有現有專輯 + + + Recently Played Tracks + + + + + Recently played tracks from all your friends + + WelcomeWidget From 4ed1b4975f449f011c917f4eee3b7c87a308b66b Mon Sep 17 00:00:00 2001 From: Tomahawk CI Date: Sun, 6 May 2012 22:16:34 +0000 Subject: [PATCH 25/47] Automatic merge of Transifex translations --- lang/tomahawk_bg.ts | 21 +- lang/tomahawk_ca.ts | 3814 +++++++++++++++++++++++++++++++++++++++++++ lang/tomahawk_es.ts | 385 ++--- 3 files changed, 4023 insertions(+), 197 deletions(-) create mode 100644 lang/tomahawk_ca.ts diff --git a/lang/tomahawk_bg.ts b/lang/tomahawk_bg.ts index cd1fb8e6c..1e3bf60c3 100644 --- a/lang/tomahawk_bg.ts +++ b/lang/tomahawk_bg.ts @@ -136,24 +136,28 @@ connect and stream from you? Click to show Official Tracks - Покажи само официалните песни + Покажи само официалните песни +/Албумите означени като "Официални" в БД на Misicbrainz, Rovi, и др.п./ Click to show SuperCollection Tracks - Покажи песните от супер колекцията + Покажи песните от супер колекцията +/Сборен излед от локалните и наличните в колекциите на приятелите ти/ Click to show SuperCollection Albums - Покажи албумите от супер колекцията + Покажи албумите от супер колекцията +/Сборен излед от локалните и наличните в колекциите на приятелите ти/ Click to show Official Albums - Покажи само официалните албуми + Покажи само официалните албуми +/Албумите означени като "Официални" в БД на Misicbrainz, Rovi, и др.п./ @@ -1212,7 +1216,8 @@ connect and stream from you? SuperCollection - Супер колекция + Супер колекция +/Сборен излед от локалните и наличните в колекциите на приятелите ти/ @@ -1313,7 +1318,8 @@ connect and stream from you? SuperCollection - Супер колекция + Супер колекция +/Сборен излед от локалните и наличните в колекциите на приятелите ти/ @@ -3401,7 +3407,8 @@ You can re-send a sync message at any time simply by sending another tweet using SuperCollection - Супер колекция + Супер колекция +/Сборен излед от локалните и наличните в колекциите на приятелите ти/ diff --git a/lang/tomahawk_ca.ts b/lang/tomahawk_ca.ts new file mode 100644 index 000000000..6ba8134d7 --- /dev/null +++ b/lang/tomahawk_ca.ts @@ -0,0 +1,3814 @@ + + + AccountFactoryWrapper + + + Dialog + Diàleg + + + + Description goes here + Aquí va la descripció + + + + Add Account + Afegiu un compte + + + + AccountFactoryWrapperDelegate + + + Online + En línia + + + + Connecting... + Connectant-se... + + + + Offline + Fora de línia + + + + AclJobDelegate + + + Error displaying ACL info + Error en mostrar la informació ACL + + + + + Allow %1 to +connect and stream from you? + Voleu permetre que %1 s'us connecti i transmetre-li la vostra música? + + + + ActionCollection + + + &Listen Along + &Escolta a la vegada + + + + Stop &Listening Along + Deixa d'&escoltar a la vegada + + + + &Follow in real-time + &Segueix en temps real + + + + + &Listen Privately + &Escolta privada + + + + + &Listen Publicly + &Escolta Pública + + + + &Load Playlist + &Carrega la llista de reproducció + + + + &Rename Playlist + &Reanomena la llista de reproducció + + + + &Copy Playlist Link + &Copia l'enllaç a la llista de reproducció + + + + &Play + &Reprodueix + + + + &Stop + &Atura + + + + &Previous Track + Cançó &Anterior + + + + &Next Track + Cançó &Següent + + + + &Quit + &Surt + + + + AlbumInfoWidget + + + Form + Formulari + + + + Other Albums by Artist + Altres Àlbums de l'Artista + + + + + Click to show Official Tracks + Cliqueu per mostrar les Cançons Oficials + + + + + Click to show SuperCollection Tracks + Clique per mostrar les Cançons de la SuperCol·lecció + + + + + Click to show SuperCollection Albums + Clique per mostrar els Àlbums de la SuperCol·lecció + + + + Click to show Official Albums + Cliqueu per mostrar els Àlbums Oficials + + + + Other Albums by %1 + Altres Àlbums de %1 + + + + AlbumModel + + + Album + Àlbum + + + + + All albums from %1 + Tots els Àlbums de %1 + + + + All albums + Tots els Àlbums + + + + AlbumView + + + After you have scanned your music collection you will find your latest album additions right here. + Després d'escanejar la vostra col·lecció musical, aquí trobareu els àlbums afegits últimament. + + + + This collection doesn't have any recent albums. + Aquesta col·lecció no té àlbums recents. + + + + ArtistInfoWidget + + + Form + Formulari + + + + Top Hits + Grans Èxits + + + + Related Artists + Artistes Relacionats + + + + Albums + Àlbums + + + + + Click to show SuperCollection Albums + Cliqueu per mostrar els Àlbums de la SuperCol·lecció + + + + Click to show Official Albums + Cliqueu per mostrar els Àlbums Oficials + + + + ArtistView + + + After you have scanned your music collection you will find your tracks right here. + Després d'escanejar la vostra col·lecció musical, aquí trobareu les cançons afegides últimament. + + + + This collection is currently empty. + Aquesta col·lecció es troba buida actualment. + + + + Sorry, your filter '%1' did not match any results. + El filtre '%1' no ha obtingut cap resultat. + + + + AudioControls + + + Prev + Anterior + + + + Play + Reprodueix + + + + Pause + Pausa + + + + Next + Següent + + + + Artist + Artista + + + + Album + Àlbum + + + + Owner + Propietari + + + + social + social + + + + love + M'encanta + + + + Time + Temps + + + + Time Left + Temps Restant + + + + Shuffle + Mescla + + + + Repeat + Repeteix + + + + Low + Baix + + + + High + Alt + + + + CategoryAddItem + + + + New Playlist + Nova llista de reproducció + + + + + + + New Station + Nova Emissora + + + + + + %1 Station + Emissora %1 + + + + CategoryItem + + + Playlists + Llistes de reproducció + + + + Stations + Emissores + + + + ClearButton + + + Clear + Suprimeix + + + + CollectionFlatModel + + + My Collection + La meva Col·lecció + + + + Collection of %1 + Col·lecció de %1 + + + + CollectionView + + + This collection is empty. + Aquesta col·lecció és buida. + + + + ContextWidget + + + InfoBar + Barra d'Informació + + + + + Show Footnotes + Mostra les Notes al peu + + + + Hide Footnotes + Amaga les Notes al peu + + + + CrashReporter + + + Tomahawk Crash Reporter + Enviament de Fallades de Tomahawk + + + + <p><b>Sorry!</b>&nbsp;Tomahawk crashed. Information about the crash is now being sent to Tomahawk HQ so that we can fix the bug.</p> + <p>Tomahak ha fallat. La informació sobre la fallada s'està enviant a Tomahawk HQ per poder-ho solucionar.</p> + + + + Abort + Interromp + + + + You can disable sending crash reports in the configuration dialog. + Podeu deshabilitar l'enviament d'informació sobre les fallades des del diàleg de configuració. + + + + Uploaded %L1 of %L2 KB. + %L1 de %L2 KB carregats. + + + + + Close + Tanca + + + + Sent! <b>Many thanks</b>. + Enviat! <b>Moltes gràcies</b>. + + + + Failed to send crash info. + S'ha produït un error en enviar la informació sobre la fallada. + + + + DatabaseCommand_AllAlbums + + + Unknown + Desconegut + + + + DelegateConfigWrapper + + + About + Quant a + + + + Delete Account + Esborra el Compte + + + + About this Account + Quant a aquest compte + + + + DiagnosticsDialog + + + Tomahawk Diagnostics + Diagnòstics de Tomahawk + + + + Update + Actualitza + + + + Copy to Clipboard + Copia al Porta-retalls + + + + DropJob + + + No tracks found for given %1 + No s'han trobat cançons per %1 + + + + GlobalSearchWidget + + + Form + Formulari + + + + IndexingJobItem + + + Indexing database + S'està indexant la base de dades + + + + InfoBar + + + InfoBar + Barra d'Informació + + + + Filter... + Filtra... + + + + JobStatusView + + + Searching For + Cercant + + + + Pending + Pendent + + + + Idle + Inactiu + + + + LastFmConfig + + + Form + Formulari + + + + Scrobble tracks to Last.fm + Fes scrobbling de les cançons a Last.fm + + + + Username: + Nom d'usuari: + + + + Password: + Contrasenya: + + + + Test Login + Comprova l'autenticació + + + + LastfmContext + + + Last.fm + Last.fm + + + + LatchedStatusItem + + + %1 is listening along to you! + %1 us està escoltant a la vegada! + + + + LoadXSPF + + + Load XSPF + Carrega una XSPF + + + + Playlist URL + URL de la llista de reproduccó + + + + Enter URL... + Introduïu l'URL... + + + + ... + ... + + + + Automatically update + Actualitza automàticament + + + + LoadXSPFDialog + + + Load XSPF File + Carrega un fitxer XSPF + + + + XSPF Files (*.xspf) + Fitxers XSPF (*.xspf) + + + + LocalCollection + + + Bookmarks + Preferits + + + + Saved tracks + Cançons desades + + + + NewPlaylistWidget + + + Enter a title for the new playlist: + Introduïu un títol per la nova llista de reproducció: + + + + Tomahawk offers a variety of ways to help you create playlists and find music you enjoy! + Tomahawk us ofereix diverses formes per ajudar-vos a crear llistes de reproducció i trobar la música que us agrada! + + + + Just enter a genre or tag name and Tomahawk will suggest a few songs to get you started with your new playlist: + Introduïu el nom d'un gènere o una etiqueta i Tomahawk us suggerirà unes quantes cançons per començar la nova llista: + + + + &Create Playlist + &Crea la Llista de Reproducció + + + + Create a new playlist + Crea una nova llista de reproducció + + + + NewReleasesWidget + + + New Releases + Nous llançaments + + + + PlaylistItemDelegate + + + played %1 by you + reproduït %1 + + + + played %1 by %2 + reproduït %1 per %2 + + + + PlaylistLargeItemDelegate + + + played %1 by you + reproduït %1 + + + + played %1 by %2 + reproduït %1 per %2 + + + + added %1 + afegit %1 + + + + PlaylistModel + + + A playlist by %1, created %2 + Una llista de reproduccó de %1, creada %2 + + + + you + + + + + All tracks by %1 on album %2 + Totes les cançons de %1 a l'àlbum %2 + + + + All tracks by %1 + Totes les cançons de %1 + + + + PlaylistTypeSelectorDlg + + + New Playlist + Nova Llista de Reproducció + + + + Just a regular old playlist... Give it a name, drag in some tracks, and go! + Una llista vella i regular... Poseu-li un nom, arrossegueu-hi algunes cançons i llestos! + + + + Don't know exactly what you want? Give Tomahawk a few pointers and let it build a playlist for you! + No sabeu exactament què voleu? Doneu-li unes indicacions a Tomahawk i deixeu que us faci la llista! + + + + Name: + Nom: + + + + New Playlist... + Nova Llista de Reproducció... + + + + Create Manual Playlist + Crea una Llista de Reproducció Manual + + + + Create Automatic Playlist + Crea una Llista de Reproducció Automàtica + + + + PlaylistView + + + This playlist is currently empty. Add some tracks to it and enjoy the music! + Aquesta llista es troba buida. Afegiu-hi algunes cançons i gaudiu de la música! + + + + ProxyDialog + + + Proxy Settings + Paràmetres del proxy + + + + Hostname of proxy server + Nom del proxy + + + + Host + Ordinador central + + + + Port + Port + + + + Proxy login + Dades d'inici de sessió del proxy + + + + User + Usuari + + + + Password + Contrasenya + + + + Proxy password + Contrasenya del proxy + + + + No Proxy Hosts: +(Overrides system proxy) + Cap proxy: +(Sobreescriu el proxy del sistema) + + + + localhost *.example.com (space separated) + localhost *.exemple.com (separats per espais) + + + + Use proxy for DNS lookups? + Voleu emprar un proxy per cercar les DNS? + + + + QObject + + + %n year(s) ago + fa %n anyfa %n anys + + + + %n year(s) + %n any%n anys + + + + %n month(s) ago + fa %n mesfa %n mesos + + + + %n month(s) + %n mes%n mesos + + + + %n week(s) ago + fa %n setmanafa %n setmanes + + + + %n week(s) + %n setmana%n setmanes + + + + %n day(s) ago + fa %n diafa %n dies + + + + %n day(s) + %n dia%n dies + + + + %n hour(s) ago + fa %n horafa %n hores + + + + %n hour(s) + %n hora%n hores + + + + %1 minutes ago + fa %1 minut + + + + %1 minutes + %1 minuts + + + + just now + ara mateix + + + + Friend Finders + Cercadors d'Amics + + + + Music Finders + Cercadors de Música + + + + Status Updaters + Actualitzadors d'Estat + + + + QuaZipFilePrivate + + + ZIP/UNZIP API error %1 + Error %1 de l'API ZIP/UNZIP + + + + QueueView + + + InfoBar + Barra d'Informació + + + + + Show Queue + Mostra la Cua + + + + Hide Queue + Amaga la Cua + + + + RelatedArtistsContext + + + Related Artists + Artistes Relacionats + + + + ResolverConfigDelegate + + + Not found: %1 + No trobades: %1 + + + + Failed to load: %1 + Fallades a carregar: %1 + + + + SearchLineEdit + + + Search + Cerca + + + + SearchWidget + + + Search: %1 + Cerca: %1 + + + + Results for '%1' + Resultats per '%1' + + + + SettingsDialog + + + Collection + Col·lecció + + + + Advanced + Avançat + + + + All + Tot + + + + Some changed settings will not take effect until Tomahawk is restarted + Alguns paràmetres no tindran efecte fins que no reinicieu Tomahawk + + + + Services + Serveis + + + + Install resolver from file + Instal·la un Resolver des d'un fitxer + + + + Information + Informació + + + + SocialPlaylistWidget + + + Popular New Albums From Your Friends + Àlbums Populars dels Vostres Amics + + + + Most Played Playlists + Llistes de Reproducció Més Escoltades + + + + Most Played Tracks You Don't Have + Cançons Més Escoltades que encara no heu Reproduït + + + + SocialWidget + + + Form + Formulari + + + + Facebook + Facebook + + + + Twitter + Twitter + + + + Cover + Cover + + + + TextLabel + TextLabel + + + + Listening to "%1" by %2 and loving it! %3 + Estic escoltant "%1" de "%2" i m'encanta!%3 + + + + Listening to "%1" by %2 on "%3" and loving it! %4 + Estic escoltant "%1" de "%2" a "%3" i m'encanta!%4 + + + + %1 characters left + %1 caràcters restants + + + + SourceDelegate + + + Track + Cançó + + + + Album + Àlbum + + + + Artist + Artista + + + + Local + Local + + + + Top 10 + Top 10 + + + + Offline + Fora de Línia + + + + All available tracks + Totes les cançons disponibles + + + + Online + En Línia + + + + + Show + Mostra + + + + + Hide + Amaga + + + + SourceInfoWidget + + + Recent Albums + Àlbums Recents + + + + Latest Additions + Cançons Recents + + + + Recently Played Tracks + Cançons Escoltades Recentment + + + + New Additions + Novetats + + + + My recent activity + La meva activitat recent + + + + Recent activity from %1 + Activitat recent de %1 + + + + SourceItem + + + Collection + Col·lecció + + + + + Latest Additions + Darreres Novetats + + + + Recently Played + Escoltades Recentment + + + + Loved Tracks + Cançons Preferides + + + + SuperCollection + SuperCol·lecció + + + + Latest additions to your collection + Darreres novetats a la vostra col·lecció + + + + Latest additions to %1's collection + Darreres novetats a la col·lecció de %1 + + + + Recently Played Tracks + Cançons Escoltades Recentment + + + + Your recently played tracks + Cançons Escoltades Recentment + + + + %1's recently played tracks + Cançons Escoltades Recentment per %1 + + + + SourceTreeView + + + &Copy Link + &Copia l'Enllaç + + + + &Delete %1 + &Esborra %1 + + + + &Export Playlist + E&xporta la Llista de Reproducció + + + + Save XSPF + Desa com XSPF + + + + Playlists (*.xspf) + Llistes de reproducció (*.xspf) + + + + SourcesModel + + + Group + Grup + + + + Collection + Col·lecció + + + + Playlist + Llista de Reproducció + + + + Automatic Playlist + Llista de Reproducció Automàtica + + + + Station + Emissora + + + + Browse + Cerca + + + + Search History + Historial de Cerca + + + + My Music + La Meva Música + + + + SuperCollection + SuperCol·lecció + + + + Top Loved Tracks + Top de Cançons Preferides + + + + Dashboard + Presentació + + + + Recently Played + Escoltades Recentment + + + + Charts + Llistes + + + + New Releases + Nous Llançaments + + + + Friends + Amics + + + + SpotifyConfig + + + Form + Formulari + + + + Configure your Spotify account + Configureu el compte Spotify + + + + Username or Facebook Email + Nom d'usuari o adreça de Facebook + + + + Log In + Inicia Sessió + + + + Right click on any Tomahawk playlist to sync it to Spotify. + Feu click dret a qualsevol llista de reproducció de Tomahawk per sincronitzar-la amb Spotify. + + + + High Quality Streams + Fluxos d'Alta Qualitat + + + + Spotify playlists to keep in sync: + Llistes de reproducció de Spotify per mantenir sincronitzades: + + + + Delete Tomahawk playlist when removing synchronization + Esborra les llistes de Tomahawk quan es tregui la sincronització + + + + Username: + Usuari: + + + + Password: + Contrasenya: + + + + SpotifyPlaylistUpdater + + + Delete in Spotify? + Voleu esborrar-ho de Spotify? + + + + Would you like to delete the corresponding Spotify playlist as well? + Voleu esborrar les llistes de Spotify, també? + + + + StackedSettingsDialog + + + Tomahawk Settings + Paràmetres de Tomahawk + + + + Local Music Information + Informació de la Música Local + + + + Path to scan for music files: + Camí als fitxers de música: + + + + The Echo Nest supports keeping track of your catalog metadata + and using it to craft personalized radios. Enabling this option + will allow you (and all your friends) to create automatic playlists + and stations based on your personal taste profile. + L'ajuda The Echo Nest llegeix les metadades de la vostra col·lecció +i les utilitza per fer emissores de ràdio personalitzades. Si activeu +aquesta opció podreu crear llistes de reproducció automàtiques +i emissores de ràdio basades en el vostre gust musical. + + + + Upload collection list to The Echo Nest to enable user radio + Carrega la llista de la col·lecció a The Echo Nest per activar la radio d'usuari + + + + Watch for changes + Monitoritza els canvis + + + + Time between scans, in seconds: + Temps entre escanejos, en segons: + + + + Advanced Settings + Paràmetres Avançats + + + + Remote Peer Connection Method + Mètode de connexió remota entre iguals + + + + None (outgoing connections only) + Cap (només connexions cap a l'exterior) + + + + Use UPnP to establish port forward (recommended) + Utiliza UPnP per establir el redireccionament de ports (recomanat) + + + + Use static external IP address/host name and port + Utilitza l'adreça IP estàtica externa/nom de l'ordinador i el port + + + + Set this to your external IP address or host name. Make sure to forward the port to this host! + Ajusteu aquest paràmetre amb la vostra adreça IP o el nom de l'ordinador. Assegure-vos que redireccioneu el port a aquest ordinador! + + + + SOCKS Proxy + Proxys SOCKS + + + + Use SOCKS Proxy + Utilitza un proxy SOCKS + + + + Internet Services + Serveis d'Internet + + + + Install from file... + Instal·la des d'un fitxer... + + + + Filter by capability: + Filtra per capacitats: + + + + Static Host Name: + Nom de l'ordinador estàtic: + + + + Static Port: + Port estàtic: + + + + Proxy Settings... + Paràmetres del proxy... + + + + Other Settings + Altres Paràmetres + + + + Send reports after Tomahawk crashed + Envia informació de les fallades de Tomahawk + + + + Allow web browsers to interact with Tomahawk (recommended) + Permet que els navegadors web interactuin amb Tomahawk (recomanat) + + + + Tomahawk::Accounts::AccountDelegate + + + Add Account + Afegeix un compte + + + + Remove Account + Esborra el compte + + + + %1 downloads + %1 descàrregues + + + + Online + En Línia + + + + Connecting... + Connectant-se... + + + + Offline + Fora de Línia + + + + Tomahawk::Accounts::GoogleWrapper + + + Configure this Google Account + Configura el Compte de Google + + + + Google Address + Adreça de correu de Google + + + + Enter your Google login to connect with your friends using Tomahawk! + Introduïu les dades d'inici de sessió de Google i conecteu-vos amb els amics mitjançant Tomahawk! + + + + username@gmail.com + usuari@gmail.com + + + + Tomahawk::Accounts::GoogleWrapperFactory + + + Connect to Google Talk to find your friends + Connecteu-vos a Google Talsk per trobar els amics + + + + Tomahawk::Accounts::GoogleWrapperSip + + + Add Friend + Afegeix un Amic + + + + Enter Google Address: + Introduïu l'adreça de Google: + + + + Tomahawk::Accounts::LastFmAccountFactory + + + Scrobble your tracks to last.fm, and find freely downloadable tracks to play + Fes scrobbling de les cançons a last.fm, i cerca cançons descarregables gratuïtament per escoltar-les + + + + Tomahawk::Accounts::LastFmConfig + + + Test Login + Comprova l'inici de sessió + + + + + Failed + Error + + + + Success + Èxit + + + + Could not contact server + No s'ha pogut contactar amb el servidor + + + + Tomahawk::Accounts::SpotifyAccount + + + Sync with Spotify + Sincronitza amb Spotify + + + + Stop syncing with Spotify + Atura la sincronització amb Spotify + + + + Tomahawk::Accounts::SpotifyAccountConfig + + + Logging in... + Iniciant sessió... + + + + Logged in! + Sessió iniciada! + + + + Failed: %1 + Error: %1 + + + + Log In + Incia Sessió + + + + Tomahawk::Accounts::SpotifyAccountFactory + + + Play music from and sync your playlists with Spotify Premium + Reprodueix música i sincronitza les llistes de reproducció amb Spotify Premium + + + + Tomahawk::Accounts::TwitterAccountFactory + + + Connect to your Twitter followers. + Connecteu-vos als seguidors de Twitter. + + + + Tomahawk::Accounts::TwitterConfigWidget + + + + + Tweet! + Twitteja! + + + + + Status: No saved credentials + Estat: no hi ha credencials desades + + + + + + Authenticate + Autentifica + + + + + Status: Credentials saved for %1 + Estat: Credencials desades per %1 + + + + + De-authenticate + Des-autentifica + + + + + + + + + + Tweetin' Error + Error en Twittejar + + + + The credentials could not be verified. +You may wish to try re-authenticating. + Les crendencials no s'han pogut verificar +Torneu a autenticar-vos. + + + + Status: Error validating credentials + Estat: Error en validar les credencials + + + + Global Tweet + Tweet Global + + + + Direct Message + Missatge Directe + + + + Send Message! + Envia el Missatge! + + + + @Mention + @Menció + + + + Send Mention! + Envia la Menció! + + + + You must enter a user name for this type of tweet. + Heu d'introduir un nom d'usuari per aquest tipus de tweet. + + + + Your saved credentials could not be loaded. +You may wish to try re-authenticating. + Les credencials desades no s'han pogut carregar. +Torneu a autenticar-vos. + + + + Your saved credentials could not be verified. +You may wish to try re-authenticating. + Les credencials desades no s'han pogut verificar. +Torneu a autenticar-vos. + + + + + There was an error posting your status -- sorry! + S'ha produït un error publicant l'estat! + + + + + Tweeted! + Twitejat! + + + + Your tweet has been posted! + El tweet s'ha publicat! + + + + There was an error posting your direct message -- sorry! + S'ha produït un error publicant el missatge directe! + + + + Your message has been posted! + El missatge s'ha publicat! + + + + Tomahawk::Accounts::XmppAccountFactory + + + Log on to your Jabber/XMPP account to connect to your friends + Inicieu sessió al vostre compte Jabber/XMPP per conectar-vos amb els amics + + + + Tomahawk::Accounts::ZeroconfFactory + + + Automatically connect to Tomahawks on the local network + Connecta't automàticament a altres Tomahawks de la xarxa local + + + + Tomahawk::ContextMenu + + + &Play + &Reprodueix + + + + + + Add to &Queue + &Afegeix a la Cua + + + + + &Love + &M'encanta + + + + &Copy Track Link + &Copia l'Enllaç de la Cançó + + + + Show &Album page + Mostra la pàgina de l'&Àlbum + + + + Show &Artist page + Mostra la pàgina de l'&Artista + + + + Un-&Love + &Treu de les preferides + + + + &Delete Items + &Elimina els Ítems + + + + &Continue Playback after this Track + &Continua la reproducció després d'aquesta Cançó + + + + &Stop Playback after this Track + &Atura la Reproducció després d'aquesta Cançó + + + + &Delete Item + &Elimina l'Ítem + + + + Tomahawk::CustomPlaylistView + + + Top Loved Tracks + Top de Cançons Preferides + + + + Your loved tracks + Les meves cançons preferides + + + + %1's loved tracks + Les cançons preferides de %1 + + + + The most loved tracks from all your friends + Les cançons preferides de tots els amics + + + + All of your loved tracks + Totes les meves cançons preferides + + + + All of %1's loved tracks + Totes les cançons preferides de %1 + + + + Tomahawk::DropJobNotifier + + + Fetching %1 from database + Cercant %1 a la base de dades + + + + Parsing %1 %2 + Analitzant %1 %2 + + + + Tomahawk::DynamicControlList + + + Click to collapse + Cliqueu per reduir + + + + Tomahawk::DynamicModel + + + + Could not find a playable track. + +Please change the filters or try again. + No s'ha trobat cap cançó reproduïble + +Canvieu els filtres o intenteu-ho de nou. + + + + Failed to generate preview with the desired filters + S'ha produït un error en generar la previsualització amb els filtres + + + + Tomahawk::DynamicSetupWidget + + + Type: + Tipus: + + + + Generate + Genera + + + + Tomahawk::DynamicView + + + Add some filters above to seed this station! + Afegeiu slguns filtres per omplir aquesta emissora! + + + + Press Generate to get started! + Premeu Genera per començar! + + + + Add some filters above, and press Generate to get started! + Afegeiu alguns filtres i premeu Genera per començar! + + + + Tomahawk::DynamicWidget + + + Station ran out of tracks! + +Try tweaking the filters for a new set of songs to play. + L'emissora s'ha quedat sense cançons! + +Intenteu ajustar els filtres per reproduir noves cançons. + + + + Tomahawk::EchonestControl + + + + + + + + is + és + + + + from user + de l'usuari + + + + + No users with Echo Nest Catalogs enabled. Try enabling option in Collection settings + No hi ha usuaris amb els catàlegs de Echo Nest activats. Activeu l'opció en els paràmetres de la Col·lecció + + + + similar to + semblant a + + + + + + + + + + Less + Menys + + + + + + + + + + More + Més + + + + 0 BPM + 0 BPM + + + + 500 BPM + 500 BPM + + + + 0 secs + 0 segs + + + + 3600 secs + 3600 segs + + + + -100 dB + -100 dB + + + + 100 dB + 100 dB + + + + Major + Major + + + + Minor + Menor + + + + C + Do + + + + C Sharp + DO Sostingut + + + + D + Re + + + + E Flat + Mi Bemoll + + + + E + Mi + + + + F + Fa + + + + F Sharp + Fa Sostingut + + + + G + Sol + + + + A Flat + La Bemoll + + + + A + La + + + + B Flat + Si Bemoll + + + + B + Si + + + + Ascending + Ascendent + + + + Descending + Descendent + + + + Tempo + Temps + + + + Duration + Durada + + + + Loudness + Volum + + + + Artist Familiarity + Semblança amb l'artista + + + + Artist Hotttnesss + Rellevància d'Artista + + + + Song Hotttnesss + Rellevància de Cançó + + + + Latitude + Latitut + + + + Longitude + Longitud + + + + Mode + Mode + + + + Key + Clau + + + + Energy + Energia + + + + Danceability + Ballabilitat + + + + only by ~%1 + només per ~%1 + + + + similar to ~%1 + semblant a ~%1 + + + + with genre ~%1 + amb el gènere ~%1 + + + + + from no one + de ningú + + + + My Collection + La Meva Col·lecció + + + + from %1 radio + de la ràdio %1 + + + + with %1 %2 + amb %1 %2 + + + + about %1 BPM + sobre %1 BPM + + + + about %n minute(s) long + sobre %n minut de duradasobre %n minuts de durada + + + + about %1 dB + sobre %1 dB + + + + at around %1%2 %3 + sobre %1%2 %3 + + + + in %1 + en %1 + + + + in a %1 key + en clau de %1 + + + + sorted in %1 %2 order + ordenades en %1 %2 + + + + with a %1 mood + amb l'humor %1 + + + + in a %1 style + amb l'estil %1 + + + + Tomahawk::EchonestSteerer + + + Steer this station: + Dirigeix aquesta emissora: + + + + Much less + Molt més + + + + Less + Menys + + + + A bit less + Una mica menys + + + + Keep at current + Mantingues a l'actual + + + + A bit more + Una mica més + + + + More + Més + + + + Much more + Molt més + + + + Tempo + Temps + + + + Loudness + Volum + + + + Danceability + Ballabilitat + + + + Energy + Energia + + + + Song Hotttnesss + Rellevància de Cançó + + + + Artist Hotttnesss + Rellevància d'Artista + + + + Artist Familiarity + Semblança amb l'artista + + + + By Description + Per Descripció + + + + Enter a description + Introduïu una descripció + + + + Apply steering command + Aplica la comanda de control + + + + Reset all steering commands + Restaura totes les comandes de control + + + + Tomahawk::GroovesharkParser + + + Error fetching Grooveshark information from the network! + Error en cercar la informació de Grooveshark a través de la xarxa! + + + + Tomahawk::InfoSystem::ChartsPlugin + + + Top Overall + Top General + + + + Artists + Artistes + + + + Albums + Àlbums + + + + Tracks + Cançons + + + + Tomahawk::InfoSystem::FdoNotifyPlugin + + + Tomahawk is playing "%1" by %2%3. + Tomahawk està reproduint "%1" de %2%3. + + + + on "%1" + a "%1" + + + + Tomahawk::InfoSystem::LastFmInfoPlugin + + + Top Tracks + Top Cançons Musicals + + + + Loved Tracks + Cançons Preferides + + + + Hyped Tracks + Cançons en alça + + + + Top Artists + Top Artistes + + + + Hyped Artists + Artistes en alça + + + + Tomahawk::InfoSystem::NewReleasesPlugin + + + Albums + Àlbums + + + + Tomahawk::InfoSystem::TwitterInfoPlugin + + + Listening to "%1" by %2 and loving it! %3 + Estic escoltant "%1" de "%2" i m'encanta! %3 + + + + Tomahawk::ItunesParser + + + Error fetching iTunes information from the network! + Error en cercar la informació d'iTunes a través de la xarxa! + + + + Tomahawk::JSPFLoader + + + New Playlist + Nova llista de reproducció + + + + Failed to save tracks + Error en desar les cançons + + + + Some tracks in the playlist do not contain an artist and a title. They will be ignored. + Algunes cançons de la llista no contenen ni artista ni titol i s'han ignorat. + + + + XSPF Error + Error XSPF + + + + This is not a valid XSPF playlist. + No és una llista XSPF vàlida. + + + + Tomahawk::LatchManager + + + &Catch Up + &Atrapa + + + + + &Listen Along + &Escolta a la vegada + + + + Tomahawk::Query + + + and + i + + + + You + Jo + + + + you + jo + + + + and + i + + + + %n other(s) + %n més%n més + + + + %1 people + %1 persones + + + + loved this track + els ha encantat aquesta cançó + + + + Tomahawk::RdioParser + + + Error fetching Rdio information from the network! + Error en cercar la informació de Rdio a través de la xarxa! + + + + Tomahawk::ShortenedLinkParser + + + Network error parsing shortened link! + Error de la xarxa en analitzar l'enllaç escurçat! + + + + Tomahawk::Source + + + + Scanning (%L1 tracks) + Escanejant (%L1 cançons) + + + + Scanning + Escanejant + + + + Checking + Comprovant + + + + Fetching + Cercant + + + + Parsing + Analitzant + + + + Saving (%1%) + Desant (%1%) + + + + Tomahawk::SpotifyParser + + + Error fetching Spotify information from the network! + Error en cercar la informació de Spotify a través de la xarxa! + + + + Tomahawk::XspfUpdater + + + Automatically update from XSPF + Actualitza automàticament des de XSPF + + + + TomahawkApp + + + My Collection + La meva Col·lecció + + + + TomahawkOAuthTwitter + + + Twitter PIN + PIN de Twitter + + + + After authenticating on Twitter's web site, +enter the displayed PIN number here: + Després d'autenticar-vos a la pàgina de Twitter, +introduïu el PIN aquí: + + + + TomahawkTrayIcon + + + + &Stop Playback after current Track + &Atura la Reproducció després d'aquesta Cançó + + + + + Hide Tomahawk Window + Amaga la finestra de Tomahawk + + + + Show Tomahawk Window + Mostra la finestra de Tomahawk + + + + Currently not playing. + No s'està reproduint res. + + + + Play + Reprodueix + + + + Pause + Pausa + + + + &Continue Playback after current Track + &Continua la reproducció després d'aquesta Cançó + + + + TomahawkWindow + + + Tomahawk + Tomahawk + + + + &Settings + &Paràmetres + + + + &Controls + &Controls + + + + &Network + &Xarxa + + + + &Window + &Finestra + + + + &Help + &Ajuda + + + + &Quit + &Surt + + + + Ctrl+Q + Ctrl+Q + + + + Go &Online + &Connecta't + + + + Add &Friend... + Afegeix un &Amic... + + + + U&pdate Collection + Act&ualitza la Col·lecció + + + + Update Collection + Actualitza la Col·lecció + + + + &Configure Tomahawk... + &Configura Tomahawk... + + + + Load &XSPF... + Carrega una llista &XSPF... + + + + Create &New Playlist... + Crea una &nova llista de reproducció... + + + + About &Tomahawk... + Quant a &Tomahawk... + + + + Create New &Automatic Playlist + Crea una Llista de Reproducció &Automàtica + + + + Create New &Station + Crea una Nova &Emissora + + + + Show Offline Sources + Mostra les fonts fora de línia + + + + Hide Offline Sources + Amaga les fonts fora de línia + + + + Minimize + Minimitza + + + + Ctrl+M + Ctrl+M + + + + Zoom + Zoom + + + + Meta+Ctrl+Z + Meta+Ctrl+Z + + + + Diagnostics... + Diagnòstics... + + + + Fully &Rescan Collection + &Reescaneja la Col·lecció completament + + + + Fully Rescan Collection + Reescaneja la Col·lecció completament + + + + + Play + Reprodueix + + + + Space + Espai + + + + Previous + Anterior + + + + Next + Següent + + + + Global Search... + Cerca Global... + + + + + Check For Updates... + Comprova les actualitzacions... + + + + + + Connect To Peer + Connexió Remota + + + + Enter peer address: + Introduïu l'adreça remota: + + + + Enter peer port: + Introduïu el port remot: + + + + Enter peer key: + Introduïu la clau remota: + + + + XSPF Error + Error XSPF + + + + This is not a valid XSPF playlist. + No és una llista XSPF vàlida. + + + + Failed to save tracks + Error en desar les cançons + + + + Some tracks in the playlist do not contain an artist and a title. They will be ignored. + Algunes cançons de la llista no contenen ni artista ni titol i s'han ignorat. + + + + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. + Hi ha un problema per accedir al dispositiu de so o a la cançó. La cançó actual s'ha saltat. Assegureu-vos que teniu un back.end de Phonon adequant i els plugins necessaris instal·lats. + + + + Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. + Hi ha un problema per accedir al dispositiu de so o a la cançó, la cançó actual s'ha saltat. + + + + Create New Station + Crea una Nova Emissora + + + + Name: + Nom: + + + + New Station + Nova Emissora + + + + New Playlist + Nova llista de reproducció + + + + Pause + Pausa + + + + Go &offline + &Desconnecta't + + + + Go &online + &Connecta't + + + + Authentication Error + Error d'autentificació + + + + %1 by %2 + track, artist name + %1 de %2 + + + + %1 - %2 + current track, some window title + %1 - %2 + + + + <h2><b>Tomahawk %1<br/>(%2)</h2> + <h2><b>Tomahawk %1<br/>(%2)</h2> + + + + <h2><b>Tomahawk %1</h2> + <h2><b>Tomahawk %1</h2> + + + + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Gràcies a: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter i Steve Robertson + + + + About Tomahawk + Quant a Tomahawk + + + + TopBar + + + Form + Formulari + + + + 0 Sources + 0 Fonts + + + + 0 Tracks + 0 Cançons + + + + 0 Artists + 0 Artistes + + + + 0 Shown + 0 Mostrades + + + + Tracks + Cançons + + + + Artists + Artistes + + + + Filter + Filtra + + + + Artist View + Vista d'Artista + + + + Flat View + Vista Plana + + + + Sources + Fonts + + + + Shown + Mostrades + + + + TopTracksContext + + + Top Hits + Grans Èxits + + + + TrackInfoWidget + + + Form + Formulari + + + + Cover + Cover + + + + Track + Cançó + + + + by + de + + + + Artist + Artista + + + + from + de + + + + Album + Àlbum + + + + Statistics + Estadístiques + + + + Similar Tracks + Cançons Semblants + + + + You've listened to this track %n time(s). + Heu escoltat aquesta cançó %n cop.Heu escoltat aquesta cançó %n cops. + + + + You've never listened to this track before. + No heu escoltat mai aquesta cançó abans. + + + + You first listened to it on %1. + Vau escoltar aquesta cançó per primer cop el %1. + + + + You've listened to %1 %n time(s). + Heu escoltat %1 %n cop.Heu escoltat %1 %n cops. + + + + You've never listened to %1 before. + No heu escoltat mai %1 abans. + + + + TrackModel + + + Artist + Artista + + + + Title + Títol + + + + Album + Àlbum + + + + Track + Cançó + + + + Duration + Durada + + + + Bitrate + Bitrate + + + + Age + Edat + + + + Year + Any + + + + Size + Mida + + + + Origin + Origen + + + + Score + Puntuació + + + + Composer + Compositor + + + + TrackView + + + Sorry, your filter '%1' did not match any results. + El filtre '%1' no ha obtingut cap resultat. + + + + TransferStatusItem + + + from + de + + + + to + a + + + + TreeItemDelegate + + + Unknown + Desconegut + + + + TreeModel + + + Name + Nom + + + + Duration + Durada + + + + Bitrate + Bitrate + + + + Age + Edat + + + + Year + Any + + + + Size + Mida + + + + Origin + Origen + + + + Composer + Compositor + + + + All Artists + Tots els Artistes + + + + + My Collection + La meva Col·lecció + + + + + Collection of %1 + Col·lecció de %1 + + + + TwitterConfigWidget + + + Configure this Twitter account + Configura el Compte de Twitter + + + + The Twitter plugin allows you to discover and play music from your Twitter friends running Tomahawk and post messages to your account. + El plugin de Twitter permet descobrir i reproduir música dels seguidors de Twitter que utilitzen Tomahawk i publicar missatges al vostre compte. + + + + Status: No saved credentials + Estat: no hi ha credencials desades + + + + Authenticate with Twitter + Autentifica amb Twitter + + + + Twitter Connections + Connexions de Twitter + + + + +If you only want to post tweets, you're done. + +If you want to connect Tomahawk to your friends using Twitter, select the type of tweet and press the button below to send a sync message. You must both be following each other as Direct Messages are used. Then be (very) patient -- it can take several minutes! + +You can re-send a sync message at any time simply by sending another tweet using the button. + +Si només voleu publicar tweets, ja esteu llestos. + +SI voleu connectar Tomahawk als vostres seguidors de Twitter, escolliu el tipus de Tweet i premeu el botó de sota per enviar un missatge de sincronisme. Tots dos us heu d'estar seguint atès que s'empren Missatges Directes. Aleshores, tingueu (molta) paciència -- pot trigar diversos minuts! + +Podeu reenviar un missatge de sincronisme en qualsevol moment simplement enviant un altre tweet fent servir el botó. + + + + Select the kind of tweet you would like, then press the button to post it: + Escolliu el tipus de tweet que us agradaria, després premeu el botó per publicar-lo: + + + + Global Tweet + Tweet Global + + + + @Mention + @Menció + + + + Direct Message + Missatge Directe + + + + e.g. @tomahawk + e.g. @tomahawk + + + + Send Message + Envia el Missatge + + + + ViewManager + + + SuperCollection + SuperCol·lecció + + + + Combined libraries of all your online friends + Biblioteques combinades de tots els amis en línia + + + + All available albums + Tots els àlbums disponibles + + + + Recently Played Tracks + Cançons Escoltades Recentment + + + + Recently played tracks from all your friends + Cançons escoltades recentment pels amics + + + + WelcomeWidget + + + Recent Additions + Darreres Novetats + + + + Newest Stations & Playlists + Darreres Emissores i Llistes + + + + Recently Played Tracks + Cançons Escoltades Recentment + + + + No recently created playlists in your network. + No hi ha cançons escoltades recentment a la xarxa. + + + + Welcome to Tomahawk + Us donem la benvinguda a Tomahawk + + + + WhatsHotWidget + + + Charts + Llistes + + + + WikipediaContext + + + Wikipedia + Viquipèdia + + + + XMPPBot + + + +Terms for %1: + + +Termes per %1: + + + + No terms found, sorry. + No s'han trobat termes. + + + + +Hotttness for %1: %2 + + +Rellevància per %1: %2 + + + + +Familiarity for %1: %2 + + Semblança per %1: %2 + + + + +Lyrics for "%1" by %2: + +%3 + + +Lletres de la cancó "%1" de %2: + +%3 + + + + + XSPFLoader + + + Failed to parse contents of XSPF playlist + Error en analitzar els continguts de la llista XSPF + + + + Some playlist entries were found without artist and track name, they will be omitted + Algunes entrades de la llista no disposaven d'informació d'artista ni de nom de cançó, s'han omès + + + + Failed to fetch the desired playlist from the network, or the desired file does not exist + Error en cercar la llista a la xarxa. Pot ser no existeix el fitxer + + + + New Playlist + Nova llista de reproducció + + + + XmlConsole + + + Xml stream console + Consola de flux XML + + + + + Filter + Filtra + + + + Save log + Desa el log + + + + Disabled + Desactivat + + + + By JID + Per JID + + + + By namespace uri + Per namespace uri + + + + By all attributes + Per atributs + + + + Visible stanzas + Instàncies visibles + + + + Information query + Petició d'informació + + + + Message + Missatge + + + + Presence + Presència + + + + Custom + Personalitzat + + + + Close + Tanca + + + + Save XMPP log to file + Desa el log XMPP en un fitxer + + + + OpenDocument Format (*.odf);;HTML file (*.html);;Plain text (*.txt) + Format OpenDocument (*.odf);;fitxer HTML (*.html);;Text Pla (*.txt) + + + + XmppConfigWidget + + + Xmpp Configuration + Configuració XMPP + + + + Configure this Xmpp account + Configura aquest compte XMPP + + + + Enter your Xmpp login to connect with your friends using Tomahawk! + Introduiu les dades d'inici de sessió de XMPP per connectar-vos amb els amics que fan servir Tomahawk! + + + + Login Information + Informació d'inici de sessió + + + + Xmpp ID: + ID XMPP: + + + + e.g. user@example.com + e.g. usuari@exemple.com + + + + Password: + Contrasenya: + + + + An account with this name already exists! + Ja existeix un compte amb aquest nom! + + + + Advanced Xmpp Settings + Paràmetres avançats de XMPP + + + + Server: + Servidor: + + + + Port: + Port: + + + + Lots of servers don't support this (e.g. GTalk, jabber.org) + Molts servidors no suporten aquesta opció (e.g. GTalk, jabber.org) + + + + Publish currently playing track + Publica la cançó que s'estigui reproduint al moment + + + + Enforce secure connection + Força una connexió segura + + + + XmppSipPlugin + + + User Interaction + Interacció d'usuari + + + + Host is unknown + El nom de l'ordinador és desconegut + + + + Item not found + No s'ha trobat l'element + + + + Authorization Error + Error d'autorització + + + + Remote Stream Error + Error de flux remot + + + + Remote Connection failed + Ha fallat la connexió remota + + + + Internal Server Error + Error del servidor intern + + + + System shutdown + Sistema apagat + + + + Conflict + Conflicte + + + + Unknown + Desconegut + + + + No Compression Support + Compressió no suportada + + + + No Encryption Support + Encriptació no suportada + + + + No Authorization Support + Autorització no suportada + + + + No Supported Feature + Característica no suportada + + + + Add Friend + Afegeix un Amic + + + + Enter Xmpp ID: + Introduiu la ID XMPP: + + + + Add Friend... + Afegeix un Amic... + + + + XML Console... + Consola XML... + + + + I'm sorry -- I'm just an automatic presence used by Tomahawk Player (http://gettomahawk.com). If you are getting this message, the person you are trying to reach is probably not signed on, so please try again later! + Sóc una presència automàtica emprada pel Reproductor Tomahawk. (http://gettomahawk.com. Si rebeu aquest missatge, la persona amb qui intenteu contactar probablement no està en línia, intenteu-ho més tard! + + + + Authorize User + Autorització d'Usuari + + + + Do you want to grant <b>%1</b> access to your Collection? + Voleu permetre que <b>%1</b> accedeixi a la vostra Col·lecció? + + + + ZeroconfConfig + + + Form + Formulari + + + + Local Network configuration + Configuració de la Xarxa Local + + + + This plugin will automatically find other users running Tomahawk on your local network + Aquest plugin troba automàticament altres usuaris que fan servir Tomahawk a la vostra Xarxa Local + + + + Connect automatically when Tomahawk starts + Connecta-t'hi automàticament quan Tomahawk arrenqui + + + \ No newline at end of file diff --git a/lang/tomahawk_es.ts b/lang/tomahawk_es.ts index 4254f828b..55fba9d3a 100644 --- a/lang/tomahawk_es.ts +++ b/lang/tomahawk_es.ts @@ -47,7 +47,7 @@ Allow %1 to connect and stream from you? - + ¿Permitir a %1 conectarse y transmitirle música? @@ -125,7 +125,7 @@ connect and stream from you? Form - Form + Formulario @@ -198,7 +198,7 @@ connect and stream from you? Form - Form + Formulario @@ -509,7 +509,7 @@ connect and stream from you? Form - Form + Formulario @@ -517,7 +517,7 @@ connect and stream from you? Indexing database - + Indexando la base de datos @@ -556,7 +556,7 @@ connect and stream from you? Form - + Formulario @@ -831,7 +831,7 @@ connect and stream from you? No Proxy Hosts: (Overrides system proxy) - + Sin proxy (Sobreescribe el proxy del sistema) @@ -1026,7 +1026,7 @@ connect and stream from you? Install resolver from file - + Instalar un Resolver desde un fichero @@ -1057,7 +1057,7 @@ connect and stream from you? Form - + Formulario @@ -1077,22 +1077,22 @@ connect and stream from you? TextLabel - + TextLabel Listening to "%1" by %2 and loving it! %3 - + Escuchando "%1" de %2 y me encanta! %3 Listening to "%1" by %2 on "%3" and loving it! %4 - + Escuchando "%1" de %2 en "%3" y me encanta! %4 %1 characters left - + %1 caracteres restantes @@ -1100,7 +1100,7 @@ connect and stream from you? Track - Pista + Tema @@ -1214,27 +1214,27 @@ connect and stream from you? Latest additions to your collection - + Últimas novedades en mi colección Latest additions to %1's collection - + Últimas novedadoes en la colección de %1 Recently Played Tracks - + Temas Escuchados Recientemente Your recently played tracks - + Mis canciones escuchadas recientemente %1's recently played tracks - + Las canciones escuchadas recientemente por %1 @@ -1270,7 +1270,7 @@ connect and stream from you? Group - + Grupo @@ -1295,7 +1295,7 @@ connect and stream from you? Browse - + Buscar @@ -1320,7 +1320,7 @@ connect and stream from you? Dashboard - + Panel de inicio @@ -1330,7 +1330,7 @@ connect and stream from you? Charts - + Listas @@ -1348,52 +1348,52 @@ connect and stream from you? Form - + Formulario Configure your Spotify account - + Configura tu cuenta de Spotify Username or Facebook Email - + Usurio o dirección de correo de Facebook Log In - + Inciar Sesión Right click on any Tomahawk playlist to sync it to Spotify. - + Click derecho en cualquier lista de Tomahawk para sincronizar con Spotify. High Quality Streams - + Streams de Alta Calidad Spotify playlists to keep in sync: - + Listas de Spotify a mantener sincronizadas: Delete Tomahawk playlist when removing synchronization - + Borra las listas de Tomahawk cuando se quiten de la sincronización Username: - + Usuario: Password: - + Contraseña: @@ -1401,12 +1401,12 @@ connect and stream from you? Delete in Spotify? - + ¿Borrar en Spotify? Would you like to delete the corresponding Spotify playlist as well? - + Quieres eliminar la lista de Spotify correspondiente, también? @@ -1455,57 +1455,57 @@ y estaciones basadas en sus gustos personales. Advanced Settings - + Ajustes avanzados Remote Peer Connection Method - + Método de conexión remota None (outgoing connections only) - + Ninguna (sólo conexiones salientes) Use UPnP to establish port forward (recommended) - + Usar UPnP para establecer la redirección de puertos (recomendado) Use static external IP address/host name and port - + Usar IP estática externa/nombre de host y puero Set this to your external IP address or host name. Make sure to forward the port to this host! - + Ajustar a la dirección IP externa o nombre de la máquina. Hay que redirigir los puertos a esta máquina! SOCKS Proxy - + Proxy SOCKS Use SOCKS Proxy - + Utilizar el Proxy SOCKS Internet Services - + Servicios de Internet Install from file... - + Instalar desde un fichero... Filter by capability: - + Filtrar por capacidad: @@ -1525,7 +1525,7 @@ y estaciones basadas en sus gustos personales. Other Settings - + Otros Ajustes @@ -1535,7 +1535,7 @@ y estaciones basadas en sus gustos personales. Allow web browsers to interact with Tomahawk (recommended) - + Permitir a los navegadores web interactuar con Tomahawk (recomendado) @@ -1553,7 +1553,7 @@ y estaciones basadas en sus gustos personales. %1 downloads - + %1 descargas @@ -1576,17 +1576,17 @@ y estaciones basadas en sus gustos personales. Configure this Google Account - + Configura esta Cuenta Google Google Address - + Dirección de correo Google Enter your Google login to connect with your friends using Tomahawk! - + Introducir los datos de la cuenta Google para contectar con los amigos que usen Tomahawk! @@ -1599,7 +1599,7 @@ y estaciones basadas en sus gustos personales. Connect to Google Talk to find your friends - + Conectarse a Google Talk y encontrar mis amigos @@ -1607,12 +1607,12 @@ y estaciones basadas en sus gustos personales. Add Friend - + Añadir Amigo Enter Google Address: - + Introducir la dirección de correo de Google: @@ -1620,7 +1620,7 @@ y estaciones basadas en sus gustos personales. Scrobble your tracks to last.fm, and find freely downloadable tracks to play - + Hacer Scrobble de mis temas a last.fm y encontrar canciones gratuitas para reproducirlas @@ -1628,23 +1628,23 @@ y estaciones basadas en sus gustos personales. Test Login - + Comprobar Inicio de Sesión Failed - + Fallo Success - + Éxito Could not contact server - + No se pudo contactar el servidor @@ -1652,12 +1652,12 @@ y estaciones basadas en sus gustos personales. Sync with Spotify - + Sincronizar con Spotify Stop syncing with Spotify - + Dejar de sincronizar con Spotify @@ -1665,22 +1665,22 @@ y estaciones basadas en sus gustos personales. Logging in... - + Inciando sesión... Logged in! - + Sesión iniciada! Failed: %1 - + Fallo: %1 Log In - + Iniciar Sesión @@ -1688,7 +1688,7 @@ y estaciones basadas en sus gustos personales. Play music from and sync your playlists with Spotify Premium - + Reproduce música de Spotofy Premium y sincroniza las listas de reprodución @@ -1696,7 +1696,7 @@ y estaciones basadas en sus gustos personales. Connect to your Twitter followers. - + Conectar con los seguidores de Twitter. @@ -1706,32 +1706,32 @@ y estaciones basadas en sus gustos personales. Tweet! - + Twittear! Status: No saved credentials - + Estado: Credenciales no guardadas Authenticate - + Autenticar Status: Credentials saved for %1 - + Estado: Credenciales de %1 guardadas De-authenticate - + Desautenticar @@ -1742,87 +1742,90 @@ y estaciones basadas en sus gustos personales. Tweetin' Error - + Error al Twittear The credentials could not be verified. You may wish to try re-authenticating. - + Las credencials no se han podido verificar. +Hay que volver a intentar la autenticación. Status: Error validating credentials - + Estado: Error al validar las credenciales Global Tweet - + Tweet Global Direct Message - + Mensaje Directo Send Message! - + Enviar Mensaje! @Mention - + @Mención Send Mention! - + Enviar Mención! You must enter a user name for this type of tweet. - + Hay que introducir un nombre de usuario para este tipo de tweet. Your saved credentials could not be loaded. You may wish to try re-authenticating. - + Las credenciales guardadas no se han podido cargar. +Hay que volverse a autenticar. Your saved credentials could not be verified. You may wish to try re-authenticating. - + Las credenciales guardadas no se han podido verificar. +Hay que volverse a autenticar. There was an error posting your status -- sorry! - + Error publicando el estado! Tweeted! - + Twitteado! Your tweet has been posted! - + El tweet se ha publicado! There was an error posting your direct message -- sorry! - + Error publicando el mensahe directo! Your message has been posted! - + El mensaje se ha publicado! @@ -1830,7 +1833,7 @@ You may wish to try re-authenticating. Log on to your Jabber/XMPP account to connect to your friends - + Inciar sesón en Jabber/XMPP para conectar con mis amigos @@ -1838,7 +1841,7 @@ You may wish to try re-authenticating. Automatically connect to Tomahawks on the local network - + Conectarse automáticament a los Tomahawks de la red local @@ -1859,27 +1862,27 @@ You may wish to try re-authenticating. &Love - + &Favorito &Copy Track Link - + &Copiar enlace del Tema Show &Album page - + Mostrar la página del &Álbum Show &Artist page - + Mostrar la página del &Artista Un-&Love - + Quitar de &Favoritos @@ -1889,12 +1892,12 @@ You may wish to try re-authenticating. &Continue Playback after this Track - + &Continuar la Reproducción después de este Tema &Stop Playback after this Track - + &Para la Reproducción después de este Tema @@ -2012,7 +2015,9 @@ Por favor, cambie los filtros o inténtelo de nuevo. Station ran out of tracks! Try tweaking the filters for a new set of songs to play. - + La Emisora se ha quedado sin temas! + +Intente ajustar los filtros para reproducir nuevas canciones. @@ -2420,7 +2425,7 @@ Try tweaking the filters for a new set of songs to play. Error fetching Grooveshark information from the network! - + Error al buscar la información de Grooveshar en la red! @@ -2451,12 +2456,12 @@ Try tweaking the filters for a new set of songs to play. Tomahawk is playing "%1" by %2%3. - + Tomahawk está reproduciendo "%1" de %2%3. on "%1" - + en "%1" @@ -2464,27 +2469,27 @@ Try tweaking the filters for a new set of songs to play. Top Tracks - + Temas más escuchados Loved Tracks - + Temas Favoritos Hyped Tracks - + Temas a la alza Top Artists - + Artistas más escuchados Hyped Artists - + Artistas a la alza @@ -2492,7 +2497,7 @@ Try tweaking the filters for a new set of songs to play. Albums - + Álbumes @@ -2500,7 +2505,7 @@ Try tweaking the filters for a new set of songs to play. Listening to "%1" by %2 and loving it! %3 - + Escuchando "%1" de %2 y me encanta! %3 @@ -2508,7 +2513,7 @@ Try tweaking the filters for a new set of songs to play. Error fetching iTunes information from the network! - + Error al buscar la información de iTunes en la red! @@ -2558,37 +2563,37 @@ Try tweaking the filters for a new set of songs to play. and - + y You - + usted you - + usted and - + y %n other(s) - + %n más%n más %1 people - + %1 personas loved this track - + han añadido este tema a Favoritos @@ -2596,7 +2601,7 @@ Try tweaking the filters for a new set of songs to play. Error fetching Rdio information from the network! - + Error al buscar la información de Rdio en la red! @@ -2604,7 +2609,7 @@ Try tweaking the filters for a new set of songs to play. Network error parsing shortened link! - + Error en la red al analizar el enlace acortado! @@ -2618,7 +2623,7 @@ Try tweaking the filters for a new set of songs to play. Scanning - + Escaneando @@ -2646,7 +2651,7 @@ Try tweaking the filters for a new set of songs to play. Error fetching Spotify information from the network! - + Error al buscar la información de Spotify en la red! @@ -2654,7 +2659,7 @@ Try tweaking the filters for a new set of songs to play. Automatically update from XSPF - + Actualizar automáticamente desde XSPF @@ -2686,7 +2691,7 @@ introduzca su número PIN aquí: &Stop Playback after current Track - + &Para la Reproducción después de este Tema @@ -2717,7 +2722,7 @@ introduzca su número PIN aquí: &Continue Playback after current Track - + &Continuar la Reproducción después de este Tema @@ -2735,7 +2740,7 @@ introduzca su número PIN aquí: &Controls - + &Controles @@ -2934,12 +2939,12 @@ introduzca su número PIN aquí: Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. Make sure you have a suitable Phonon backend and required plugins installed. - + Se ha producido un error al acceder al dispostivo de audio o al tema deseado y se va saltar. Asegúrese de que ha instalado un backend de Phonon adecuado y los plugins necesarios. Sorry, there is a problem accessing your audio device or the desired track, current track will be skipped. - + Se ha producido un error al acceder al dispostivo de audio o al tema deseado y se va saltar. @@ -2996,22 +3001,22 @@ introduzca su número PIN aquí: <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1</h2> - + <h2><b>Tomahawk %1</h2> Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson - + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Gracias a: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter y Steve Robertson About Tomahawk - + Acerca de Tomahawk @@ -3019,7 +3024,7 @@ introduzca su número PIN aquí: Form - Form + Formulario @@ -3090,72 +3095,72 @@ introduzca su número PIN aquí: Form - + Formulario Cover - + Portada Track - + Tema by - + de Artist - + Artista from - + en Album - + Álbum Statistics - + Estadísticas Similar Tracks - + Temas Similares You've listened to this track %n time(s). - + Ha escuchado esta canción %n vez.Ha escuchado esta canción %n veces. You've never listened to this track before. - + Nunca ha escuchado este tema antes. You first listened to it on %1. - + Escuchó este tema pro primera vez en %1. You've listened to %1 %n time(s). - + Ha escuchado %1 %n vez.Ha escuchado %1 %n veces. You've never listened to %1 before. - + Nunca ha escuchado %1 antes. @@ -3178,7 +3183,7 @@ introduzca su número PIN aquí: Track - Pista + Tema @@ -3218,7 +3223,7 @@ introduzca su número PIN aquí: Composer - + Compositor @@ -3393,7 +3398,7 @@ Puede reenviar el mensaje de sincronización en cualquier momento simplemente en Combined libraries of all your online friends - + Bibliotecas combinadas de todos tus amigos conectados @@ -3403,12 +3408,12 @@ Puede reenviar el mensaje de sincronización en cualquier momento simplemente en Recently Played Tracks - + Temas Escuchados Recientemente Recently played tracks from all your friends - + Temas escuchados recientemente por mis amigos @@ -3507,17 +3512,17 @@ Letras de "%1" por %2: Failed to parse contents of XSPF playlist - + Error al analizar los contenidos de la lista XSPF Some playlist entries were found without artist and track name, they will be omitted - + Algunas entradas de la lista no tenía información de artista o de títul y serán omitidas Failed to fetch the desired playlist from the network, or the desired file does not exist - + Error al buscar la lista deseada en la red, o el fichero no existe @@ -3609,72 +3614,72 @@ Letras de "%1" por %2: Xmpp Configuration - + Configuración XMPP Configure this Xmpp account - + Configurar esta cuenta XMPP Enter your Xmpp login to connect with your friends using Tomahawk! - + Introduzca sus datos de inicio de sesión de XMPP para conectarse son sus amigos que usen Tomahawk! Login Information - + Información de Inicio de Sesión Xmpp ID: - + ID XMPP: e.g. user@example.com - + e.g. usuario@ejemplo.com Password: - + Contraseña: An account with this name already exists! - + Ya existe una cuenta con el mismo nombre! Advanced Xmpp Settings - + Ajustes avanzados de XMPP Server: - + Servidor: Port: - + Puerto: Lots of servers don't support this (e.g. GTalk, jabber.org) - + Muchos servidores no soporta esta opción (e.g. GTalk, jabber.org) Publish currently playing track - + Publicar el tema reproducido al momento Enforce secure connection - + Forzar conexión segura @@ -3682,107 +3687,107 @@ Letras de "%1" por %2: User Interaction - + Interacción de usuario Host is unknown - + Máquina desconocida Item not found - + Elemento no encontrado Authorization Error - + Error de Autorización Remote Stream Error - + Error de Stream Remoto Remote Connection failed - + Fallo en la Conexión Remota Internal Server Error - + Error de Servidor Interno System shutdown - + Sistema apagado Conflict - + Conflicto Unknown - + Desconocido No Compression Support - + Compresión no sportada No Encryption Support - + Encriptación no soportada No Authorization Support - + Autorización no soportada No Supported Feature - + Característica no soportada Add Friend - + Añadir Amigo Enter Xmpp ID: - + Introducir ID XMPP: Add Friend... - + Añadir Amigo... XML Console... - + Consola XML... I'm sorry -- I'm just an automatic presence used by Tomahawk Player (http://gettomahawk.com). If you are getting this message, the person you are trying to reach is probably not signed on, so please try again later! - + Lo siento -- soy una presencia automática usada por el Reproductor Tomahawk (http://gettomahawk.com). Si recibe este mensaje, la persona con quién intenta contactar no esté contectada probablemente. Inténtelo más tarde! Authorize User - + Autorizar Usuario Do you want to grant <b>%1</b> access to your Collection? - + ¿Quiere permitir que <b>%1</b> acceda a su Colección? @@ -3790,7 +3795,7 @@ Letras de "%1" por %2: Form - Form + Formulario From 7ea8f8aa642e3ee2d4da81aa7a166165ad0528ff Mon Sep 17 00:00:00 2001 From: Tomahawk CI Date: Mon, 7 May 2012 22:16:31 +0000 Subject: [PATCH 26/47] Automatic merge of Transifex translations --- lang/tomahawk_de.ts | 51 ++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/lang/tomahawk_de.ts b/lang/tomahawk_de.ts index 3a4f7820d..86273f156 100644 --- a/lang/tomahawk_de.ts +++ b/lang/tomahawk_de.ts @@ -47,7 +47,7 @@ Allow %1 to connect and stream from you? - + Willst du %1 erlauben sich mit dir zu verbinden und deine Sammlung anzuhören? @@ -1017,7 +1017,7 @@ connect and stream from you? Some changed settings will not take effect until Tomahawk is restarted - + Einige geänderte Einstellungen haben keinen Effekt bis zum nächsten Neustart @@ -1453,7 +1453,7 @@ connect and stream from you? Advanced Settings - + Erweiterte Einstellungen @@ -1468,27 +1468,27 @@ connect and stream from you? Use UPnP to establish port forward (recommended) - + UPnP für Port-Weiterleitung verwenden (empfohlen) Use static external IP address/host name and port - + Statische externe IP Adresse / Hostnamen und Port verwenden Set this to your external IP address or host name. Make sure to forward the port to this host! - + Stelle hier deine externe IP Adresse oder Hostnamen ein. Du musst den Port selbst an diesen Rechner weiterleiten! SOCKS Proxy - + SOCKS Proxy Use SOCKS Proxy - + SOCKS Proxy verwenden @@ -1523,7 +1523,7 @@ connect and stream from you? Other Settings - + Andere Einstellungen @@ -1626,7 +1626,7 @@ connect and stream from you? Test Login - + Login testen @@ -2687,7 +2687,7 @@ Tomahawk auf Twitter's Website authentifiziert hast: &Stop Playback after current Track - + Wiedergabe nach diesem Lied &stoppen @@ -2718,7 +2718,7 @@ Tomahawk auf Twitter's Website authentifiziert hast: &Continue Playback after current Track - + Wiedergabe nach diesem Lied &fortsetzen @@ -2997,7 +2997,7 @@ Tomahawk auf Twitter's Website authentifiziert hast: <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1<br/>(%2)</h2> @@ -3091,52 +3091,52 @@ Tomahawk auf Twitter's Website authentifiziert hast: Form - + Formular Cover - + Cover Track - + Lied by - + von Artist - + Künstler from - + auf Album - + Album Statistics - + Statistiken Similar Tracks - + Ähnliche Lieder You've listened to this track %n time(s). - + Du hast dieses Lied einmal gehört.Du hast dieses Lied %n mal gehört. @@ -3488,7 +3488,10 @@ Lyrics for "%1" by %2: %3 - + Liedtext für "%1" von %2: + +%3 + From 03fbcb87909b78b680f23bb616b87aefd6005ed1 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Tue, 8 May 2012 18:11:43 -0400 Subject: [PATCH 27/47] When running as a library, don't assume that there will be a thread, and thus a proxyfactory, for the application thread. --- src/libtomahawk/utils/TomahawkUtils.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libtomahawk/utils/TomahawkUtils.cpp b/src/libtomahawk/utils/TomahawkUtils.cpp index 8fcf170af..f61bf924d 100644 --- a/src/libtomahawk/utils/TomahawkUtils.cpp +++ b/src/libtomahawk/utils/TomahawkUtils.cpp @@ -402,15 +402,15 @@ proxyFactory( bool makeClone, bool noMutexLocker ) { if ( s_threadProxyFactoryHash.contains( QThread::currentThread() ) ) return s_threadProxyFactoryHash[ QThread::currentThread() ]; - - if ( !s_threadProxyFactoryHash.contains( TOMAHAWK_APPLICATION::instance()->thread() ) ) - return 0; } // create a new proxy factory for this thread - TomahawkUtils::NetworkProxyFactory *mainProxyFactory = s_threadProxyFactoryHash[ TOMAHAWK_APPLICATION::instance()->thread() ]; TomahawkUtils::NetworkProxyFactory *newProxyFactory = new TomahawkUtils::NetworkProxyFactory(); - *newProxyFactory = *mainProxyFactory; + if ( s_threadProxyFactoryHash.contains( TOMAHAWK_APPLICATION::instance()->thread() ) ) + { + TomahawkUtils::NetworkProxyFactory *mainProxyFactory = s_threadProxyFactoryHash[ TOMAHAWK_APPLICATION::instance()->thread() ]; + *newProxyFactory = *mainProxyFactory; + } if ( !makeClone ) s_threadProxyFactoryHash[ QThread::currentThread() ] = newProxyFactory; From a631afa0516e1de1111cdb5fe0198fd7084a2a8e Mon Sep 17 00:00:00 2001 From: Tomahawk CI Date: Tue, 8 May 2012 22:18:29 +0000 Subject: [PATCH 28/47] Automatic merge of Transifex translations --- lang/tomahawk_fr.ts | 283 +++++++++++++++++++++++--------------------- 1 file changed, 147 insertions(+), 136 deletions(-) diff --git a/lang/tomahawk_fr.ts b/lang/tomahawk_fr.ts index 8138f2510..02739bb89 100644 --- a/lang/tomahawk_fr.ts +++ b/lang/tomahawk_fr.ts @@ -40,14 +40,15 @@ Error displaying ACL info - + Erreur d'affichage des infos ACL Allow %1 to connect and stream from you? - + Autoriser %1 à +se connecter et streamer depuis chez vous ? @@ -285,7 +286,7 @@ connect and stream from you? social - + social @@ -465,7 +466,7 @@ connect and stream from you? About - + A propos @@ -475,7 +476,7 @@ connect and stream from you? About this Account - + A propos de ce compte @@ -641,7 +642,7 @@ connect and stream from you? Bookmarks - + Signets @@ -713,7 +714,7 @@ connect and stream from you? added %1 - + ajouté par %1 @@ -915,17 +916,17 @@ connect and stream from you? Friend Finders - + Rechercher vos amis Music Finders - + Trouver de la musique Status Updaters - + Mettre à jour votre statut @@ -933,7 +934,7 @@ connect and stream from you? ZIP/UNZIP API error %1 - + Erreur %1 ZIP/UNZIP API @@ -960,7 +961,7 @@ connect and stream from you? Related Artists - + Artistes similaires @@ -968,7 +969,7 @@ connect and stream from you? Not found: %1 - + Non trouvé : %1 @@ -1017,7 +1018,7 @@ connect and stream from you? Some changed settings will not take effect until Tomahawk is restarted - + Certaines modifications ne prendront effet qu'au prochain démarrage de Tomahawk @@ -1027,7 +1028,7 @@ connect and stream from you? Install resolver from file - + Installer un script de résolution depuis un fichier @@ -1073,7 +1074,7 @@ connect and stream from you? Cover - + Pochette @@ -1083,7 +1084,7 @@ connect and stream from you? Listening to "%1" by %2 and loving it! %3 - + J'écoute "%1" par %2 et j'adore ! %3 @@ -1205,7 +1206,7 @@ connect and stream from you? Loved Tracks - + Pistes favorites @@ -1215,27 +1216,27 @@ connect and stream from you? Latest additions to your collection - + Derniers ajouts à votre collection Latest additions to %1's collection - + Derniers à la collection de %1 Recently Played Tracks - + Dernières pistes jouées Your recently played tracks - + Vos dernières pistes jouées %1's recently played tracks - + Dernières pistes jouées par %1 @@ -1316,7 +1317,7 @@ connect and stream from you? Top Loved Tracks - + Top des pistes favorites @@ -1354,37 +1355,37 @@ connect and stream from you? Configure your Spotify account - + Configurer votre compte Spotify Username or Facebook Email - + Nom d'utilisateur ou email Facebook Log In - + Connexion Right click on any Tomahawk playlist to sync it to Spotify. - + Clic droit pour synchroniser une liste de lecture Tomahawk vers Spotify. High Quality Streams - + Streaming haute qualité Spotify playlists to keep in sync: - + Liste de lecture Spotify à synchroniser : Delete Tomahawk playlist when removing synchronization - + Supprimer la liste de lecture de Tomahawk à la suppression de la synchronisation @@ -1402,12 +1403,12 @@ connect and stream from you? Delete in Spotify? - + Supprimer dans Spotify ? Would you like to delete the corresponding Spotify playlist as well? - + Voulez-vous aussi supprimer la liste de lecture correspondante dans Spotify ? @@ -1420,7 +1421,7 @@ connect and stream from you? Local Music Information - + Fichiers de musique locaux @@ -1456,42 +1457,42 @@ et des stations basés sur vos goûts. Advanced Settings - + Paramètres avancés Remote Peer Connection Method - + Méthode de connexion distante à un pair None (outgoing connections only) - + Aucune (Connexions sortantes uniquement) Use UPnP to establish port forward (recommended) - + Utiliser UPnP pour la redirection des ports (recommandé) Use static external IP address/host name and port - + Utiliser une adresse IP externe statique/nom d'hôte et un port Set this to your external IP address or host name. Make sure to forward the port to this host! - + Indiquez votre adresse IP externe ou nom d'hôte. Vérifiez que le port est bien redirigé vers cet hôte ! SOCKS Proxy - + Proxy SOCKS Use SOCKS Proxy - + Utiliser un proxy SOCKS @@ -1506,7 +1507,7 @@ et des stations basés sur vos goûts. Filter by capability: - + Filtrer par capacité : @@ -1526,7 +1527,7 @@ et des stations basés sur vos goûts. Other Settings - + Autres paramètres @@ -1629,7 +1630,7 @@ et des stations basés sur vos goûts. Test Login - + Test de connexion @@ -1653,12 +1654,12 @@ et des stations basés sur vos goûts. Sync with Spotify - + Synchroniser avec Spotify Stop syncing with Spotify - + Stopper la synchronisation avec Spotify @@ -1666,22 +1667,22 @@ et des stations basés sur vos goûts. Logging in... - + Connexion... Logged in! - + Connecté ! Failed: %1 - + Echec : %1 Log In - + Connexion @@ -1863,7 +1864,7 @@ Essayez de vous authentifier de nouveau. &Love - + &Favori @@ -1883,12 +1884,12 @@ Essayez de vous authentifier de nouveau. Un-&Love - + Supprimer des Favoris &Delete Items - + &Supprimer les éléments @@ -1903,7 +1904,7 @@ Essayez de vous authentifier de nouveau. &Delete Item - + &Supprimer l'élément @@ -1911,32 +1912,32 @@ Essayez de vous authentifier de nouveau. Top Loved Tracks - + Top des pistes favorites Your loved tracks - + Vos pistes favorites %1's loved tracks - + Pistes favorites de %1 The most loved tracks from all your friends - + Les pistes favorites de tous vos amis All of your loved tracks - + Toutes vos pistes favorites All of %1's loved tracks - + Toutes les pistes favorites de %1 @@ -2244,23 +2245,23 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer. only by ~%1 - + uniquement par ~%1 similar to ~%1 - + similaire à ~%1 with genre ~%1 - + avec le genre ~%1 from no one - + de personne @@ -2270,12 +2271,12 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer. from %1 radio - + de la radio %1 with %1 %2 - + avec %1 %2 @@ -2295,32 +2296,32 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer. at around %1%2 %3 - + à environ %1%2 %3 in %1 - + dans %1 in a %1 key - + en tonalité %1 sorted in %1 %2 order - + trié par ordre %1 %2 with a %1 mood - + avec une ambiance %1 in a %1 style - + ayant un style %1 @@ -2462,7 +2463,7 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer. on "%1" - + sur "%1" @@ -2470,27 +2471,27 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer. Top Tracks - + Top des pistes Loved Tracks - + Pistes favorites Hyped Tracks - + Pistes Hype Top Artists - + Top Artistes Hyped Artists - + Artistes Hype @@ -2594,7 +2595,7 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer. loved this track - + a mis cette piste en favoris @@ -2660,7 +2661,7 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer. Automatically update from XSPF - + Mise à jour automatique XSPF @@ -2676,7 +2677,7 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer. Twitter PIN - + Identification Twitter @@ -2692,7 +2693,7 @@ saisissez le numéro PIN ici : &Stop Playback after current Track - + &Stopper la lecture après cette piste @@ -2723,7 +2724,7 @@ saisissez le numéro PIN ici : &Continue Playback after current Track - + &Continuer la lecture après cette piste @@ -2900,22 +2901,22 @@ saisissez le numéro PIN ici : Connect To Peer - + Connexion à un pair Enter peer address: - + Adresse du pair : Enter peer port: - + Port du pair : Enter peer key: - + Clé du pair : @@ -3002,22 +3003,22 @@ saisissez le numéro PIN ici : <h2><b>Tomahawk %1<br/>(%2)</h2> - + <h2><b>Tomahawk %1<br/>(%2)</h2> <h2><b>Tomahawk %1</h2> - + <h2><b>Tomahawk %1</h2> Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Thanks to: Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson - + Copyright 2010 - 2012<br/>Christian Muehlhaeuser &lt;muesli@tomahawk-player.org&gt;<br/><br/>Merci à : Leo Franchi, Jeff Mitchell, Dominik Schmidt, Jason Herskowitz, Alejandro Wainzinger, Hugo Lindstr&ouml;m, Michael Zanetti, Harald Sitter and Steve Robertson About Tomahawk - + A propos de Tomahawk @@ -3065,12 +3066,12 @@ saisissez le numéro PIN ici : Artist View - + Vue artiste Flat View - + Vue fixe @@ -3088,7 +3089,7 @@ saisissez le numéro PIN ici : Top Hits - + Top Hits @@ -3096,72 +3097,72 @@ saisissez le numéro PIN ici : Form - + Form Cover - + Pochette Track - + Piste by - + par Artist - + Artiste from - + de Album - + Album Statistics - + Statistiques Similar Tracks - + Piste similaire You've listened to this track %n time(s). - + Vous avez écouté cette piste %n fois.Vous avez écouté cette piste %n fois. You've never listened to this track before. - + Vous n'avez encore jamais écouté cette piste. You first listened to it on %1. - + Vous l'avez écouté pour la première fois le %1. You've listened to %1 %n time(s). - + Vous avez écouté %1 %n fois.Vous avez écouté %1 %n fois. You've never listened to %1 before. - + Vous n'avez encore jamais écouté %1. @@ -3194,7 +3195,7 @@ saisissez le numéro PIN ici : Bitrate - + Bitrate @@ -3240,12 +3241,12 @@ saisissez le numéro PIN ici : from - + de to - + à @@ -3271,7 +3272,7 @@ saisissez le numéro PIN ici : Bitrate - + Bitrate @@ -3409,12 +3410,12 @@ Vous pouvez envoyer un message de synchronisation quand vous le souhaitez en env Recently Played Tracks - + Dernières pistes jouées Recently played tracks from all your friends - + Dernières pistes jouées par vos amis @@ -3468,26 +3469,32 @@ Vous pouvez envoyer un message de synchronisation quand vous le souhaitez en env Terms for %1: - + +Résultats pour %1 : + No terms found, sorry. - + Aucun terme trouvé, désolé. Hotttness for %1: %2 - + +Hotttness pour %1 : %2 + Familiarity for %1: %2 - + +Familiarité pour %1 : %2 + @@ -3496,7 +3503,11 @@ Lyrics for "%1" by %2: %3 - + +Paroles de "%1" par %2 : + +%3 + @@ -3527,7 +3538,7 @@ Lyrics for "%1" by %2: Xml stream console - + Console stream xml @@ -3538,17 +3549,17 @@ Lyrics for "%1" by %2: Save log - + Sauvegarder le journal Disabled - + Désactivé By JID - + Par JID @@ -3558,17 +3569,17 @@ Lyrics for "%1" by %2: By all attributes - + Par tous les attributs Visible stanzas - + Strophes visibles Information query - + Requête d'information @@ -3699,22 +3710,22 @@ Lyrics for "%1" by %2: Remote Stream Error - + Erreur de lecture à distance Remote Connection failed - + Erreur de connexion à distance Internal Server Error - + Erreur interne du serveur System shutdown - + Arrêt du système @@ -3729,22 +3740,22 @@ Lyrics for "%1" by %2: No Compression Support - + Pas de support de la compression No Encryption Support - + Pas de support du chiffrement No Authorization Support - + Pas de support de l'authorization No Supported Feature - + Fonctionnalité non supportée @@ -3774,7 +3785,7 @@ Lyrics for "%1" by %2: Authorize User - + Autoriser l'utilisateur From b2f7c5f7c573712a4ff6f0068427e97f64916dce Mon Sep 17 00:00:00 2001 From: Alejandro Wainzinger Date: Tue, 8 May 2012 18:13:48 -0700 Subject: [PATCH 29/47] When listening privately, don't push Adium status updates. --- src/libtomahawk/infosystem/infoplugins/mac/AdiumPlugin.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libtomahawk/infosystem/infoplugins/mac/AdiumPlugin.cpp b/src/libtomahawk/infosystem/infoplugins/mac/AdiumPlugin.cpp index 1422eb710..0a50d1be2 100644 --- a/src/libtomahawk/infosystem/infoplugins/mac/AdiumPlugin.cpp +++ b/src/libtomahawk/infosystem/infoplugins/mac/AdiumPlugin.cpp @@ -141,6 +141,9 @@ AdiumPlugin::audioStarted( const Tomahawk::InfoSystem::PushInfoPair pushInfoPair QVariantMap map = pushInfoPair.second.toMap(); + if ( map.contains( "private" ) && map[ "private" ] == TomahawkSettings::FullyPrivate ) + return; + if ( !map.contains( "trackinfo" ) || !map[ "trackinfo" ].canConvert< Tomahawk::InfoSystem::InfoStringHash >() ) return; From 641eff847201a4bf2fe02fd230123bec6899faa5 Mon Sep 17 00:00:00 2001 From: Adria Arrufat Date: Wed, 9 May 2012 22:42:59 +0200 Subject: [PATCH 30/47] Improved systray behaviour: Now it brings Tomahawk to front when it's not the Active App, instead of hiding it Signed-off-by: Adria Arrufat --- src/TomahawkTrayIcon.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/TomahawkTrayIcon.cpp b/src/TomahawkTrayIcon.cpp index 4e46f7a41..9811c2dd3 100644 --- a/src/TomahawkTrayIcon.cpp +++ b/src/TomahawkTrayIcon.cpp @@ -29,6 +29,7 @@ #include "Query.h" #include "utils/Logger.h" +#include "utils/TomahawkUtilsGui.h" #include @@ -198,13 +199,13 @@ TomahawkTrayIcon::onActivated( QSystemTrayIcon::ActivationReason reason ) case QSystemTrayIcon::Trigger: { TomahawkWindow* mainwindow = APP->mainWindow(); - if ( mainwindow->isVisible() ) + if (mainwindow->isActiveWindow()) { mainwindow->hide(); } else { - mainwindow->show(); + TomahawkUtils::bringToFront(); } } break; From 3cae004dd4f6b5270151031f1c31f2e75614eda8 Mon Sep 17 00:00:00 2001 From: Tomahawk CI Date: Thu, 10 May 2012 22:16:49 +0000 Subject: [PATCH 31/47] Automatic merge of Transifex translations --- lang/tomahawk_bg.ts | 18 +++++++++--------- lang/tomahawk_ca.ts | 18 +++++++++--------- lang/tomahawk_de.ts | 18 +++++++++--------- lang/tomahawk_en.ts | 18 +++++++++--------- lang/tomahawk_es.ts | 18 +++++++++--------- lang/tomahawk_fr.ts | 18 +++++++++--------- lang/tomahawk_ja.ts | 18 +++++++++--------- lang/tomahawk_pl.ts | 18 +++++++++--------- lang/tomahawk_pt_BR.ts | 18 +++++++++--------- lang/tomahawk_ru.ts | 18 +++++++++--------- lang/tomahawk_sv.ts | 18 +++++++++--------- lang/tomahawk_tr.ts | 18 +++++++++--------- lang/tomahawk_zh_CN.ts | 18 +++++++++--------- lang/tomahawk_zh_TW.ts | 18 +++++++++--------- 14 files changed, 126 insertions(+), 126 deletions(-) diff --git a/lang/tomahawk_bg.ts b/lang/tomahawk_bg.ts index 1e3bf60c3..293e2190a 100644 --- a/lang/tomahawk_bg.ts +++ b/lang/tomahawk_bg.ts @@ -2698,39 +2698,39 @@ enter the displayed PIN number here: TomahawkTrayIcon - - + + &Stop Playback after current Track &Спри възпроизвеждането след текущата песен - - + + Hide Tomahawk Window Скрий главният прозорец - + Show Tomahawk Window Покажи главният прозорец - + Currently not playing. В момента не се изпълнява нищо - + Play Изпълни - + Pause Пауза - + &Continue Playback after current Track &Продължи възпроизвеждането след текущата песен diff --git a/lang/tomahawk_ca.ts b/lang/tomahawk_ca.ts index 6ba8134d7..adcbaa9b2 100644 --- a/lang/tomahawk_ca.ts +++ b/lang/tomahawk_ca.ts @@ -2689,39 +2689,39 @@ introduïu el PIN aquí: TomahawkTrayIcon - - + + &Stop Playback after current Track &Atura la Reproducció després d'aquesta Cançó - - + + Hide Tomahawk Window Amaga la finestra de Tomahawk - + Show Tomahawk Window Mostra la finestra de Tomahawk - + Currently not playing. No s'està reproduint res. - + Play Reprodueix - + Pause Pausa - + &Continue Playback after current Track &Continua la reproducció després d'aquesta Cançó diff --git a/lang/tomahawk_de.ts b/lang/tomahawk_de.ts index 86273f156..d94aa9e90 100644 --- a/lang/tomahawk_de.ts +++ b/lang/tomahawk_de.ts @@ -2684,39 +2684,39 @@ Tomahawk auf Twitter's Website authentifiziert hast: TomahawkTrayIcon - - + + &Stop Playback after current Track Wiedergabe nach diesem Lied &stoppen - - + + Hide Tomahawk Window Tomahawk verbergen - + Show Tomahawk Window Tomahawk anzeigen - + Currently not playing. Derzeit wird nichts gespielt. - + Play Abspielen - + Pause Pause - + &Continue Playback after current Track Wiedergabe nach diesem Lied &fortsetzen diff --git a/lang/tomahawk_en.ts b/lang/tomahawk_en.ts index 02517d38f..1cc7c7d97 100644 --- a/lang/tomahawk_en.ts +++ b/lang/tomahawk_en.ts @@ -2690,39 +2690,39 @@ enter the displayed PIN number here: TomahawkTrayIcon - - + + &Stop Playback after current Track &Stop Playback after current Track - - + + Hide Tomahawk Window Hide Tomahawk Window - + Show Tomahawk Window Show Tomahawk Window - + Currently not playing. Currently not playing. - + Play Play - + Pause Pause - + &Continue Playback after current Track &Continue Playback after current Track diff --git a/lang/tomahawk_es.ts b/lang/tomahawk_es.ts index 55fba9d3a..c952dc625 100644 --- a/lang/tomahawk_es.ts +++ b/lang/tomahawk_es.ts @@ -2688,39 +2688,39 @@ introduzca su número PIN aquí: TomahawkTrayIcon - - + + &Stop Playback after current Track &Para la Reproducción después de este Tema - - + + Hide Tomahawk Window Ocultar ventana de Tomahawk - + Show Tomahawk Window Mostrar ventana de Tomahawk - + Currently not playing. Ninguna pista en reproducción. - + Play Reproducir - + Pause Pausar - + &Continue Playback after current Track &Continuar la Reproducción después de este Tema diff --git a/lang/tomahawk_fr.ts b/lang/tomahawk_fr.ts index 02739bb89..3cabf5a1e 100644 --- a/lang/tomahawk_fr.ts +++ b/lang/tomahawk_fr.ts @@ -2690,39 +2690,39 @@ saisissez le numéro PIN ici : TomahawkTrayIcon - - + + &Stop Playback after current Track &Stopper la lecture après cette piste - - + + Hide Tomahawk Window Masquer la fenêtre Tomahawk - + Show Tomahawk Window Afficher la fenêtre Tomahawk - + Currently not playing. Pas de lecture en cours - + Play Lecture - + Pause Pause - + &Continue Playback after current Track &Continuer la lecture après cette piste diff --git a/lang/tomahawk_ja.ts b/lang/tomahawk_ja.ts index 7604d2a43..7a644726d 100644 --- a/lang/tomahawk_ja.ts +++ b/lang/tomahawk_ja.ts @@ -2679,39 +2679,39 @@ enter the displayed PIN number here: TomahawkTrayIcon - - + + &Stop Playback after current Track - - + + Hide Tomahawk Window Tomahawkのウインドウを隠す - + Show Tomahawk Window Tomahawkのウインドウを表示 - + Currently not playing. - + Play 再生 - + Pause 一時停止 - + &Continue Playback after current Track diff --git a/lang/tomahawk_pl.ts b/lang/tomahawk_pl.ts index 13f8bbb30..c6eaf96f7 100644 --- a/lang/tomahawk_pl.ts +++ b/lang/tomahawk_pl.ts @@ -2684,39 +2684,39 @@ wprowadź pokazany numer PIN tutaj: TomahawkTrayIcon - - + + &Stop Playback after current Track - - + + Hide Tomahawk Window Ukryj Okno Tomahawka - + Show Tomahawk Window Pokaż Okno Tomahawka - + Currently not playing. Aktualnie nie odtwarza. - + Play Odtwarzaj - + Pause Pauza - + &Continue Playback after current Track diff --git a/lang/tomahawk_pt_BR.ts b/lang/tomahawk_pt_BR.ts index 2049d15c2..1f3eb658e 100644 --- a/lang/tomahawk_pt_BR.ts +++ b/lang/tomahawk_pt_BR.ts @@ -2683,39 +2683,39 @@ colocar o número PIN mostrado aqui: TomahawkTrayIcon - - + + &Stop Playback after current Track - - + + Hide Tomahawk Window Esconder janela do Tomahawk - + Show Tomahawk Window Mostrar janela do Tomahawk - + Currently not playing. Não reproduzindo nada. - + Play Reporduzir - + Pause Pausar - + &Continue Playback after current Track diff --git a/lang/tomahawk_ru.ts b/lang/tomahawk_ru.ts index 9b3b9ebdc..c895491b5 100644 --- a/lang/tomahawk_ru.ts +++ b/lang/tomahawk_ru.ts @@ -2684,39 +2684,39 @@ enter the displayed PIN number here: TomahawkTrayIcon - - + + &Stop Playback after current Track &Остановить после текущего трека - - + + Hide Tomahawk Window Спрятать окно Tomahawk - + Show Tomahawk Window Показать окно Tomahawk - + Currently not playing. Не воспроизводится. - + Play Играть - + Pause Пауза - + &Continue Playback after current Track &Продолжить воспроизведение после текущего трека diff --git a/lang/tomahawk_sv.ts b/lang/tomahawk_sv.ts index 7313bf206..7c8d42759 100644 --- a/lang/tomahawk_sv.ts +++ b/lang/tomahawk_sv.ts @@ -2678,39 +2678,39 @@ enter the displayed PIN number here: TomahawkTrayIcon - - + + &Stop Playback after current Track - - + + Hide Tomahawk Window Dölj Tomahawk-fönstret - + Show Tomahawk Window Visa Tomahawk-fönstret - + Currently not playing. Spelar ingenting för närvarande. - + Play Spela upp - + Pause Paus - + &Continue Playback after current Track diff --git a/lang/tomahawk_tr.ts b/lang/tomahawk_tr.ts index 9faf9d27f..eb9c19979 100644 --- a/lang/tomahawk_tr.ts +++ b/lang/tomahawk_tr.ts @@ -2677,39 +2677,39 @@ enter the displayed PIN number here: TomahawkTrayIcon - - + + &Stop Playback after current Track - - + + Hide Tomahawk Window - + Show Tomahawk Window - + Currently not playing. - + Play - + Pause - + &Continue Playback after current Track diff --git a/lang/tomahawk_zh_CN.ts b/lang/tomahawk_zh_CN.ts index eca67b6ef..1b54f10b5 100644 --- a/lang/tomahawk_zh_CN.ts +++ b/lang/tomahawk_zh_CN.ts @@ -2677,39 +2677,39 @@ enter the displayed PIN number here: TomahawkTrayIcon - - + + &Stop Playback after current Track - - + + Hide Tomahawk Window - + Show Tomahawk Window - + Currently not playing. - + Play - + Pause - + &Continue Playback after current Track diff --git a/lang/tomahawk_zh_TW.ts b/lang/tomahawk_zh_TW.ts index ff44fcbdf..6168a4eae 100644 --- a/lang/tomahawk_zh_TW.ts +++ b/lang/tomahawk_zh_TW.ts @@ -2677,39 +2677,39 @@ enter the displayed PIN number here: TomahawkTrayIcon - - + + &Stop Playback after current Track - - + + Hide Tomahawk Window - + Show Tomahawk Window - + Currently not playing. 目前沒有播放。 - + Play 播放 - + Pause 暫停 - + &Continue Playback after current Track From c89b43ac0705551738be0d6d10b28dc3557a1719 Mon Sep 17 00:00:00 2001 From: Jason Herskowitz Date: Sat, 12 May 2012 11:28:12 -0700 Subject: [PATCH 32/47] Add square artist image placeholder for grid view --- data/images/artist-placeholder-grid.png | Bin 0 -> 364172 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/images/artist-placeholder-grid.png diff --git a/data/images/artist-placeholder-grid.png b/data/images/artist-placeholder-grid.png new file mode 100644 index 0000000000000000000000000000000000000000..f73c245279bbdd68dd528ba557cc210fe8235760 GIT binary patch literal 364172 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 Date: Sat, 12 May 2012 11:36:30 -0700 Subject: [PATCH 33/47] Add grid album placeholder icon --- data/images/album-placeholder-grid.png | Bin 0 -> 364172 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/images/album-placeholder-grid.png diff --git a/data/images/album-placeholder-grid.png b/data/images/album-placeholder-grid.png new file mode 100644 index 0000000000000000000000000000000000000000..adb73db6c3fb80155238083692bc2d580ce95333 GIT binary patch literal 364172 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 CeBcKiHDxA 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 X#jiU4bL`^Ff9Y3Vdj3oP>3{zJeY4&I literal 0 HcmV?d00001 From ff18013f88fdc76211df540fbdfd89dc821dbcc5 Mon Sep 17 00:00:00 2001 From: Jason Herskowitz Date: Sat, 12 May 2012 12:00:26 -0700 Subject: [PATCH 34/47] Darker grid placeholder images --- data/images/album-placeholder-grid.png | Bin 364172 -> 364172 bytes data/images/artist-placeholder-grid.png | Bin 364172 -> 364172 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/images/album-placeholder-grid.png b/data/images/album-placeholder-grid.png index adb73db6c3fb80155238083692bc2d580ce95333..a7df02e09f0f6c56f657731d2bc1e3b85bd3311f 100644 GIT binary patch delta 29757 zcmeHw2Yggj7Wcd5WhTrdGa(5HkeCSs1Oy39VFgSSR9Z{`7tjC+9R&?Vic&&TP{1S) zb5SV+1Zg6n$ispL7exdyxVko!UN-NdEsI5p-~fk z#?j!})ee3Ao$uu>FR+UjRY(vYO_zr-!+oKJs9Zy`Hl8~5HO;4Ki5)umk~_6$Kb^mz zX^d%1)3ne~x8}Qg6`#sqzAIO*YUj>hU|glUWQ?(Ql*1_cS{em6NtM}K4^){ggiWPA z&!j50@t~a1@)jYuRxQx(!;6}shH(R?;ZDBOXU;K>&v^L)?KYNgzNzirwbLr~x4*t; zraUhmW@t`KlI26Cuf?|T8a1`)nVE(sGBQ*aIURwh%dIvpUc97z^y!ycfG)LTCr)ZJ zr%$Tr&IteRd}4D3Ro9YIdKoWA#R^Q3ap<;ss-P2dtIW@E(=?ZiQ~OeNr@HYmnX2M9 z3EK@C%?oDUhY7$0T6A=@wtUHg(uwho z;vM`uSWtK3qtktLJ+-aT#zfboPO?*{&(aF}Xyxhd5B1c;mHQHU6?mFC)J)0UMv}{^ z(iSk?@bs4n_-b=k z#`QE%tPitbq%RIv(Z{7t6(1A2$`6)y^~Et^SCi|D2<160LI3nMU-Cdz9E7>f+Ki2n zRZqmK4NK?(Xuv2wq!UHhbMx`bl{gS&yc3;|@67D#L{GdWyU~yvZ@D4Tsir(8?=%Vr zNR_{e%P^m#S|HPPp?&bt0UxH6O?q^k!iM>a{Cec59QFQt{5$`}$g4eQ*eES7Hp_7EI+~YRR+Qo;yjGYIi-|rQCKd)d_%~OCzT+M;5IzX-9~1M@*kWkI~8N}&}a)y zjs@;&Q&R@$PQ!bXQ^m{!4=KtQ(rAC1`+96dT6#^_rH}f0`N|b*wO-h?ot^vXyk>5B zQ9FD3L<#w2dn5hFyD0pD2ghq26K=8=@BD>}KKyB1u>`$_k#>Ke3OdDX#)dX_HK!34 z=;>#92uABtS=DsA;l0smWR45_T?37YXMrkX3bz|YA-YkRT0Q5h@=-dK^Axj}-`zvJ zkr)yE*MgkYEJpm(PZzX;xAtjI=gcV^W0?OKvm%~+@+qpK-PHUBjpl^5CwQ1T*+7pp ziq|@^BT~XdnBf^MReUTK)6KY(-t4&@g;RNAF!X~zU?M!@!d2!n8ELq?In=~wxzi|Y z9+vHO(gLc&n?#5z?kLsMGiTJyduEJ|u1~^G$+PT6{%AMGW;ZfM*_8)lH}Xeeox5O{ zRXP~%QJE%cx@o40Xl^iP_S`ALWw_4-{np!uf+cIx;-dlD*4N(F=FXW;b1;sTAIEg6 zO>od@>~I8Yv!+eld@^xA6ECcKjtUO1!js0zoSdh%&FYSCm{_$!QIYg2MMk)$&zSAI z^_J#Z@yRn519hKdy_I(i*h=&>;PN%&gd^96Jw5v*t7-T;)>7UZS%8Wkijlu{nnkHL zXIQej+yk3+@fmivRWpPRlv%^l?3z|0hiK|#01qv1BAiY$=5sg#*`cow`wkxZPMbMn z5^+`<-)aBl9^{(!*pphTW{tF~SFid&w?@$IH3e4NxRMyH`n3g5{O&K@W%Rv0Ruu-J zS4p#^LsAcnZ2Xk}1x8|>Wwi3flG`G!GXR%y;>DrY7iY>aBdv|iIDT83-_k4{k+gC? zupin|Y|p;G`5t}b;j-Zz^&d`ZsA1%4(X}IpU0K@@E3SeE=#j)VL2{=VNV5eFhB#4E zpt7FP$SoboKhmcr&CAYe

!WfZivX|J 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�>9{aD|GPet}yKOd` zws-GdYtvdAx7lifw*JTo`8O<7blF1Df6NO0fW>0!0|G$cYFTH*nH1kk)b~6OGz+qL zF{3?9lL(03Mw58?@>MlzJcC&+i+hZMY?x0COriy%7JY{G%E$prU2X7%Odl}#0UtM- zZI4k|xja!7w1#|HCRu%AWW6laN4b1<=`O(?LTyXDUKnnfI&?sKwl3t=q*#%+oY3WI z=KMwcMk&;@i%WVF6S#Iwp7zs)%Ra8Abz-%QjLy}J7m4G zCdwCHc!8N$R`OV>zEW}+fq~-OxwGc_wY<7;u1Y(7yquWPE(JwMN>-g`^hIpp2! z=`7d2ZfzdC&_O-vZ^=;AhoZ`&{{nV$J+|}TYmS6NGOZJzyJBvvE@vWod5;}K+_4Ef zy|^_Ah}mHJKOmCDorL>moq}kcv6b&;keUapge1MC5xmc4e!2~o3u9;OKw{sm%<0>C zt@5ue%@%L+@bY!^LU#(xorhiCZ!mKk?|p4EUAy=p_yVg@yU>Zfhu~Q9eQmk*V8+N<;@4V8TPfnNxi9`*Z>namkPUV1%fYj< zNDBR)sr*p>4k)p4iNh)NWf94OK}Ngnp|oQfs={U@k>3me!8?|vKyK~tfSVAgVGLr7 z3y*;Y`+vmafS5RKS0U)*oF!Uar1Jagy6V}QT~B6b&q7|$M7h_6`hFaL6sQ&^*T&gZ zmE9c3GEVC&LUr_EZqS2SG9)NKQ|xsf1w*9WocAR^X<5$}8X1oTsE*0>~^NFwdN}>9EfIWiNGHvLR@A4I&vGGr#>S~^-<+naqU)_v3%y$TJ&!1DR zZ6*VBZ2$CrBGj1opkp zNXL!HFwj}SmhL7auqF0bAh!AEb9}uJ4dbGy^ej=Wn!}ubkvEbet$!N*G)<)U>!S{h z<23=+wIw*Tf%%$`Z?wif$%az!AiZj&JaU)v)Ccvtg=k_9m*OQMh7B1=w!w$(R7jWH zr+)lOMv(1F!IBlCj)zI7`K4Wa$mEvI8<=JJChy{FK@3}B0n6aU7}eP+=7{0A9XdQR z0Jrl6=;U(>)e^o0@E7K-QP{0^1&JuR^Bes+lJovKh_dvCHL5d>LdSnR_N~S#JRf?W znK)X`VM>OGtddT+*GNy1$lKDEjxqvbb3{NAEs;wflz-qKSnlNO9(e zp;H(2!p1;d@LotwD%tu(z-z`8oIc;x7K<37=^^bQFdy6B-I?{Kt$?U+C{?`=ZXyP9L}$a> zk2;3xD!n_TnS@q=58N%qF;&C;u^vA>H!%AHrs^wJCRrg@@hhKKPw_% ze+3pPysQRmL`GS;2rybRr5%E6zq7Pa#1I%K`$mqo_Q#Ck`RT(hN-yQec%`)^uCF z!IXp8Qf|?2B*&2=3sp6fJBSIQhF|OSh3t1ewSO0{zd3VGID`JiBh2_tqN50(JZXGc z@d};Oe4;Ddg5I9)@_v4Y`F`bWF*O^pA^wJL%XWUTjUm_AScs2 z+Fg`t%S4~x(&=OQgC*!z!2`Utiti(KQk0VE?Iq5XsMVH+zW!eEoK!0|%1{i+?Au>J zeJ6cgeLERq{|n@+lm^eG&6#;~nQ0Cd$GCW5U7n@z69q3{v78Lzq@j*#EW$UZt!>9t z@i5WT%(!2C!^N3XC#9I7gFt zvEV7}Y4=oUI0Z8xhL)BGB6$;&=5rIoL9UAH^J=w$dz0+y_gVx0UAT&?*wb(U#ldqQ zjyR-5AOqI(A{AeBb!;Qp!@PrF07W!gi=28KUF=a(vPGbaFx0}rLT&&4{jhX9)X8na z@+c@Nzt@dQtKH})qAp+tbt3o$@FeiFpCzKe$vLF~PD6Vrgg{WN)Vg-XZp^eXfAHg5-!1!PS0YL$amA%e_)S^dC`(`vy2?8y-i82QuVHfO#MAvpLH@Q0RJ zVw)f07Gg#lA`?&Deu_4`{Uq1}nN>rUh?kMD=8D?b9mm)F zS-4w)Db+(>#2_TsC*%9C2KM|*d+HxUA{xsWZ9$>xfw4T){9&a4K3b3nOp6Rvqwb9sFRp(<9r_ys zJYF@l%wz2_6MHffRx&G(gltOugHY~+2M@xTf7aG4}TU&B2@gZ^_aNGBnZaR@e^!YBQnMl^DHqhL<=}TnfGlFqolBYBuihkID=Fw z&Mji36cfge$JMId!_ z0JjBR#ynoYygAL-IQ<=FqD*793h&H;E40uovBRCPZkFFZ7OG*hEv$x0u(5WzySUA4 zxl8EiVS|bywym$eO}SODeWO+3gS>@#XpiX3<&x-XEzG9-#9x@0KYyN|1zF@|J#Ka` z6fiC$8H?W~SU&~giwSb;rV2k1lT6PigoAmfvwUb0=DLr?8b)*avsw>kj4|^+6)93I ze0nZTY#GQNOKl$g;d?XvOI%ge-K^ANZWjo3SBE^TKC$P!3EWF2O!6I))qnBJU&v`3 zrygdD5_oYVWnp6~8K*o)pvMGhcc=8g=J7Mu+iepkj%7%Kr4Bv8j}WZ4)AGK=pz@B2 z5oGrVNx*>bG$$StuQS%EWIe&Nb%~+FI9D`2s2ZBqNTL;PwUS>w?DgVo0jGS!WCusMDqp=2-|T4tE63*+2Qb$jWGE96ASW=^b7` z4!JFr_buMo^zMX%ZppjC=Lt4at%eUDO1Dm`?CTUMCr%ivnHw4+l!(TaTzUIM$RT%K z?n3Onra9t9>6BuDF%N^Q@GFcZIZm!$yNsE!EdbQun& zMV-DC)iD{C>hE7&WY2%hyd_ay5b7(q7L!y!8h+nE3Qs?I`YdqV#9eSgL(CcQx}G?? zj`Tw0$JCxslB~pavndfz%IyfV%o7xQqzf?K-G|gJ&Jq&Hj{5hUSN)TaWRl7Oc}lNXSF4;O`{_lNa!El!iM3c8e=kzEx#w;P z937zDpsF>$Df&=b@a#(H!GZ)0m@02Ir}mT+g_!;1Jh~S^=2GK$EZwWEgMfyQKP$56 zFy&dc48->jJQs8ClcUt)ROuu!>=)Wh5aY*trQ@fQHc1ESM;_2vL4LqMQyUJ0?$=>1&Iq2Ff^)xCG{?%oIcwu92m|D1aFdPhJw3 zLZ5+|Adag1hd;C+Tt&FFYw%pq+TYf(gk)=zSWfrsEtf7|&CEtKg`;K>YrbrvhSWvu|J!*I!f#2p)shgg8vIld%-+V`}GUZ04bQ6(g!F%i( zM66{=yLfJK9yL72zu`eP;5ZavYfdXfzYPB){qsL|yr#WmC0y0eF5NHNzjq_dSD%$Lg+L$a>eE%O3Me(^Lrdl4@)FPZ zm&gc&@Q=iH-)jLX&w6Zu(%AVDl3rt~I%eVMX?<5DVG0GbVgx7e;SiHF?r!m8u z6VU!kShz}6s|1W^QdLS-NwjA{LIr;o2UJ#pj8|mtFk$XUWdyK%^)h6{N)6p!&W6_0 z$SB28 zCy4o_vMO}oV&z6Q`ZqGSY_TX!JcZ7OnHg`(<7{(5USnn?q)8;wwE3`@zS2&-pRv>G+*nmZ1_bD)gJzgNCG`)!E&r>(8L6wF*4ChQQMr_7WQ zPOItCTaa&i$13Ub3%kG(7Aa&R$p+^%y54~74FkdFC+R@*qlUuIK7rDbR=|hF$kv2> z`%uMHc6}JCC_|}=`wS9|f4=_zmD@{4KmfT+3U+6wuEZAh`)`^T1P)yD2IQz0qO`N z=7A!{nD?HMhqx#eIq4jmTE6B-oD>^F${JZ}RC-&AJ*-GbfEZ&7Ue_!p$8dgSsP^8*OkrqhVhb&_CKxZ%n1Bkr{_dCxiI0px2z{AAT z1<>_tXDB`W2@s{X2MQ;LfITCIJV+%hCm)D0kVC9Q;o*HspssLra49T~#dU?#dh|lU z7O4KKI@MEe%z)SJf5Q!p!f$jsNEi&#+Q2~rXtFMpuPi3ZO%degQHQ>UhYlR}kmZ?z zDWg}0IC~e-)Ri)7`NWw%AdMVQw8aav5qja)yvEcF2!`MBJEM<+8q zTz`h!CQhEF0k5H=x?d(yPiXp}2ep*03Gf3JjMCELrD7kGvsAYbp#GE*ysDwN%!m&` zn=-nE)zd?a?Maj(rYeVURZ8@oR{5DDY3f8H;F3jmL(r^_>T3?cO$kp~P)j#}5G-@_ z@4O48`Uj(hKM^dW9Fe5pyFP$&Wt(uF|AZZOA;d~cO770+u>jTKxt{--3^zxn@o?l* zxH3jf3>QxFmEp#%zHL_H#K=iVI8l5`+w$^GExAXpvc@-5tT6>dh`bef=G?maNG^sB z8(db%^zXrW7ocFaZsTiY@X`=QXU5yvcBU5Z77JXIYvPN8-)LQvlG(_I9xQ9()r$LA zQf??^IvFu?jCNbQmR2k#ScXd6fukZnMAvgh=ULAgPz7~ZNmk>+(edRu8xW~gmUTI2 z^dP7A6IPV<7J&d-G>rhptE$=KB3dOJM#|Z&nf9`@0_6&vn-Ubj@e&WM z$%+g_)Uey|{)kwfV*FSOyQ_$D7g)J~3gckzhF<2T=Ng35V^j)f!VuFBzgkHZ-3MTx zsg$|kx7{KTWFsSJr;uD;bm)6+lld1d+gQNPpF3SL>Plpc8S3r2=})(5{qDU-YtpDL z(TU2BLsXy_PjtEVl%M|<4~)5%+|jBq4(HsZL_N?3W3TVsU2l}_?t}i*GAN4jLD!53 z(-3({WM)Nj5*^V?%}>=M;Peij{STgE^LJ$JnpUyk0gZM=Lf+GK<);bB}iN+*Pf1WVjZBm@;r8 zD_`QW{jhLb84U5LBS(d>+c+G;ZhSKc4fBsent<;W64a2dTKsNigIPZD^+>0MbscGeScktT_RaMj+*t zHf+cM4QYdYNY=p4o+HOe#P+2ia_jf_Z(VC@=y;MJe(vG+%MNGdZd`B;<=o0*diwNP z?YqOrw9@B;RCxr>TpI~o-MV!*?@86yGh5#BC5+sXz@Q&ymMCl4W?|1bP7}Q_YWRq; zng@yXn>32^!SM)c^jYg*q&=k)&j1K3?g1e+QbO(A{!qA5b7)Z>u1;kSGCcjA1vu403-i(T^+d& zsn02cbU2=;2W8R{`>g)Chr-40zeNv>LYGSN8dDVfg$tK_r_Y|#_U!wJ&3$4<=>mBB z$XLGx$d?0Cr`;Q?WuF6Bz{2Xe2!P6z7F0BxS2;gPKl2MifdUDE} zZ@=$@=OBaYMcIhpG+wEjpsB*T-lbmf{PS8&bR-;i1E_PbAzz^Rv79Ht4ODRe{78R; zK2*<$34%qXCnAZ8^XzrWm61A2O$P;4vmEgcK=7pBD7|!AdRj$C@AB{Hhc}b>*|z;1 zT3C$;U)`A6tUXeifxr-~C>UwqH2zB$FEc9ynZDqKJE<5v>#Yi`@DCmX7+x2f%clpF zxUW-2PI}G{{%bQHpYLnYsx>_ZkPZzJxqx$22%-3X%uQSi!T6NJKx^EvE}mI2Sr0A6 zP_Rmr9)Zn< z_6c`rJ-Q{*EE};C!qwf6L*c|?T}5*4s0fPt3RF`c*KGklJevhBi6>96h#2@IYv16J zNZ=8cK4~?D0XUq&nqNP&{O_O4Y!Bjrp7eCS#Aihqlv3Ad0vhN8Agai^o2mt~FNC;sKVGH}diLxXCA`l{rpyG}^1)sR$zT!hs zf7}6isE8;EiXtK^=wlH9WeH?o=dZ82zCLw&&RlLnfCO(RXR5mDtFOBIboV_ob7tlP zM;?A)-(JIeg%JAAIB374L#S9r;nO0(a`oMihop{p8qq^S{T0+mzEldpI^qCjVJM5SP zjupBvWB=)+E))>-qAdPXsG)Y>goBP8HL9?8N*g$H-USy)gO3#S&a-A;I8*e?ML+kF zi{`;TU-ThooCCe34f+MrK+!jbepb|_!-9$WKG0{KH+Pm`(B^rw&YK1O4$G z-g>C$SG;-7>`O%dqv%_nd+~X5L|-cUkn?7reqji0ePF+6_RO&m2E$;%>W58FkR?OU|8r(M1!EJbmUl zr(ZB@)b#Vun|J!$w}cS;jHoaOV>?O)dGf^FCQqKQ)Alm_sdVT}sE!q!+lW|jl%BKN z(BBlcBDS!d|CJD?ERwPLaA7;+(;?jSz7RJ4Yhl~+OCj{XJcJv6=lU}g^X2S|E}A!W zhaE1tY0z zXU-lqA)mx+9q5|n+Ogfyv(KD;!R)z`>Uf!DbLO5Ur+ecH45hGM;|+C=EWDh8M>?qJhX>ip???>HVK=BF=6X4A?y@(4ZDYZ!v5jl za6~vZoD|*=W`?uFdEtU^Nw_S$J6sX23Lg%i2%iaG3||e`ha1B8!cF1U@U!sCaCi89 zxIa7?9uAL(e~0;Daad8S)wucYw{iyb{+OKQ(*8Wm^r1n(ph1&9#)|NgkLs~|*Y}K+u z%aoRBEr+xm+w%IBvs&KN^46BiTRznCsg|#_e5>WgmY=oU-Ex1+!!7@AS=1U@d$$g4 z9o;&ibxP~>)+1U^ZauU0g4TDmUfFt0>sMNDXuYNN&er={A8viRby-`tw!v+q+9tH^ z-gZ#iacwi(-qiMvwhy*_rtRx(H@4l;c3;~gZS&h!xA$!y(Y|f_)b<(eC$^u}eo6Zk z?bozl*Z#xyU$o!f{&@T1Zr!>K?KZC4uH6pmc2c)Dc6(d54|e-}w{Lg5t=qlb9_zNK zd-v{}blleKq>b0PE@7`PV-mUjhz323PSMN{t{!Z^-^?s!HvOa_QY}03YpHuo= z+~-4mzSifqK7Z-6pl{#4TlL+i@5y~H>ieO-*Z2K--@o@=+HY{b?fcE>H>=+}`+c_G zjs5=6@7ex6`;YBEt^XVPzqS80{lDM;cm1Cp&~w061Evo+eZV^ge0IQ(20Soe(ZIn2 zCk{Mf;CTZ-IPe<-e?9QYLEQ&!HE91qvj$y0=-NR)AN1JZ*1=;2PaiyU@OuY;b?`3+ zKR%?}ka0t140+>_tA_l)A@>ZKztNzLcG>9ojV|5jvm5<*qlbsK4&7?#jG^Zay?W^P zhW=^j@?j%~O&d0Q*awE)FzgS*mTbJ~#`|nMd*drN{`SWAZ@heyQJd_)$vK;RWRsgV z`P=Ze;oA&9YWO9?zcBn4!=K)C$fmn*I&;%2H~rqGe;v^>Vw(|1k9gaNYe)QM#G;X# zjXZGVypf+C`SX!aZ#HzZeKvdJW*^_|C!0OB`QXj>+I-IDAK(0^oBwOnMx&;UI(O8k zM%^)L{^${-4;p>(=r51HXY`6K#%*!j7Vp{O+gto?Os_Fh#+*6k<6~|gGk?p?w>)gi z%eMUHmVX`FbL^C{XOI2l*gMBA*=pQYCv5d!TivwPljAlXH)Gse$9;3$LtFRVdhe~@ zwDniE{^R&=s(ojmoTso$IW z-0l;0KWF!E?Ed5)dvqxL#&uP^QO@ZO{MK7H@6?EUCI zWA>S~&vpAeF>U;`H%|N3v}gC-ao-E}{o%e#rca&z_UX6n*Sg<<`(3%;J^K&Z|G51> zv;W@@*y4b*4*2E)^ADVK;M)$o?V$F94ms!}2R$%jj~=?sp%)x_%V8~t9emiw4twbEv4_t+{H7zq5i^eX*b#p_a@>(`I`V&y>UPwT zM}79Fe;z&Y=*y12^O(WMoO;YRj#+%{zQlUKcR2CwC*FP1@RR18bo0sGPd@(S>rP(uy8U1GiPt@T%A`}SIOR{TANTr8U;pbj z41dG9Z}{=4{ZBpp)bF3xe%cAAedDy1ryp_pS59Aa#*8yQcgFmg(`SBi=D%m{Gwb8C zo|?Vq?2pcV;>)Nd}{`r`Lp{K%X4dh=)By!4XeFZuqZ123I>>2Kb$&09Y3mM7kNz+3<4 zZEbIx`L^3H8-3ZkFMH(e)878&chuf-#yf6*=a_e1{?5nWb>O?c{_bAyKIh%Peb0{X z`RIEVzW0Rp-g5cK%ineRWA8igec!yI-xU{J@xXuW{$F2wf7|=#y#JmL?EHaGe_-{M zv#z}BsvWPo=Bkw+ocY1K{(Itof9k*MA3F0x_gp>s>Mwk_+lS|V_)j0%`y*ff=)jM@ z^`nn{?68mB`0-I6zw+Y?KXK|Oetpd@*L?Aly*_#ICm;UQp`W_>(_4P}!=GOHnX^B0 z|7Z98?6*HR;&UJP+>+1F`urchu+JB6_~OVfUiHQ0Uz+o!KY#haFW>l;t-f;2wcW0L z^R@r{>hWK_^M9uN&-K?0zwWB*R();m*B<`*(O-@fWQ;X4<9=U?AF?Yn>a-XY(+{rgkCf5Q*P{@`;z9Q?y8 zZ>-(;mK*2aboNaT-+a=|_x|YMAKiY-?zjB#f4BeNuiZNO*3bTUqaR=WlU_f${3rFF zzV)YzZku=8(?2`wXOG=}>g^By{KTLC@s6YJxaSv#{Nh)?Jm8lO*FFJD3-xr^^c*T+{mu|B3>&vDryL0&o%b!?r$;$34KecN7s#{hcvihO=dG-2| z%NMM8{lmA&wQ=Zn#vupp7rrKc$M5^c)gNmSOV4=+og`P(y$9o{h0lBrm+sv!nsM0v z-5+Z2GicO=e>^cmt}sW18T(B;_R?B7<-ONlR-1R}`&SE0OFh)}ili25qM9*Xqtt74 zvB|Z8dg}GMsA4i{=#o&MT4Id9-idK=n$JbTrylq$Kl4z+PhBPIaRHd$ zV4E#$*9}uKgI&>8>*ql9dKB?G(KS>iQ{3bdS23XlZ9v2o_BdhXQR(Q@O5}8nidJod z5)>>&yBJA6)*}sSF{*4Yk`zpF6EEt5v7nL-gkpac#|n$Mr3HV(LRhtGRamrmscuTE zSFNgTI(%qoYireB50s7Q$QgUpmMmSSeb+2I}ji9avsF4mhI?xyco6N*c-G(7zeLB1@DAiS*I$Qo$u9$3<)D zaeWvo^kRiv8LgBJ3X8p4ds|Jepu$Fj2h^|`EM2xdtXR1+Y&&j?(5+j$wjYan;i4r{ z*DD*fEnK)bo(SQ<36X+@A8gY|Tu#w`=`wqSA6&XRT`Eu4R)z`NjHz$7>9ATiS>*ff zxl4W7^5wONzbpfiLZ(2IrF^V=I7L$0@ zfs<5Sv@?hS4~pee!l>73iCp8D4_;jVlB6ngdO zUVrrQr^0=I`dhtQx3-#Gq3Md0KI3$E%_|uM3@&DPoQoJ&tT#*-DbWeB-i(z#C6vja z?JGSv8@)KqEQM~9%lUvwehEoBgPmW-$5}Jg(#7~@c@UF;MxaTf?p)mM3{+|t+n7sG z8-*^zS7WSnh~#{<$KHZZ&Dm*v;1uS@WRTpZi zh~j4P2Od_B6J3E7vc%%K2nUhTC- zvgu>&diUyStp3G4G%urkHsPv3))$Hn+|h?lldFc_VTbL;*5pO#I{YZ| z?wa-oPjRH^SV>IkqsCk3p#y^l)1g97c+`c2ev-nhI6D{WCyr7)vww0sP7%?v_?N|qT7i|LeH0+ z?(#e@uVHdvRtOSnP&GW3e9Qqq!M_7FpU zlLGQM=vvm*Sh;j7SFY9XZUp$BRdpmXb8HcM_=v(0G zRmNEUI7mH&Z+-8_`ZWB{4?Yt5_30%~x#KMsuO#J z`)hFx+RZL9R2WZ=8g!1cj-owyo7dsaWBu9i9MlnCg%LZRn3S#o$cX0b#SH*gp*A0$^(kcsK;X-+8CzEueAp^sx&4!2l_nE9$R(OYR zfm|Know}7FUR~vjk&928(PW~-=LETgJ8EY~zPvBMV$4zUI9$DQjNw1^#6$Eo zFnNj@Zu`YO;o(RB8J_z0v+?ypxdP+6vZcA;&v7#y zP_p<$l-cvRgv%Wr)QcBP3Q)3D<+DBjoyNlV6?QpvCIHJ~alVbJGlx6{*YU(_Ux&&I z`MrAf2=_hkQ0;$jyDL2PuV?it7`KJQcOE5yL>pO}%$A!CNM|4=mFAdHO^pC+IT~H? z7kQWfepvrQ)?n#cH=fkSO#nj@&o@RT4v?MnxKKEZaB0ywVlnAt(isuyuN|s7;3a?B z1mb*4KF!N~;E)Ezb|*-txV9jT#KcJ*?F1_axNzoW2J-1;F&Y(kX@?F6NlfNr1vBoC z!r0-RylH#xqH#yb>r{C07v)*8qht$CZR}r_4*>cV>>j)wI^(_F!IMgCGaT(6NA5(D zDa2;x)ON-bN15YMhp$&>|A2-2kPqopT57(0BZ}H-#u>q1p4G2JH zDQuTkV%tn*Hx;X$K`i1BV|@Zvn{5(xI3ZImQ5CO7d+_ZrUVRbUcq2hMmzLEW%)sm2)-yN-396&)5^6mW3@Q)Y0j0uBZ1Dfyv^6>-t06EV4= zM4y}j7sou5V8rHui4pOUf)k}gsGPb^6 zXMJ7IrcM*HQm6D_>f&oye#BS#7zat5w|TqwgG+pJa+(+7DRX2qdyadNIwmqEZC`nJ z>40gwhP`*+Da?Ol@ zO16d4=khk_EZ**IUY9X>&w!8pPYCW_0Plz1*>U3^p!v@)2!jXo3o}nSOz!)7GW_2o z{|vvp`w#lGA0Or>j(J{+#F^&v2<73ar>r6u-)m_->gFXUTf6K}7Hu2@`0$SfIxt)> z#EU^Lg5uLdbxKItCkz)0EnPxvJclV+^qgZ2bWMPwo%{NNg{$ zsjflf&86#$;#^rONaaB!qANdhE0cW6!zMEV(spG{#3v7?)$=H@{u8Y=zGq9}n8lc@+3kJnHf4eEx)LBis;VQ830amrv}>5yP> zIJwkD4jnqd#KF{Bnah?3;ss=U5vR;z)A#`HKh>I_6*> zypKBLiKisD_tWMv(20Sh4m)!|_k}$4Qv$>ITzU*}zD}&Sk&9UPh@;H$#4rXDg*e7V zYw^f9@28EZoCDY#Ppp^Z!N;anty-?PK85iCwS26KF@P83%3^breWMQ&eN!A4i8{dp9{^E@!ag!i`4DFq<+6Ac zAhAMC)46j@Ug9{`SX*%f&V?c1l8t~D43CZ4dg21{S;=MbXW3N4IHG`}SfQe~qrmlaq%y~$pPmJ=%H zzj*2xS<11U!Q|N+>Sf9XHw?I<8ou$6uKESOJ}OSo%7B;G$i3QUsj_)L^v+=N zm<_#N)#oZ(-p|fp@|aY|W`wW$!H3rG_|@;jujKX!-0H$B@B}O=otTITUxlr*rGQMS zz^|MbqK>D8X@V#ORb1Z`R?HVG8fl(_ zMVub31dLEwc;gw-y2KZB2>}IW6l+8B!IXjsQlzhxqkKmqcac;>Q`>3xGB#q_(iPIC zdJW&6Fz1Y8)a(uC%~(GDf@Ntu7)CHWoAsY*JFJR*E!g zHw;54mCv}St0afdBevut0dbJP%Apu}P!}FhVD}QbVN}iPsG>CFbL~m}1&`TZQ)4Ba z(QkdlyUKIVJR!)f5#h(T|EBhr2OpN3Q@hLXa1H?Jhf~MS9ymWyRh>>9E2}609V!d& z2Dt{=FWIoP(>hWzPuMN3`wpiOz`{xueU}xp3sW)1U?Q7dz~Y(UBnMIx=>z6w`7gHQ zjUHVW(WhLJM;*vl6s(+R78|aHqyZ%WpoWQ9#-p7|8F{ftlt^f_6H=GE(d$!o*-oDN z?NA%O$wqQR=<{fhZd8hAzl-)*I&HkSqD@LK@oXRJUdJreI>y8Yn=a<^SP_Rf`k06D zVoxf4=mYG`M}SGTOWSbzuRnTK2=QJ3#voS~qg>8j>W9n2xYQ`eqdw$t1r@bt90Zko zF2AE_oMXg+6S{G;Z5k_fa`-lMdfX6CeiBjAj@urddwzj@pML-Fh7%61J^k$baOFp@ zt@o7sy5w~(`8J{06vk1C**wy;RCz70N9!-w3(lF`0iRZE92h-M>11)RF92rbh& z*f6d-Rx*5?a-0RQ`!%K`YEB#9l0U^^-~pz=DHa#cee~NoEZ|~JYYq@)(lrq)>CyPv zPOBC~2BbYoyRZ;nnlbhGV}0ZW4qgrk?ZC^FRDSiMuE;_X8)eMEoiNrS7JlWk0Pw}U zYED)tu03Y2&S&w0iCoMVIbw_17TBWSqY7SZN(&b)tQ~*k^stS5M>;>@j}wO?z!8J;p$I*4IhxN;fozPw-NZCum;^gbE|O+OrGUn955){h&2Fvn;PNBd}@i~ zm|_G?xJF0~brv`cKv;6)giDDT^EX<|MjmL^2B zOp^Kt`Q@3jPCKfOZ&kpJp{{^jp$ab?$p(AwLkytKp77CJj&U5CkMWKp*&QeOl^a+o zn%89B1_i*!d|twdx)sf5b=936Y5^?zpJE)3Vtt<6M=oa<+!vd!&@rAp->_Zb=>^7Y}pF^BE2(DJt~Zr@2kS(Vaczo@;Y&ADsi?t;&PK( zaUEf+as$s9k^7r*!QRa0IXcVR87|M;O#e?AD~y-Cz7@8U8&I#l;!R=LkU{!}kACy4 z&X;0@Fn@XId={5Yb5)?jkD@xHC}t{rX7gMrD2s(%ITML-qOP{JTZ7~!4cqC`08)NR zsFo%V3~b_VYVIhmBVSI4T~-GwcUT=besWNfpOSWRQRa4E_j*;1Dh|d_ z660kvpSOFReeiAYd{sK)H-xdmPnoTdd;eyha(HeCgYIUzhwskhH(5XU%O@ z^PlLBe8f<$>orK;7n8n?xWYFsD8JpTew&c};6ArvfLE<`?! zXD+j;Kjl?o-Goy67$=m9f>~Nj&gd9DRT?Z{o0ce~vw#?&P<;8gEX| zMgD|O1a^*Hy$Yjl*SD^*vH`=Gu;6FgHkEg(=bm+f{M6f)`T={nMZ%v48CyYbfNM}1 z&iR-6gY_FPJmLii^*A2&8t%zTqvI9}u4a-QV7+c3J?ggTD1j+T1m->$p5hThJ9DDZ zQY=5c3d7q`DGjfsXp<8SZ;Ue-eUO+4koclDygv1gi)ZTh8{w)7ADhs&7{B03{ZC1q zLT)id?9wae-5WybdjT9qBUz_(bV=>V2ax!SL5NXoD_qpc2W)xViasg^;|2@^yksg! zzmSOWe%LDV6PhGr#8ArV?22WbG7&gsEqu%=p&Qm%p|ALc5PY!ugroKgg9r5wzy9qX z)y8q4bVDR+oG!V~Pa^N59j6>T@*r-G6}>NgJ!%_mE=mTi@*%ay?6TJ5c}p-+PI>RO zmlZEFiyt%DW^Q@q(UJMjp`%Fx5}M7_a>V2ec~6K}@t?bH(&I9M2G z5*YlhJ1(mZ*?;%&&WmU15C35|!)U=TN6af6%E?nt&ay1Vs%$4$8f)VsC!|JDq5_N^ zi4A@nm_G7q>=W{*_64c4XP!sfo&rq~XtG0x*=(t8c?>aL<{0vNPQi4<`HGEIv;K)) zyTP_M>l5t0U(|Cv>-1C7P6@jlB~J0J(O6-A;;U^jclX(Sr`q{vov2?Eg0~jo)7)uR z2s?DEM<3Rqvzy-F69{o=VB$3{xZ(G9>WNE1_P{ukiU9@YB5c_~yT{R{jDjyVENLNj zHw-|jpsI&m;P{;n_!5}d*uogmfY2bd;sJafB08g$x)b?)c-|bc;q4f_vVQ0Rd+2w= z$QQ5cmsvIRw~=6dv0zx@&~&mz9rbN(eVt7Gs=_+zTeF6B6tlLzX1QL99Up2%IsfdF z~5w z=ERd{+eBomq|u}XDvkVIDF~SZJScwI>63B2ioo9?*?BW6rLlmDd=gXyD77O%Q>DlF zWz7No`i6_oJ4JpUeHnhuw1&4~WcSwQxQ7xK?AYPK;j#Gy(Z2$YgsQhYU2}LouS;yY zDsnvXoy@JnSr;iGzMtyJ5I-ueC4fNZH4ag>#_L#vi|-0$Sw0NShu>qaB|j{HR#TXwo2D&mck7I>-fFEGoW#aho z!S|dmznalYU);ierR~LbNfCV-V*Jt;yiBfX5Ep%# zT~+lXIf_^!Bl1}uv8H_BF#_c>U1AiE0l+7i@ndvyXQ*ygN-JRT;Zguc(&2**(idP* z46iZXZ$9|bK|f=NF}vn4e9{?1EMp;I<3`0gWfte#Cm}^&$xFQRrFILay3MCL^4O8a zz__}`N(SQ99xHt3(L&j{=FK^&-nVZr`Phd3T$7!fxNc&_R+E_IG{c0Za|vOsDGa_i z3xIfOYcNLh5ecEkHYvN#ZOw+<+8(q+8xqr7`+(6S-bq^WNd+kU=K+h-!dEVlyLgOR ze9ox4#X*k)WC+kipIox5(-Mk+4@DFXE|?9-2~Z#8D5KD$ z_QyY?7a*|&ngMvcK#AMf_nNw6*kbcd^+k7Ej2TZ?wQB@k8zX={ic4aO{O|yNdi+yg zyg~1hw*4!0l(=XpYN{30^w)Y#*C6(+L}QBQfGHsokj=xjSo9;N3Rk>i$e494)26bn zi8DUw;4-;gVViNI<;$&(38T9N$Zy9ft^CZ>@+n)=0XIBlB#Do(;l;?Y zV@B%hSNOG4d5S18iuSqH6wQu7RN8V0mmM15>%=;nVqvGx>7v3dJ&x~+#ES6~m-!UW zIH@p3?S|D{)PZq$#o@th8V}uJV9O5+X~4mrV#z@XmmPqiq85Ec06xF%5yLKNUMOfl*M4CxR?Xy1~K|shV90W31__SaQsz~+ZW`m-s}l6+iDWzOpxn@ zCjN>T9d+a=+Rd<%^xSkXFX~>WpOUdThILBfA-#<{Bz2F?@wtz6AD`<9!*gKm#_w7rwS6Sm-YwvP$-MNKrGq@Y`xM5?jZ`)`NWOXLV%YmEWrVy zFl8=Ryblq02g%2%-*Mnw0LDPNQp6etKI2rCv1TvXTpsX@S;``_MwNJ@l3iCL7iZ@Q?rF76V);^}>Z&m@f_)45+V+i}hdXg?yWgER!$f!dS)i`_k87w%PsjZ5OHcHRwZP0z4INB&-_d0P^cH;6) z-N$&HcyIH(&HOpOGxaJi+9*Abw?X%H;%K9U-Rs0v*@=4zVe?HCiv$T-6#(?G`NJl}q;rt}RIF5gqd&AMLWXlWrUu z75##YYd=Z(s$ffuT|v$ZHUd}#D0Lq2fkM3M144Dgpb`tzShc^F2`xBq5D1BQy}2P` zlM6Wu8tB^iB37z6A$XpC$=o*t`I7APmzNVu{Q4K366xSWU2|KjSx?C;6vL$ac^x6J z`NPxrHaWZEt?qT0^18x|C$)pICLz>k?Nc*z69ZqBEo-}C$U{8qk_Zd(55^5x5aEq#uw&>Dj=K>MxAxtZ#)`*AWn z;h4~>XLdgxsso2_0gzt+uFFd%_3>jz@ii?;zIJOc?gObQ(opOJ^*jGI_d6ljy#R5! zTO0K}=^mnOl7Z0HN69Wr&FvA);U)CAKVaPASCgU@5-CS~)K&>Q_7>ep;bRJQ77vJE zanS{n#t9GdD$qsPM(ZqkHd7t>ja(&97~UDQjSFAph!x2;Py(MH@F|a+aF3(jOp=HG zybe2Ul*D2JQcsGs*WL%^&?UPd{3nlM=UI&sk$`oC7Ub4B9V#JQ$wyWW_UOZJCUp!TeS0#3? zNv=DCRq{1Rj7nsPMYU`da?R^LA~0f#C>Luy)gtZ#8Yfp<=~L#qTf}`3aY!$Rv=|*O zHbN|@xYfX}MHU(KSQlTRYaDh-{1ZETDIU9EiUCpdM^515kv1ebNi}@y!kg#5zSg5h z_ZmLv%;HZV+u|kssGCIR$*a1>i$GPJCdmO44p(o$(1%!y2VT@7xA9oN3qBW)@158@Hk+1GUX=+ajxEgp$}Z-6Pt3wM;j8M z4$g|0HUdY8W%eJ^}0E*^Y!~8z_l2scm3x5V3#&Md~UU4-*bo zZ@|!pSc_ldd1Yl*Qt2Tb@Xl!7ToMRQ&v60l2=^t`Ckj;H~zU&)nKU4D93zJ_IWLmLqU{vwvyqBOTc^daV8o3gxdOni(0 z@DrIWkP^?hruiHO?MF%!QDfiA{Y=iN2u}Q}6K@=zNFZr^fK_g@p{{<5^KDR|1#otv znu^7suKA=69CMSGu_~LyBu*tu=e1;3msxx}g|cg`8b->U2S4VW9V@)Pb;8m6haI*X zTmRY(w}f6jd*H=-JGXIdV-ArIn~CZ=*KF5q66cdF z0gdFWlXl?sELj%1)9J3w$qrd{$XJ0yT!mkzapZ`*Beqik6@FrYLu^C5HBfnMAYu#_ zh`#=zS60}pdiLyrE33pIT)v%BRep4_bbyao!+-;}#D$Y$ICM~X4Wl^mw=7<~_&bo! zFObGu#*?^#q0OYw=vbz9IZo!oOc8UbE#O2^yD5oV>WD>AzvUoSamJ?@dC>e`!jHO1 z?SuJKf7mXuSB@3T7L#%UE2Wgr+5%hR28OxWmaefX=J`t zk?-3wPMjSX@;Ha$xq&XH1M68p!09=$wM@>0(lj9zA+Y1JH4xTFM0j zi^C-j@evQ0*Q@HVF`wrkR{iooA0=bxFX6Lxu?;F+zdc9d^@P-2jK_ICLe(Y}O4^&{ z@;I*}F0U(>YfIubEbE9vq4c?gFGo$1qU&75ledm zKY@_=05!f`e(SNL>bU(O6~6{ekLx)hqGHRiVGXO-_7C(ca!6YcQ0y6iNq>DCH8MRY zTtT*<_%HTjS1nw(8>FB;u{g!B&JtDKG@Z2>huW>z1}~Z~d#dbLyp2I#xLhy3h))K% zkLy{N+BE_j>m27Mhuw#ij^R9Hw>3?t0fd z_cDdaZYmhfLc7mH8?b7Z2i@OLhYl$@)CZ6hwNV;I9kfLVa>_6Y3l4lWtUL{@$(0qp zI#@l}#EKZDNO=%rmzd>z;&5?3-s5Q3+?GRa5*{y2QPZ#A(mYyel2d*1Kz`Jbyk9G_w<&QEGmmQ(xd za)RnLF;=hJ=IM`wQ2Jf~-?vw7-0*1;c~h&l+oTCK+$sOhr=G6i^U#~82XhaWx`;wYURe9GzY%3;{t=iALTmM{{>dTI;uk*^|;@(=^b z0xpYVyt-&J9NPhm=hAjKF6BU-IPh3qC3W)CZ+7spZ^Zld<-XKrm#>6@o!nV2wlUA+ z`$wNj%i(j2>nZme*mYjgnZ%s$3rDb>QWPQS zo${N7#qzrd*e^J2z!k-GTg%ZUW25^+^pO|7sK@BYQ*c%CrhNvuV$8vycfh-iOd45` zX$o#~5(pfNkAaPK^)m(=E#lx;hddZP@tzY9yncndbWb>HfBm*ahEeiFvF>FvAMDM1 zKE9cr$L95BahEivpL5>4 z?y+mCcb3cd0bdq~F9j22!EwQIy`mjy&0;Ol!-gfV5nvZY)8h6byB=e-y>SP{YbZGMtxk!79^(*LrAHcYDh=>x zJ`5VKYUI$i$vcBJ+>wh*Q{3Q&0krl)qG-FUeKOWXGojmVT^M5w?U5kjG@rRuw|M0Q zKk6)wSB+NZ;w*q9lvs;fV;pg+>`1-Yud6Cw#=%~x7)v2ayUB;bjKA!Rd1D+TUMW?@TaZiZ6D$?L8zPr6iiC`Y=WviayGUf_8g}H1s6G0!bdLRe4SjhQNm6i;-JGv8*w5N zKYYZ&k2v!uE^jx#;uz;`&{4pF;xW)!z?mQL!It9~V_f7cwGVN`kr#Dx(MAb7eZ;{> z8*w7L#_AOuEBt1HeT@_5hn^Zd6l+&&S{JuWa5?S8sZZw$zIYCSiSx>~IwgZIa-s?j z@Nx=4#ZKU^;DFySl;mLhScjiFWhowfQj#xLlMVKCSk4?tw9(sglh`3=6a0aAXaemz0zTy+{qx9!XVXJVgmu>>u1m9JU~9>-SOvc}A|_H;Y87LmwRlWHg^8NFQ1N_H#f$9tZgxm~;+!Xq8yDjtVXLy! z=doUI7Sj=?qnM6-p0i44ETzYI8+6twJHmP&bRS>k%WbSz<)V)=$K-Y5AUpDTT!a3; zkDYf~2ul=ohHne19jd>H0$H2(uT2a(v$k=s$Ut-=$=bAkZDL-fvFax4qDuLr*D=sc#kCTASmW`)Bli{R#XeB@BEE=4xY%$g zLzJ>%*;a-fL=W-9mg>}DhMxP)Ug9AJKJ$~$xbd6wn+zKwKZ7$|et*8XlsSg>T;@1mC)V4b!|r|5DRX>PjK}1B-pAP7mfL-9uXhyJ3`ct|tGH+* zmUT+ly^lI2abD&zo%I3NjMv+n={^s2Vkv2-q&=7PS4m=XpKLC5d1^91j)BmLqs;NB z!`IB;k&m&El1eTpmg(0350INB@g2=V3U>WpTH^?a2E$mDW?TOnpY{e|z-5QVSJ=dj z=Y_?l7B?|a!&*MfCf$$E9?SlMql&M5{I3O&8X@#IK`3>*w z1v<9c*BkUK9z4qB+R+eWm}WVv@UZDyCYdvFyjVW?D=>_w^z`1Qy2X2YGrYGaJ&OmA z=S{dwNx013QMIGK%3Mx!q>4jhD=_RgrH}PC)w8~OEOd|0eOk}rf%m+XF@||jZUhTI zmN*Lf8@1vwaacPFPgz^zu>xO<o?r^OKVq&%yT^#G@%jx7 z8W6pBjBKi;2gb_Y6JN+e-~Ex0&JG(e@f?)#d2C)sn3njxuDHb9d+J1eVq7us1eauI zaGk+`6n`;Zsq#wZVxKxQ4xPb(@0D!-E19cntT+Olmw5Gk&)s$mM;yGDJS$p(4YY9| zkWE6j34IW5FQM~5+H_w7DpJHpcr>_2b);9`WdYlB#ke7HOEbG}q{J8r@OqGxF;a($ z2gcbJj1J;60Ef@mD@@pSOZ|n^6b&v{{N#n6*8%nR+)rPXooT9kd7Q^EXCCikyzX(d z=QeVBKlCcQkEKo=>z>E^yq)~?(^qBpyk7S)jHC3pT+icJ_qb*@VCaKnosvFv*aLC2 z`Ff70&)aFsb5z+o%0W)XQ8tUI%0~_#)6AB~vrd`E(GJPt+Xx-&7q2@{+hdo|)*63l zUbiQl3ppa*&Wo&h{sSL$V4y{5S=5&6kwdY@5_Q?o=3VlB`Cd;8a3b+E?0O*c0cb!D zav0_o2%h`m_qOMqeNuS#x#!~!?Q&9;j?37Tp8{0bh^OofhS=ANtY5a(Ztn{r-V4w* zZk;}@Rdc1vmJ@aclgGT$b!j6OkbZ407Sc=2U)5)C6Fpq@v9Izr`IHVAS>)Iq;(j9v zuxygsCE$>4rQB5Ymp}y%2;v5jlydgaDSUX*W{KY#wmA$=n{ zI^Q-Y(j4(|(9NHl)sC-P!SC|P9jA=9{lQH-^Ki4m-eMCgda}(*h|LoBJ86O7 z81>sj@;M{(Cs~zC@Kv#nMpbgqp4VZgjgnX|;nR|hM=2)rG2}mTtmK)@s(}Lso(pLM z@v@B-_*bv4haU1HqVj?~Zm87rr86|01v$^WV2NuQdqQc?090(nxwcsH7#^Usw_wA< zt`@g4(QJzYi*0X7iVaqn0gE+MKuA1vaWht(i^B% zBAz>2a2gAr9put+Vw>Qzwy5HGd>nk*HuHCll?;T9g^r6GLFuW@D^E<(fN~20#pYFbcaEOd`Y3fOT%fr*%KFd$wTR4eT6yGcif_42UM3B zS=O>!i7lF=RIK(>obeV1>3H0A(F(&SoB7m39vvjHs854T*G&`-WN@u6azG%H`tkSvlr~>51oT)O3T#t^A&c?c0HU99^&+UN=X7tsmOIuw58J~E32ft z7(tdegbz@B(s}0{#)mPZM(DSOApuXmsHL2=g9nX+1RjO9Sko(yWH%dyw$R7Y0V#GB zNFW83QVuw!(5BL2qDLM*H+|lgfKJK%Ssk5q=t6aNwn?3|g9rV9WE5>yPuw13zRrvl zCKPj)a**Fk$zjzfd`|kjtpv78?$7F}KY1+q#h%&;4DI0Q8ml;J9Fui5R`^Che7V*~ zK7BpjP^-1J$`@>5PU1|+l+f7;8Pk^@ab9RBbg?Pe`yxtz4-7k4aYU$O6SVDYadAfs z*?kPiSy#1=?~|#?_sP_bJ$zsNEp1E|hC-swBe#1$bz(dZ1$iN@49_$5x#>to@f!$ zAAQmnrRtbRoJ#;wPcf?4T*G+SVK}=hEbVFr)X9@}K~P8$UvjgG9W@%=t|=Xm+xi!V zy?5WKhNp+cE~-4~!4^X)53n}LQ(R_C@ldLKu$4fuf_8$tEdW7?#2&~rYmEcKngk@l&*VYd?96Iu~r6+JPm2IwkF1R{3D_ zhv1ddu(;6<-8A9Z8g+}w+mz~v0LCAlMeJHNo}|0F#xjOHtY@+zFa6}Bq}|IZAM;TP z-j5afrW94No*TMhQXBI+F|hOS9AeX|#UBv4K%7>%tq`;5ZzgsFB;GytcODcQ8uPoIc)is}FWyP;%*U3dk_P=LaCJzZm!=Bb>P@;UArD@>I%K00r3bLq%Uht|f9*-Wp_W&Y@#(y_8l zMW z>Id&XRX_ZUq`twZN(c3bxl(7SQ2MxJi*&jP!lpSzYH@rXuReKAZJ@!F7j2L_afu6d z@Ssp?B|i8VwNzk|-F&I9aL}e8d9Ze96~2t`RT(QZhV6jt8mn|(IA8R9@u6$1iea(& zf~SV{!w=e1@6*CKank`3+llQRm|WPZV1&d9z;2~dtcp`CDky@F?-;^|LxWQTqRo8Z ztSHGSzul!v4qry1eB&3esbZ zB=K6kO5|~Q9Wk^~Hshh)B5r=AB)F%9sazo zF`Z~X`6<_UUNLtka%r0?9`d&5b%fAHSwW*1+C9$eo{LzOooGLJP$)YbD*(YMU)ouh zH{ImL_+`2;#CWAhJitoH>(N?%1V(Yiz4Zm)&bLpxJcRTc0fnQp+6wu4Rs6*B@QpW0 zyKHA;UrroPj>v{x@8!(f#oaXm|H&hOUr|0_+O9eT_JfG)WH|I4Lt(;VwgsI8uIgxy z*Ky|3%u(l+AFi-!`|Ulch8Nv!bI8%Yt`zYCh+t7wjp;=D$xqoeRvhgp)413e!PQd8KBV8`Pzl46DLqn@DDgrL`1EWMT)3qHztlK%qe1vytV%wkNiQmUTIGv| zs#tGRT?QG_+dW+~d%|S#iOcK>mnjLC**mJn6IDi}_Ptm>_$x4sr}XUJrn<#@do#SZ zCq0V?kLOLeOi8%R-chxqzG9Iy>jOBu=9OCy>&sZ-<2+lB-8>8#+&`Xo>?zQ=kHiBhgeEiMnL~}v2Rq^v4?7R$BG%fdIN*NOrc?kA0!!)cx!Pe!=5$f{#c72&V z1Cw|BWa}W6N>);=T}?@&(vAd-9Qf+w2*+zu@pUP!>$RG^E`Zkt)DCGSE^Jir+7*6f zLtki@K1oC9R2>bo!~2wnKB+Kxo)CMm^M_hGf2iObne=+X zAdba265iSMd`n%w*i(N0ur_h~abd}_<%vhr>U9#MGKn20EBVHyLM zTkD~hSx%d);H8lfMd+V_ApvZJ?e@kM}Xed0UQU-D9h4 z-p{@e2kHIZP91*VcdvU4bn;hWaxCkRz75oK>G3{>IB(0btb1&g&HLFG;vl`>+o{9v z`|fp*flmG^4E%WAd+Oxv!vlYPxRe)rPqBkhGl@+HML@*G`?FYs#DM~=KWKxLf)~_| zJ7T(i7Zy6!QRh4IMYiJ6W4&G=8a3i58xiZ5rK5Isay}g-U#Yrq>j-fr5InLLK^)~3RdmnYm z9A6dVF*%?2F*dj5cAwkp9mO@n(VojHF4~A?of3BMqfSYjmw8NQeZV#2_4a1E&qJM9 zO4=!D&n5j;lGxk_yZ2G2%<-t_F&@*AkFg$4-REnj6YC{*qG3Y^h3&?V2`lA!qO{Jt zQ{SYQ>S}CX`~gF;+dzQPZ)+MDeY)+*gWM@vmoLMqPm&j~>^65K)y&|LjnnI>Yop); z4t_h5kMT~He8$Uo=FqoMj92lNOH8rNln8_mbz+bUbx0hr%b^lR!=*ta&SC&5VPNNB zT!18Q_>40qjdicn&zu}5wheqJ8slV&gU#o$c9hxx0^dHinUa3bLtaQ6;A#W}XT>i0b0 zGGF3iyT}L0c&M?e{eUaA5g31<9c&9?pu_KMtScFP=4Vchlg85rKIE1{NnW*)3x34N z0bFVWKxT(3@N(PfpD#Z*jn|V_%1`nLf#QJILwKXkeFze^$R(BdYZXYY4NwZiXmYjD zr@avW;w8(%)JfaxPe02K6EdN8KsjQ##dtm1sZ+~7Q+#Mp2S!M`Dn74{zK zPh61JNAyJt)=5-o5GhN~))$ObpNuweS%65sotITq3j6j zeR+J9FSoH?m5V;g&R~drDUx|8J(ssZXPvSmtoK3p@m0Ru#(GsQ`Y1btA@-$6=Aral z-Ugj@%8sz!2R+4q{;%Us3Zd!u0#tF6t0UisSNU=q z>xjec2Hm^2hXdtP)A*wJQvSGe5nd^E^O7KaK@YoNyh77Psf|7m(lbuLdIzF)p8C=yQA+gi_lhonA@{EKw;g=cS+0_*0Ot zdyLNsJAL4X4!^Vc@lYK;^Lw8*&->V3liDuE!Dj7Kx7m|UpX2KqD;=FQ-@3*sj>pS7 zua?L&wrP9r67Urda-_8-DrGvD7IEW!+<-v%v2UZ}&0efuDBrPc)O1w5B#)~htgw!^L3B$`C#`x=;p3_MIAS~FBc@8`oWOWn9^-w~A^pJ^`kU2h_p&oFK39$>m$wt&86PoKGUo)w z+wvIiqYmj0#?araPP><#iSfB|Jh{A`_|Eu>=aj2O>6> zcMut)c?k5oC;xlaA_8aYA2gt!yguG8 zb2L3;v-ukLlC&?$RODU5LF)lG_7EI0K62A&z1Fu+ubRAuCG#hSNh7Fg%P|fO^*mhz_)_?+Y+Cw;yST}r8K9v9uEu}$rO&#;v0qmBNYgZv`ZCeFOUlKI3=dQTx|$+XIU2H~1?X=M~llblZo3(YxNEXu%|o^B8>c z*H5-VWgVc0ym1X z+RZ#!46$8f70->1$A&Uim7uq{c~4IPy3gd5LG;OZ8>EiSwn56*v)3$wts-?WH+yhi?P>?b}TqaS3bv(43}= zd&YN;dus^(UVyG~i^Hvt7(koPkj1z~Z`W9r$4bTnKYm!p7i-}Q_)suraXXT|N$S+$ z5+^ndHJJ}0%~`d{t@Snej^rA?^acej~fyB986QagOcUV6W0TbsPRu6;u{q+rX6uRv(O(7V!8vG}J}!ST{bb~GUj zdrzGx_hZE!Ffy&1$LueVCVnyIEat`F$-jnioob7buL(A_XHAu?{hi90#dJF58pd_1 zEnQ=!BhWQg*(}5cCBKdwX2`QS{3H)A_eILbO1NJ!D1KR%Y)i6t0mNgDd-E-+P)YNxWvXWv9 z3wOd}{H3HpH>Xm-r%HTC=gr%Ftmt|^oelAbBac5{q!xHNzjGuN3UDqrdA;O#bj>Rp zD|v$tH>TIRcf&-H#f3dco@B)FltThl`Bs@N(U_-XgKtMWGUGoCSdo%S`A8`@ZLe7bkUIe~34gVvBHFgRkm_RW%scOR!0uGwV2huT6qA8(44mItLI0-ku066yP|C zz3w^4MSe=!bK2bQ>t3(QK`xJ@PDzZH&3xYOb@sux!Shw=h+o%Zg*@17Dv~pCNPuk}j8lvw;vb(Imz5S$s1e?7ESX(+zNn5sc<$GKcYt$K%;- zwv#wgz^{1rgPfF!z;LdfIK2%zVo{L9>BKkW2G-+Hmy-IC`Cxxp#!B+6md3Tni=T=A zAOHAA?a@ac4NpG#BsM8+6E+~<2{hJhP|+8~35I>v4Njf%0Q*mW`cw7cv#O&c|FeZM*`P& z8i-|`(sF1Lr?XEDxe@1a#51*bkE^9~{aMY!UNRk~<2~Ng9MT5+yQXWz+8ob|PQyekg?s7+Rf+}Q&#@T5z-E9=XwjlY`ufs6_uLca&!0aTcKCbu?u~J6=%3is z&M~z*hNTJ%JI_y*zh+Md>v$1gHmcg6|NLj6uGi!>vU;yxy~55r?;M5>9V!!fp|;CT zkmf@>RVg+LHHf{GOZbS>wlhwR@_>90utP_@*$AnW8Mc%Y0mcD);zSO(@K90K+j%8@ zSt;#Zy?F8B8)R;rD7u)|%~)Yf`uFW!+hpkA`k$X)h&iF$7$3RX!i(`bV#VuOV$fl< zNBmNv%>~4~EX7XT8gU~=dQutF5no5XO0xCLxHj$YXsmFBgN^C;zyE!})4v4^7Uz!=*2nsqv|q5gU-aqI=R|oOQm?S`K6S*`kq$k+9V=YT;OW-A_ud=ish{4O z02{7ktdFhMKlZy}Oz3B4-FP%$fpLDVGA@%EOKwQ431Dy)h!^<3^{sD(Ew~&QE`PLA4&~pW@e3g@dx5Ht$ty7RN>YGU~#= z?Y7&({rBIm8y7Y!6gT-)M;!-abKQ4_SW3j;K%LyweVzDbTzPJ^|MABk54YZWtGu6=RU6kAo|igSh(G$!X?jDc?n~0KBt@|o;IUodDWZICM<#Ip ze!ask6UXbu#RhP~NnK~5)J08`5;mX5H?Zb|#AN2K4xe&D!ma>&Fduhg^%D=Q zl+wZ=-g7_~thT{qTuE^(e1DYR$ATZlcvV${dmx4;InsEe4QwZ+Vc1}{2{GDske~qXisH~o-!J+zEYDx! zhTr1iz{Nn#hmUfg{m(q}j6PM|bI(1)@ZrM+9>Ya;%_}=MZX9(4ZQMD|FKJ#0m-1k| zeIA?#^OYt98el$3wu5s?+as0w;w4M<9O@|*L%gKYF2o37h#*g|CVO ztD}ymf!4SBFMjch`VW8jL-`8cwsaG#KiA+vL0r^Iy0_6ynS3;egspV=TyA`-VjYdD z)NXwQ7Nr!E`65Cdefw!NtX7>)Ud9j(nS9R3{7L#;&Bkhl+?Tig zwp;4`S@MN3q$5Z9bA{N;o_}FcIQ`_q^pcF|S4zI?w?CB^B>eXRyi%E8yLm84@FKdr zvlH&R>#l%z0&&MV7CehhBvw_@<|TCis8cc+b#L=^>hx3kSn81UGtT>{6N5Ug8gV1) zb=O@N{`ki~>T6$a^JGYu+(1SE7fzcD8=@CbE&6R#vVo;NEc;M2?D$I-f1hvz>0wth zD@Oo#sN)I?AEm(y*nYD@fctA#8NVSJ?aE6xEW88CtFaBK4_$4IBY;0fxF7W7V-E~3 zEL_wuEc}y;y-MGG!FRil7(P@cwC-zahtL1TbGq8WDhq&ER8{}~?7eHSZP``dw@$zN z_Pbj$0!0WRp5`I2m4J8%unXkE;Dk!5C=Hf%ZJ#b44N4#?=aSAnf-08-L+VKOgVH^RDG67;)~}tMk%#?&`Ov717F@wmL$# z{5pCzeZhpC^zEOIw#p{IWSR4*lzze|he^lm({+R^%yI2wc2%o@CRZ_KPusWHgC-}08Xuwp59zN0A&(&`na-R6_cF|EhATPJ3khxU0sg?J9Ltzs&<+gw*|l0h@} z1J`iSn1i4G>7PD|c{q;G&pTGRL$)p8(j}9F2jLCVz756W_vr`cO5>2+$breZ1xZ`g zyXDtdHhsnUf_V6Y*2$RJn1eXoI_C9pys39$p2b}p^7mLhPt|*3 zyk&Q2$HQ+qPQ-fc!ohczR`?aCI4WM_IYDQ!8BfmI)L-#J;N0loqxtygXLByukY#sM z#}}va=5ZSrXyq+r*q7Nz8M*UyVU!%p)=^&9@DugZtylzAHzHqW38FPGZVtL0q-jUy4=CvSA7>|)n zQaJjuNtg8aEnOUv;!$7H?bvAhY@XXOvb!8iyGQx3@UA?sk9B(pp`24TeYJrFD~?ajsN!#=-pJxCi&N)#*ZuL_aZy07fRZW{siN?iy;n>i z2Yek;JkEj7`>8vZa*G7tmJPc$IKhZVc=g4#B@5Fv&3$69`Q|)(a{2tYPUzfEy5i|N z5*S7nC~k}JxzBy>n3qFgT46F6(qT^D1i_Y@#wP3rF6kz_xbcZAarEH?uNdXnz-CP0 zGNwqJGj-#0U&rIGJbAS&FAw8PE3fe|&c>wh^|=CA@Ms*@jXW>d!X! zF)EMbK#s>fx%}91ouIj&M8(r}4EBro9Q?1AbFW&KaVKCxT%i)=%RL$0}xT{cN!*+J42||s>^`4zN;-~3Jzgrt z_d)WdA`s1^q{3Wo`LgbcmrhJ#ZQi$Hom(-Eb3S2Zla&2gJ+6H2O!r#5j#9RKs@Wy* z#GW=+_#b)X(fBmw3B_bwtW4vLNP1CREM;TiO}+j~qC-$g@&HGdT}9AGSFFV(ws1KB z`4mH7v@9wWd!iSn%n4}@`Kq?WD8EauH|!Z-vCTz(@kojTADi_xA7kF0hq>Yj$e9FB zNZ!+`8hx&1%W-K;lHk#`CD{6fTg{JRkl<;Ba~_Xz`v|B<#i=`}R`mqL)9ifM-AC+J zJlyPW&PtgpE>_ciF9}3>nnOO%foOPmF!bmqAl* z;m9X_D<6KVN%bdXUCWR!4~c~bNAV>_w(Qt=qTh2+dXLrn8@MoK>s;1Pj_9wrs|NY9 zzQV}XwQq1?63%tmBr7z9Y{+a;1M-+R<$v$@e(yNGuo%-i=6)dZF>Te)npAtmYi`?T ze&x*YvWr^0swc5v9B2LJl1(xQ+vjzbz3bE1ivL7D{A}VYTv3i=s5)KagwdFi!|Mw@ zLuGRr4)JAjfcP_DJcxJL!guAB+`J)QHl&T$e!R|)yTo64^wWRohmZJ@PZ1z{BZdt; zTj_06zY54WY}$&eclK-#KP}ATjL-b!gO8T}${}p$2t#7xq3f0oA9~3gL-~3<@RmR4 zNHLCcK4E2(#9qGU#wT0JNS8aS>#{g(n{yQyo^Z?C-u5=$zXC^FaR&q&(BzR$UmJjE ziIHtff)Q@k!H2EqO7V`9&9UJpu4^e@=TXd{9{WwYe3HeLu``B#Y&0bEy?p6QUpji< z``&jHZ_WqBs2@Li?GM?#zUF|(x8msehpYTqlXwf)b7dTfQy-kLvPqh+x$zY~#F(oZ z$JQKU+dQtY$3_#6*NTr=TKb>uxeET+Vark6rGY0&jge0bvy9wZ$Mt$~lr;vB6GM?Q zA|b2hc42Y3zSYn0;&BdP(;pA=NqX)X<38nY>ACjQFTR!*)A_3=c6#GvGub}Fo!}^t zYE;bJPdhvuDO|?R_is4EiiSyk@z1rTpNHTOW@W=(KFJf!1635}A&s=eq75Cja{`99m&6gA56W2`9b0tgwx_0U1OYDT3`MPg0 zonzt?cFrd|;zHl*84Ppl3A7C-3~%bz!=NgZ2Y(>KJ4oO7J|U0ZOp z4(Z&-X7#AfRSX!~97}!CC~-BOxj)AdM0308sv$8mR~R+M^y`6IxO)4JJMQ3$_UIlS zxBQauxW3gd8=|puOghKIY7PU3b!9WGtBt9c^m!iXk{ff>G4e?&k;R6(o2$_C`%HX0 zAl}bfUjO>nbBhbrB-!Ji`P4^R&W!Usj+^b&Fv9(~`cMD%Wk0_xx-WonC)La$ez%*h zdJ;Bsk-KUTO-gKmP2Ui^c`M)?r~b1(Z&_Qs5g!-2$6ep~vQFI2gK;o8-j(kP7+u(W z(=Kk1%ppUzpA-+{7cCb7k$~1Fx8n ziL<_7oyYO2CFDFG%9~>=+!mMeWjya;z5VTP=avk|e1Wd&nd6eXIF&bf<~+ivW|xkw zJgT|50<$?+#gjO3!l#B!&HbS_w=iW(xODk2O2-%7j+d|OC*}%&ycc-WXG|C;fwoTx3|&w4s8B;|%RzGAVu`8LAG zqmtrR6PCW~Tm7vVx6S&TM}Fj%Px-ebFkIM z|8dUkKK#BM*!TJNak+hto%@bGU;V6H;LeIw4Ttdid>4|3e4OizU(Ok4eY^pGbbb6x z>#aB67zgeTrt)`uVbhMkfyM7O>2RQ{24c{~ zMc-T5(^R;OFHCd6D?d`rc+)7p!t8(|j9B@^iAy%)Jvdi{aQR7mEWg}!*IjwXK5Vv$ zO44hQo^$KtF5%XxWYEy6f=P9$IK%xq;mwcli(AsC^8oO zl~?<$^A_)1OZthYM#E%n;!-V=WzQ}#iZ6e2VV6I-!^5jTUIj+W`~8uY z`_qEd&LKJd-bm<4(ecY>*p9^~9RAE$lkRb{mrR`E+=fmIu9S`uU-`Rk)g}9kOQLuv zu9Z}bYM=Y!QVvP%@)1+qA$lQKeFx_XJZDwh04lgS10DpBMw{!BO?eVj57>lvziM_V z?2Hqi+p(!H4&l_t?-)YZ@Cz#m4*Lc^?eYm%Tnf)T=4-p>l8)poi^i|Z>I>x_uR6eh zpEucO9Cli9tt58wpwqlBF4-ip%STLchd96ED)`9PT<}*7h^z%Eez&31h^IM5bzp~c z-ejL~*lESJlH8v3HQ({g$6x=7mxa5&6dgM)vPXs*II*!&k#EsG(MHu_j@ZN&hvG6o zK05ddBPouYw8DBEx-hHw1eve;!mEaqm9u%aVpUi8REu*}$e5D}yUHctBs+JFQS+_X zgv&>V9DEh$lb`%#eibJU0C8k}0Z|`#>csD0m{-m5a$w8NbC*pRp~s5 z?ReEGx#h!lT0QRH;u6Q!;<69#wH(qtw{YZPjY6LMY*(n~Kwik;wgz;TQZFReS$Ll< z44)GI{_p>O|6I)Zoq&L{p5_KM4omUxR{`TUYvo#xp1XN;|IRfn7-b z&-HWgp}3{{&-~>dUH;EE{mZ^jR*yqFunnbPcb|008Bc$Xam*o~VjVBt^X=1xbt$Z* z`_N^d<&5*bux>-g?mp>~Gk%WYfQU~D^A;)MIuyIbH`_ek^%?xDy5x+fKgT%ckWaCWm+txY z>B71cR?>awvd@yU@tbbCA>V7f;_=6yJbpUgWaIDS?zQ4fW_{k_rR(4h4qxjQBUQ0m z@z}Ov-IjXgm^tXv96v16;}j2`7UsjX57=tlW!ft=-ZRft)R0e@_yp^i_f_hZ)oI+8bC2!3 zk1OL*ET*2T&{fCQINg@|G*+We)$y}0`%^r4+Wxs3$Hwtxulx7EYq{-~n?R0`Gd!}x zpX+v(`p$x(?&q@p^UWnZcWGce^XBvJK zd?Y`ibx!Grr1sq*%*FCOm$_84&zo$sJPU@H3$6b$4x0D~vGa-uxwQ%CzS%~9_S4_8 zr?K$Tg;QT#-WSGs-LDw=XT19RViYIoxLNmHt~*Zl*+ySJNj_%h8X?`OL3X4!@4N08 z>EfWjr7PZj92*Zj9E(-Fq0Y-eVL~ZdmvOx0A8FY#6UoSUatk|r9D4BycIF@#IWw|y zbWRv5#$|%-VV`g2v5=Ljc#J&x<~aGc>>}Fo&2f$)&im3m#&ypl`)m`Z`_Z@T9xGiq z^_|CkZWq7&@@?6j*L9EaIAP*Vch2tfg1)qAg$(IOp74%Y`6s-ec5cODo8!eDb>_=} z_QQ>>h?;xK$xaVb{`K$JiV?SWIUpNnx@;-o^JcjIOYJttqF1~)(>>vPJUCgb_{3^@ zA7vGvB=G=Gjk*2BokhRl&%Yt=O{3ok*c@w8X>O;we!zeB7>#4*mC&ys6cwx9)b>(H5>l?rB`s3@*aa-tuZSSv&JSn!u11f9Y zIL2_vkL04#xC!9#t6%-<+%H`I@M1W|7@Jzmh14<0)subSTefD-Ics zktd#b^28hPJR5p6b0PAD%)(Tl<6H-?7`I#8W-jy3Ve~sj+=ucQLB%PEempIv_pMfjhYr5=+mxQrc9kE!^ zbTDU!C;m{1pFFX3wpJ1qgX7(=G!mHG@bK7Oa^3MK4;(%DWWJq0k?aBvjp2|F2F-)m zqMxeU`I;1eKu+T-j;yn=qHQVON$wq61U@UrRTpGR)wH)3)odYBJ4P6!bb&VH1Ua%nQA}Wz=k{kJVF;%QMRxy*WdBTpan6&$#O>a!aG{+oY4&`sTm1|F| zbEAtx_POtvEuY7wUgH8w>lk)SZ27&y;X3iC7&*M3I^6K=XmdH?Ex zT&!x|I4$bf@f43IezL+#!BR9q z8NHwSzPaMl+PHIR{A zasfwQ*^4JJrZ=X>+#GX!Ih4O;#Wj!NoNG((KY012=s@&wV+XrzDY2I?3n*QuhS43z zUJY;+BVXjnRTxY(@qyJKu+vXp>G;w%%>AhlSfGuk6HR#Ry$M?qjBu%AS6xXmxKYL7 zF>_8~Qo`kVNANp5}%_wvdVQxl)XL(BoH46{|Wb{R`_kNbO8x$fMImpCNOX>7;$qL&r4;eam+Q7@nz<1EWIdFP}zGKFz)}MUwq2-as zo;>CqdYad&Fv;?r7^h++g-5zgI#N2X%R~2&-FVzuy6s!xkYRrQkE^OpRp%HP=WN$d z8pwVdt(EAeUh}l#Fh0kNqh;a12$wo`ugmxpdwki|SC1F$VOj5;T8bkmmt;k_#HYS+ zm1GqoA6Wc_QD}0=238K~l4h3*SL1bnVe>7(%F$Q|Jhu9XRego&xVc~WIbZVlgXco8 z4ajP)Vhr)x%s$6866e6|ed$QegN3FljN7r5J(s39a`+-@a`*8XMvujwM_AUd(*q=~ z&X@e)h$tTA9Gn~vyNZ%Kc&Oo?`}u{`Ts3G>4gitZ^7Sn?aPH74wt19+cm=LePO12m{+ah(q>rtoBIMs;JPOI(KL?i%$ykA zR{g}zKFz1qqB@kL$2`Y6FEy%F?u@(Q4L|n%@mhp?@(vy)47rO?q{-Po^*Is@y;IG; z;+GvB3PdVOw(2*xW6GCFH|*&SdrD1)<4jlHl!__-`7g706(iV68uu2y$3tE9(bU0s zIpN)!tMH$ghq(sg;E|o&PsBUkU%L0v&7Fqbxan>-)gY(!yB@P8 zO!X@U2}X9uOW*QM@pR8LSH|TOa}DWJ{uS^d%vD}>Q-$o;d8;t+>|J4;epw zvEz$L5=Jggv_z*ShuR zxgl5QBLI%tW_$O=Cz*-t!Q;`@zz4}uT!Mb|$YVS=$FnUm=8EOG*5mkwVLT3*I`d#> zQ0VaEQ^xGue8IW%7MEh8&iELUl`_X^u|6L?2g!Aj<|?izz5EMb_`=_d>FC$WmS6j< z>r(ELtD3OQ4X&^?ZtjEM$k#OCOTFS+x4vrJ@-T?c*RXx(jd@RkpoZxNF@gbkTA z>d&0sFHFXd%LLtf20eD-UR03BPrF|JvN*fC4Sg>#9H+Q9Ll4EA)pw}=&7{x3_*~|C z24&{=XLh@l-8S#zb${JcW~}b1K6HI32s5NFR$>tcbNA3APsRO!R&3dPs`Cf%IEPmH($}u!MrBRXM%xkHSFbMuY@{qvMC0ibbP{< zEn^jLKE+6ST-$;pLh>lamik66$IIP(9$(JpQeD`=O)YV5+rXq7d-=|5uADpc%%_?x zmkN{gFt{^W68GDxFs(6Xhm{P~Cu^MJopOU#0*5k{6=DE^K z!V{AgM6yYGZt3{c9OpXzxt}pHX!){V4>RWqQ!$%(^C@4;Gvsnk*To^*+{Z4Pq_8gW zsX5Md{BvJ1^6l%3KaK~f4o!W_!71@^+-WampaPSy89Vn+kdN3AoC}=Bl8aM^qx8la zxY67wEHKx%`cCB>!pbk-nda)nd|aL3dC_yF$+P*8Ntix^3IcNN}Tn2rGa3Vw^KZ{uwX(5kDLemk}I2^;E{@`%2-oH>47}k^-u<6Or-_cP`U^^0FpFHx0K+|DPPa;7{(F6VSzJo#%CU5FzN==}zsVVWa~ zia%W4HAt#ku{a3e5Z?-PTk5CffbdY8;+r4)fw)7yePLVUZJw!)6^DEw+g>{J8|u1N z`2aKj@=Ibb3~Dy{_v|?tgX!X1t{6L$$qGN!N*mQ zZpD&|IyC$Ay?KqPPh)i~y5nbG_NVy9pEg(d27G`{kYe-A0Qm+UeTz#1`WzsWFGCC4 zZ~kGlovQ*QGo~IQw9UjT$B8_}mv~~dDVKPv#>9mWp5!Wfr5!>s!dbs@*nDe8@QTyo zy6z2MhpI+l+Bc(fb#&a{hp5}2#>adHQiffb|arF70hBYUs!c|Q54TgVg z_%c;Klrf3JkBoNRwO1^+#BYcly3U}+cVe6xx1<$umbv0y7H^KP?&uRk$~m#0gF9_- zs}69{G*H>Gbt?@0#94oZ@tp057>&u|M$*W=;mgp%W~?wFMVs-_k(3=7p=~B!IXb7n z#g}+uwBg4mp3sR+9I`g?Mt9c~6P9DWB;0w=pc%m#&@Vj5b6NlS=BgdOnlx5=1pDxfeb8lDkex}H)~?R$xD45)7D|3POir1xuTk9 zNxV1r&vx~}9BTNvo5t&3|N5WcX7Fci=ew`Z%DaVoE^}?=f2Otzt^dT=bhI-=avXbG z?d8ION&AG)Ram}|GglsfMZWUE6D>s2rcbuQw-82nCIK7x2JMtEr@c>!9T$2cH{^=T zVnXeh6()#=qjDDxOxleD#A>eM;>DS(SW?Ws=7a}Caj)`c!4oanLAsoFTAWh;L49lx@JJJj+0OL^hIa3k69{yac59G zkXKDL(4XwepEBG?Fez)2v+rEaQ+Q#zMmUTw!;9B*c0K1aSNv7~;UE6tqxc;#&zD@( zL*7idd+>hhRm%<$8nGTpqkxM*CT4BVgSjWjHJieFyAOFQSEz9m& zfEkm0+U#aPwaZqN+vb{0dm~fdjtv}y0yfHYdnwT7;7E%+;-D7aaW1U z`U~5Q*u%FqF2$TxiX+an{1!ABE}wIqW|M!G&Vjz=mu<$XzvXwE>w1nT7U_PsOULie zDc2o?F8(ddj8z}$HAtVO<1hQ&fA^8)+H0 zCxMr*eaW>a7AxQv+I(){@V?Ir^Z&|MzH+(cmRmBF`z|#1a}jr_&O^SrHpjX?z?_lR;SKd!=RcqPhfohq_1i?G*|qr&C6~( zH_otN%atqgaDq&KCA%nKRCw2^KeyF+RFSkP+m@_2Dm-&0RL9cNcp=gr?qT1{~E zU1pk#IamB*1#g|uYR(Sj7cT3_P7FC@#%$D8kQ9w`<0<-TpB7g8n|d>^bJQ3xW$Xq< zG0g+G;^fQtvajkE{{|lTiB|c=+gxQofiJ_+iBAlbc#gpCKIxJ(p8g!;m_t6rI$pZx z+oucbQdmj%q02tY8Rvar-G+|cebOaoykdBU$1koPUw7Sg#Os{o1m9M?+bp!rZgaf> zrEq7`Z++!Wk&{J6$5WS*D8xACJ=^EL;w4Y>@56cAJ`8sENtbjE>2r+i$U{E)9WUMU?bC&I zDXgUX&}E;ca2$?#O_mHu9i#;LhP`|oDfuZEezPS$`gtVDSAG>koHoUhR!5)Y$|o-6 ztsGqg1mvk)0bkcHzw^LFAIVnnDKQq8>c*6~ilM*4VAtlg5Jw+hagL;;?|O1_W);|v zLQiaM>4U@i(art|pXVuj=SlGHAvxd?7xLPxFJI2Z`GXg)=??SibS)H!Sg;#{^q#J3c(o+()-ITpABHTE-4_?c16w zUJ}0Ub+23EgODiwEC0BvG4`B9pJP(Td{0X$nzJ0cY|M4>C@$w48$KGkFxoeg@;gu1 zqMNbJ74gY0JQB>4Pd>Fg@ZckTO;!fTSzrw+B|$}wJ9Wrqt3;#naLb2(@^ySFfi0N= zEQ;dL#f9$8F{%T<@=1m%IcFaF;#2%A3)4973yaM+?DD~nj$bxmEB9)yc+>s+zyJH6 z)caV0Rf);bolxLWU%I61NOA1(t!f9uSyn6>$JbtSdA>X=j?NVW8f#DQI$W{UJb!`GcqvW^{2{3Ede$;mz6h1Wg< zg3Y%uHP4I_rR=jT{?6}xVLcZ*cKP5(mz}=w=+Rck)#Mw1ns=~is0Xm9;z##9^wk{W zwJD!u;4gTtg7^5I`yM!c|A#()9$$)9g?prmm2{Zf(AAebgmoXf$8Y&&oBCV1oI*zlf?}{f)A4IX!IbbH({_Ym9$Gg6dh4-_*>EF9C&$M_?Y1PhN$|`KD z0~Pgf-4!oI`EC2t8u)!J_heMZSNf9Kw9#6aV1HmSuM>z|1GyZ1?_I zFpj@aU3ny($8G59OCG|y58dOpe6vmctz7a+Ze!xZq1gXdU3tZF84vtMa0IaRK@ov0 z@4d|j1%3S5!GzL>BU(yQS+2BU*EZ-*)Z4L^ulXy# zFkNHi^BPa&^IF7BoH(hcc+xE&{&>@up9Nc9``Xtok3IGn{%#hNHt$OpR|lCQjG0c< zu6T-NL16*A?%FFk6Vkqj9W|Qnujhc5gj%?GNead}z|yzabQi9% zX{-n5z~p`DNakEE`gx}H(wDw8_X9p{;vhy_*fM^Dr%A;>OJaz(+}#&ec_gvRM;!W; zyXO?Qd==xqOly2yM>?u5#bJZ1e491kGrrzes(rXm)Vs-Bc|A|h&1LWVz(<#R?zx}u zaAiG_Af=K^Vs{@pKDP-AfqcTzmtDRzOb@~-PB9MK!l(}6!Dv$~{e8T$i$_wqoI|=} zluJ3>hc5eEpZZ|5$)?=0tFQdtcU^v$ssS6i8gbgNp}U`#Y_E(r!@ubjH^!6sX}!ml z;ZbqR)Qc-Jq+PuDgv3T8hpud|mxN(U*Qy5L@ibq}mHS5I;PtV}?pW95NAiavZkxQk z`qi&qcmp0Dp9|%eR4jeZ>HM;bN76Cyc;7MDwPAN3IzG1vD^A7Cc8}9IB=OP2k1iWJ zO?}6x4*9`o%b<$$81dkjT|APCMPByEqmPYifa+k86R>ZxyL3WfCA0~04vu{a#%LinApzJ>R%nnH1s zUPJR0+I_;8tH-m|_c+(V#!K@hexza*FAUPREpBYW%fBUO%-k2xRzBzRIAP^KF;atQtg=cn!fI(=i<7pYmYzwrAL-Oji2d)JATbM$#w~X z8umD5#fQqLfHz!w|p61x_i9RK@L~Fb|i9Kzu9(?e@ z^QynPLhGEPJ{U|Tz2fgPiY;+@h_Zk92wd6ntCyXR!^w{#CASL?OzwEl>uetS_ zqqvAFRxH9Qoh6{@$}$%9y@S`QR^VcJ%h##tX5ExCp|9<81p zFL7lbNk>0p&6fn#Kf3kSTbJ8zyKTAm-g}+CYjb1is^5z`6~DpbCXa9axK1WNuwl+# z{%5YM-xE7p?tkcU-t0;oul;Vkj-PiPuLa}d$M`i~o~Su#o&(+U$mcfK<(J&&+h->( zebkmaVKC*V9_ifeui@F)&%z<$VJ_HrY|%P5_QJHSFpaZ5Hd>e(o(6JMyWryrUgJ@% z(58LPseITgF6&}U!kVw(Cu`3HH6C~rUmQJ9>|iBJk2e^vS{{1%k)zA5zwX@f4}bAj zk8ix;`koE&8ym4II(52IBC%pHxlZ-jr_hZS<~(Rx3PT*eXeR>8zVb16!)MNlRlH>5 zz#A8QsyFp`NFKw9cjXtZWcnuF&aL?~%lAEaO^$Yp=fI`1<&mkqsR`xUp!}MO!t$ zstta%jXG2-kgip@vMD_4G@oKpmc4D!XZ#ua@WT&tON|9t`;c7Oz?e<-NP=msaLCdJ zNj#FTJ2e)=IUg|fU1s>i+nmL(zTz@Qz9}|+ zr#=o^q{?`43~N7XTnQ~}+PISU+rRzWO2bHkQnQcUGau8Tca@Lh4mu2D|G$OIjURV)sds?S!0SPWbm3&NJ>zwN$S2!R{+>)6VDaY~TFN-<;neG0@(e zTjSia8CR=YIJddpK^w;kIAJ9V?~8^}Y^zi3Hpr}d@CWCL1&TigfA-J**}k^HC{I=Q zOAAJ7WU7_{^-*S_sF8<7Y%t*@NHBh40RlI zl8GJp<>2c%;aV;qV-aau^6Vm)rMDNa0IgN3bYCqGRRb#&9-TxAcjK5ebIjxnCZ z()SHxwdS^%Q2Pn(dWN_!499$g#WfG#`mNuZXIvSuuD|2JXJMWM8 zA2f&OskqLMPa8hNX1?kxcS6Kb(&IbEcrr#gBo!O7xh*EtvmaN*k(9+D&g4-p`AT92 zM-$%1KRh`lyE!6O@sf(Kesh%_p3K9l#kE+E$F)D~-@Ft5r$77o<^3Q0IHz6!pHZWL zAl}P?UqypEgxw+mulU)&kL#>?&dR$l&s@)GeexaRQaxPrz*!c5Z4Tj;?<^Q$znW#t z({X&E^D{s213&P)@$!4`LA!50vG4QwylOwX4SkNC`!oKm{j(fbs_Cp_@Z7{G-tFl7 z#&Fg=dwKH}E*ECSItCeMS<(+BKIHRaUH1ueJ6!u3I2G?YcyUOIUsCp&d$xPu^{pJ@ za-4KYVO;L>x!rY*!E4|p3!famvdt{p4D%7!y8^1Z?wNMeEkNz@_<(yQg&j!&35m* zPK^4J;_<$8Nnu>>^SRx1jRg+3JLjx}BaY^}`Yy#Uxi80T_rB}m#`e%daZ8Q-I^lRp zNL6{2R-TttfdqJ?kSd;Y{eCY(HcQrjsT4E$@MnC*l14EB9V))kSwp!}FaJC)=kS=ci_<~ql>_yn%oRirJ@nA>V?Xv|%S|`k6u*p`w=4B|0YY<| z^b>Ut=n1@;SE|R)`U+?r$C>${x)p;>&2`x%6+2_pmlU3_dmMeu*L)50sbi-(e7~B0 zf&()7YoCh)SL)?|K^|9CGqut*z8BPU@T#k>T>izcy<@rlx@)7v!rl2;tU7nu)9-famd80(@s71TjhXyg`5UYF ziaC+f>dBaid+_`(FFStyvgp15EABa7`H=YHZ1^}XbUgmHZ~L}mKH)O|s_x=R|5gpM z0f=^@hC?=s^)YVp2rF5`ho_k2&@ z<^gQ%<^Uw1r9!cWohHsyLuaCKk?TAZ9 z;)e?J&36$qFY~;WZC{=Yt@%8$4`$v8cZhSI4^d?f@nDp0GO^J=5i{BH7$Huv9WZ#s z({nQU+phS1Tyq?K#kf!Q@U=hwNFUvM-vfCOatQ2n)^lSMujvZw zTovoN(#I!b7mEJmPyXalygxYm6Q}(oiIF*`KX1jW{oL`6!x)WRs|F?v zD^B_ja-PDcTd{P^-h5$pJ!7zmPkuS%qwn11_c%PW(X} zw-6aW{S^lg_2>KW<5w=Z{p25g@=xMEAmcaAiTp}y_N4eqEB(CcjUAky@N$;G`f;x% zInN+92WNnO)k7}UT-82XzIgXN3*Ujx6*wO9B2toMB0H#MlhmGwzTO<`gE@S8)D*UL z#USPLcpYrm3bQ-WMOT92~fN`#^{3l{mjHKs6SDUzH z)>tz)MvqZnu}Ew_SK#A~_v7#W?(fd4wfQbwHLqVfGW9tRc5K?<5Js|M6DJ*9H1TIg z92J*2jUzF7aI9gr>g@W+r?{C1pKa+b-mH-`(s=*x3qSQ!Kb2Ru0|>vyMEBBh^#Xei z@;%f?AA5ZH{SSUDesbzc_88ml*DAQB!*9Oxeapj-JeprxWhYKsbVt*ZCwh56VC4X? zzU#9Ocs4(%%rasaXM`&G7prENaAgw>$t zzT43iKjYl47~$oc`{IyaQt|uxiWAP|KA-HydBg`6vA7?{OX(kt#VZ$9=enf7FlQj{ zFthw$|K!(VZHk|=-@SlYFJ9NiJM_Q!=C>_3+;HxNIf_eFZO*{FXl;TfW1SsM))z;& z#&-0;0}p&67ONu`biS(@qq9T*#WB_w<0$xp^Yro4@!tC7aU!)IVVrwqs~tH6um5AG zN8E1z?$H}#_&zWcGxszz2-Hq;fuXTAO7%%mviSf|L7d7 zJ?dK3EAEo3+>=jT@vBBY6>?7PQ{neX@!*#Zr*y@suY74IC&%#5{_M{_7@w-stEJ;%&s$G5MPu{|$5Jx(8$8nfPXpIYZj?HnC z57(SWb@Xus@AENNkuz)4xF|IXj&bE(NyDEFz!&cN)8$XUeBW|)yi_D`qbb;3X)FAe zUtF8MAj00046$;D^cd-qK(h%SofE!-xNyuqJtu7+Z|%$(<2lfsTfVdv@0MR<-}Dvd zYOX}gcjh>opte8wgFiUB?z-!6<)R@Ba^ILHpF+Hj)+0yj@M%6OsC~|<5X+x&g;~XH z@ND@D2F-BmGKP4woh#bEhYu ziA$U(Wbv*zEf;u==TL0Mle0GUSG*9w&C5e>Q}c5__jAXbW$?bul(Tc~vp1kPg+odY z*NOa!n{YC>4F9}8vUcN6tonuD%!e;p*2RYqb{PYXgL9Qh;(Ox3t)dCueQyuXqV`ZglX`daQKRoJ%%j+1=Ff#i_h` z+_DZ`b9J0FX_%yp+}m@IBRV}DgVLF-j;_fce%bf??Uy)T?>lFliNq+=X+ zTHX8NXZy@A|AojcF4-iV*KO$D7fv=w?5^`Q6gEE6=Oqz3eqkgPH~Z9|adZB;uej6f zvtNCrIFws*_6dib?*{VIIPt0A5_e_j%NP{na@Ogqc`j_~UplTdLp!OtkwyKBF;~2o z{pEWmDZ1n;7v3ufDjpq~hh9``EGhCMf!^$o9Wz+=f{8i$Cp>V>Q#AhE&gcvAl|8;zN#f571MCl-G)%G`4%QhNIN)j zI4}0CR+z4F?i1s=X3jmi{8(}wy19={HFq6p40FkZ@ZkBCTNr#>Hm^Uhi4hO@C%*Mp ze|K4S*8<2VUNGEnlq=uS`N!c4S5(xCmzJ~yojZ38U)`aiVFzg~lBm~;Veu(0ag$H6 zlFfmku<0{>g;8M1EuZqc1fJNf`X^5BibJ-!k6kuNVcF@@Tbbr#6*Ku1E7=?vY<^r% zjPkN*#m`+WfBmoj_2rgZZaL!RWBB^ugk#=j?yWwyxrs;ixsM%Nh}=pSyrtU>pRw}Q z_>SU^qDOz>FZ_kPpBQ(y2)}sFJXZ>s=U3>JU<4UaNTzwn|n#Tj1`))ho+sfs0 zHSflGH8zJo9>vWBR|KDE_idFXjHRHe2LwvA7}gq#lm%>@nz`oy+Vxr23B4H zp9k#N(Xp?ih~@tKA6nk=?)Ueb@YqODN%8R$q`Ba#Eg$?uIGkeDJKvNuQ zVahzlJ0QC=hZ#?dZ}{n#%tcAY^(Vh@DWBVZH~n>%!zAGu-+6`wvO@K z!e}13870?Q@v@hNikF1Z&oKs;miaWl#+@pD*$P89L!#b|V6SW1TW0PY~%!=7!R`%#LxAO=;<;z&dJ=3|0_^0D+{cpuSc`A7G zR_rP;`aTCTxAZzNMxXiU@x{%OwC#m{g06w*_qk_ZuNPOq(58{dP1LYSGw}2^~uj0crc0Sl> zS!40c6Cm?E4&@_9>cy4$;ipe9{M9_BbAkmX5He!3TR!@sjykcaU;d0$41r*y5roWm zr0nR?lBbjeI-mSy^BRuhZ0kRG?Q36~zeIie?YAF&^rIimGZubFoE%dvtNBqrc%y~b z%@sZxHY9$eny?|$v@Z`%FeE@_QHuAhj=$wwzUAnfzUiBCk>ZR|xRB4*TxE{RleM&= z6iTdGvE;ZzGQge#8#hDJz5-A4n4WuL!nc~gF&#NK&YdxqL-U`piXjnoMtjC{6&(D8 zAUwzro5#$m_Dp=rT=C&HUmeV!CX71aCXNTRIJJsvvPwbb!jsvl-*T$3MH2|Y|oceQI@4TAy46KJO-^@wPa3jhM|yGxl}{jY@7;9A9cqcjHB2G$1Ggm^Y>eK(8O z(bZR9ofo8ng@@saWJ^}A6^59aBh^S~V=AWSQMtgxf^>BK_17=49mfwzEd1m=XM?;a z7fpQ4g;8y*mhgd{PUMR?I1_6eCvZ+&xEYgu_-f8n!zxrAI0~1!%kG@g z=P`>S<$+q}xXx2C&a>rH{>DYz-nn8dH(Y=1@=t&HH`yNDKafX?yca`KJ$G}y)Sjmq-~i&Uk>0Jo_10VSO)h>7 zgO!U@FIs%`7=QMz=Humjw>6Cy`GH!v)hhLHF&UTb^QIfG0jY~qD!*34p4At*l1p^Y z=M1pS@ut;@)@x$^yiUCHzCuJVPQv2z#iP%E@lTg~?|-oWHUW!+Ma!@2Y14tk0Vutw z{ZEIor7f_M5whdn6DOXn8Zu;q!%uZoXUD4;&bk&fUnJbJM zWBT<#Efi8R#512O<)Q`}i&wlsksrIoCGcJb z#}{pLUU8^Vcb&GUiG_$Qexf-q)#ude8@}Ni@{@u9a2Gy>rmQ@&J!f-8-AXFS_s{M_Bk)8pf%K1gGNV@?toYVW-9%68AsF7 z^MH&UN<1y32s73vJ=|_np2P=kmB+X?4>bJ6O<=+?l^w2d?+((!;O-hxt1m7eA1=4U zSMaZ#x#Hb=uG0M4ul?E_TU<-PCxQ>7Ow|^VS930lqd1j z07iL8E)H~W#U<>e<0>ZSLgp%dHD~$5JMTI=m%mIgc5VE*?x`+~FBBj4qcsG9e8$b6`@mKfJU2yG8-=Wgy9qs(uxgzqI*`~Oej~M3>$3DDxT`GR&a*TBG zdkjAH(S<>u8#w%qkuIOdxbHN(u;9>VKH0=`8eTX_y(Ejce6sTrjs=EBF5VqyaX~*z zBR^k$Bn|Myc3+Gbf6jxjby1f10{BGU{Yn+X9OpU)oQ9?Fia=}_3 zZ~2EO0bIB9(8G_!yJG#4U__qsI1g|iTt$a}oZ74l*$lIo6aIZZ*?nS91RpRcUXZyj z`-Moj&QjNfnhR*$;#SbSB+0RnbS#pYR3wypcxXx17h2%UGv(G2{R!w|Y@DD!nN6VM*xj%ojP=Ed;bL`dO zXoM!CO`3me&+%ocGB#O^rDqL^}=O*8U{YhW85ywulSA;AJ}Lo@?n>cT1#)6 z@t%3Eh|&1q^t|GCn{;6flXZwIaI04Kv=O8D0%cy=i!(%zS8>>SUgVc;&QZ{dc3e?} z#y8ckeE_8ElP;{4eo^NNe&<$=mY=#*qu1B=7vo$pDWCrA=eWipM?cn}SeIfKjg9>o zu9(04^A>n!GMB8JnE=Xm(+$@h|MOq{t>eq$HKsQv8%#}l|6K8R$Uazm_W+25$Ph7G|VwX=ie6k4_@_grNtjM(% zz~lVrvZ2$+K_j<(sslT=d6Rv{VW$<>N@5oeI?emyl1&o3e8d!Yh#XpT1ip2A!ogFy z@Hdy+%YSLEUVwAOE~TcY@)pO*Q*qgG zT;JLU0|!90{woj%5W3D7QWr=*`a0O;3wcExTzxCL!lv7F&okH2KI2sWmgJ2#V^{sc zfJ?B&I4(ISY}$(7v2dxiJz||hv5Aw94mp&kq&QTc`rxEXuHvhR_EjH&ZM99g1YO0d zu5hXraN_Y89TV8V3L`13%g$Bf62~e=J_4ynHHG9#LSm4rZ{{S-Z5@vzTKh(~ZK@$< z<(#przUm4F)dHD#l34u-D~zPDE<0DmCeCU);Uf^g@)$N<<)7m)yRGAKL~GyZwheo4 zQ?3NXx1NvQ`@Rq5tw;G#Mnt&=iHx8C?~W_IdR+<6 zy7AYICh1{=;kcWJZ+tL*)=@_>i{dfP<|NLJr%eWR`J#UxA2Lt~suzjqr z;_P@6H-5*+j@)NI%_ojIe(no*RzAnOE?&tkpK=Hzc?j#iIeyDG+ticfEh+5m!|p!mk~5zE9OD?p zh1|R@M}ChHr)-XKU4EDHOS%tT_F2w2?+fcTbnNbvE;-}3VjMH`xlggPZMJ)E*AK;k z?2kT^Uk{9dF~G6u3`>1vu1R^bEL+rUaqESyY$W;YpL`+iAb-bk{N8je zfn8Sj1J`MqUIYB~;fzT)R9MtA(^qmLbP7r%Z!j%P+cKY9lGnWvwNt_4gdTMa~!FH|ljedwV_ zbi%fRJ=>ia)Tt@Xf`Mc{H9eL1833NkTq^S{^Kcdne9vY5&t+^(XL7MW z@*XZioaLA~3x@s7FRK31ul#1eV#^%y6yN(SPe;G$9!prgRtzO#ZL8OjytceP?hWzF zzxIy2GL@v-G$8LwN77u%r#Sb^CcJ!ef40wl<=CWS?!~bU*r* z-D9N-r@r&J&+X!uU%oB7^SbUaij#EQtj}@kJ8qv1jC@G-CFM&;JqRb8_h-C(ZkKJ& zv1LD$L!63}+!wQzPaGbz&o;-aFFD7V{i*Q9ci|uY7qR&ChjKHXzQwejN<0WJDLay% zrT@_FpUB%DizofXIo2O6SJm)`GzyF{8qyKhU{JsE}<}LSA&SlMi?~`d?eYG89d~_Ed zxSsou>Ofl^ch7XL`2HZr_`m(#59X=Wi5!t2&h^Iguw>;7(PvvKBd&267jFeAJ2W|k z&u;t#&+^vz-JZD1!x0M^2fhHa#JA61_JgrAU-dgi+=ucQN5&P_%tLi9EY z6f^rOhw_Q5<&3BAF|+@)TK3fuJYByqhw@ln)y^2rJXGhxQvJ?#BH+?oX^tdc$aBRG zk6l`8#>UPJQ`hgug7oc>w8mN$Z@houOGh7%H{P$RTj4gIla}mgP04GnV*L`Lu7Hoy zSkiJ?%QC|s^~S;4_LYxBZ~r&H6CX{UYpN<%eWdigJ85fDe9)#lm#UX+pA3~-HKg3i zRX7XVRK+9b+{Z4Pq_8gWWvg+izlxcB3Skb>72`a!-k6F>e?7F%jLP3~D_7vRVvQzM zamYURvCAeYtV?{^rukUKOg@ENnyWDrFSxm)thi76(c6COz5MoIR>`_E%8fOr6ql*j zI)t0otE_5cDGRNZI9O_VYZmomUIC#XHI(B%)BdNH;D<;hwn6{U%xp9~+ahK+5%!$oQsAG!Fc4@A1 z2EMZAiv4-(EjKRz=%4-ia@#F=V@IBFV`t}b70<`$a^5gKHOHv}a}fCaL?Fn4-e9<0P{DSj`Zogx> z@BRmOx6x*)spmL{08a;=5xJQjj((2Rjs13KMLKrkJczh@st;?e2ib{t`;Q-Z@Zsfs zANc6<=U($|@k0Yo4*Y=X<P}qFL(HcJ>6kXSqlX@ zy9U!`OR1RRpJT+U7{ON3xVP{fqEEcc3Ec6iz0NX5!l{pNN|`7X^>&EKWD8Z!{b zNGdvp{FssLLgtF+8<#c22~PfQfbzgK=NSBPJddN(j_cvc-veU>8(khl&6kp8i;xi; zk1T=p`nS|G$5;{NVS!=J>J4pUB}(1KZKUY)>qnXmW1Z<)8Wd2`Y?ukb#df zciiriu6#3>a+UmFZ+X@CEsO38FnE)~<1s{^oH@RIxrr&7dxkd6FpZt^j1`YSeiUWm% zZ!Az84?5Oc=NRGmw_}APDsbb1u?&U)9ETjf@xBwX3FRCJ9*-%8FE-wI{W%V}JWv&z zuy~mJW>25`NO8D6*&IIO)2DosTw$GmML2cDA@kf9kL*ZcUAkRZj}_K^vK8)N{oxSK5T4N%kewj{r+R_Y#c4> zwRo$4XO|xt8<@gfMtHo31#?*Q-K?x7``Bt5nR;##iH{=w-5-2>dGxWz^Jah<94YXX zo`1!?FT1ebcbs%d$4TGvVe>7pS&OhCGhBUfZOOu{#v(r9!T2USGVIwcp4P2@X|8fs zF3nX;Lmy{Mi62vTyyR>}U$SF_kA>p0d+)vX@5iFmKY1iy2AzCp4qTo~y5z~wHC}$@ zL&oL;-8af!_IGMRO?TtiITxqI=fm#maSPZ2JarDCVrbi&g)=8r^=e zavd6*=X3o~%vpUGtA4L*pMEG;)O#F1xAr&VJ?GVT1h=>jjcp5$?NH3@<5R+a{Qtgf z8NWx!+Au%&*8O!)6<{467OZ^wrfHlW3e|GJ>-vaT?M95QmN;InzWS=8_x#?6md74@ zoYTc*Mreab<`__(QMeB`m}rv1r>$aJhXbs0nBI1?buHLDzH(*^cKnrSB^{Rz42DIY zHz4AauXqw$b*$pxF5W(Cv)FX=5be@jF$rTIT$-yo9yA|$fW(=WA3O4K-1%_{Hkytn zNzHBgDz^1HcEdc5`*J8I?VQYf^bbG1-1+&taYurBZXtOGi{~4T)FU)aLkho(0q56b z!4YRiIzfUcw^H)ti&L=iS`uUeutz(-=f3;no;ROf;!U-n8P>s9h{DB4^x8J_4Krlf zB)5D3k{b@`88teJX%6|2UX$X>-(1)o=kZX~)@EVbPzv_)^;mJqCVbVAU5k-BV^ved z;?wvf#p}M*iP2asKJnFW4g%DK_4xAT9LVlC#X8Py!nzF|d-*QSRZY%|Wv=4(RLfi5 z7B}vT+pp(-j`6Xa)Y>uLmm2HKSiZs&s}@H@&ID3=8hGBn@fY6o^Oq&fcqR}Tw0$7w z5t>QDA7mLgJ+v`CLOlK_|NQO8AOA#rY3Qme6)X7MPkTJ0kj+tG?@O2DSy-?ZTRv>7 z?F_k^a8kr0^W4WSo20NV@u@k^b^LQbW6n^&_$4pRm1cX$o|l?qtZn-WKdu-DPYk5S zcQbm$$Sg(yzSpJAQjv z{JsDY&W)UTQ|sOF744kGSU4}WOEYk32A=&Hhy~~=^40V0`I5&#yfwH zmte6TT)eXKW5Xx`#$s(j9@*m@EYxyk$wTj2n5;Osf8+OM@m(=TtjIW0+AGXzYhFs3+x_D%p``BfZ6xJm^HOIM*f9_|@8R{3m{K9E`GZ5+sc^z(C3)BpYSu( z?|dFp=~4)j9WLH{^IQJ)(e>9|J926r8S81U8AY&*-D%FvNCr<>^IiD0cl20Ga&zZ6 zX&S*gfkKWKmWjOirW=m_x4-|3T=(FS()-;~8A_^DNq4&~^_XO&+xOw!-ue{ZTxD}_AL{0KCqUPIT0Z<67{yCEz1vc+c(?DvyS?=(9vr?oZ@_bwb^Le!?mrqgiic;M6;V$%23TznR!2De zrmrvxbWGTU3G;|0o=v{$E4=wJ5VJ>ieEGX?F?}|q9P)`%c5%>0kEYnHp>Xmgz_@06 z_VJ5PG6U^l!t?1$*L}mT@?n<`(&~dzj>Ko@(p{czZj^Rp4yTK7)!)dSiBjZI1NC z0nR5S?}$$)?g`A(#A+iqanB~V50^lAV}N>M zxLvyY4(aZ@>Z+@LIQlmSM~J~M|J)~!e6Gv3g`aU-*sZvIHuz|>U%bP+^Q%8g#~;$= zlY|G|x7ns#bBu73;t*bTNyQ5{OU1d}ZLSL=Zu!*5zpuIPkS?F3b7PZTy86N?zw9m* zBaFwmPx>qs=XSTbE{x}x{p!z>ShamRelBgg{bQe69(?HGJ#PoG8hG3Bu067sB!AT) z+_*lA9vGxN^nHu&v|jD}_~zK?W4i6uo0k74zG!simHj16(0kjViP;yVn2`FO0+qjD zo9f*v@Q`oDJJ$6X=Y8QM-S$Ca5r5x@<_rhdRD!7zS*%psf}le6*5+ju;-}l+9wp zz+a%oFQ5AKo%w~M_ykce3E=Rie!i5DgVW7u^0i*4r)@8sUS_miJhPnQ!Dmd_XSn)} zli>_9$2;MAj9d9MmWa7DS7Q!x`Yz4Y>L_|a99QgawVL&O3Q zdM{eh8UJ?@jdf#$AW|o`Y)O&&&ba$^MdEm}WKt4M4f}X94d>8ho4{EqKI})!jW=Gm z{L^3ljpeg<-j$y!u)2+08;Oca{3nUam*o~VjVBt^X=1xbt$Z*`_N^d<&5*bux>-g?mp>~Gkz<^F*Be06g%5yyXSWO zP~1M8?6chBl1*6kC9%6tx}#tkh`Wx?A?uZi--hkhS52j2T zVI@l``>^iv#V9l6WbNYz48vX%!P=H<9TbofIDEP6vC!~`9|tYQrrOU6J)S|6@RY!*LKr3F9S-d1 z_-JKEO+0pO^3w+gMmXsee`&5_LNu>mZF9x3@X62IdCV`T^4nep0|w z+*nGn-AN=U}WfQh?Uz)3!AGPOeuE@(xu-@|4cj-cLcH-EN>^}J74*|$Y`S2E6;-28+;xP<&pGIx1p;qc?j!1bdTTi%{KM7 za>*xo7L2gZL@JM@bGZ#&eaS;u_n~|ImT$JHe|-GwfAY6pzAWQffUmA&j5)hL?kn@A zfBNgoU3Y&urz94neA17TCC$=?)WRS+L-yGXmy1^v!JoIt%gc%3l}!?Bcsmq5W6I*V za16c?lsNo!Z;ea(|KUIW)#b^jp3=vmJJP|G{hWka`xKjWDlj@=~uGlAh4eveilJLFn`%vofCnNS(?6zDRde`&U zfE^jzIKGj1bKlxJLZ7kF2FF^aEil66f<+;0nLI=DNuIWyZ~R4y$AK6N0mWt$Zgh0u z5i@lBG;T-1FSh>w?R{&|WLI_FZH-0`B=i7*g+LM@9_ATv;TUX848}#M7*{!_D9W+R zNvcxGpH%pfs^mv1q2fvc!LFDX6Jtt#@Nf_iS%856HbQ`qrAWxUWk5(sAOu1ZpeLHq zbk>-UVEQ&&pCa&zuVn!c+)%ZJ{P~9V)_ha91>J~ z`dCMq#qElr>_U5eRDJa^5AD{Q$92UJSKAd+<56F2lxeRz#HBJwa~_5e#+KS zW^ub>D7(;JA5~v{%tO2N=5bvy#MO4i)Ogfa8)e$7&Uka$r`K0MVr!v|#r%}*kKX_s zF8uTr!^!vyp^DabV4a8bI)<4h}#c<7CV>W%}91gsD+*$nSms$Mw3n@g$Zg7VBMyc6zKf%dG3e9=5M*TVLx< zd}^#7Z?390eiNH9b9K*2Ox5*1)n=J>eb~qLb#3cwy@^ka)#J@o^~P^vGiI*tIf<#d z-ly6uv#t;O*uJi9eXTd~sj+&zxvJjyO>D-@)jcOM)bTUJufv_~{2na+g)sLO*n-7- zgql?95!HxIutm9TOVW-uYF5BA+bLF zWvjXgI2*maYxDKboLkd%_+Gy=R&7Ma^H@|8a}0OJstnAg^NO1VzMWzD+W-Dme*YcU zsTVyLT&~BQ!+7~7$r!{-OV)1Dpq*i6JqLf=Q{ZAR{y+~~YTJ`Q zwTm%svrb)8RsUW#f7aUB>5rn^t(StGDEYMjDO7ITDn9KRY};Mimu>eGIyH^49_^j6 z%0cm%?2J_`V$T)V2Rg4Xp8Txf@}r-)bitp8kDt(rB}L9y0;)5FrXuB7?PvnSJwml+ zYP7u<&>`1WF4Yk(GOcz={MwnE?2I7Bpwanekif}G00pY>a6GCeuoW+R2p1cn{MnIH zPkH$8R~KEjz(6QmPBf9`0V;-6k(`rK%3_;fsP}`0D%(GO$s;aLcGvb}jUrt7geHzq zjj=j=d$X|UTi%XSY+}r|d}lD`6i-bAGF+Qla{9NJb9nmrL3@?$PaRG9z*LDR7S}SC z*ui~$HV$sL)I)%7~b_RBM-Wk%Q>eub$*nYDphiL)3Jq^COaQNLnc<1tj6OQLX5CKUrU~V=Y^(+O}Y#iX!Q`bM_ z#siCStP7WHj4L4y;wd=u8sc`XW$SopS4n=i?KiP?zUj$S+f|*$$A%+dtghX4!S{!u zeJ{Yu`SE!4=cDN#qT|L>>^V|vo%(K`9I~Hv#yN4hC==R}v-t!F!{BaQ1<+;djQWjs4D8jq7YO zuXsP@AO6Yt3x2Ty=Zli&M2vJLGd{jVL_XC3XKPovvG+)eBDp2Sq*Ca<% zw>X3~wyNAem0a6yk#cOclQ=K-|3{5Oi(`D`5R0R1+~C4(ObcH?||V3+?!F*~20 za&7wn{Wi)agB=KVZGQVRbonbL_Y(d9;qU#gcMZ4Qe#Z*M+?pTPw)ctA&3gdr5l8#9 zi?(Hrk4kvIGFN<0mad(2us&bKnSEj_`%csI6&8H?P=!{?p+F-6hBb2z7}|>^evD^% z^DRFduKMaX_1f9CGN|@5PybRv@rmyrX;3~m$lv_g79;_V(|D>+$wxkOu?mm4iVwud zkDNu8OKH20lU(TI2eB?GqiQ+}#_x<(4%W_CwK=2_DdWNU!_NWh)ec|v=!%DL(|DrA z{Nu6AtI?Qd;dziBgyL^7l^J^Ef-#`QrSZU~D=hAFzCzQUS2sS$y826uqX};tYucMJ z+o`b4F$k-ivg3fS66KG!4uANk=MVV6r9MdQ9yMw>_PT1bTx$+`d0A9V6M0kKO}Hk+ zYZ{EV6&LN!Y12N`Q1r2X)l*&cxz>|gbi*Tvm5 z&L+GWV`g3V+3df~cm0xeufT0H`pL8N$I}g|33&Z&SR$n}@ z{b2Veq1wsecJ(*+I-9W-*UQzn%EZ-n<+8rVxb3>)sGBQ2Z^hVFc_{CURh*l{WvrM7 z-sHZHb$`x$?pzz=w((V8W!r0QU*cFeA9f#o^zaRQh0J%p`+cpue)j}q%M$B3K$QKU zQ@_@?B5|n3T&}bCwt(Q z!>K1fe0b~IF2DzmpO%xTu$+JB;}%uKW{Hxy)br%v61(Gp7NrOW(-X zb7HQv6q{h5&en1(vFy`$XiGoan2O^zj+$S}6>oFvd*&qnf^WRe$#o;h^HbW5v+5{k z42loQvC6U2dDy#m@3%cBtow4P#)`aHV+*Xc;ce%AXu%5x3{Xl{_*gHv(DhJUr4tuC;Fk}IIcs*=;bP34?0K|o~Z+fwfCpqg72#z?*%xZEav(@ zr|U^K!O-Ub`_hLwp!T7THP`1kU7z$O82W58|Ha*R-~F-Ujyvv`l4HyH?%cK+%kHfv z5APJc=DHj7GNtf-k=xRnIqA`pLNSymeqspu6u-eZO=MW>CtMBW7V0HtNC`E z%v&C=*|1Ni6V|paOy!BE!48mq(o&|dj;p#>Y}H#fZ-;CBHLlb=0`o@N}P3~1ZLc@kRe~XtXvr|b3O9iwY-?2ih9*z%Y(3yVR)<{Mn7XK1hT!! zh=lX?;`@f{@msGb`J8Z@6RW+L#I1a`Ynuev zq5=LBwlE(u6W0>g)LY;7KCLmXHI;4+@>Ls)mMIRZrOCsbuG-s*4o@9*059u&Sg)FD z2;Irf4!ceo#b6A$eNt7{&-$dh)|Y@h_zYhE_m6GMID z$+-?2*XyV!jrgQfY_916zn_KN)H@th3tA4;+ty_GSe9+PmeR9P#e)h>JuDGZImc}@ z9T}cZEL7pa&kf-70`ccW3^Xof!(NVxUD`Y1`VrU}tMy~kTOMp<#kJ$jiff8%Yrks{ zgA!}rYnN+2)@$esMObLngX1Zg2g-EA!MfH?MZ%iD)al2UgxvhtY&#knXpR4xjoV#r zlzu``EmzZuMhvvcCHavUUZY2t(MI-w$<7cgEh}x#p@a4m{W`DS4)*rhoT zdec$^0zyx=vTZP!xf zfjT^_f=e5Z7PA<|MSOkGzB5*FP9JPz#r|N;Xzk!-pw<#~oHCoN!JL9I6}gW2h-t~I zEIq^rQH)ymAyH2ZcNOy>aN@)wUgiO%3hR(Lr}cs&Y6TrA{LaaGnP0%z(brRHx#@~Bzl=9@l-vu?Jcbo^G=SabOo-(EC_^?jRq>s%X) z2}hMm6S7}!PkcI?eYF9jVIS!e+sh4;eQq4Re;ORW)#)dmx%?|(C!53SzD>P#u8lq5 zu_71Oir-*A32TUJDW2apUxQ-;nO!KDpVztv-Z|r}j`JN#VdWOm*oM-LaVj*VOyisG z(&zSqO1my=>3yiJA{WufR@0UbbB4`^G@~hdb6joPk6(-UoM&G6;$et;0sNQ5xLtnr z&eKAFYujc;gxAn2 z`ta6x!{Q#MP0gDb_8Gm{WKA2pG1(~tSo_^@xX6=S2#bwOm1}w*N5)gcCKDdm8G{rQ3aFB+7L8Q#-&o#}ul-9D|3f3t%ao6)-_=~S?U62*MBrV@w zt3}a-BtQ_G0n`gtwkfj?PE$-GkSXvqCy>2}MQ0z^<6t(wh#>$^z;SpZ{?g08h~F67 zH=Of?$1V7?J^Ly2b%0*BD^gNUtzCRH>Wn?+ZP=u)+%`Ba+f}yRwS9Yx+pdjgU3HdO zTdvq1-`m`-{=M8VJ7cAx=*P$7?wX+cZC>F!koA=e{FF04`<9!Pa>U`Ft-+XHZH=>8 z_6K*}b;GrN0B{)N76*<`4idJ8T>I$)1HYOSc@rWSp)93QZIChAU@1Pb*LIbI&BxI< zF&T<_iL4zuYuOY7h_sJ9(y?O$zt;4^PhUR#{#)O@^o^##k(N2@p++1ge z)4%#O+g3vIwlhR*iN$993m@C96km^x`{DM4myVU2G9Fa7yxDM}t>Qbqo2;9EayqW- zifuWXn{hTNiJx$qBmLc<6}sXpf5yy*+Y??ARBp<|qqM%V;ZnJ*W1ae{YW~UTxUMVK z{?%tervdSro_pBXjvNxrIC}6(2tP-SXOY|Sjr#mnGF}R+2Qv!>gVn-S!Ft!# zwq1FS%R1MUyXq*{wsF?EroPI?&FPKv1g_XQ+4$aOz3bk-o%S4;b*?LK)lsf(`Yo2wurJA<6WK zTzI4y&3p!EXyC{(LW4_xSPg75G3H1^S)FUXkwb&i%&Z$dCmEhqmUwo-m&reDiQg|` zzgRd?#Y36J?ZUPqCZ@&j+vcI(k4my8R(n2136frT6wQp!X zvrS9Xfl*8AJ!WI9?LWTxw3CLx-wWXN&YJ&Xe}Dj{$s6$MCD>UwfAvrV$f53!iI$qO z+f9}qxEQyglBI2~*=D7zY`4$IJ0cw^ZO#vqj(5i|@JzG#xBu~ti_5O~GJb>Xc%xMl zlcfn(%+$nGT;HaPb*>xDTr5nqimNhrj!C-_g+N;?iB-GE6HEh#FlTeTS`#hoT>c$r zZJNWnzD>P#u8pl%LA0rK<1z8+Y<6+oIH)M&Q{@T9j#Kd*-CP?(a3o;3!`6+DFvJp{{R&P?TecYmTuG2#5Ou^x2()BqeRR1)!ot zRcLaXAwv77gtnmpr~Na%l}(eq0cDDG${iFMwDK=tU?gc&G&C_|7o2k#Gmif3I_fB0 zDqrxSPk><xo?^yuEJEbu z*!Hy#+qMx5c`t0bf1~I*A`zTI_JtxbS)djq4kKnA-hR!Vyy7Xb-9PiY-NwNN=RzJn zSgdm}>(Rc?V?|E$m3$wRW99K<%?|RHQTbzoe0hl9!8t6}pmNOV*rsKho> zCOz|40wt!Rq#xzRO_w|G{INch`0royTUs!<^EbvQaKQz68n-4cx#3nU>lI#vEgwM1 zqxL58fVl_B9%G;4FP@I0>HuwhlFUOX8}%po>BgL!PZzh)N^H2^utobmjTQ2Vz-`{N zJe)Tmbza4JNFBkpOP2R|*r-313$D$li#xK0)Ns9Fi?+s!Z?xmv0rB3|+wmKFN0l`* z&aoAaaqZ9)gBBp>5o-%;d7ATmTZ2Kra%2>YlGb@01MVcwvU6JUFNSpERmu1us*XuMg$b<#;EE-(1dMT`IRI{oIn#wXT^`gvHb!8%6DG0p{6I)^Ru9nX>0y9V5IgSGaS z1wLblQ-GaBCp%6@o>;L%E;l1zw_>e!!HjUkfh&~fjacYyV6k}XBQ^Bop zB&hdkZEUXlPB`I&SL3Ael92Gq(YI}L&HiSHR?XR{n>=c)!qI#iTM>#+#fi6Y&|?y- zP}F=^I1*=HyY+49OD@K-?l~vAF2{8?$7^+sRXA!aa!pF{sW@>K4*Ik>DeDW`@4V~o z;XN1p)o}ThUmi}zFQJVVjC`yhNm)T~!n9qwpm=C*WR{&wuIb!yA789m7pG-#WQp zMZm-8fRoAO*^}`+9Y*=>q;mg`0DpSwyEol}d#&CveC~^1!)-h#c$%*!au}{bCOKX0 zP^??OwMPYm?|uJoalu;v+|A+=tSGk-y{ZUtLM6tEXT^_3ZciNLYOV6rQv4uJqtPo0 zFRyr!6?N0*mB){6yJPq_|MJzt;~x9y;ST)TD+{h>wCm@ks&w2psCTJt$T0P@!^qXT z`qJ9BS3O3Jv75v+cJ!V~>+I|FQ}40W=hFMvc8?ud=B4UOMBkqG3azo5#58st-#Ys` z{T4ivxzhXBHsproAB#@JP13kQTHkNQH`Y=9@4nysFT;@c0s!2?)>Y%RFj^a|2^HUz zx?H(`)+1v&2d-7F=V`v)8!8UJ(u^ivI>}?=kgBmSqy!_^F_p2#W3fZ&Udn`nwg=&< z@d!Gr$dBjBC3DsF6?aZKh21&@*IuL?(BuY74EK(pZ22|j)(>KYRY*<@eH-JO&wbDG zv1dGb_}Bm9RSR5p;|8&b8;@uBkLn>tT-6_Ubt)V8+m{I$^SRpaO3y&7eNjiZ8>#f43Dri$mO6O zw0VW8r0WKCN2idN9WE)wcV=;-XtHp^c49kB)*$=NyvAa=*5mvnPWSqZPwG?=+&Kf#A3j=X>nCTlQNY?I9+aJahf!XyWEzBo#k7L7O#*sfjt zSi^ES{{t5eU%UFc;a7k87lvI&?HcacvqxA@L_79v>$g*rYkJb=S+)~%E1z{X>o>`1 zE>rv4*0-(SPED?w7uuS?C!ToXKY_m8x3Zm>TluWBSzmKHkbc>}`tV-Dqjur%V(2SB zc60k3cMgv{^(6G0C|-h$=qgh?X&*sr&^>bg?xJhiv%%jn#8_xF#vaG$m?!XH^Pp*D zasX-M%PwFJxIEqDLaH1Wg32KqDUGb3>^JS3* z;yw55(bw0!x^}6pUPil`&F)Lr)(Rsm9NUS^?2%C%rjRT zQ~kH%=M~k>xBPJU8+;?l#g~2_^YCH1@p+m%Sv}8FMpf5cmBT_0&Ty8P?`>s32>#Fq zhR1QOgdCRO9#It+oX)Mr>$xJ9ca6FRD|4pG1f`~zHY^yVL8qX@f3 CeBcKiHDxA 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 X#jiU4bL`^Ff9Y3Vdj3oP>3{zJeY4&I diff --git a/data/images/artist-placeholder-grid.png b/data/images/artist-placeholder-grid.png index f73c245279bbdd68dd528ba557cc210fe8235760..c47a989eed68276d38d8208f6162f3635bf41adf 100644 GIT binary patch delta 8083 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 Date: Sat, 12 May 2012 12:06:35 -0700 Subject: [PATCH 35/47] Add more padding around album grid placeholder --- data/images/album-placeholder-grid.png | Bin 364172 -> 1054090 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/images/album-placeholder-grid.png b/data/images/album-placeholder-grid.png index a7df02e09f0f6c56f657731d2bc1e3b85bd3311f..5e986a66637a369b32e884e21d7b960aa4978e09 100644 GIT binary patch literal 1054090 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μHT;Zm@C!W@Jf6E*{)I(0OHq^R}~Q8gswml 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 VZ=H+NrkYLW<(@QX^MJ{h{6A9DXyX6? literal 364172 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 Date: Sat, 12 May 2012 13:21:54 -0700 Subject: [PATCH 36/47] * Nicer AlbumView. --- resources.qrc | 2 + .../playlist/AlbumItemDelegate.cpp | 54 ++++++++++++++----- src/libtomahawk/playlist/AlbumItemDelegate.h | 1 + src/libtomahawk/playlist/AlbumModel.cpp | 2 +- src/libtomahawk/playlist/AlbumModel.h | 5 ++ src/libtomahawk/playlist/AlbumView.cpp | 22 ++++---- src/libtomahawk/utils/PixmapDelegateFader.cpp | 5 +- src/libtomahawk/utils/TomahawkUtils.h | 4 +- src/libtomahawk/utils/TomahawkUtilsGui.cpp | 5 ++ 9 files changed, 72 insertions(+), 28 deletions(-) diff --git a/resources.qrc b/resources.qrc index 602774165..1bfbbf679 100644 --- a/resources.qrc +++ b/resources.qrc @@ -9,6 +9,8 @@ data/images/not-loved.png data/images/no-album-art-placeholder.png data/images/no-artist-image-placeholder.png + data/images/artist-placeholder-grid.png + data/images/album-placeholder-grid.png data/images/track-placeholder.png data/images/now-playing-panel.png data/images/now-playing-speaker.png diff --git a/src/libtomahawk/playlist/AlbumItemDelegate.cpp b/src/libtomahawk/playlist/AlbumItemDelegate.cpp index 533ed8fb2..b8a3b2a78 100644 --- a/src/libtomahawk/playlist/AlbumItemDelegate.cpp +++ b/src/libtomahawk/playlist/AlbumItemDelegate.cpp @@ -71,7 +71,7 @@ AlbumItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, painter->save(); painter->setRenderHint( QPainter::Antialiasing ); - if ( !( option.state & QStyle::State_Selected ) ) +/* if ( !( option.state & QStyle::State_Selected ) ) { QRect shadowRect = option.rect.adjusted( 5, 4, -5, -40 ); painter->setPen( QColor( 90, 90, 90 ) ); @@ -92,9 +92,10 @@ AlbumItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, painter->drawLine( shadowRect.topLeft() + QPoint( -2, 3 ), shadowRect.bottomLeft() + QPoint( -2, 1 ) ); painter->drawLine( shadowRect.topRight() + QPoint( 3, 3 ), shadowRect.bottomRight() + QPoint( 3, 1 ) ); painter->drawLine( shadowRect.bottomLeft() + QPoint( 0, 4 ), shadowRect.bottomRight() + QPoint( 0, 4 ) ); - } + }*/ - QRect r = option.rect.adjusted( 6, 5, -6, -41 ); +// QRect r = option.rect.adjusted( 6, 5, -6, -41 ); + QRect r = option.rect; QString top, bottom; if ( !item->album().isNull() ) @@ -118,15 +119,15 @@ AlbumItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, { if ( !item->album().isNull() ) { - m_covers.insert( index, QSharedPointer< Tomahawk::PixmapDelegateFader >( new Tomahawk::PixmapDelegateFader( item->album(), r.size(), TomahawkUtils::CoverInCase ) ) ); + m_covers.insert( index, QSharedPointer< Tomahawk::PixmapDelegateFader >( new Tomahawk::PixmapDelegateFader( item->album(), r.size(), TomahawkUtils::Grid ) ) ); } else if ( !item->artist().isNull() ) { - m_covers.insert( index, QSharedPointer< Tomahawk::PixmapDelegateFader >( new Tomahawk::PixmapDelegateFader( item->artist(), r.size(), TomahawkUtils::CoverInCase ) ) ); + m_covers.insert( index, QSharedPointer< Tomahawk::PixmapDelegateFader >( new Tomahawk::PixmapDelegateFader( item->artist(), r.size(), TomahawkUtils::Grid ) ) ); } else { - m_covers.insert( index, QSharedPointer< Tomahawk::PixmapDelegateFader >( new Tomahawk::PixmapDelegateFader( item->query(), r.size(), TomahawkUtils::CoverInCase ) ) ); + m_covers.insert( index, QSharedPointer< Tomahawk::PixmapDelegateFader >( new Tomahawk::PixmapDelegateFader( item->query(), r.size(), TomahawkUtils::Grid ) ) ); } _detail::Closure* closure = NewClosure( m_covers[ index ], SIGNAL( repaintRequest() ), const_cast(this), SLOT( doUpdateIndex( QPersistentModelIndex ) ), QPersistentModelIndex( index ) ); @@ -135,11 +136,10 @@ AlbumItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QPixmap cover = m_covers[ index ]->currentPixmap(); - if ( option.state & QStyle::State_Selected ) + if ( false && option.state & QStyle::State_Selected ) { #if defined(Q_WS_MAC) || defined(Q_WS_WIN) painter->save(); - painter->setRenderHint( QPainter::Antialiasing ); QPainterPath border; border.addRoundedRect( r.adjusted( -2, -2, 2, 2 ), 3, 3 ); @@ -154,19 +154,41 @@ AlbumItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, #endif } - painter->drawPixmap( r, cover ); + painter->drawPixmap( r, cover.scaled( r.size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation ) ); - painter->setPen( opt.palette.color( QPalette::Text ) ); + if ( m_hoverIndex == index ) + { + painter->save(); + + painter->setPen( QColor( 33, 33, 33 ) ); + painter->setBrush( QColor( 33, 33, 33 ) ); + painter->setOpacity( 0.5 ); + painter->drawRect( r ); + + painter->restore(); + } + + painter->save(); + + painter->setPen( QColor( 33, 33, 33 ) ); + painter->setBrush( QColor( 33, 33, 33 ) ); + painter->setOpacity( 0.5 ); + painter->drawRoundedRect( r.adjusted( 4, +r.height() - 36, -4, -4 ), 3, 3 ); + + painter->restore(); + + painter->setPen( opt.palette.color( QPalette::HighlightedText ) ); QTextOption to; to.setWrapMode( QTextOption::NoWrap ); QString text; QFont font = opt.font; - font.setPixelSize( 11 ); + font.setPixelSize( 10 ); QFont boldFont = font; boldFont.setBold( true ); + boldFont.setPixelSize( 14 ); - QRect textRect = option.rect.adjusted( 0, option.rect.height() - 32, 0, -2 ); + QRect textRect = option.rect.adjusted( 6, option.rect.height() - 36, -4, -6 ); painter->setFont( boldFont ); bool oneLiner = false; @@ -188,6 +210,7 @@ AlbumItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, text = painter->fontMetrics().elidedText( top, Qt::ElideRight, textRect.width() - 3 ); painter->drawText( textRect, text, to ); + painter->setFont( font ); // If the user is hovering over an artist rect, draw a background so she knows it's clickable QRect r = textRect; r.setTop( r.bottom() - painter->fontMetrics().height() ); @@ -199,12 +222,12 @@ AlbumItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, } else { - if ( !( option.state & QStyle::State_Selected ) ) +/* if ( !( option.state & QStyle::State_Selected ) ) #ifdef Q_WS_MAC painter->setPen( opt.palette.color( QPalette::Dark ).darker( 200 ) ); #else painter->setPen( opt.palette.color( QPalette::Dark ) ); -#endif +#endif*/ } to.setAlignment( Qt::AlignHCenter | Qt::AlignBottom ); @@ -231,6 +254,9 @@ AlbumItemDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const event->type() != QEvent::Leave ) return false; + if ( event->type() == QEvent::MouseMove ) + m_hoverIndex = index; + if ( m_artistNameRects.contains( index ) ) { QMouseEvent* ev = static_cast< QMouseEvent* >( event ); diff --git a/src/libtomahawk/playlist/AlbumItemDelegate.h b/src/libtomahawk/playlist/AlbumItemDelegate.h index cb25c7889..45b8853f3 100644 --- a/src/libtomahawk/playlist/AlbumItemDelegate.h +++ b/src/libtomahawk/playlist/AlbumItemDelegate.h @@ -61,6 +61,7 @@ private: mutable QHash< QPersistentModelIndex, QSharedPointer< Tomahawk::PixmapDelegateFader > > m_covers; QPersistentModelIndex m_hoveringOver; + QPersistentModelIndex m_hoverIndex; QPixmap m_shadowPixmap; }; diff --git a/src/libtomahawk/playlist/AlbumModel.cpp b/src/libtomahawk/playlist/AlbumModel.cpp index b04a8e203..98ad354e0 100644 --- a/src/libtomahawk/playlist/AlbumModel.cpp +++ b/src/libtomahawk/playlist/AlbumModel.cpp @@ -110,7 +110,7 @@ AlbumModel::data( const QModelIndex& index, int role ) const { if ( role == Qt::SizeHintRole ) { - return QSize( 116, 150 ); + return m_itemSize; } AlbumItem* entry = itemFromIndex( index ); diff --git a/src/libtomahawk/playlist/AlbumModel.h b/src/libtomahawk/playlist/AlbumModel.h index 71d7743d8..3a1d80437 100644 --- a/src/libtomahawk/playlist/AlbumModel.h +++ b/src/libtomahawk/playlist/AlbumModel.h @@ -72,6 +72,9 @@ public: virtual void setTitle( const QString& title ) { m_title = title; } virtual void setDescription( const QString& description ) { m_description = description; } + QSize itemSize() const { return m_itemSize; } + void setItemSize( const QSize& size ) { m_itemSize = size; } + AlbumItem* findItem( const Tomahawk::artist_ptr& artist ) const; AlbumItem* findItem( const Tomahawk::album_ptr& album ) const; @@ -116,6 +119,8 @@ private: QString m_description; bool m_overwriteOnAdd; + QSize m_itemSize; + Tomahawk::collection_ptr m_collection; }; diff --git a/src/libtomahawk/playlist/AlbumView.cpp b/src/libtomahawk/playlist/AlbumView.cpp index b9af8d5ff..8db466435 100644 --- a/src/libtomahawk/playlist/AlbumView.cpp +++ b/src/libtomahawk/playlist/AlbumView.cpp @@ -54,9 +54,10 @@ AlbumView::AlbumView( QWidget* parent ) setDropIndicatorShown( false ); setDragDropOverwriteMode( false ); setUniformItemSizes( true ); - setSpacing( 16 ); + setSpacing( 0 ); setContentsMargins( 0, 0, 0, 0 ); setMouseTracking( true ); + setStyleSheet( "QListView { background-color: #323435; }" ); setResizeMode( Adjust ); setViewMode( IconMode ); @@ -181,21 +182,22 @@ AlbumView::resizeEvent( QResizeEvent* event ) if ( autoFitItems() ) { #ifdef Q_WS_X11 - int scrollbar = verticalScrollBar()->isVisible() ? verticalScrollBar()->width() : 0; + int scrollbar = verticalScrollBar()->isVisible() ? verticalScrollBar()->width() + 16 : 0; #else int scrollbar = verticalScrollBar()->rect().width(); #endif - int rectWidth = contentsRect().width() - scrollbar - 16 - 3; + int rectWidth = contentsRect().width() - scrollbar - 3; + int itemWidth = 160; QSize itemSize = m_proxyModel->data( QModelIndex(), Qt::SizeHintRole ).toSize(); - int itemsPerRow = qFloor( rectWidth / ( itemSize.width() + 16 ) ); - int rightSpacing = rectWidth - ( itemsPerRow * ( itemSize.width() + 16 ) ); - int newSpacing = 16 + floor( rightSpacing / ( itemsPerRow + 1 ) ); + int itemsPerRow = qFloor( rectWidth / itemWidth ); +// int rightSpacing = rectWidth - ( itemsPerRow * ( itemSize.width() + 16 ) ); +// int newSpacing = 16 + floor( rightSpacing / ( itemsPerRow + 1 ) ); - if ( itemsPerRow < 1 ) - setSpacing( 16 ); - else - setSpacing( newSpacing ); + int remSpace = rectWidth - ( itemsPerRow * itemWidth ); + int extraSpace = remSpace / itemsPerRow; + int newItemWidth = itemWidth + extraSpace; + m_model->setItemSize( QSize( newItemWidth, newItemWidth ) ); if ( !m_inited ) { diff --git a/src/libtomahawk/utils/PixmapDelegateFader.cpp b/src/libtomahawk/utils/PixmapDelegateFader.cpp index 9148150b1..232e9e886 100644 --- a/src/libtomahawk/utils/PixmapDelegateFader.cpp +++ b/src/libtomahawk/utils/PixmapDelegateFader.cpp @@ -59,6 +59,7 @@ PixmapDelegateFader::PixmapDelegateFader( const artist_ptr& artist, const QSize& init(); } + PixmapDelegateFader::PixmapDelegateFader( const album_ptr& album, const QSize& size, TomahawkUtils::ImageMode mode, bool forceLoad ) : m_album( album ) , m_size( size ) @@ -99,7 +100,6 @@ PixmapDelegateFader::PixmapDelegateFader( const query_ptr& track, const QSize& s PixmapDelegateFader::~PixmapDelegateFader() { - } @@ -117,7 +117,7 @@ PixmapDelegateFader::init() else if ( !m_artist.isNull() ) m_current = m_currentReference = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultArtistImage, m_mode, m_size ); else if ( !m_track.isNull() ) - m_current = m_currentReference = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultTrackImage, m_mode, m_size ); + m_current = m_currentReference = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultArtistImage, m_mode, m_size ); return; } @@ -139,6 +139,7 @@ PixmapDelegateFader::albumChanged() QMetaObject::invokeMethod( this, "setPixmap", Qt::QueuedConnection, Q_ARG( QPixmap, m_album->cover( m_size ) ) ); } + void PixmapDelegateFader::artistChanged() { diff --git a/src/libtomahawk/utils/TomahawkUtils.h b/src/libtomahawk/utils/TomahawkUtils.h index 8269d3134..b2211a488 100644 --- a/src/libtomahawk/utils/TomahawkUtils.h +++ b/src/libtomahawk/utils/TomahawkUtils.h @@ -53,12 +53,14 @@ namespace TomahawkUtils NowPlayingSpeaker, InfoIcon }; + enum ImageMode { Original, CoverInCase, AvatarInFrame, - ScaledCover + ScaledCover, + Grid }; diff --git a/src/libtomahawk/utils/TomahawkUtilsGui.cpp b/src/libtomahawk/utils/TomahawkUtilsGui.cpp index 5e9f5478d..7bc83dc8f 100644 --- a/src/libtomahawk/utils/TomahawkUtilsGui.cpp +++ b/src/libtomahawk/utils/TomahawkUtilsGui.cpp @@ -338,11 +338,16 @@ defaultPixmap( ImageType type, ImageMode mode, const QSize& size ) case DefaultAlbumCover: if ( mode == CoverInCase ) pixmap = QPixmap( RESPATH "images/no-album-art-placeholder.png" ); + else if ( mode == Grid ) + pixmap = QPixmap( RESPATH "images/album-placeholder-grid.png" ); else pixmap = QPixmap( RESPATH "images/no-album-no-case.png" ); break; case DefaultArtistImage: + if ( mode == Grid ) + pixmap = QPixmap( RESPATH "images/artist-placeholder-grid.png" ); + else pixmap = QPixmap( RESPATH "images/no-artist-image-placeholder.png" ); break; From d05fd22999402072adff403fca5d7ad3342552ed Mon Sep 17 00:00:00 2001 From: Tomahawk CI Date: Sat, 12 May 2012 22:16:28 +0000 Subject: [PATCH 37/47] Automatic merge of Transifex translations --- lang/tomahawk_bg.ts | 4 ++-- lang/tomahawk_ca.ts | 4 ++-- lang/tomahawk_de.ts | 4 ++-- lang/tomahawk_en.ts | 4 ++-- lang/tomahawk_es.ts | 4 ++-- lang/tomahawk_fr.ts | 4 ++-- lang/tomahawk_ja.ts | 4 ++-- lang/tomahawk_pl.ts | 4 ++-- lang/tomahawk_pt_BR.ts | 4 ++-- lang/tomahawk_ru.ts | 4 ++-- lang/tomahawk_sv.ts | 4 ++-- lang/tomahawk_tr.ts | 4 ++-- lang/tomahawk_zh_CN.ts | 4 ++-- lang/tomahawk_zh_TW.ts | 4 ++-- 14 files changed, 28 insertions(+), 28 deletions(-) diff --git a/lang/tomahawk_bg.ts b/lang/tomahawk_bg.ts index 293e2190a..c5c6f3761 100644 --- a/lang/tomahawk_bg.ts +++ b/lang/tomahawk_bg.ts @@ -187,12 +187,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. След като бъде сканирана музикалната ти колекция, ще откриеш тук най-скоро добавените албуми. - + This collection doesn't have any recent albums. В тази колекция все още няма добавени наскоро албуми. diff --git a/lang/tomahawk_ca.ts b/lang/tomahawk_ca.ts index adcbaa9b2..d55c54742 100644 --- a/lang/tomahawk_ca.ts +++ b/lang/tomahawk_ca.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. Després d'escanejar la vostra col·lecció musical, aquí trobareu els àlbums afegits últimament. - + This collection doesn't have any recent albums. Aquesta col·lecció no té àlbums recents. diff --git a/lang/tomahawk_de.ts b/lang/tomahawk_de.ts index d94aa9e90..db1efa246 100644 --- a/lang/tomahawk_de.ts +++ b/lang/tomahawk_de.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. Nachdem Tomahawk deine Sammlung durchsucht hast siehst du hier deine neuesten Alben. - + This collection doesn't have any recent albums. Diese Sammlung ist leer. diff --git a/lang/tomahawk_en.ts b/lang/tomahawk_en.ts index 1cc7c7d97..a65031f32 100644 --- a/lang/tomahawk_en.ts +++ b/lang/tomahawk_en.ts @@ -184,12 +184,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. After you have scanned your music collection you will find your latest album additions right here. - + This collection doesn't have any recent albums. This collection doesn't have any recent albums. diff --git a/lang/tomahawk_es.ts b/lang/tomahawk_es.ts index c952dc625..b6dfc1a00 100644 --- a/lang/tomahawk_es.ts +++ b/lang/tomahawk_es.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. Tras haber escaneado su colección aquí encontrará los últimos álbumes añadidos. - + This collection doesn't have any recent albums. Esta colección no tiene álbumes recientes. diff --git a/lang/tomahawk_fr.ts b/lang/tomahawk_fr.ts index 3cabf5a1e..349694a6c 100644 --- a/lang/tomahawk_fr.ts +++ b/lang/tomahawk_fr.ts @@ -184,12 +184,12 @@ se connecter et streamer depuis chez vous ? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. Après avoir scanné votre collection musicale, vous trouverez les derniers albums ajoutés ici. - + This collection doesn't have any recent albums. Cette collection n'a pas d'albums récents diff --git a/lang/tomahawk_ja.ts b/lang/tomahawk_ja.ts index 7a644726d..a65c64209 100644 --- a/lang/tomahawk_ja.ts +++ b/lang/tomahawk_ja.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. - + This collection doesn't have any recent albums. diff --git a/lang/tomahawk_pl.ts b/lang/tomahawk_pl.ts index c6eaf96f7..c52d60fb1 100644 --- a/lang/tomahawk_pl.ts +++ b/lang/tomahawk_pl.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. Po zeskanowaniu swojej kolekcji muzycznej w tym miejscu znajdziesz ostatnio dodane albumy. - + This collection doesn't have any recent albums. Ta kolekcja nie zawiera żadnych nowo dodanych albumów. diff --git a/lang/tomahawk_pt_BR.ts b/lang/tomahawk_pt_BR.ts index 1f3eb658e..a46891f9a 100644 --- a/lang/tomahawk_pt_BR.ts +++ b/lang/tomahawk_pt_BR.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. Depois que você escanear a sua biblioteca musical você encontrará aqui o último álbum adicionado. - + This collection doesn't have any recent albums. Essa biblioteca não tem nenhum álbum recente. diff --git a/lang/tomahawk_ru.ts b/lang/tomahawk_ru.ts index c895491b5..772cd7517 100644 --- a/lang/tomahawk_ru.ts +++ b/lang/tomahawk_ru.ts @@ -184,12 +184,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. После сканирования вашей музыкальной коллекции вы найдете свой альбомы тут. - + This collection doesn't have any recent albums. Эта коллекция не имеет последних альбомов. diff --git a/lang/tomahawk_sv.ts b/lang/tomahawk_sv.ts index 7c8d42759..d705f6b33 100644 --- a/lang/tomahawk_sv.ts +++ b/lang/tomahawk_sv.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. Efter att du har scannat din musiksamling kommer du finna dina senaste tillagda album här. - + This collection doesn't have any recent albums. Den här samlingen inga nya album. diff --git a/lang/tomahawk_tr.ts b/lang/tomahawk_tr.ts index eb9c19979..aee211ce3 100644 --- a/lang/tomahawk_tr.ts +++ b/lang/tomahawk_tr.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. Müzik koleksiyonunuzu taradıktan sonra en son eklenen albümleri burada bulacaksınız. - + This collection doesn't have any recent albums. Bu koleksiyonda en son eklenen bir albüm yok. diff --git a/lang/tomahawk_zh_CN.ts b/lang/tomahawk_zh_CN.ts index 1b54f10b5..7fc574a14 100644 --- a/lang/tomahawk_zh_CN.ts +++ b/lang/tomahawk_zh_CN.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. - + This collection doesn't have any recent albums. diff --git a/lang/tomahawk_zh_TW.ts b/lang/tomahawk_zh_TW.ts index 6168a4eae..f02e9577c 100644 --- a/lang/tomahawk_zh_TW.ts +++ b/lang/tomahawk_zh_TW.ts @@ -183,12 +183,12 @@ connect and stream from you? AlbumView - + After you have scanned your music collection you will find your latest album additions right here. 當您掃描您的音樂收藏,您會發現您的最新專輯添加在這裡。 - + This collection doesn't have any recent albums. 這個收藏沒有任何最新專輯。 From a2c5a949b3f6a1f39e0627a984d44e4198011ef8 Mon Sep 17 00:00:00 2001 From: Jason Herskowitz Date: Sat, 12 May 2012 16:18:30 -0700 Subject: [PATCH 38/47] Lots of icon cleanup. Make more subtle. --- data/images/add.png | Bin 4990 -> 69086 bytes data/images/automatic-playlist.png | Bin 8453 -> 69076 bytes data/images/charts.png | Bin 4510 -> 69086 bytes data/images/collection.png | Bin 69076 -> 69076 bytes data/images/dashboard.png | Bin 69076 -> 69076 bytes data/images/loved_playlist.png | Bin 6923 -> 69086 bytes data/images/music-icon.png | Bin 1855 -> 69076 bytes data/images/new-additions.png | Bin 6395 -> 1054090 bytes data/images/new-releases.png | Bin 93598 -> 69076 bytes data/images/playlist-icon.png | Bin 5366 -> 69076 bytes data/images/recently-played.png | Bin 8766 -> 69086 bytes data/images/share.png | Bin 4926 -> 69076 bytes data/images/station.png | Bin 13174 -> 69076 bytes data/images/supercollection.png | Bin 69076 -> 69076 bytes 14 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/images/add.png b/data/images/add.png index 59fa7fb1df2685d1291e9d926ea030fc09e5fb8d..1c16968fce6c454c3e0bdd466c3d5e068c5e3fe0 100644 GIT binary patch literal 69086 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 literal 4990 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 RTTsdIy&mkjy~pS|{|^8FBcT8Q literal 8453 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 G`2PVI!e12t diff --git a/data/images/charts.png b/data/images/charts.png index 6e56456a2c2ca0c4f6f29b97048b68686d5c8aac..50c6f3dfaace609f932ec951e5fe1d5a7cab1c16 100644 GIT binary patch literal 69086 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 diff --git a/data/images/collection.png b/data/images/collection.png index abc20d3ca02186283591255721edd62291327eba..cc5c16b87899b392c0a7f485fc1fad77ab1cf52a 100644 GIT binary patch delta 3009 zcmbW3eQcH09mmh__PLkdzSv8lt#le%Y-xGxEs-&1U9Quk6krw^tILTW_hL5!Xp!Edgo1EWl2 zr14TCFBWDPBUcR7v23u#s~>BV&0$DMR{$H@~ z<&&)>-^)fc6%#q@AQuf~%(*aBwuX}apgSy8j#TGYQ-z5Bhpb$vo^jYXWn&r<7Oq!$ zHtkhS8Ecp1deT=x5R0*ppmj=6;eYe_y+n6bH;DJk(XU5>np3+<8kE^R-L=N*4gP#S zbDi_i7YlQ&$OQSMVQ;C_lB!s{foji}Sf5T{dldva<|r>DZ;m6c%GE1U4(nG5r37Zt zKD{dhqC|CHqoZ0|U?hZWTioJ6f;}fE$$LYQY*3vW%C{>g6H`g)mf($*KSZY;KA%la z>#cSI=Het!qGx$Rc`=irlU%~u0isM?O3F%2T3NRCccC~_tu@nsS4C__g2D|y%6C=^ zCn4=s7&D0EB{Y10o_Da~H;;pM*R=30H-?BATE7MqmlOFXMEfS+Ts=?fY>Za>m~h9l z8`GCd=#GaR70>7YLBBiu4DX;6S`_s-kJKTx z#rAI&P75Hg^EmDQ7_hr0@z`q)3aOQ#T_#B=L(RyYAuU#*Nglo+)FBGzJIgB zuK&O>SF-QVS*`g;%hQLjAh$O%Uf9W;xD#S#vhfjd$7%Iv_(Xd7{sRYPO=J`bc96jB z7_^bqMJwhwB|L@f>u|^!i3~VVTk(E0*womN(y7pu?Mc5LN`1e%0#tT`%0Q_{mz9&o z+jv{<`z^B~M|iF$)$>f1;M}~rZgh5|vsdM@Vp@f}G?FV!Pttc52(p0jHEP~k)TcMv z2W6K2APe<=0q-&Nn3b~|snPDCIR;fBhDO3zIi_Bqra@aN#WQ{x_39io9Qxv>iEgko zUHx{12lq54)Z`&RNyh+VpBA&{WD7SN{1V}3R9r@7fq&r`CwfTA*+{tr$4}pbk|yVT z`NQs{SCEqIjgdyX@3+w@TB67Um{pSgNsY~lrgI08bTV6e(DxU{>{2ROL=RfK3D2?? zRZ3qR)YdiED6kyx30yu$cC_#(q?D`TsF;fgd=z}YH6d2IoY?|}ByMOjEo#e6MO@WM zM+V&;grR3-K0&@^0^B0AHQj%a?jcm4K}Gl`{(Mi&HBBVVaL%T%kDBo?wufo_Wimt4 zE2`_Y)mz3h0%nG8a;Gy4N6Nh4{^`WKoWlG0^+4)7b47L3eQoH7Ayt?`Ed$mt1{TUJ za4IL|C-C%TxTr?^4bu$4wiS!WVvuD-n=Qufe06nJzj*j~GOpq3N2}eI*2wnjjOdQUx^CNzM zBtw-eOVq0t0EN`^wtz~0&rKKf{paUY`1?w4YVy88_}}FZr`TBT$rST!NMwo-ou0rE zZMH;f{tB+&C5PbBy2i2AUr2I_A4~XD`u<`_?@Ypjtz=_`bD=c`8L!qKt|y7k=w=yf z-6`So0wPu>A`CC0<;gi6{P~9uoO73L!srxuFW-OUEBZ~lMhbeCf6XI-uH*k{BQw_B z0x!6I(td^Ct2yj$7~t@fd*x_m_aA^*A5o&6_C9^JK;5w-^_QJ`tK-g@bkwUjreKGF zFGQGQ?@aNo>JjhSua1AdzpYv}gYPmevh{P~4Zx=}R=X2JO;hV`%|5NpHmuv!{ruX# Gz5fL-Kr0Ra delta 4473 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 SU0y%qRFpru{@B_b&-@1&jKdHB diff --git a/data/images/dashboard.png b/data/images/dashboard.png index 7f14a454f6ec4d77032f5b034cf7ceacee9669b2..47c962012ea85592ab5c43c4ecdf1512f6310f7e 100644 GIT binary patch literal 69076 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%0A`AzU=Yx-xH<-~awQjN=?@9%5 zkBMjjFo@HE5{H8Rs}w$cOylWkE>lcDW7cE^VEzC+CO&|+ec%xUe(;DY0jpEI76<}# zsdf(-V0rJT;5(+8{(Q4&j<)5yQLzH82#B)K3X7O1A|N6lA|N6lA|N6lA|N6lA|N6l zA|N6lA|N6lA|N6lB2dT(q%IhMZ)1NO86FDX2gnWFBr=h1ujM8ce5~$*;Qr4RuN{dk ON49w@d_(JjQ~nRPnQ-y| literal 69076 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 IT}RFQKM08UCIA2c literal 6923 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 z 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 Gv;PlWi4VE} literal 1855 zcmaJ?X;2eq7~bHKfFjiqJc~;>MiG)tAS6UUAOVROjogR_Az4U(WY^7N!et{-6tGq? zq6~_ZT0xuEx5ku1`P=XBr9xFAdSdswaU<@25S9((WFV|8*xzv*y&JsdG zln2Y?0Vx<9oU%4Vl9C{Cmr_@HfgTzzA)tV9F{n`_Dpg#KCv{wxOW4L^Iu#s;;0d18 z4?#r;MIaBsV30+FoF$MO1iCS33>Q~6o9zTLAqGT;m~;lynZf3|Fu4!}e!QrJH%uDK z4dVNM^hNAEsWKc#xpcZ(t){76Xb2WZXSln&8#S0rX9D4@N><`xjk8i^JE6dbRT4~& z;&Ma@8WqJcND}TzB_jQhf&%>{t5kg~6Hzd_MvT%KG{~6J1W+jaf2cz739Z6|;Lq{? zr?4s{8HMRVunI}SBt+w4ZH=x_E)RpnID&;BNa92lMKT0OR5AnwdBH3&T&|QNYSlPe zDC7#1DqO6TzyiJ}mEhClaw(VZ%Vzp8-PtS`$d$qHgE(w9htFoY`fwm$A3t~32`(Rz zBq?AeKEaiK=5i+G8V5mv5}x@mCf^22{V_xVjwj5OPaX?vQoWB{>EyAvP0FPc!O)Fu z{a2eOj)>VYnxBT2*nAp$SV_z}MhtaYvHyDFTRAV_`-EujcNawM5w4%#c+ZQ>%3UEe z&w}!sb*UZt=@!-w9;M&vsnhchH|xkT(!vMD&&14A@}=1uuj%ZpJ&JyLAd==ry^Na^ zEZh4YySk~d3Q6cc|9W$8U-@==+?Kl=-jAgxeAV04JDW zOZ9m3P{;8#bl|UqF<*LhdHH$8+B;y(P3FCeu zYJQXi-=KQC)v*@UNh+Kb)*_k5D%tl**GG)+H=q`+fx(ncd!f3n?3`J2=5_lDdxcH3 zWul}T6v=?*sqD5s3&p<4>ws&!eHlIv0{79O2a>-#X(f#Z}G+RCcm z-S;TPK!*113vEB~mu_qed#-p_TW5?_QAhi)>)i5x+n85wMYc5LwV2>h+_yLEmA&=% zwA7HdmSB$ndJ<&MH7)Z-wA=3Xys~Q24F5hm!t9J$RprsVj@737XAc7%SoGILl#a-& z56%SbEPDA!&(NspC5<*PoD#} z-b*&5r_?vbSQ<=Wy|Q6wcig3&-uo?Msx1zr-~-yC^rqy+wWQ7S5-8}RC)nO{$J?im znBKoKq%#w}92`y!o$H-P)-zxKFv19(LCv%yy)cWXg!KZ|q0W2O6hAFb>T!H^Kxa{N zTWmU-QNxoZ3R1PD^W5CKM|66J+Te?JVJ}36i0+{`8xETU@Y>Gy=*em7!R)-cE7?C! zX_0+#w6L3hOEMhW4SiKqo>WwFAmlFmR;Ak zooEbKAoc0l?<)=(0FL9IXLnL|EHF?sE!XZ0CKO{Am-3?LahkgOy0b4siyWt3h&pak zV0YU*D_{2HRxY{x5D-}RlJaK%9Y1Zui4_H%YXtH{T6ZGS80e7P6%}%7zyxy3@Ukwp zEPiDpn(fn76W@`CPaUx=VrEpm4)!YF1q9nycg>=eLF6}<-p^=Rw3P3lV^cM@r>;DA zs=aZ33!8K%K$er!R6A7L&af~vR9B|Y8oB!Xcv;J##RUdTvoKlLWLW3&oLRNaeTAlkNbxrSMRsdx$BqB67A@w9XdVzpjF+?cN7TFzU$i4l&)h diff --git a/data/images/new-additions.png b/data/images/new-additions.png index 3b7ef64d068a643ca107af3224c195dbca51d866..772e7034cb3164e202f657e0c6f06fd91c697972 100644 GIT binary patch literal 1054090 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 literal 6395 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

-$+Tr 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 bR9^m6|E>pq|M%_48M6OZ_PcN26E6FIEu(fU diff --git a/data/images/playlist-icon.png b/data/images/playlist-icon.png index ccbbef4b5be09e9cd13eab21acdea04f71d34a39..41d0f9a59ec2568d28046b5d7ed8a50111edbe20 100644 GIT binary patch literal 69076 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 literal 5366 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 TO&9t2HM8gGJ)Svb=r#WjuK2^M literal 8766 zcmYjVbySp3xc-(72}x3?nY9CrCGY9yQI58Vu7Xe^1J`s zd#28rIWzBk-!tz#?=ulTQT*&(5p_6b$BDQ*Ej;AFxcT$xC4g~1v%P{)!b@TA! z0h4d|1QI&EB=_ zX71jPdX3>hUJ@|H?c~`2?=?b1gyv{sROPz|S|Lcp@@pux_&Y;?EKz#^-~`#r)8DmH z{2o-{03ZR5({C6E`qrOQeZBRvIGN&0s(0(atufk&496Hpaut0#~&cKOoHwWN=G>e zq6>Q~hXiRw1>B=`V(}!50Z5t@$1p%Ehy+Me6OJI$Dk0}`Pqwd>7&(SC$b*26p`?+N zkCVJa4N2qV9%mRq*e%_P!XnW#7C-(Yu^|9p#5(Z+;hh;$3%G`|f}FJo>okeF8Y8OQb59IHR5Dm4<7F(rAdCkOz^+~%0g8;RAA_JL*NeoV-V7JT%AdGK*Arv`GXug4#2nMd+T)t0153k zF%s+`U?inr698KFUg`fzBvtCg005cXK(KsIz;fL z(6%6ySU+DSOOk!=5Sl}&t3)QxeVM+FU)#weh_ky!pdWbPNQ!3sD*Ml?mQYL-$$kt% zlh;DwFHNK8=teO})1p!6Oyv3EAqBMi;Y8|mJ^juFNF`D>aR&1AXPnMN@1yi3Zethw zY2QZPN4CiEBnDQiBmYHmlW6=!Lmt_i>oVcWhi3pu&a<5$uca1+!19VGKJK}>0)COv zW{?RUT#Fy`Ci*|ZWQ`+q$eH>`%(ivjX~n!VqtX#@C#LAgHi2U>Abp1r9%2}N!~X*g zij9@iQPPqA#dt_xOVEU&jT!un=MOVo!Y|cYMsI?fZckI8s#u*5WlYDfsb6O^8ZzS& z8YRdx;10xZsbIZkjD4$stzav^D9>5&sX%NJ-#Sx?=^)l_U}X!V8d64^5?3FK7poe7 zH_)|JPbAb6zM+Jf$DmP=NTB%6Tzng)Fz2mQTJCT4k&^7c7{9}Xa=s|o<+`hJeF`ff zpB_)QwzR&o;@Wp@!dwofmQ5K?nY7(Q-{0L2KKFQm6N(euCvVC^ zW=rNnR{W}-j4Ms42z4qYt^YIk>|2U7%T&Bn2TdKeOEzEPxIuy>p(L#&|D@gDpEX@H z#izY~V}CBy#49z_@+)X7l}+`kZw{5*QST_+xqOs9NxS^ED6@#O z$l7rl0pa#mt)0A|&r}?JJ&H5x!->o(&RI2M1GRwqLj@MR7ups~kDQN4jt&;!ZjMZzg`YmHN|yXm1u(~hINwl;*b8Y!X?j7u5>n>hBvc{Gm8HpVt2U=-3@gO?^>x5tgs;hg!y9O<$&D=`=oa|~=zP*&!NV>B>I+X1pqWexa)>kkjl^~^B zd^?y{N{#E4>UOccG8N(3w~P=~*|xl>JoT#j21Swhoh+@SOTlGfKj~YmP}L7^y}X#J z8th(iWbuvk2xTpqnU%7!d8c{K_lcQ_nfV$x*2%T(v)uJ8^{N)^>U;gs0T0H){p~ns)@okN*RBNcL znQQRWJzb+~mu)7Y|Ne>8;|-62M$=bM>yt^pA*-S4!a`~G zAZ@;+lEi@_`||TIjb_9qNnbVLHYwA3S^;dNNk(OkWxvX=D?c>sY-p<(P5WMW*)1%r zDAo@i9mpRP9N3p#>9$uWw%SNekB6S%Kq*e6wkeG46jxk-dfQw?kJOF~jv&7?d3U5Y z3@cka`^lew>75l|Fr@VWEv;{xXIhwPU-s}p;099>3$MTv4_oTkJ+*CHW&JMfCy#@c zW5`V@n%Z~#mmB0fRC}^xd%&SGdKAUQLKS#Tkx<*#h0_ra?4&=SqCxzPG$~g1waz%f(!uNjUXHgka z$+gu#`NMfO&D{Fl#b{^eX0eE#-fRUWY!-hl&dyR17yX;IIZqRBeJ(ev_ z>UykHZ*(<)SlNv+IB9V_r@Jy;WUT)P6)hK)^LKn$m#@%sI558&I?@&?cRg1=5T1Zf z1>D+nOuNip&%QCp@oI(l9#YiXGc8j#Fg9IWyI&rWdSD$ZEg5*ncvjrEEj;`~zs36( zQ2SVA-eI?PZQNlz)}@OF$HffGeoTCt3R|C)8&ffDrF3`oVdL)On9lv&3HHtRvG#JW5`;6nw4_3)kG_wlWzy66XQ zfH$r7wbG=q+)F&FAtr9k`ijR@uf%qJAMd%Yz9H@yCv$k8<4ZKtk8(1=(|;+qwK(Cq z2h&kr*98Eu3I8h~AU*Tdb0@m1g0d|75;7S;@|JYw!~y_FofTvxKYK15W%>Om)%M#J zU+v>{aX4mNPyW{8fyuzY@dqvbSVPAO+l~>On=9*TUc)}92xiSo`fam#WIqXRUM3+f zfWp`%OJr92?5qnX?fa(fUk)uwc}UZm8EP2*QJ!33KxtrT6u7dmICOaOTp2a<5rOq( zpAKKktL!X1ij8f$`0rj_itc(CPmtLCUyjzFQooKXwLOSOp`}nTMlN{j_xaO{fl{tL zWEkErNqI8Uln!<0gC4xoJNnf)Gb4pO{KTQ%`sEn+x{Sez@|-W@WBmlsn}|;uMT0Cl z|0`MG?wbje6D3SmcrO>vJ74P*a;1&0jkS!VZ;9a8I;bp9Y!IUM)?lUO!9z=i^zq;Y z(o}j%?7;&ojKx1!XpZ8H;|lfvab)3>sF^l|`6YBKcSPmtRpuZsfgAMqG*DEiAYU7l z#q2f48CBXhusiBQj%x%teQ9P$@s0SGW`8B;=vYA>$j|Fw9b7Qij5Wqotc@F(s)dax zwM?R?+kQt_dlN0utBmWrKu`I|)tL4fP#cCX^_@f9F`C$?isT%9jEYSdYj{4hYr=Rb(0g-*TP~ zJY9^A62j+CYr`^MnM^Fp zK3PX3DZC-y4>0|XsE27WreE0HOoRYG#IGIVJ!{s(I+znAot;i%9Zj>}IbsPQt%h320dn*hTA^rw~jZsaZ{Vq!`A!k`0 zo)9&MHCh$q1K+OYv`{pebyZ@Y}9z6x0XMd=>j|c(2WqpyZH429dqbdU`QUaK5V(|0rn8dYcyWzn+(rO*qrj-%=oYhSkgVP(ewCM>8e zH~!Dxn%wyNN}o4o3V(YVRau`&oTk)+lg)Z)kxM(c{+4dvUE03LYt=*?sOO%wqt`^b zHJ_Gj9hHy7PwhG%T3@B^ex~nNp{&wRO)B(^+5u4rl_~t5S3&J=nZKkFm|dvA{xlS( zfy_6%px#QtET0a&6oxDY+9J87_kHdGL{*QwYnU=aaKSw2Xa^i&u|n@Cg09R~)hjgH zT=r0C8I-hUXW+5tA0=NL=SgpaMztz;vqPrktw8Dz8<=Er9C@i}F>$ zux2C)US0Y3_cCy^(on^qHJdUAz57l@1HA4^j(Jc}SP-`nS|Ed;x$R!;wK`E5K_)M~ zoLb}`Qn0FLSI3U70i+K|MLq9>5@8E7lFK{$yD4vHnU?4=J*UOl6M7RYn8=%Dp8{1$ zQK`@9IlZCl++XtW1*cEr)?u0-u3D8tSABC)o_8Ypo4M5Wg-6h;Vl0gdIp=(&5ld9s zRJ-zNl2C-g7v+3YWH~)pUE{QR@l;($R`kPP3%TWTLb3_kdzq^&6ur+_X(`u!AKDw6 zX4>qvUgs4FBNhw2p-a}V1;$OI&ifx~5s6jbqw>+-%RU6)`7BLTT8GaZrH?>ywZ%3W zp0?79J>I;Bb@y5@3nBL2KXeIDGsm+e<#EGSr~N#xhHuPJO#T?nJyv~yI>Y8|-6O$TG{XyAyEdfa z{_}PzY;r=@{n9*b;z6T>kF6dM!i{ zXEmJ@fd2K86)Rz9Hk}KmP#S3nR82(G3*Pt@haT0u?5p%IY@B%vY$Ss0EHrV$32s4W zs2-a@k5ln8uG0-NHrYRNaLMV)lgxSJwUl4(r=gn>hj&f)!k?iSOB2VT zZJobf-Kv5j4#Tn8*|s`s=u%&5tS}Oq2B#(OO$GAuC}5NX@E>>a;`MG^x7yR8)q~)v z>>w-HjOx6<-rg4yDRLa8*h+&92Gz_Xq>M3(p!eIR{$dfU(}br1sZ$zHNL=Y@GUxk-z zZymJtj|3b zm_bsE=+=++I%vb_u(9=%owOyeUQwjB$tjrzgk_My@E_(cM;=8Gdvh3biZZ*z%|D}= zXMq`tsCEG*ossy-EHw9wxqxuixhKn+%dwWkf~XwEb3z}s{|<I2(?xyl;OFq<`QHW+|VM&Jd#dLMbkWDsX%A7x9cK-9`hrrp0+o`vdRdy@TJ|xf;@NL zW;NVP{q3Q_UwVnwjeq{luw|9S60@FeF$o^V+ORPZkXE>>S<^%fgd$MRA`b*!l^VP# zb-08RiweD^TAG5I*+3e92FrC6xfVMh4f67W;te6b=3Kg+E0g(~6P?I!14Xglg<2q8 zou@H(Tflp4*V+Qy>>j%R{&&khd^;jtq|-AM_mtfl-k*r8lztnC+@IH26ztKBwu-;R zbROh6>~1J4(u9W3_09FE?XBKm%kkvVEHEG393VHjG}S3x^%|3F8SF$Mkq>hL4aK2K z%s|(6BZs$!kwv}#?yZ^3=|4x#6|jZEl5}7*;LEReL4or<_59%a&LUSS4v{g!rC1sJ zbR8fa>Kd?m>wzsQu(;I2|9QJ@JYOyfcjfV_cYqu75 zUEX5dM>`pyx)^wz%zv>3VrC53$-zDD+qr)cZu`uITpy)8kNAmwTWkK6VY%N8S{0jIs0l$ZFe@y&WJI6^V^o0u;}t6erM#zS)EmLUuaej z6Seb1&~J5hQEQ`0}e6`zFnhtw5mv3k0QLJgS`BH|F^4}M8n znMgt2vb-3!X$)e(#llT$qq!V^vh5YiP1ob0uKIRfzt67(t$fLqa zepOwfl)i3f83&l7xe#N9js`7H_IH?21wIJMGwuBQcqKYG`?SvS%)}Z*7X(6|;HBLt znM6WjIwesgXhoEW?YUX>+d}P$OEEJok@x3hNF^(J;3toGZ?)61a5^Vn^MS?TYo24_ zS3Y3#2)&$us4;`Nap{#@fNzSeh>rPWcG$=w1b9Vpg zDsJk^YAt9bk09CbSncbx=sBW*fhu#+yQWW+deODh`=PwfFxlT(mask&2*h24-IZxx zu6>qh_jupfyySb^XGa>X;F7I-|G{5d>Q(y>Z^YgHJhKxMRFs+u2=o-2^D$~{`jzrYGpyYN?*6kwdJF=MO098@{<&cgRLq!u?WRRP6;hiLw^X z*XpKx%uGNY%?1J6j}A_^!ycvyM6B%kqNQz$8V#gz{2m)}Deloo_pc`D_sxEQaTn-tNte8L1$w znr}~k-YG#snpciOk4m(zO16Zkit;Py)06Q+yEYF_EX*N@CT9tggDoFDOE^o&%GGgU z|Jj|0BJ5}N8yem>gv0sjB#4-ULf@xOJ+^{!oY1b_RprIApUL;&w>J9+F;1724Tg|> z;oTJ6W6^dlVPQa>EkYwg6wI{LlJNfUdD1}RH-!fGCUvL?t{P1>2l%h~`fBCISN!+Q z+$qiG=qAYMoH+P@X0Cd}bE1AkC3sOcF*}jB*UNP+VJl#+Dkw|fGl?^}kb9PYANuob zg*u2c`*L5Z*P>&-b7B2(Ew0jUHuVwi=FNt+r`{>u8O1yWq|xheiW}d1AoHt_!H?JS z!*H%5dqxA zd!kvQcGK^J5?p$9bp@4vuiX-v?3BZxV8c0$`%rhb1xD#;(>~E0pN^n;MVwMF`jX1` zYh_~th9Az|_stjkI`4x1)eTyA?GpIq$Hr&&Juiz=dd~564b%Y_V8#rIIvZ>X&d- zcO|gMwE?BAV+7u`?RLyj8o+2&|Fu1-j>>&-44+Ms&!s*PfBCGa3A2bft>#6$+~e7OkrBW z68Ty;XgjkIc!69s`sw~7$#=0b9W#ZY2*g9%2k6;^A0b3gSmzPD%ja&knS*7S%s48Z z-n;t=t=+PIQvf>EwHkHp*^px|xvxS)(chh)`t+qjD?1e%Wc7K-GVp5gICSBom*zfd zVY4te*(u6J?)KT@;~rnH{TFhGcikC!(3Qo&AC9*okdTyJ?2Lb51ti=#z*D_-)FQ!@ zod?7LrB%pHr(dgsi)GoVYMtaqcSAPMy?(xy*Viw|B+4%52X%wGYwl|YWFBe1VO^?2 zDpaLPN63|+wpMk{r&a4{T|RRhiPkSSFC2>}r7%bTZKt6Y3X^LQU1s!MyuV*Pm>zUc z^=T>kFPs!sYzSIKKd#+p$cBiJOnW8nugMrOD2mU^+*)=7fSz@qs@rf;+q>%j#FR~A z#{B~}f4h#O_gg6Up2(7G+ysA?;5o;#bl`~lRe^rxNFT%Wvty)9*IoQlFLm8rLP=~c zh3Y8U`RktO(V4Y;VCQj^**7MB3+X+ z-ydMD}R;^$47hOY#mx7GzCrpL}XEU>7_gTQx`YJ|DcA3!CjF6?9Q*E1KLfzOuR) z-6hsLs?cKQOXsPEZxM+};&`V2I*c%|?RTj?gh&vU}NwXbYn zTxtSHH0yHQ9(492R1C0K#koOx^owK_k2R;OQGQ}Hi;AjI6o%{zd{*({HOa1upw-!5 zS}i$#;-pBi-y#J-;!)>9X>gUMDhis=S6l)^UZKBWv)u@i&WCh0=4+x(nK zdlQvU%hOSVn?u-Q3o9okA_|qO!C|4~ADtME@Ax?Q^H9vNEzMXRfD+_5>5g;ycKrL- zCzk@k#u;2*=h6FKaO?*XNE_JjQWsXsDl8>XI+T-HxGoqFbBwea^4I3`5Ztk1)#jg?mgTf79MD>q0_g7Xv6OiM0`} z+t=Mu%oKHlp91G2zUfyajpU6$(Z=&gqbo647!o%&2CyR8*j2BIRnAnXT4Vcotonk6 izQe5ke@6fPK+k=9`^j|LdE@y(9#D`~ktvrl4*DOBKvHD@ diff --git a/data/images/share.png b/data/images/share.png index 7cd3e0023f2d8c9b686b90df66468c0d36bec217..591f18cb1ab2c397de8d2f0b870b70b7f9900407 100644 GIT binary patch literal 69076 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 delta 1398 zcmZWpU2GIp6h3!$JKfps;!@iXlt!D7K2gNPq$HwX?QXm57PmN*R!C7}E5U?>8ee$X z1`=YUB#t$r5u<4+q(A($r3+a?A0(P4)bPous?K{xqN3jQ#N{%JLlZ* z-t*ma&OLW-eB++1sqT$!YxH}c@e+|g+|;lgx`KyC#rJ4$m4CGQqcSZ-5!w-c_3Cur zcV*8--M&C&+2E%g2Z_`@;fB}rjVpz&4nGudS(ac#Cz6-~70}7V2!$d$07<$uv1BJF zh7F_U1%`_S^8iK-D70dnZQzEnx=)5m;_Lhj59jlRwWev3%jF_fExDko z>b{HPgMV6^>`$?ugNq=@gp^j8P0c&MNM|x1Y*@dJBH<8KtywLvUB4+t&WzJ+YK{~| z4Mj*9Zrm%I%XIZRz%E(NSbrG+}N%*-F&}uj{?Z90?7yIwCF!EBv<&$K=_;T z)6~!8^LbAqi(O76A=E92`XEyj5V9p0o9^1zEgeC6(jF!-9=61#IedDo@JfADB8pbz zSy{|#T~D;-t+n%iFWlg2_t5ykB|>;?AXO)NGGn@&!2 z=gwULwzQ&Y+V@0f@83YyCnD=FvrVhlE~If8yv_*LT7A+! z2ra%r>{U-(=^$!fmx=oD|X?$oH&)5EUpGAQ7cC+z%)AsvqyF1bL&D{1q zhOw?McC7MQ^p<z318Qrsvi?r% zSAmmf{IL0-XbH|Xj9PH`S8=&mpcb7cYkAgI{BfkGd!~2hD_#x6xpfBVp5G(NNe diff --git a/data/images/station.png b/data/images/station.png index 9680fe8a1c2ef1cca62b73995941347fc015c0bf..a3b384e8c6bb4a3be951e6d5f7680f0869578dd3 100644 GIT binary patch literal 69076 zcmeHQ2V4}#8lSy8ItT*xhP?uIQDemd_TFMcKt%x+L5&*45)(^eVvi;D1QExwtc9 z%q=*mRX4=(bUE7N_i)pYlZ?3zjtC6w5*!%lGdgC}(1^%z#wG|tkn8RTC=2Qk5j{%d z!B|vuY)rSdEq(g*?dRignrWC5vuCv!3ke-Nx?}e?J6u7Jj*lHp`S+0a9x{^B8Xcu$fFROEDLqV1 z*N|Z3baP6FMMZ}JhHxGo78OS6BS^n9E-oBtZ3m=hjf)5$kMsqkD@4XcMIikIY451; zkg<&ETq!>`JajnHHIa6W>Cr6^>DL%@bRDKj4^gFK!zTbw#sWu;ej_Gg*zj1NDxp<< zYBg*a;1d)+J~BKu*0)PY=*WBefRQd_xtqk#?tHd**@Tt_i)Vis8qY@YkcnI3OpPD!1L&kQ$#aPjwQ}Zf(%9#61 z#&(@iji)fl%kbFP(T)85$B!TH7ZD!nM+DV}3<30zrW30E{HQ-Y?R;8=4-JWnjP)U+ zhK`CH6&K?(c63N+xR0-)5WjLo6y`YtEq6Hq%7A+c&$lc-h=#@#~E*?{qHHJ^KxO@{-2;k(DSW>Q!hrE*SpLOS?-ZW zx%8XnM>8L{nz0eXd?-7xTMwVmxR`O2hEC9r9dl;x%$pTsrCE7ah554DtO0AxnzPod z9qY_`u)b^{3uVJu6pLZw*>~Sx zU1itVZFY}6V$TIZa1h)CFQJ%FMyM!M7itRuLQ|o&&_U=X^c4mR!-QxdPM9pr5atRC zgyq62VS}(;_)0h^oDdR)pM*bzTf#rWGmTc`s`1v8(p1v;YXUSaH0?D#Gy^olG-EUq zH8VBuX_jdcG@CWMGzT>&H5WBkHMcbnwM^@xEvzl8_0Oys6bW?Qmbjx+?b-Q#&bmw({=?Hkw!+4r>{VL!=! zp8d!6+w2e6C)!`Lf9T-gP|TsaLlcM24j~S)4znCSblB{$-{G9Yb%!U8E{hanA00h^PSc>?R7fiblvH>b3y0I&P|+q zIFE3i=Df^#tMgIkE6xvGTwKbzG<50e65$f>vdrakm*XyfxIA_BbgkwZ=-S^k&h