1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-09-06 12:10:47 +02:00

Compare commits

...

103 Commits

Author SHA1 Message Date
Christian Muehlhaeuser
e96bbc11e1 * Fixed cover loading in error case. 2012-07-01 08:57:34 +02:00
Christian Muehlhaeuser
d492ba0317 * spotify -> Spotify. 2012-07-01 06:48:22 +02:00
Leo Franchi
b6466a6027 Changelogify 2012-07-01 00:43:58 -04:00
Christian Muehlhaeuser
6b5d391cde * Remove debug output again. 2012-07-01 05:45:28 +02:00
Christian Muehlhaeuser
0680dec5df * Set m_coverLoaded to true even when we couldn't find any image. 2012-07-01 05:45:28 +02:00
Christian Muehlhaeuser
a4e8f4216c * Removed rc0. 2012-07-01 05:13:29 +02:00
Christian Muehlhaeuser
355c95e068 * Set m_coverLoaded to true before emitting the coverChanged signal. 2012-07-01 02:51:46 +02:00
Christian Muehlhaeuser
da07361ec0 * Bumped to 0.5.1. 2012-07-01 02:29:57 +02:00
Christian Muehlhaeuser
aafe8797ad * Don't crash when removing page in history. 2012-07-01 02:23:31 +02:00
Tomahawk CI
95343ca024 Automatic merge of Transifex translations 2012-07-01 00:21:51 +02:00
Leo Franchi
f85bcc1c64 No more libspotify in bundle 2012-07-01 00:21:15 +02:00
Christian Muehlhaeuser
e53e51aefc * Add 'Copy Artist/Album Link' context menu items. 2012-07-01 00:21:08 +02:00
Christian Muehlhaeuser
d22b33bc50 * Be prepared for empty query_ptrs being returned from Query::get(). 2012-07-01 00:20:59 +02:00
Christian Muehlhaeuser
c36414bb4c * Return empty query_ptr when query data is invalid. 2012-07-01 00:20:51 +02:00
Christian Muehlhaeuser
a78349f9f1 * Use 'large' album covers from Last.fm. 2012-07-01 00:20:43 +02:00
Stefan Derkits
fa41b96260 Ubuntu 11.10 needs explicit pthread, reenable finding & linking them 2012-07-01 00:17:55 +02:00
Tomahawk CI
7f2bf85663 Automatic merge of Transifex translations 2012-07-01 00:17:47 +02:00
Leo Franchi
85fe824df3 Also remove saved resolver path when uninstalling 2012-07-01 00:17:36 +02:00
Leo Franchi
c37bbb4deb Use headerpad_max_install_names on OS X builds 2012-07-01 00:17:23 +02:00
Leo Franchi
1a9bf84ab4 Don't copy to bundle any longer when installing binary resolvers on osx 2012-07-01 00:17:17 +02:00
Leo Franchi
a283ea1ed0 Do our own attica download fetching since we send the tomahawk version as well 2012-07-01 00:17:10 +02:00
Christian Muehlhaeuser
d27dd0785a * Use new Querylabel API. 2012-07-01 00:17:02 +02:00
Christian Muehlhaeuser
5e1f808d28 * Support setting Artist / Album on a QueryLabel directly. We need a proper 'CleverLabel' so badly. 2012-07-01 00:16:55 +02:00
Christian Muehlhaeuser
aba78c7a24 * Removed obsolete code. 2012-07-01 00:16:43 +02:00
Christian Muehlhaeuser
f45e92a24d * No more dragsource.type. 2012-07-01 00:16:27 +02:00
Christian Muehlhaeuser
5ae04043d4 * Properly drag Artists / Albums from QueryLabel. 2012-07-01 00:16:11 +02:00
Christian Muehlhaeuser
5f521a6cf5 * Use new PlayableModel API throughout app. 2012-07-01 00:15:53 +02:00
Christian Muehlhaeuser
a4b30dcecd * Adjust inheriting models to new PlayableModel API. 2012-07-01 00:15:44 +02:00
Christian Muehlhaeuser
700394a054 * Resolved a bunch more hidden overloaded virtual methods in PlayableModel. 2012-07-01 00:15:35 +02:00
Christian Muehlhaeuser
819ee17b74 * Use new PlayableModel API throughout app. 2012-07-01 00:15:11 +02:00
Christian Muehlhaeuser
79c55f1699 * Adjust inheriting models to new PlayableModel API. 2012-07-01 00:15:04 +02:00
Christian Muehlhaeuser
f42696de23 * Resolved a bunch of hidden overloaded virtual methods in PlayableModel. 2012-07-01 00:14:52 +02:00
Christian Muehlhaeuser
adfaf5ce53 * Fixed text-width calculation after my latest patch. 2012-07-01 00:13:08 +02:00
Christian Muehlhaeuser
32aca98a97 * Fix english translation plurals. 2012-07-01 00:12:59 +02:00
Tomahawk CI
294809debb Automatic merge of Transifex translations 2012-07-01 00:12:45 +02:00
Christian Muehlhaeuser
e4593079f3 * Proper fix for QueryLabel's context menu. 2012-07-01 00:11:40 +02:00
Christian Muehlhaeuser
cfa4210854 * Show correct context menus for album / artist QueryLabels. 2012-07-01 00:10:42 +02:00
Tomahawk CI
91084885fb Automatic merge of Transifex translations 2012-07-01 00:10:30 +02:00
Tomahawk CI
0b7f420bef Automatic merge of Transifex translations 2012-07-01 00:10:21 +02:00
Jeff Mitchell
046237f009 Fix compilation 2012-06-30 17:07:01 -04:00
Jeff Mitchell
85d9755a47 Merge pull request #103 from nowrep/master
FdoNotifyPlugin: Fixed showing notifications with & character
2012-06-30 17:01:35 -04:00
Jeff Mitchell
98bd7b1857 Fix another crash related to debug accessing null pointers 2012-06-29 10:06:37 -04:00
Jeff Mitchell
37510fc2d7 OK, really fix crash. Promise. 2012-06-29 10:05:08 -04:00
Jeff Mitchell
a91ad7dd5f Actually fix crash 2012-06-29 10:02:21 -04:00
Jeff Mitchell
2cc85c8f4f Fix accessing playlist that could be invalid inside debug 2012-06-29 10:00:07 -04:00
Christian Muehlhaeuser
19625fffd4 * Only return online results via web API. 2012-06-27 07:39:51 +02:00
Christian Muehlhaeuser
a98cab55b7 * Properly sort artists & albums in search widget. 2012-06-27 05:37:15 +02:00
Christian Muehlhaeuser
ec7b98e589 * Moved levenshtein method to TomahawkUtils. 2012-06-27 05:37:15 +02:00
Christian Muehlhaeuser
1262dcb60a * Retry on this sql error, too. 2012-06-27 05:37:15 +02:00
Christian Muehlhaeuser
fc9c6e6017 * Use new spinner integration API. 2012-06-27 05:37:15 +02:00
Christian Muehlhaeuser
fa4463dc88 * No need to check all results for playability. Their sorted by that, so we just check the first one. 2012-06-27 05:37:15 +02:00
Christian Muehlhaeuser
3fb403c695 * Allow to sort by composer and origin. 2012-06-27 05:37:15 +02:00
Christian Muehlhaeuser
fdb1d1b621 * Expose composer's sortname in Query's API. 2012-06-27 05:37:15 +02:00
Leo Franchi
127da50144 Forcibly kill spotify resolver before starting out own in case it's an old one 2012-06-27 01:02:53 +02:00
Leo Franchi
5640923d51 Don't assert on quit anymore, served its debug purpose 2012-06-27 01:02:53 +02:00
Leo Franchi
4a2ef91638 Looks like paths with spaces need to be esaped everywhere with QProcess... 2012-06-27 01:02:53 +02:00
Christian Muehlhaeuser
012556ca0a * Resolve dupe accelerator assignment. 2012-06-27 01:01:20 +02:00
Christian Muehlhaeuser
8d0a51cc64 * Updated ChangeLog. 2012-06-27 00:12:59 +02:00
Leo Franchi
253120a35c We no longer remove accounts when uninstalling from attica 2012-06-27 00:12:59 +02:00
Leo Franchi
671bd5361b Always re-install spotify resolver if path is no longer valid 2012-06-27 00:12:59 +02:00
Leo Franchi
3dc969a31f Style fix 2012-06-27 00:12:59 +02:00
Christian Muehlhaeuser
64a70f5073 * Don't accept empty queries from web API. 2012-06-27 00:12:59 +02:00
Christian Muehlhaeuser
1911d4b8a0 * Assert when trying to setup a query without artist or track. 2012-06-27 00:12:59 +02:00
Christian Muehlhaeuser
92229ce3e2 * Call wipeIndex via a single-shot timer to avoid dead-locks. 2012-06-27 00:12:59 +02:00
Christian Muehlhaeuser
7df3f867ea * Re-bind values for failed TomahawkSqlQueries. 2012-06-27 00:12:59 +02:00
Jeff Mitchell
6e66c4a192 Revert "See if this fixes lfranchi's assert"
This reverts commit e6af7b03d7.

Conflicts:

	src/libtomahawk/database/DatabaseImpl.cpp
2012-06-27 00:12:58 +02:00
Christian Muehlhaeuser
49fe0f945e * Elide temporary page's text when showing the delete button. 2012-06-26 05:57:25 +02:00
Christian Muehlhaeuser
0d915513b9 * Spit out error messages when we couldn't resolve a track, album or artist. 2012-06-26 05:57:25 +02:00
Christian Muehlhaeuser
6c69edd0e7 * Remove spinner when AudioEngine stopped. 2012-06-26 05:57:25 +02:00
Christian Muehlhaeuser
23c2c77869 * Style cleanup. 2012-06-26 05:57:25 +02:00
Christian Muehlhaeuser
cd7c64ac0a * Set m_finished when tracks are loaded in Artist- & AlbumPlaylistInterface. 2012-06-26 05:57:25 +02:00
Christian Muehlhaeuser
0637ee7338 * Added a isFinished and m_finished to PlaylistInterface. 2012-06-26 05:57:25 +02:00
Christian Muehlhaeuser
7765aa116b * Auto re-prepare query on weird 'no query' error. 2012-06-26 05:57:25 +02:00
Christian Muehlhaeuser
c46ed53930 * Don't scale now playing icon decoration when expanding a playlist item. 2012-06-26 05:57:25 +02:00
Christian Muehlhaeuser
22105d448a * Don't expand LovedTracksItem. 2012-06-26 05:57:25 +02:00
Christian Muehlhaeuser
4f4efdfbab * Use new RecentlyPlayedModel API. 2012-06-26 05:55:22 +02:00
Christian Muehlhaeuser
686730e27c * Use new Recently- Played/Added -Model's API. 2012-06-26 05:55:22 +02:00
Christian Muehlhaeuser
fdfe4d12d4 * Split up CTOR and setSource methods. 2012-06-26 05:55:22 +02:00
Christian Muehlhaeuser
669e7550f2 * Split up CTOR and setSource methods. 2012-06-26 05:55:22 +02:00
Christian Muehlhaeuser
d4a2294963 * Show loading spinner when loading charts. 2012-06-26 05:55:22 +02:00
Christian Muehlhaeuser
66b0ecc846 * Show a loading spinner when loading a collection. 2012-06-26 05:55:22 +02:00
Christian Muehlhaeuser
c3563a2449 * Remove comments. 2012-06-26 05:55:22 +02:00
Christian Muehlhaeuser
05efe29a67 * Don't show an info button for empty items. 2012-06-26 05:55:22 +02:00
Christian Muehlhaeuser
3480690479 * Automatically adjust crash-reporter's window size. 2012-06-26 05:55:22 +02:00
Christian Muehlhaeuser
a1fb66e024 * Don't reset current viewpage when the new page is the same as the current one. 2012-06-26 05:55:22 +02:00
Christian Muehlhaeuser
02e9f99ce4 * Make sure script-resolvers are executable before trying to execute them. 2012-06-26 05:55:22 +02:00
Christian Muehlhaeuser
95c74fe370 * Re-center play/pause buttons when resizing GridView. 2012-06-26 05:55:22 +02:00
Christian Muehlhaeuser
358226bdb1 * No need to manuall set fake query's results. 2012-06-26 05:52:54 +02:00
Christian Muehlhaeuser
a2d81d0099 * Respond to pings from external resolver. 2012-06-26 05:52:54 +02:00
Christian Muehlhaeuser
292e97fcee * Don't show resolver errors when built with RelWithDebInfo. 2012-06-26 05:52:53 +02:00
Christian Muehlhaeuser
6dafcf3c80 * Temporary fix for compiling madness. 2012-06-26 05:52:53 +02:00
Tomahawk CI
ee1b13aee6 Automatic merge of Transifex translations 2012-06-26 05:52:53 +02:00
Christian Muehlhaeuser
ce8eecd40f * Fixed compiling on Windows. I hope. 2012-06-26 05:52:53 +02:00
Christian Muehlhaeuser
f674b3b751 * Style cleanup. 2012-06-26 05:52:53 +02:00
Jeff Mitchell
44cd64a8b6 Add ChangeLog entries 2012-06-26 05:52:53 +02:00
Christian Muehlhaeuser
a9418fc8aa * Fixed OSX linking. 2012-06-26 05:50:57 +02:00
Christian Muehlhaeuser
44546763b9 * Fixed Windows includes. 2012-06-26 05:50:57 +02:00
Christian Muehlhaeuser
66a74ad6e2 * Fixed compiling on OSX. 2012-06-26 05:50:57 +02:00
Christian Muehlhaeuser
6aae2dd96f * Updated breakpad to latest version. 2012-06-26 05:50:56 +02:00
Christian Muehlhaeuser
ffd2cee2ff * Mutex protect logging. 2012-06-26 05:50:56 +02:00
Christian Muehlhaeuser
438f8444c3 * Init Database earlier. 2012-06-26 05:50:56 +02:00
Christian Muehlhaeuser
b55be311b4 * While not a bug, this shutdown check would have never been triggered. 2012-06-26 05:50:56 +02:00
Tomahawk CI
7a4d113af6 Automatic merge of Transifex translations 2012-06-26 05:50:56 +02:00
303 changed files with 13395 additions and 9207 deletions

View File

@@ -13,7 +13,7 @@ SET( TOMAHAWK_DESCRIPTION_SUMMARY "The social media player" )
SET( TOMAHAWK_VERSION_MAJOR 0 )
SET( TOMAHAWK_VERSION_MINOR 5 )
SET( TOMAHAWK_VERSION_PATCH 0 )
SET( TOMAHAWK_VERSION_PATCH 1 )
#SET( TOMAHAWK_VERSION_RC 0 )
@@ -35,8 +35,11 @@ IF( CMAKE_SYSTEM_PROCESSOR MATCHES "arm" )
ENDIF()
# add definitions based on build options
IF(WITH_BREAKPAD)
IF( WITH_BREAKPAD )
message(STATUS "Build with support for breakpad.")
IF( CMAKE_COMPILER_IS_GNUCXX )
ADD_DEFINITIONS( -DSTDC_HEADERS -std=gnu++98 )
ENDIF()
ENDIF()
# generate version string
@@ -157,8 +160,8 @@ SET( LIBPORTFWD_LIBRARIES ${LIBPORTFWD_LIBRARY} )
ADD_SUBDIRECTORY( ${THIRDPARTY_DIR}/libportfwd )
# we need pthreads too
#macro_optional_find_package(Threads)
#macro_log_feature(THREADS_FOUND "Threads" "Threading Library" "" TRUE "" "Platform specific library for threading")
macro_optional_find_package(Threads)
macro_log_feature(THREADS_FOUND "Threads" "Threading Library" "" TRUE "" "Platform specific library for threading")
macro_optional_find_package(KDE4)
macro_optional_find_package(KDE4Installed)

View File

@@ -1,3 +1,12 @@
Version 0.5.1:
* Fixed a few issues with automatic downloading and launching
of the Spotify account.
* Show an error message when not able to resolve a requested song.
* Fixed a few crash and freeze issues.
* Better detection of local networks for the Local Network connector.
* Don't prompt for access permission for your own accounts.
* (OS X) Fixed not being able to connect to Last.fm.
Version 0.5.0:
* SOCKS5 proxy support improvements for resolvers and more.
* Initial Access Control support, allowing users to define who is able to
@@ -52,7 +61,7 @@ Version 0.4.0:
* Fixed bug where filter text would be one step behind filter value.
* Fixed bug where resolvers would enable themselves after auto-updating.
* Fixed occasional crash when dropping tracks onto New Station item.
* Added jump-to-current-track support for search results page.
* Added jump-to-current-track support for search results page.
* Fixed non-resolving tracks when dragging from album view.
* Fixed fetching album covers for albums with special characters.
* Show errors and continue gracefully when resolved audio is not available.
@@ -77,7 +86,7 @@ Version 0.4.0:
* Fixed out of sync Show/Hide menu items on OS X when hidden with cmd-h.
* Fixed /Volumes directory not showing up on OS X.
* Fixed startup crash on OS X.
Version 0.3.3:
* Automatically load Super Collection tracks when no official release
information is available.
@@ -89,7 +98,7 @@ Version 0.3.3:
* Fixed dupe menu entry appearing on OS X.
* Fixed invisible sidebar items on Linux.
Version 0.3.2:
Version 0.3.2:
* Improved syncing process, it's faster and more reliable now.
* Fixed UPnP issues.
* Fixed not updating collections and views after a collection changes.
@@ -143,7 +152,7 @@ Version 0.3.0:
* Added YouTube resolver.
* Fixed bug where going offline then online would not re-connect to many
peers.
* Added support for auto-updating live XSPF playlists.
* Added support for auto-updating live XSPF playlists.
* Don't show an age of 41 years for tracks that have no age information.
* Show config UI for resolvers that have them as soon as you add them.
* Add support for Echo Nest Personal Catalogs and User Radio. Synchronize

View File

@@ -28,9 +28,6 @@ FRAMEWORK_SEARCH_PATH=[
LIBRARY_SEARCH_PATH=['/usr/local/lib', '/usr/local/Cellar/gettext/0.18.1.1/lib', '.']
LIBSPOTIFY_VERSION = commands.getoutput("brew ls -version libspotify | tr -s \" \" \"\\\\012\" | tail -n 1").strip()
LIBSPOTIFY_PATH = "/usr/local/lib/libspotify.%s.dylib" % LIBSPOTIFY_VERSION
VLC_PLUGINS=[
'libaccess_attachment_plugin.dylib',
#'libaccess_avio_plugin.dylib',
@@ -512,11 +509,6 @@ try:
except:
print 'Failed to find tomahawk_crash_reporter'
try:
FixPlugin(LIBSPOTIFY_PATH, "../Frameworks")
except:
print "Failed to copy libspotify from os: %s" % LIBSPOTIFY_PATH
for plugin in QT_PLUGINS:
FixPlugin(FindQtPlugin(plugin), os.path.dirname(plugin))

View File

@@ -1,4 +1,31 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS language="ar" version="2.0">
<context>
<name>ACLJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ACLJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AccountFactoryWrapper</name>
<message>
@@ -35,34 +62,6 @@
<translation>غير متصل</translation>
</message>
</context>
<context>
<name>AclJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation>هل تسمح ل %1
بالربط بك ومشاركة أغانيك ؟</translation>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation>إسمح بالمشاركة</translation>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation>عدم السماح</translation>
</message>
</context>
<context>
<name>AclJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation>توماهوك يطلب منك إن كان %1 بإمكانه الاتصال.</translation>
</message>
</context>
<context>
<name>ActionCollection</name>
<message>
@@ -195,7 +194,7 @@ connect and stream from you?</source>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.ui" line="310"/>
<source>Artist</source>
<translation type="unfinished"/>
<translation>فنان</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.ui" line="153"/>
@@ -301,6 +300,24 @@ connect and stream from you?</source>
<translation>مرتفع</translation>
</message>
</context>
<context>
<name>AudioEngine</name>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="614"/>
<source>Sorry, Tomahawk couldn&apos;t find the track &apos;%1&apos; by %2</source>
<translation>نعتذر، لم نستطيع إيجاد الأغنية &apos;%1&apos; ل%2</translation>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="638"/>
<source>Sorry, Tomahawk couldn&apos;t find the artist &apos;%1&apos;</source>
<translation>نعتذر، لم نستطيع إيجاد الفنان &apos;%1&apos;</translation>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="664"/>
<source>Sorry, Tomahawk couldn&apos;t find the album &apos;%1&apos; by %2</source>
<translation>نعتذر، لم نستطيع إيجاد الألبوم &apos;%1&apos; ل%2</translation>
</message>
</context>
<context>
<name>CategoryAddItem</name>
<message>
@@ -315,15 +332,13 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>New Station</source>
<translation>إنشاء إذاعة جديدة </translation>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>%1 Station</source>
<translation>إذاعة %1</translation>
</message>
@@ -593,6 +608,19 @@ connect and stream from you?</source>
<translation>الأغاني المحفوظة</translation>
</message>
</context>
<context>
<name>LovedTracksItem</name>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.cpp" line="59"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation>نعتذر، لم نستطيع إيجاد اي من الأغاني المحبوبة!</translation>
</message>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.h" line="36"/>
<source>Loved Tracks</source>
<translation>الأغاني المحبوبة</translation>
</message>
</context>
<context>
<name>NewPlaylistWidget</name>
<message>
@@ -742,12 +770,12 @@ connect and stream from you?</source>
<translation>أنت</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="147"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="140"/>
<source>All tracks by %1 on album %2</source>
<translation>جميع أغاني %1 في البوم %2</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="167"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="165"/>
<source>All tracks by %1</source>
<translation>جميع أغاني %1</translation>
</message>
@@ -1024,47 +1052,47 @@ connect and stream from you?</source>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../src/SettingsDialog.cpp" line="302"/>
<location filename="../src/SettingsDialog.cpp" line="300"/>
<source>Collection</source>
<translation>مجموعة</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="309"/>
<location filename="../src/SettingsDialog.cpp" line="307"/>
<source>Advanced</source>
<translation>متقدمة</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="157"/>
<location filename="../src/SettingsDialog.cpp" line="155"/>
<source>All</source>
<translation>الكل</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Some changed settings will not take effect until Tomahawk is restarted</source>
<translation>بعض الإعدادات التي تم تغييرها لن تصبح نافذة المفعول حتى يتم إعادة تشغيل توماهوك</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="295"/>
<location filename="../src/SettingsDialog.cpp" line="293"/>
<source>Services</source>
<translation>خدمات</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="461"/>
<location filename="../src/SettingsDialog.cpp" line="459"/>
<source>Install resolver from file</source>
<translation>تثبيت محلل من ملف</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="508"/>
<location filename="../src/SettingsDialog.cpp" line="506"/>
<source>Delete all Access Control entries?</source>
<translation>حذف كافة بيانات التحكم بالوصول؟</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="509"/>
<location filename="../src/SettingsDialog.cpp" line="507"/>
<source>Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to.</source>
<translation>هل فعلا تريد حذف جميع بيانات التحكم بالوصول؟ سوف يطلب منك اتخاذ القرار مجددا لكل ند على اتصال به.</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Information</source>
<translation>معلومات</translation>
</message>
@@ -1163,19 +1191,19 @@ connect and stream from you?</source>
<translation>توب ١٠</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="192"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="202"/>
<source>All available tracks</source>
<translation>جميع الأغاني المتاحة</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="285"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="326"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="295"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="336"/>
<source>Show</source>
<translation>أظهر</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="287"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="328"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="297"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="338"/>
<source>Hide</source>
<translation>إخفي</translation>
</message>
@@ -1198,17 +1226,17 @@ connect and stream from you?</source>
<translation>الأغاني التي إستمعت إليها مؤخرا</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="68"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="70"/>
<source>New Additions</source>
<translation>الإضافة الجديدة</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="71"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="73"/>
<source>My recent activity</source>
<translation>نشاطاتي الأخيرة</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="75"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="77"/>
<source>Recent activity from %1</source>
<translation>النشاطات المؤخرة ل %1</translation>
</message>
@@ -1222,7 +1250,7 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="72"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="546"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="517"/>
<source>Latest Additions</source>
<translation>أحدث الإضافات</translation>
</message>
@@ -1232,52 +1260,42 @@ connect and stream from you?</source>
<translation>تم الاستماع لها مؤخرا</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="80"/>
<source>Loved Tracks</source>
<translation>الأغاني المحبوبة</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="144"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="141"/>
<source>SuperCollection</source>
<translation>سوبر كولكشن</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="518"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation>نعتذر، لم نستطيع إيجاد أغاني محبوبة!</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="549"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="520"/>
<source>Latest additions to your collection</source>
<translation>آخر إضافات على مجموعتك</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="551"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="522"/>
<source>Latest additions to %1&apos;s collection</source>
<translation>آخر إضافات على مجموعة %1</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="559"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="530"/>
<source>Sorry, we could not find any recent additions!</source>
<translation>نعتذر، لم نستطيع إيجاد إضافة جديدة!</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="587"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="560"/>
<source>Recently Played Tracks</source>
<translation>الأغاني التي إستمعت إليها مؤخرا</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="590"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="563"/>
<source>Your recently played tracks</source>
<translation>الأغاني التي إستمعت إليها مؤخرا</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="592"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="565"/>
<source>%1&apos;s recently played tracks</source>
<translation>الأغاني التي سمعها مؤخرا %1</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="599"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="572"/>
<source>Sorry, we could not find any recent plays!</source>
<translation>نعتذر، لم نستطيع إيجاد أغاني مسموعة مؤخرا!</translation>
</message>
@@ -1769,28 +1787,28 @@ connect and stream from you?</source>
<translation>نقل التاريخ...</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="182"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="185"/>
<source>History Incomplete. Resume</source>
<translation>تاريخ ناقص. استأنف</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="187"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="190"/>
<source>Playback History Imported</source>
<translation>تم استيراد تاريخ إعادة الإستماع</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="210"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="225"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="213"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="228"/>
<source>Failed</source>
<translation>فشلت</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="215"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="218"/>
<source>Success</source>
<translation>نجاح</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="231"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="234"/>
<source>Could not contact server</source>
<translation>لم أستطيع الإتصال بالخادم</translation>
</message>
@@ -1798,17 +1816,17 @@ connect and stream from you?</source>
<context>
<name>Tomahawk::Accounts::SpotifyAccount</name>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="370"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="419"/>
<source>Sync with Spotify</source>
<translation>مزامنة مع سبوتيفي (Spotify)</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="374"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="423"/>
<source>Re-enable syncing with Spotify</source>
<translation>إعادة تمكين المزامنة مع سبوتيفي (Spotify)</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="378"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="427"/>
<source>Stop syncing with Spotify</source>
<translation>أوقف المزامنة مع سبوتيفي (Spotify)</translation>
</message>
@@ -2011,9 +2029,19 @@ You may wish to try re-authenticating.</source>
<source>Add to &amp;Queue</source>
<translation>أضف إلى &amp;قائمة الانتظار</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>Continue Playback after this &amp;Track</source>
<translation>أكمل الاستماع بعد هذه &amp;الأغنية</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>Stop Playback after this &amp;Track</source>
<translation>أوقف الاستماع بعد هذه &amp;الأغنية</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="97"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="308"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="316"/>
<source>&amp;Love</source>
<translation>&amp;أحب</translation>
</message>
@@ -2023,7 +2051,17 @@ You may wish to try re-authenticating.</source>
<translation>&amp;نسخ رابط الأغنية</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="303"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="155"/>
<source>Copy Album &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="197"/>
<source>Copy Artist &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="311"/>
<source>Un-&amp;Love</source>
<translation>لا &amp;أحب</translation>
</message>
@@ -2032,16 +2070,6 @@ You may wish to try re-authenticating.</source>
<source>&amp;Delete Items</source>
<translation>&amp;أحذف البنود</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>&amp;Continue Playback after this Track</source>
<translation>&amp;أكمل الاستماع بعد هذه الأغنية</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>&amp;Stop Playback after this Track</source>
<translation>&amp;أوقف الاستماع بعد هذه الأغنية</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="108"/>
<source>&amp;Show Track Page</source>
@@ -2601,7 +2629,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::GroovesharkParser</name>
<message>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="255"/>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="256"/>
<source>Error fetching Grooveshark information from the network!</source>
<translation>مشكلة في جلب معلومات &quot;Grooveshark&quot; من الشبكة!</translation>
</message>
@@ -2689,7 +2717,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::ItunesParser</name>
<message>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="170"/>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="175"/>
<source>Error fetching iTunes information from the network!</source>
<translation>مشكلة في جلب معلومات &quot;iTunes&quot; من الشبكة!</translation>
</message>
@@ -2697,27 +2725,27 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::JSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="140"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="144"/>
<source>New Playlist</source>
<translation>قائمة أغاني جديدة</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Failed to save tracks</source>
<translation>فشل في حفظ الأغاني</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Some tracks in the playlist do not contain an artist and a title. They will be ignored.</source>
<translation>بعض الأغاني في قائمة التشغيل لا تحتوي على إسم الفنان أو إسم الأغنية. هذه الأغاني سوف تتجاهل.</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>XSPF Error</source>
<translation>خطأ XSPF</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>This is not a valid XSPF playlist.</source>
<translation>قائمة الأغاني XSPF هذه ليست صالحة.</translation>
</message>
@@ -2739,37 +2767,37 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::Query</name>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="723"/>
<location filename="../src/libtomahawk/Query.cpp" line="728"/>
<source> and </source>
<translation> و </translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="731"/>
<location filename="../src/libtomahawk/Query.cpp" line="736"/>
<source>You</source>
<translation>أنت</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="733"/>
<location filename="../src/libtomahawk/Query.cpp" line="738"/>
<source>you</source>
<translation>أنت</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>and</source>
<translation>و</translation>
</message>
<message numerus="yes">
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>%n other(s)</source>
<translation><numerusform>%n أخرين</numerusform><numerusform>%n أخر</numerusform><numerusform>%n أخرين</numerusform><numerusform>%n أخرين</numerusform><numerusform>%n أخرين</numerusform><numerusform>%n أخرين</numerusform></translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="745"/>
<location filename="../src/libtomahawk/Query.cpp" line="750"/>
<source>%1 people</source>
<translation>%1 أشخاص</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<location filename="../src/libtomahawk/Query.cpp" line="752"/>
<source>loved this track</source>
<translation>أحببت هذه الأغنية</translation>
</message>
@@ -2777,7 +2805,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::RdioParser</name>
<message>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="193"/>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="200"/>
<source>Error fetching Rdio information from the network!</source>
<translation>مشكلة في جلب معلومات &quot;Rdio&quot; من الشبكة!</translation>
</message>
@@ -2837,7 +2865,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::SpotifyParser</name>
<message>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="224"/>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="225"/>
<source>Error fetching Spotify information from the network!</source>
<translation>مشكلة في جلب معلومات &quot;Spotify&quot; من الشبكة!</translation>
</message>
@@ -2853,7 +2881,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>TomahawkApp</name>
<message>
<location filename="../src/TomahawkApp.cpp" line="596"/>
<location filename="../src/TomahawkApp.cpp" line="602"/>
<source>My Collection</source>
<translation>مجموعتي الخاصة</translation>
</message>
@@ -3432,14 +3460,14 @@ enter the displayed PIN number here:</source>
<translation>جميع الفنانين</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="266"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="291"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<source>My Collection</source>
<translation>مجموعتي الخاصة</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="270"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="295"/>
<source>Collection of %1</source>
<translation>مجموعة %1</translation>
</message>
@@ -3581,7 +3609,7 @@ You can re-send a sync message at any time simply by sending another tweet using
<translation>الأغاني التي إستمعت إليها مؤخرا</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="149"/>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="150"/>
<source>No recently created playlists in your network.</source>
<translation>لا قوائم أغاني جديدة أنشئت مؤخرا على شبكتك.</translation>
</message>
@@ -3610,19 +3638,19 @@ You can re-send a sync message at any time simply by sending another tweet using
<context>
<name>XMPPBot</name>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="312"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="315"/>
<source>
Terms for %1:
</source>
<translation>شروط %1:</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="314"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="317"/>
<source>No terms found, sorry.</source>
<translation>لا شروط موجودة، نتأسف.</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="347"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="350"/>
<source>
Hotttness for %1: %2
</source>
@@ -3631,7 +3659,7 @@ Hotttness for %1: %2
</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="363"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="366"/>
<source>
Familiarity for %1: %2
</source>
@@ -3640,7 +3668,7 @@ Familiarity for %1: %2
</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="381"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="384"/>
<source>
Lyrics for &quot;%1&quot; by %2:
@@ -3656,22 +3684,22 @@ Lyrics for &quot;%1&quot; by %2:
<context>
<name>XSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="49"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="50"/>
<source>Failed to parse contents of XSPF playlist</source>
<translation>فشل في تحليل محتويات قائمة الأغاني XSPF</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="51"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="52"/>
<source>Some playlist entries were found without artist and track name, they will be omitted</source>
<translation>تم العثور على مداخل في قوائم الأغاني لا تحتوي على إسم فنان أو إسم أغنية، هذه المداخل سوف تحذف</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="53"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="54"/>
<source>Failed to fetch the desired playlist from the network, or the desired file does not exist</source>
<translation>فشل في جلب قائمة الأغاني المطلوبة من الشبكة، أو الملف المطلوب غير موجود</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="188"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="191"/>
<source>New Playlist</source>
<translation>قائمة أغاني جديدة</translation>
</message>

View File

@@ -1,4 +1,31 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS language="bg" version="2.0">
<context>
<name>ACLJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ACLJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AccountFactoryWrapper</name>
<message>
@@ -35,33 +62,6 @@
<translation>Извън линия</translation>
</message>
</context>
<context>
<name>AclJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation>Ще позволиш ли на %1 да се свърже и слуша музика от твоята колекция?</translation>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AclJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ActionCollection</name>
<message>
@@ -300,6 +300,24 @@ connect and stream from you?</source>
<translation>100%</translation>
</message>
</context>
<context>
<name>AudioEngine</name>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="614"/>
<source>Sorry, Tomahawk couldn&apos;t find the track &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="638"/>
<source>Sorry, Tomahawk couldn&apos;t find the artist &apos;%1&apos;</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="664"/>
<source>Sorry, Tomahawk couldn&apos;t find the album &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>CategoryAddItem</name>
<message>
@@ -314,15 +332,13 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>New Station</source>
<translation>Нова станция</translation>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>%1 Station</source>
<translation>%1 Станция</translation>
</message>
@@ -595,6 +611,19 @@ Tomahaw създаде доклад относно това и изпращай
<translation>Запаметени изпълнения</translation>
</message>
</context>
<context>
<name>LovedTracksItem</name>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.cpp" line="59"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.h" line="36"/>
<source>Loved Tracks</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>NewPlaylistWidget</name>
<message>
@@ -744,12 +773,12 @@ Tomahaw създаде доклад относно това и изпращай
<translation>ти</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="147"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="140"/>
<source>All tracks by %1 on album %2</source>
<translation>Всички песни от %1, от албум %2</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="167"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="165"/>
<source>All tracks by %1</source>
<translation>Всички песни от %1</translation>
</message>
@@ -1024,47 +1053,47 @@ Tomahaw създаде доклад относно това и изпращай
<context>
<name>SettingsDialog</name>
<message>
<location filename="../src/SettingsDialog.cpp" line="302"/>
<location filename="../src/SettingsDialog.cpp" line="300"/>
<source>Collection</source>
<translation>Колекция</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="309"/>
<location filename="../src/SettingsDialog.cpp" line="307"/>
<source>Advanced</source>
<translation>Разширени</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="157"/>
<location filename="../src/SettingsDialog.cpp" line="155"/>
<source>All</source>
<translation>Всички</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Some changed settings will not take effect until Tomahawk is restarted</source>
<translation>Някои промени няма да имат ефект, докато програмата не бъде рестартирана.</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="295"/>
<location filename="../src/SettingsDialog.cpp" line="293"/>
<source>Services</source>
<translation>Услуги</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="461"/>
<location filename="../src/SettingsDialog.cpp" line="459"/>
<source>Install resolver from file</source>
<translation>Инсталирай услиги за търсене от файл</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="508"/>
<location filename="../src/SettingsDialog.cpp" line="506"/>
<source>Delete all Access Control entries?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="509"/>
<location filename="../src/SettingsDialog.cpp" line="507"/>
<source>Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Information</source>
<translation>Информация</translation>
</message>
@@ -1163,19 +1192,19 @@ Tomahaw създаде доклад относно това и изпращай
<translation>Първите 10</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="192"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="202"/>
<source>All available tracks</source>
<translation>Всички налични изпълнения</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="285"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="326"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="295"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="336"/>
<source>Show</source>
<translation>Покажи</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="287"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="328"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="297"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="338"/>
<source>Hide</source>
<translation>Скрий</translation>
</message>
@@ -1198,17 +1227,17 @@ Tomahaw създаде доклад относно това и изпращай
<translation>Наскоро изпълнени песни</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="68"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="70"/>
<source>New Additions</source>
<translation>Нови попълнения</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="71"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="73"/>
<source>My recent activity</source>
<translation>Скорошна активност</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="75"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="77"/>
<source>Recent activity from %1</source>
<translation>Скорошна активност на %1</translation>
</message>
@@ -1222,7 +1251,7 @@ Tomahaw създаде доклад относно това и изпращай
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="72"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="546"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="517"/>
<source>Latest Additions</source>
<translation>Последно добавени</translation>
</message>
@@ -1232,53 +1261,43 @@ Tomahaw създаде доклад относно това и изпращай
<translation>Наскоро изпълнени песни</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="80"/>
<source>Loved Tracks</source>
<translation>Харесани песни</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="144"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="141"/>
<source>SuperCollection</source>
<translation>Супер колекция
/Сборен излед от локалните и наличните в колекциите на приятелите ти/</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="518"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation>Съжалявам, но не откривам нито една харесана песен!</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="549"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="520"/>
<source>Latest additions to your collection</source>
<translation>Последно добавени към колекцията</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="551"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="522"/>
<source>Latest additions to %1&apos;s collection</source>
<translation>Последно добавени в колекцията на %1</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="559"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="530"/>
<source>Sorry, we could not find any recent additions!</source>
<translation>Съжалявам, но не откривам нито една ново-добавена позиция!</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="587"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="560"/>
<source>Recently Played Tracks</source>
<translation>Наскоро изпълнени песни</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="590"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="563"/>
<source>Your recently played tracks</source>
<translation>Наскоро изпълнени песни от теб</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="592"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="565"/>
<source>%1&apos;s recently played tracks</source>
<translation>Наскоро изпълнените песни от %1</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="599"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="572"/>
<source>Sorry, we could not find any recent plays!</source>
<translation>Съжалявам, но не откривам нито една наскоро изпълнена песен!</translation>
</message>
@@ -1775,28 +1794,28 @@ Tomahaw създаде доклад относно това и изпращай
<translation>Импортирам...</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="182"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="185"/>
<source>History Incomplete. Resume</source>
<translation>Непълна информация. Продължи.</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="187"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="190"/>
<source>Playback History Imported</source>
<translation>Историята на просвирените песни е импортирана</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="210"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="225"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="213"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="228"/>
<source>Failed</source>
<translation>Неуспешно</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="215"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="218"/>
<source>Success</source>
<translation>Ура!</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="231"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="234"/>
<source>Could not contact server</source>
<translation>Не мога да се свържа със сървъра</translation>
</message>
@@ -1804,17 +1823,17 @@ Tomahaw създаде доклад относно това и изпращай
<context>
<name>Tomahawk::Accounts::SpotifyAccount</name>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="370"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="419"/>
<source>Sync with Spotify</source>
<translation>Синхронизирай със Spotify</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="374"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="423"/>
<source>Re-enable syncing with Spotify</source>
<translation>Включи отново синхронизирането със Spotify</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="378"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="427"/>
<source>Stop syncing with Spotify</source>
<translation>Спри синхронизацията със Spotify</translation>
</message>
@@ -2019,9 +2038,19 @@ You may wish to try re-authenticating.</source>
<source>Add to &amp;Queue</source>
<translation>Добави към &amp;опашката</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>Continue Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>Stop Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="97"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="308"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="316"/>
<source>&amp;Love</source>
<translation>&amp;Харесай</translation>
</message>
@@ -2031,7 +2060,17 @@ You may wish to try re-authenticating.</source>
<translation>&amp;Копирай адресът на изпълнението</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="303"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="155"/>
<source>Copy Album &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="197"/>
<source>Copy Artist &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="311"/>
<source>Un-&amp;Love</source>
<translation>Не-&amp;харесай</translation>
</message>
@@ -2040,16 +2079,6 @@ You may wish to try re-authenticating.</source>
<source>&amp;Delete Items</source>
<translation>&amp;Изтрий позициите</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>&amp;Continue Playback after this Track</source>
<translation>&amp;Продължи след тази песен</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>&amp;Stop Playback after this Track</source>
<translation>&amp;Спри след тази песен</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="108"/>
<source>&amp;Show Track Page</source>
@@ -2608,7 +2637,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::GroovesharkParser</name>
<message>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="255"/>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="256"/>
<source>Error fetching Grooveshark information from the network!</source>
<translation>Грешка при извличане на информацията от Grooveshark</translation>
</message>
@@ -2696,7 +2725,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::ItunesParser</name>
<message>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="170"/>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="175"/>
<source>Error fetching iTunes information from the network!</source>
<translation>Грешка при извличане на информация от iTunes</translation>
</message>
@@ -2704,27 +2733,27 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::JSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="140"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="144"/>
<source>New Playlist</source>
<translation>Нов списък</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Failed to save tracks</source>
<translation>Не мога да запазя избраните песни</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Some tracks in the playlist do not contain an artist and a title. They will be ignored.</source>
<translation>Някои песни в списъкът за изпълнение нямат артист и заглавие. Те ще бъдат игнорирани.</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>XSPF Error</source>
<translation>XSPF грешка</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>This is not a valid XSPF playlist.</source>
<translation>Това не е валиден XSPF списък</translation>
</message>
@@ -2746,37 +2775,37 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::Query</name>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="723"/>
<location filename="../src/libtomahawk/Query.cpp" line="728"/>
<source> and </source>
<translation>и</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="731"/>
<location filename="../src/libtomahawk/Query.cpp" line="736"/>
<source>You</source>
<translation>Ти</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="733"/>
<location filename="../src/libtomahawk/Query.cpp" line="738"/>
<source>you</source>
<translation>ти</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>and</source>
<translation>и</translation>
</message>
<message numerus="yes">
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>%n other(s)</source>
<translation><numerusform>%n друг</numerusform><numerusform>%n други</numerusform></translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="745"/>
<location filename="../src/libtomahawk/Query.cpp" line="750"/>
<source>%1 people</source>
<translation>%1 хора</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<location filename="../src/libtomahawk/Query.cpp" line="752"/>
<source>loved this track</source>
<translation>хареса тази песен</translation>
</message>
@@ -2784,7 +2813,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::RdioParser</name>
<message>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="193"/>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="200"/>
<source>Error fetching Rdio information from the network!</source>
<translation>Грешка при извличане на информация от Rdio</translation>
</message>
@@ -2844,7 +2873,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::SpotifyParser</name>
<message>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="224"/>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="225"/>
<source>Error fetching Spotify information from the network!</source>
<translation>Грешка при извличане на информация от Spotify</translation>
</message>
@@ -2860,7 +2889,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>TomahawkApp</name>
<message>
<location filename="../src/TomahawkApp.cpp" line="596"/>
<location filename="../src/TomahawkApp.cpp" line="602"/>
<source>My Collection</source>
<translation>Моята колекция</translation>
</message>
@@ -3442,14 +3471,14 @@ enter the displayed PIN number here:</source>
<translation>Всички артисти</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="266"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="291"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<source>My Collection</source>
<translation>Моята колекция</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="270"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="295"/>
<source>Collection of %1</source>
<translation>Колекцията на %1</translation>
</message>
@@ -3593,7 +3622,7 @@ You can re-send a sync message at any time simply by sending another tweet using
<translation>Наскоро изпълнени</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="149"/>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="150"/>
<source>No recently created playlists in your network.</source>
<translation>Не откривам наскоро създадени списъци в твоята мрежа</translation>
</message>
@@ -3622,33 +3651,33 @@ You can re-send a sync message at any time simply by sending another tweet using
<context>
<name>XMPPBot</name>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="312"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="315"/>
<source>
Terms for %1:
</source>
<translation>Условия за %1:</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="314"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="317"/>
<source>No terms found, sorry.</source>
<translation>Няма открити условия, съжалявам.</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="347"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="350"/>
<source>
Hotttness for %1: %2
</source>
<translation>Популарност на %1:%2</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="363"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="366"/>
<source>
Familiarity for %1: %2
</source>
<translation>Еднаквост за %1: %2</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="381"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="384"/>
<source>
Lyrics for &quot;%1&quot; by %2:
@@ -3663,23 +3692,23 @@ Lyrics for &quot;%1&quot; by %2:
<context>
<name>XSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="49"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="50"/>
<source>Failed to parse contents of XSPF playlist</source>
<translation>Неуспешно извличане на данни от XSPF списък</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="51"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="52"/>
<source>Some playlist entries were found without artist and track name, they will be omitted</source>
<translation>За някои от позициите не открих артист или име на песента.
Те ще бъдат пропуснати.</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="53"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="54"/>
<source>Failed to fetch the desired playlist from the network, or the desired file does not exist</source>
<translation>Неуспех при извличане на избраният списък през мрежата или избраният файл не съществува.</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="188"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="191"/>
<source>New Playlist</source>
<translation>Нов списък</translation>
</message>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,32 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS language="en" version="2.0">
<context>
<name>ACLJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation>Allow %1 to
connect and stream from you?</translation>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation>Allow Streaming</translation>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation>Deny Access</translation>
</message>
</context>
<context>
<name>ACLJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation>Tomahawk needs you to decide whether %1 is allowed to connect.</translation>
</message>
</context>
<context>
<name>AccountFactoryWrapper</name>
<message>
@@ -35,34 +63,6 @@
<translation>Offline</translation>
</message>
</context>
<context>
<name>AclJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation>Allow %1 to
connect and stream from you?</translation>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation>Allow Streaming</translation>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation>Deny Access</translation>
</message>
</context>
<context>
<name>AclJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation>Tomahawk needs you to decide whether %1 is allowed to connect.</translation>
</message>
</context>
<context>
<name>ActionCollection</name>
<message>
@@ -301,6 +301,24 @@ connect and stream from you?</translation>
<translation>High</translation>
</message>
</context>
<context>
<name>AudioEngine</name>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="614"/>
<source>Sorry, Tomahawk couldn&apos;t find the track &apos;%1&apos; by %2</source>
<translation>Sorry, Tomahawk couldn&apos;t find the track &apos;%1&apos; by %2</translation>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="638"/>
<source>Sorry, Tomahawk couldn&apos;t find the artist &apos;%1&apos;</source>
<translation>Sorry, Tomahawk couldn&apos;t find the artist &apos;%1&apos;</translation>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="664"/>
<source>Sorry, Tomahawk couldn&apos;t find the album &apos;%1&apos; by %2</source>
<translation>Sorry, Tomahawk couldn&apos;t find the album &apos;%1&apos; by %2</translation>
</message>
</context>
<context>
<name>CategoryAddItem</name>
<message>
@@ -315,15 +333,13 @@ connect and stream from you?</translation>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>New Station</source>
<translation>New Station</translation>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>%1 Station</source>
<translation>%1 Station</translation>
</message>
@@ -593,6 +609,19 @@ connect and stream from you?</translation>
<translation>Saved tracks</translation>
</message>
</context>
<context>
<name>LovedTracksItem</name>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.cpp" line="59"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation>Sorry, we could not find any loved tracks!</translation>
</message>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.h" line="36"/>
<source>Loved Tracks</source>
<translation>Loved Tracks</translation>
</message>
</context>
<context>
<name>NewPlaylistWidget</name>
<message>
@@ -742,12 +771,12 @@ connect and stream from you?</translation>
<translation>you</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="147"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="140"/>
<source>All tracks by %1 on album %2</source>
<translation>All tracks by %1 on album %2</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="167"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="165"/>
<source>All tracks by %1</source>
<translation>All tracks by %1</translation>
</message>
@@ -970,7 +999,7 @@ connect and stream from you?</translation>
<message numerus="yes">
<location filename="../src/libtomahawk/playlist/QueueView.cpp" line="186"/>
<source>Open Queue - %n item(s)</source>
<translation><numerusform>Open Queue - %n item(s)</numerusform><numerusform>Open Queue - %n item(s)</numerusform></translation>
<translation><numerusform>Open Queue - %n item</numerusform><numerusform>Open Queue - %n items</numerusform></translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/QueueView.cpp" line="192"/>
@@ -1023,47 +1052,47 @@ connect and stream from you?</translation>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../src/SettingsDialog.cpp" line="302"/>
<location filename="../src/SettingsDialog.cpp" line="300"/>
<source>Collection</source>
<translation>Collection</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="309"/>
<location filename="../src/SettingsDialog.cpp" line="307"/>
<source>Advanced</source>
<translation>Advanced</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="157"/>
<location filename="../src/SettingsDialog.cpp" line="155"/>
<source>All</source>
<translation>All</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Some changed settings will not take effect until Tomahawk is restarted</source>
<translation>Some changed settings will not take effect until Tomahawk is restarted</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="295"/>
<location filename="../src/SettingsDialog.cpp" line="293"/>
<source>Services</source>
<translation>Services</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="461"/>
<location filename="../src/SettingsDialog.cpp" line="459"/>
<source>Install resolver from file</source>
<translation>Install resolver from file</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="508"/>
<location filename="../src/SettingsDialog.cpp" line="506"/>
<source>Delete all Access Control entries?</source>
<translation>Delete all Access Control entries?</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="509"/>
<location filename="../src/SettingsDialog.cpp" line="507"/>
<source>Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to.</source>
<translation>Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to.</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Information</source>
<translation>Information</translation>
</message>
@@ -1162,19 +1191,19 @@ connect and stream from you?</translation>
<translation>Top 10</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="192"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="202"/>
<source>All available tracks</source>
<translation>All available tracks</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="285"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="326"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="295"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="336"/>
<source>Show</source>
<translation>Show</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="287"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="328"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="297"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="338"/>
<source>Hide</source>
<translation>Hide</translation>
</message>
@@ -1197,17 +1226,17 @@ connect and stream from you?</translation>
<translation>Recently Played Tracks</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="68"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="70"/>
<source>New Additions</source>
<translation>New Additions</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="71"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="73"/>
<source>My recent activity</source>
<translation>My recent activity</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="75"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="77"/>
<source>Recent activity from %1</source>
<translation>Recent activity from %1</translation>
</message>
@@ -1221,7 +1250,7 @@ connect and stream from you?</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="72"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="546"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="517"/>
<source>Latest Additions</source>
<translation>Latest Additions</translation>
</message>
@@ -1231,52 +1260,42 @@ connect and stream from you?</translation>
<translation>Recently Played</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="80"/>
<source>Loved Tracks</source>
<translation>Loved Tracks</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="144"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="141"/>
<source>SuperCollection</source>
<translation>SuperCollection</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="518"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation>Sorry, we could not find any loved tracks!</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="549"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="520"/>
<source>Latest additions to your collection</source>
<translation>Latest additions to your collection</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="551"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="522"/>
<source>Latest additions to %1&apos;s collection</source>
<translation>Latest additions to %1&apos;s collection</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="559"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="530"/>
<source>Sorry, we could not find any recent additions!</source>
<translation>Sorry, we could not find any recent additions!</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="587"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="560"/>
<source>Recently Played Tracks</source>
<translation>Recently Played Tracks</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="590"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="563"/>
<source>Your recently played tracks</source>
<translation>Your recently played tracks</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="592"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="565"/>
<source>%1&apos;s recently played tracks</source>
<translation>%1&apos;s recently played tracks</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="599"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="572"/>
<source>Sorry, we could not find any recent plays!</source>
<translation>Sorry, we could not find any recent plays!</translation>
</message>
@@ -1769,28 +1788,28 @@ connect and stream from you?</translation>
<translation>Importing History...</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="182"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="185"/>
<source>History Incomplete. Resume</source>
<translation>History Incomplete. Resume</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="187"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="190"/>
<source>Playback History Imported</source>
<translation>Playback History Imported</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="210"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="225"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="213"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="228"/>
<source>Failed</source>
<translation>Failed</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="215"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="218"/>
<source>Success</source>
<translation>Success</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="231"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="234"/>
<source>Could not contact server</source>
<translation>Could not contact server</translation>
</message>
@@ -1798,17 +1817,17 @@ connect and stream from you?</translation>
<context>
<name>Tomahawk::Accounts::SpotifyAccount</name>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="370"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="419"/>
<source>Sync with Spotify</source>
<translation>Sync with Spotify</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="374"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="423"/>
<source>Re-enable syncing with Spotify</source>
<translation>Re-enable syncing with Spotify</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="378"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="427"/>
<source>Stop syncing with Spotify</source>
<translation>Stop syncing with Spotify</translation>
</message>
@@ -2011,9 +2030,19 @@ You may wish to try re-authenticating.</translation>
<source>Add to &amp;Queue</source>
<translation>Add to &amp;Queue</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>Continue Playback after this &amp;Track</source>
<translation>Continue Playback after this &amp;Track</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>Stop Playback after this &amp;Track</source>
<translation>Stop Playback after this &amp;Track</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="97"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="308"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="316"/>
<source>&amp;Love</source>
<translation>&amp;Love</translation>
</message>
@@ -2023,7 +2052,17 @@ You may wish to try re-authenticating.</translation>
<translation>&amp;Copy Track Link</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="303"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="155"/>
<source>Copy Album &amp;Link</source>
<translation>Copy Album &amp;Link</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="197"/>
<source>Copy Artist &amp;Link</source>
<translation>Copy Artist &amp;Link</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="311"/>
<source>Un-&amp;Love</source>
<translation>Un-&amp;Love</translation>
</message>
@@ -2032,16 +2071,6 @@ You may wish to try re-authenticating.</translation>
<source>&amp;Delete Items</source>
<translation>&amp;Delete Items</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>&amp;Continue Playback after this Track</source>
<translation>&amp;Continue Playback after this Track</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>&amp;Stop Playback after this Track</source>
<translation>&amp;Stop Playback after this Track</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="108"/>
<source>&amp;Show Track Page</source>
@@ -2601,7 +2630,7 @@ Try tweaking the filters for a new set of songs to play.</translation>
<context>
<name>Tomahawk::GroovesharkParser</name>
<message>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="255"/>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="256"/>
<source>Error fetching Grooveshark information from the network!</source>
<translation>Error fetching Grooveshark information from the network!</translation>
</message>
@@ -2689,7 +2718,7 @@ Try tweaking the filters for a new set of songs to play.</translation>
<context>
<name>Tomahawk::ItunesParser</name>
<message>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="170"/>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="175"/>
<source>Error fetching iTunes information from the network!</source>
<translation>Error fetching iTunes information from the network!</translation>
</message>
@@ -2697,27 +2726,27 @@ Try tweaking the filters for a new set of songs to play.</translation>
<context>
<name>Tomahawk::JSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="140"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="144"/>
<source>New Playlist</source>
<translation>New Playlist</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Failed to save tracks</source>
<translation>Failed to save tracks</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Some tracks in the playlist do not contain an artist and a title. They will be ignored.</source>
<translation>Some tracks in the playlist do not contain an artist and a title. They will be ignored.</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>XSPF Error</source>
<translation>XSPF Error</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>This is not a valid XSPF playlist.</source>
<translation>This is not a valid XSPF playlist.</translation>
</message>
@@ -2739,37 +2768,37 @@ Try tweaking the filters for a new set of songs to play.</translation>
<context>
<name>Tomahawk::Query</name>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="723"/>
<location filename="../src/libtomahawk/Query.cpp" line="728"/>
<source> and </source>
<translation> and </translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="731"/>
<location filename="../src/libtomahawk/Query.cpp" line="736"/>
<source>You</source>
<translation>You</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="733"/>
<location filename="../src/libtomahawk/Query.cpp" line="738"/>
<source>you</source>
<translation>you</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>and</source>
<translation>and</translation>
</message>
<message numerus="yes">
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>%n other(s)</source>
<translation><numerusform>%n other</numerusform><numerusform>%n others</numerusform></translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="745"/>
<location filename="../src/libtomahawk/Query.cpp" line="750"/>
<source>%1 people</source>
<translation>%1 people</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<location filename="../src/libtomahawk/Query.cpp" line="752"/>
<source>loved this track</source>
<translation>loved this track</translation>
</message>
@@ -2777,7 +2806,7 @@ Try tweaking the filters for a new set of songs to play.</translation>
<context>
<name>Tomahawk::RdioParser</name>
<message>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="193"/>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="200"/>
<source>Error fetching Rdio information from the network!</source>
<translation>Error fetching Rdio information from the network!</translation>
</message>
@@ -2837,7 +2866,7 @@ Try tweaking the filters for a new set of songs to play.</translation>
<context>
<name>Tomahawk::SpotifyParser</name>
<message>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="224"/>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="225"/>
<source>Error fetching Spotify information from the network!</source>
<translation>Error fetching Spotify information from the network!</translation>
</message>
@@ -2853,7 +2882,7 @@ Try tweaking the filters for a new set of songs to play.</translation>
<context>
<name>TomahawkApp</name>
<message>
<location filename="../src/TomahawkApp.cpp" line="596"/>
<location filename="../src/TomahawkApp.cpp" line="602"/>
<source>My Collection</source>
<translation>My Collection</translation>
</message>
@@ -3372,7 +3401,7 @@ enter the displayed PIN number here:</translation>
<message numerus="yes">
<location filename="../src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp" line="217"/>
<source>You&apos;ve listened to this track %n time(s).</source>
<translation><numerusform>You&apos;ve listened to this track %n time(s).</numerusform><numerusform>You&apos;ve listened to this track %n time(s).</numerusform></translation>
<translation><numerusform>You&apos;ve listened to this track %n time.</numerusform><numerusform>You&apos;ve listened to this track %n times.</numerusform></translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp" line="219"/>
@@ -3387,7 +3416,7 @@ enter the displayed PIN number here:</translation>
<message numerus="yes">
<location filename="../src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp" line="227"/>
<source>You&apos;ve listened to %1 %n time(s).</source>
<translation><numerusform>You&apos;ve listened to %1 %n time(s).</numerusform><numerusform>You&apos;ve listened to %1 %n time(s).</numerusform></translation>
<translation><numerusform>You&apos;ve listened to %1 %n time.</numerusform><numerusform>You&apos;ve listened to %1 %n times.</numerusform></translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp" line="229"/>
@@ -3432,14 +3461,14 @@ enter the displayed PIN number here:</translation>
<translation>All Artists</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="266"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="291"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<source>My Collection</source>
<translation>My Collection</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="270"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="295"/>
<source>Collection of %1</source>
<translation>Collection of %1</translation>
</message>
@@ -3581,7 +3610,7 @@ You can re-send a sync message at any time simply by sending another tweet using
<translation>Recently Played Tracks</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="149"/>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="150"/>
<source>No recently created playlists in your network.</source>
<translation>No recently created playlists in your network.</translation>
</message>
@@ -3610,7 +3639,7 @@ You can re-send a sync message at any time simply by sending another tweet using
<context>
<name>XMPPBot</name>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="312"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="315"/>
<source>
Terms for %1:
</source>
@@ -3619,12 +3648,12 @@ Terms for %1:
</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="314"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="317"/>
<source>No terms found, sorry.</source>
<translation>No terms found, sorry.</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="347"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="350"/>
<source>
Hotttness for %1: %2
</source>
@@ -3633,7 +3662,7 @@ Hotttness for %1: %2
</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="363"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="366"/>
<source>
Familiarity for %1: %2
</source>
@@ -3642,7 +3671,7 @@ Familiarity for %1: %2
</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="381"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="384"/>
<source>
Lyrics for &quot;%1&quot; by %2:
@@ -3658,22 +3687,22 @@ Lyrics for &quot;%1&quot; by %2:
<context>
<name>XSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="49"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="50"/>
<source>Failed to parse contents of XSPF playlist</source>
<translation>Failed to parse contents of XSPF playlist</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="51"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="52"/>
<source>Some playlist entries were found without artist and track name, they will be omitted</source>
<translation>Some playlist entries were found without artist and track name, they will be omitted</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="53"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="54"/>
<source>Failed to fetch the desired playlist from the network, or the desired file does not exist</source>
<translation>Failed to fetch the desired playlist from the network, or the desired file does not exist</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="188"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="191"/>
<source>New Playlist</source>
<translation>New Playlist</translation>
</message>

View File

@@ -1,4 +1,31 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS language="es" version="2.0">
<context>
<name>ACLJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ACLJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AccountFactoryWrapper</name>
<message>
@@ -35,33 +62,6 @@
<translation>Desconectado</translation>
</message>
</context>
<context>
<name>AclJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation>¿Permitir a %1 conectarse y transmitirle música?</translation>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AclJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ActionCollection</name>
<message>
@@ -300,6 +300,24 @@ connect and stream from you?</source>
<translation>Subir volumen</translation>
</message>
</context>
<context>
<name>AudioEngine</name>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="614"/>
<source>Sorry, Tomahawk couldn&apos;t find the track &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="638"/>
<source>Sorry, Tomahawk couldn&apos;t find the artist &apos;%1&apos;</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="664"/>
<source>Sorry, Tomahawk couldn&apos;t find the album &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>CategoryAddItem</name>
<message>
@@ -314,15 +332,13 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>New Station</source>
<translation>Nueva estación</translation>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>%1 Station</source>
<translation>%1 estación</translation>
</message>
@@ -592,6 +608,19 @@ connect and stream from you?</source>
<translation>Pistas guardadas</translation>
</message>
</context>
<context>
<name>LovedTracksItem</name>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.cpp" line="59"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.h" line="36"/>
<source>Loved Tracks</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>NewPlaylistWidget</name>
<message>
@@ -741,12 +770,12 @@ connect and stream from you?</source>
<translation>usted</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="147"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="140"/>
<source>All tracks by %1 on album %2</source>
<translation>Todas las pistas de %1 en el álbum %2</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="167"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="165"/>
<source>All tracks by %1</source>
<translation>Todas las pistas de %1</translation>
</message>
@@ -1021,47 +1050,47 @@ connect and stream from you?</source>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../src/SettingsDialog.cpp" line="302"/>
<location filename="../src/SettingsDialog.cpp" line="300"/>
<source>Collection</source>
<translation>Colección</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="309"/>
<location filename="../src/SettingsDialog.cpp" line="307"/>
<source>Advanced</source>
<translation>Avanzado</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="157"/>
<location filename="../src/SettingsDialog.cpp" line="155"/>
<source>All</source>
<translation>Todo</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Some changed settings will not take effect until Tomahawk is restarted</source>
<translation>Algunos cambios no tomarán efecto hasta reiniciar Tomahawk </translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="295"/>
<location filename="../src/SettingsDialog.cpp" line="293"/>
<source>Services</source>
<translation>Servicios</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="461"/>
<location filename="../src/SettingsDialog.cpp" line="459"/>
<source>Install resolver from file</source>
<translation>Instalar un Resolver desde un fichero</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="508"/>
<location filename="../src/SettingsDialog.cpp" line="506"/>
<source>Delete all Access Control entries?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="509"/>
<location filename="../src/SettingsDialog.cpp" line="507"/>
<source>Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Information</source>
<translation>Información</translation>
</message>
@@ -1160,19 +1189,19 @@ connect and stream from you?</source>
<translation>Top 10</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="192"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="202"/>
<source>All available tracks</source>
<translation>Todas las pistas disponibles</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="285"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="326"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="295"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="336"/>
<source>Show</source>
<translation>Mostrar</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="287"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="328"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="297"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="338"/>
<source>Hide</source>
<translation>Ocultar</translation>
</message>
@@ -1195,17 +1224,17 @@ connect and stream from you?</source>
<translation>Pistas reproducidas recientemente</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="68"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="70"/>
<source>New Additions</source>
<translation>Nuevas adiciones</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="71"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="73"/>
<source>My recent activity</source>
<translation>Mi actividad reciente</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="75"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="77"/>
<source>Recent activity from %1</source>
<translation>Actividad reciente de %1</translation>
</message>
@@ -1219,7 +1248,7 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="72"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="546"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="517"/>
<source>Latest Additions</source>
<translation>Añadidos recientemente</translation>
</message>
@@ -1229,52 +1258,42 @@ connect and stream from you?</source>
<translation>Reproducido recientemente</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="80"/>
<source>Loved Tracks</source>
<translation>Pistas favoritas</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="144"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="141"/>
<source>SuperCollection</source>
<translation>SuperColección</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="518"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="549"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="520"/>
<source>Latest additions to your collection</source>
<translation>Últimas novedades en mi colección</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="551"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="522"/>
<source>Latest additions to %1&apos;s collection</source>
<translation>Últimas novedadoes en la colección de %1</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="559"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="530"/>
<source>Sorry, we could not find any recent additions!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="587"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="560"/>
<source>Recently Played Tracks</source>
<translation>Temas Escuchados Recientemente</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="590"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="563"/>
<source>Your recently played tracks</source>
<translation>Mis canciones escuchadas recientemente</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="592"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="565"/>
<source>%1&apos;s recently played tracks</source>
<translation>Las canciones escuchadas recientemente por %1</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="599"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="572"/>
<source>Sorry, we could not find any recent plays!</source>
<translation type="unfinished"/>
</message>
@@ -1767,28 +1786,28 @@ y estaciones basadas en sus gustos personales.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="182"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="185"/>
<source>History Incomplete. Resume</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="187"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="190"/>
<source>Playback History Imported</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="210"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="225"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="213"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="228"/>
<source>Failed</source>
<translation>Fallo</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="215"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="218"/>
<source>Success</source>
<translation>Éxito</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="231"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="234"/>
<source>Could not contact server</source>
<translation>No se pudo contactar el servidor</translation>
</message>
@@ -1796,17 +1815,17 @@ y estaciones basadas en sus gustos personales.</translation>
<context>
<name>Tomahawk::Accounts::SpotifyAccount</name>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="370"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="419"/>
<source>Sync with Spotify</source>
<translation>Sincronizar con Spotify</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="374"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="423"/>
<source>Re-enable syncing with Spotify</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="378"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="427"/>
<source>Stop syncing with Spotify</source>
<translation>Dejar de sincronizar con Spotify</translation>
</message>
@@ -2009,9 +2028,19 @@ Hay que volverse a autenticar.</translation>
<source>Add to &amp;Queue</source>
<translation>Añadir a la &amp;cola</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>Continue Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>Stop Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="97"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="308"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="316"/>
<source>&amp;Love</source>
<translation>&amp;Favorito</translation>
</message>
@@ -2021,7 +2050,17 @@ Hay que volverse a autenticar.</translation>
<translation>&amp;Copiar enlace del Tema</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="303"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="155"/>
<source>Copy Album &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="197"/>
<source>Copy Artist &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="311"/>
<source>Un-&amp;Love</source>
<translation>Quitar de &amp;Favoritos</translation>
</message>
@@ -2030,16 +2069,6 @@ Hay que volverse a autenticar.</translation>
<source>&amp;Delete Items</source>
<translation>&amp;Eliminar de la cola</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>&amp;Continue Playback after this Track</source>
<translation>&amp;Continuar la Reproducción después de este Tema</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>&amp;Stop Playback after this Track</source>
<translation>&amp;Para la Reproducción después de este Tema</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="108"/>
<source>&amp;Show Track Page</source>
@@ -2599,7 +2628,7 @@ Intente ajustar los filtros para reproducir nuevas canciones.</translation>
<context>
<name>Tomahawk::GroovesharkParser</name>
<message>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="255"/>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="256"/>
<source>Error fetching Grooveshark information from the network!</source>
<translation>Error al buscar la información de Grooveshar en la red!</translation>
</message>
@@ -2687,7 +2716,7 @@ Intente ajustar los filtros para reproducir nuevas canciones.</translation>
<context>
<name>Tomahawk::ItunesParser</name>
<message>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="170"/>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="175"/>
<source>Error fetching iTunes information from the network!</source>
<translation>Error al buscar la información de iTunes en la red!</translation>
</message>
@@ -2695,27 +2724,27 @@ Intente ajustar los filtros para reproducir nuevas canciones.</translation>
<context>
<name>Tomahawk::JSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="140"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="144"/>
<source>New Playlist</source>
<translation>Nueva lista de reproducción</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Failed to save tracks</source>
<translation>Fallo al guardar pistas</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Some tracks in the playlist do not contain an artist and a title. They will be ignored.</source>
<translation>Algunas pistas en la lista de reproducción no contienen artista ni título. Éstas serán ignoradas.</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>XSPF Error</source>
<translation>Error XSPF</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>This is not a valid XSPF playlist.</source>
<translation>Esta no es una lista de reproducción XSPF válida.</translation>
</message>
@@ -2737,37 +2766,37 @@ Intente ajustar los filtros para reproducir nuevas canciones.</translation>
<context>
<name>Tomahawk::Query</name>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="723"/>
<location filename="../src/libtomahawk/Query.cpp" line="728"/>
<source> and </source>
<translation>y</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="731"/>
<location filename="../src/libtomahawk/Query.cpp" line="736"/>
<source>You</source>
<translation>usted</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="733"/>
<location filename="../src/libtomahawk/Query.cpp" line="738"/>
<source>you</source>
<translation>usted</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>and</source>
<translation>y</translation>
</message>
<message numerus="yes">
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>%n other(s)</source>
<translation><numerusform>%n más</numerusform><numerusform>%n más</numerusform></translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="745"/>
<location filename="../src/libtomahawk/Query.cpp" line="750"/>
<source>%1 people</source>
<translation>%1 personas</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<location filename="../src/libtomahawk/Query.cpp" line="752"/>
<source>loved this track</source>
<translation>han añadido este tema a Favoritos</translation>
</message>
@@ -2775,7 +2804,7 @@ Intente ajustar los filtros para reproducir nuevas canciones.</translation>
<context>
<name>Tomahawk::RdioParser</name>
<message>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="193"/>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="200"/>
<source>Error fetching Rdio information from the network!</source>
<translation>Error al buscar la información de Rdio en la red!</translation>
</message>
@@ -2835,7 +2864,7 @@ Intente ajustar los filtros para reproducir nuevas canciones.</translation>
<context>
<name>Tomahawk::SpotifyParser</name>
<message>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="224"/>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="225"/>
<source>Error fetching Spotify information from the network!</source>
<translation>Error al buscar la información de Spotify en la red!</translation>
</message>
@@ -2851,7 +2880,7 @@ Intente ajustar los filtros para reproducir nuevas canciones.</translation>
<context>
<name>TomahawkApp</name>
<message>
<location filename="../src/TomahawkApp.cpp" line="596"/>
<location filename="../src/TomahawkApp.cpp" line="602"/>
<source>My Collection</source>
<translation>Mi colección</translation>
</message>
@@ -3430,14 +3459,14 @@ introduzca su número PIN aquí:</translation>
<translation>Todos los artistas</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="266"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="291"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<source>My Collection</source>
<translation>Mi colección</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="270"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="295"/>
<source>Collection of %1</source>
<translation>Colección de %1</translation>
</message>
@@ -3579,7 +3608,7 @@ Puede reenviar el mensaje de sincronización en cualquier momento simplemente en
<translation>Pistas reproducidas recientemente</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="149"/>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="150"/>
<source>No recently created playlists in your network.</source>
<translation>No hay listas de reproducción recientemente creadas en su red.</translation>
</message>
@@ -3608,7 +3637,7 @@ Puede reenviar el mensaje de sincronización en cualquier momento simplemente en
<context>
<name>XMPPBot</name>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="312"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="315"/>
<source>
Terms for %1:
</source>
@@ -3616,12 +3645,12 @@ Terms for %1:
Términos de %1:</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="314"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="317"/>
<source>No terms found, sorry.</source>
<translation>No se encuentran términos, lo siento.</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="347"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="350"/>
<source>
Hotttness for %1: %2
</source>
@@ -3630,7 +3659,7 @@ Actualidad de %1: %2
</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="363"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="366"/>
<source>
Familiarity for %1: %2
</source>
@@ -3639,7 +3668,7 @@ Familiaridad de %1: %2
</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="381"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="384"/>
<source>
Lyrics for &quot;%1&quot; by %2:
@@ -3655,22 +3684,22 @@ Letras de &quot;%1&quot; por %2:
<context>
<name>XSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="49"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="50"/>
<source>Failed to parse contents of XSPF playlist</source>
<translation>Error al analizar los contenidos de la lista XSPF</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="51"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="52"/>
<source>Some playlist entries were found without artist and track name, they will be omitted</source>
<translation>Algunas entradas de la lista no tenía información de artista o de títul y serán omitidas</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="53"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="54"/>
<source>Failed to fetch the desired playlist from the network, or the desired file does not exist</source>
<translation>Error al buscar la lista deseada en la red, o el fichero no existe</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="188"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="191"/>
<source>New Playlist</source>
<translation>Nueva lista de reproducción</translation>
</message>

View File

@@ -1,4 +1,31 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS language="fr" version="2.0">
<context>
<name>ACLJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ACLJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AccountFactoryWrapper</name>
<message>
@@ -35,34 +62,6 @@
<translation>Hors ligne</translation>
</message>
</context>
<context>
<name>AclJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation>Autoriser %1 à
se connecter et streamer depuis chez vous ?</translation>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation>Permettre Streaming</translation>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation>Refuser l&apos;accès</translation>
</message>
</context>
<context>
<name>AclJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation>Tomahawk a besoin que vous déciderez si %1 est autorisé à se connecter.</translation>
</message>
</context>
<context>
<name>ActionCollection</name>
<message>
@@ -195,7 +194,7 @@ se connecter et streamer depuis chez vous ?</translation>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.ui" line="310"/>
<source>Artist</source>
<translation type="unfinished"/>
<translation>Artiste</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.ui" line="153"/>
@@ -301,6 +300,24 @@ se connecter et streamer depuis chez vous ?</translation>
<translation>Haut</translation>
</message>
</context>
<context>
<name>AudioEngine</name>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="614"/>
<source>Sorry, Tomahawk couldn&apos;t find the track &apos;%1&apos; by %2</source>
<translation>Désolé, on a pas pu trouver la piste &apos;%1&apos; pour %2</translation>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="638"/>
<source>Sorry, Tomahawk couldn&apos;t find the artist &apos;%1&apos;</source>
<translation>Désolé, on a pas pu trouver l&apos;artiste &apos;%1&apos;</translation>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="664"/>
<source>Sorry, Tomahawk couldn&apos;t find the album &apos;%1&apos; by %2</source>
<translation>Désolé, on a pas pu trouver l&apos;album &apos;%1&apos; pour %2</translation>
</message>
</context>
<context>
<name>CategoryAddItem</name>
<message>
@@ -315,15 +332,13 @@ se connecter et streamer depuis chez vous ?</translation>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>New Station</source>
<translation>Nouvelle Station</translation>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>%1 Station</source>
<translation>Station %1</translation>
</message>
@@ -593,6 +608,19 @@ se connecter et streamer depuis chez vous ?</translation>
<translation>Titres sauvegardés</translation>
</message>
</context>
<context>
<name>LovedTracksItem</name>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.cpp" line="59"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation>Désolé, on a pas pu trouver aucune piste favoris!</translation>
</message>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.h" line="36"/>
<source>Loved Tracks</source>
<translation>Titres favoris</translation>
</message>
</context>
<context>
<name>NewPlaylistWidget</name>
<message>
@@ -742,12 +770,12 @@ se connecter et streamer depuis chez vous ?</translation>
<translation>vous</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="147"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="140"/>
<source>All tracks by %1 on album %2</source>
<translation>Tous les titres de %1 sur l&apos;album %2</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="167"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="165"/>
<source>All tracks by %1</source>
<translation>Tous les titres de %1</translation>
</message>
@@ -1023,47 +1051,47 @@ se connecter et streamer depuis chez vous ?</translation>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../src/SettingsDialog.cpp" line="302"/>
<location filename="../src/SettingsDialog.cpp" line="300"/>
<source>Collection</source>
<translation>Collection</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="309"/>
<location filename="../src/SettingsDialog.cpp" line="307"/>
<source>Advanced</source>
<translation>Avancés</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="157"/>
<location filename="../src/SettingsDialog.cpp" line="155"/>
<source>All</source>
<translation>Tous</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Some changed settings will not take effect until Tomahawk is restarted</source>
<translation>Certaines modifications ne prendront effet qu&apos;au prochain démarrage de Tomahawk</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="295"/>
<location filename="../src/SettingsDialog.cpp" line="293"/>
<source>Services</source>
<translation>Services</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="461"/>
<location filename="../src/SettingsDialog.cpp" line="459"/>
<source>Install resolver from file</source>
<translation>Installer un script de résolution depuis un fichier</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="508"/>
<location filename="../src/SettingsDialog.cpp" line="506"/>
<source>Delete all Access Control entries?</source>
<translation>Supprimer toutes les entrées de Contrôle d&apos;accès?</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="509"/>
<location filename="../src/SettingsDialog.cpp" line="507"/>
<source>Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to.</source>
<translation>Voulez-vous vraiment supprimer toutes les entrées de contrôle d&apos;accès ? On vous demandera de nouveau votre autorisation pour toutes les nouvelles connexions.</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Information</source>
<translation>Information</translation>
</message>
@@ -1162,19 +1190,19 @@ se connecter et streamer depuis chez vous ?</translation>
<translation>Top 10</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="192"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="202"/>
<source>All available tracks</source>
<translation>Tous les titres disponibles</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="285"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="326"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="295"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="336"/>
<source>Show</source>
<translation>Afficher</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="287"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="328"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="297"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="338"/>
<source>Hide</source>
<translation>Masquer</translation>
</message>
@@ -1197,17 +1225,17 @@ se connecter et streamer depuis chez vous ?</translation>
<translation>Dernières titres joués</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="68"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="70"/>
<source>New Additions</source>
<translation>Nouveaux ajouts</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="71"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="73"/>
<source>My recent activity</source>
<translation>Mon activité récente</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="75"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="77"/>
<source>Recent activity from %1</source>
<translation>Activité récente de %1</translation>
</message>
@@ -1221,7 +1249,7 @@ se connecter et streamer depuis chez vous ?</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="72"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="546"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="517"/>
<source>Latest Additions</source>
<translation>Derniers ajouts</translation>
</message>
@@ -1231,52 +1259,42 @@ se connecter et streamer depuis chez vous ?</translation>
<translation>Joués récemment</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="80"/>
<source>Loved Tracks</source>
<translation>Titres favoris</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="144"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="141"/>
<source>SuperCollection</source>
<translation>SuperCollection</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="518"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation>Désolé, on a pas pu trouver aucune piste favoris!</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="549"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="520"/>
<source>Latest additions to your collection</source>
<translation>Derniers ajouts à votre collection</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="551"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="522"/>
<source>Latest additions to %1&apos;s collection</source>
<translation>Derniers ajouts à la collection de %1</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="559"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="530"/>
<source>Sorry, we could not find any recent additions!</source>
<translation>Désolé, on a pas pu trouver des dernier ajouts!</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="587"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="560"/>
<source>Recently Played Tracks</source>
<translation>Derniers titres joués</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="590"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="563"/>
<source>Your recently played tracks</source>
<translation>Les derniers titres que vous avez joués</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="592"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="565"/>
<source>%1&apos;s recently played tracks</source>
<translation>Derniers titres joués par %1</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="599"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="572"/>
<source>Sorry, we could not find any recent plays!</source>
<translation>Désolé, on a pas pu trouver aucune piste récement joués!</translation>
</message>
@@ -1769,28 +1787,28 @@ et des stations basées sur vos goûts.</translation>
<translation>Import de l&apos;historique...</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="182"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="185"/>
<source>History Incomplete. Resume</source>
<translation>Historique incomplet. Reprendre</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="187"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="190"/>
<source>Playback History Imported</source>
<translation>Historique de lecture importé</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="210"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="225"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="213"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="228"/>
<source>Failed</source>
<translation>Échec</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="215"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="218"/>
<source>Success</source>
<translation>Succès</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="231"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="234"/>
<source>Could not contact server</source>
<translation>Impossible de contacter le serveur</translation>
</message>
@@ -1798,17 +1816,17 @@ et des stations basées sur vos goûts.</translation>
<context>
<name>Tomahawk::Accounts::SpotifyAccount</name>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="370"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="419"/>
<source>Sync with Spotify</source>
<translation>Synchroniser avec Spotify</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="374"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="423"/>
<source>Re-enable syncing with Spotify</source>
<translation>Réactiver la synchronisation avec Spotify</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="378"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="427"/>
<source>Stop syncing with Spotify</source>
<translation>Stopper la synchronisation avec Spotify</translation>
</message>
@@ -2011,9 +2029,19 @@ Essayez de vous authentifier de nouveau.</translation>
<source>Add to &amp;Queue</source>
<translation>&amp;Ajouter à la file d&apos;attente</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>Continue Playback after this &amp;Track</source>
<translation>Continuer la lecture après cette &amp;piste</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>Stop Playback after this &amp;Track</source>
<translation>Stopper la lecture après cette &amp;piste</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="97"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="308"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="316"/>
<source>&amp;Love</source>
<translation>&amp;Favori</translation>
</message>
@@ -2023,7 +2051,17 @@ Essayez de vous authentifier de nouveau.</translation>
<translation>&amp;Copier le lien de la piste</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="303"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="155"/>
<source>Copy Album &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="197"/>
<source>Copy Artist &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="311"/>
<source>Un-&amp;Love</source>
<translation>&amp;Supprimer des Favoris</translation>
</message>
@@ -2032,16 +2070,6 @@ Essayez de vous authentifier de nouveau.</translation>
<source>&amp;Delete Items</source>
<translation>&amp;Supprimer les éléments</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>&amp;Continue Playback after this Track</source>
<translation>&amp;Continuer la lecture après cette piste</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>&amp;Stop Playback after this Track</source>
<translation>&amp;Stopper la lecture après cette piste</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="108"/>
<source>&amp;Show Track Page</source>
@@ -2601,7 +2629,7 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer.</transl
<context>
<name>Tomahawk::GroovesharkParser</name>
<message>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="255"/>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="256"/>
<source>Error fetching Grooveshark information from the network!</source>
<translation>Échec du chargement des informations Grooveshark depuis le réseau!</translation>
</message>
@@ -2689,7 +2717,7 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer.</transl
<context>
<name>Tomahawk::ItunesParser</name>
<message>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="170"/>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="175"/>
<source>Error fetching iTunes information from the network!</source>
<translation>Échec du chargement des informations iTunes depuis le réseau !</translation>
</message>
@@ -2697,27 +2725,27 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer.</transl
<context>
<name>Tomahawk::JSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="140"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="144"/>
<source>New Playlist</source>
<translation>Nouvelle liste de lecture</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Failed to save tracks</source>
<translation>Échec de la sauvegarde des pistes</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Some tracks in the playlist do not contain an artist and a title. They will be ignored.</source>
<translation>Certaines pistes dans la liste de lecture ne contiennent pas d&apos;artiste ou de titre. Elles seront ignorées.</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>XSPF Error</source>
<translation>Erreur XSPF</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>This is not a valid XSPF playlist.</source>
<translation>Ceci n&apos;est pas une liste de lecture XSPF valide.</translation>
</message>
@@ -2739,37 +2767,37 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer.</transl
<context>
<name>Tomahawk::Query</name>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="723"/>
<location filename="../src/libtomahawk/Query.cpp" line="728"/>
<source> and </source>
<translation> et </translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="731"/>
<location filename="../src/libtomahawk/Query.cpp" line="736"/>
<source>You</source>
<translation>Vous</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="733"/>
<location filename="../src/libtomahawk/Query.cpp" line="738"/>
<source>you</source>
<translation>vous</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>and</source>
<translation>et</translation>
</message>
<message numerus="yes">
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>%n other(s)</source>
<translation><numerusform>%n autre</numerusform><numerusform>%n autres</numerusform></translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="745"/>
<location filename="../src/libtomahawk/Query.cpp" line="750"/>
<source>%1 people</source>
<translation>%1 personnes</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<location filename="../src/libtomahawk/Query.cpp" line="752"/>
<source>loved this track</source>
<translation>a enregistré cette piste dans ses favoris</translation>
</message>
@@ -2777,7 +2805,7 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer.</transl
<context>
<name>Tomahawk::RdioParser</name>
<message>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="193"/>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="200"/>
<source>Error fetching Rdio information from the network!</source>
<translation>Échec du chargement des informations Rdio depuis le réseau!</translation>
</message>
@@ -2837,7 +2865,7 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer.</transl
<context>
<name>Tomahawk::SpotifyParser</name>
<message>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="224"/>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="225"/>
<source>Error fetching Spotify information from the network!</source>
<translation>Échec du chargement des informations Spotify depuis le réseau!</translation>
</message>
@@ -2853,7 +2881,7 @@ Essayez de changer les filtres pour avoir de nouveaux morceaux à jouer.</transl
<context>
<name>TomahawkApp</name>
<message>
<location filename="../src/TomahawkApp.cpp" line="596"/>
<location filename="../src/TomahawkApp.cpp" line="602"/>
<source>My Collection</source>
<translation>Ma Collection</translation>
</message>
@@ -3432,14 +3460,14 @@ saisissez le numéro PIN ici :</translation>
<translation>Tous les artistes</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="266"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="291"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<source>My Collection</source>
<translation>Ma Collection</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="270"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="295"/>
<source>Collection of %1</source>
<translation>Collection de %1</translation>
</message>
@@ -3581,7 +3609,7 @@ Vous pouvez envoyer un message de synchronisation quand vous le souhaitez en env
<translation>Joués récemment</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="149"/>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="150"/>
<source>No recently created playlists in your network.</source>
<translation>Pas de liste de lecture créée récemment sur votre réseau.</translation>
</message>
@@ -3610,7 +3638,7 @@ Vous pouvez envoyer un message de synchronisation quand vous le souhaitez en env
<context>
<name>XMPPBot</name>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="312"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="315"/>
<source>
Terms for %1:
</source>
@@ -3619,12 +3647,12 @@ Résultats pour %1 :
</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="314"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="317"/>
<source>No terms found, sorry.</source>
<translation>Aucun terme trouvé, désolé.</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="347"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="350"/>
<source>
Hotttness for %1: %2
</source>
@@ -3633,7 +3661,7 @@ Hotttness pour %1 : %2
</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="363"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="366"/>
<source>
Familiarity for %1: %2
</source>
@@ -3642,7 +3670,7 @@ Familiarité pour %1 : %2
</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="381"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="384"/>
<source>
Lyrics for &quot;%1&quot; by %2:
@@ -3658,22 +3686,22 @@ Paroles de &quot;%1&quot; par %2 :
<context>
<name>XSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="49"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="50"/>
<source>Failed to parse contents of XSPF playlist</source>
<translation>Échec du décodage de la liste de lecture XSPF</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="51"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="52"/>
<source>Some playlist entries were found without artist and track name, they will be omitted</source>
<translation>Certaines entrées de la liste de lecture n&apos;ont pas d&apos;artiste ou de titre, elles seront omises</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="53"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="54"/>
<source>Failed to fetch the desired playlist from the network, or the desired file does not exist</source>
<translation>Échec du chargement de la liste de lecture depuis le réseau, ou le fichier n&apos;existe pas</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="188"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="191"/>
<source>New Playlist</source>
<translation>Nouvelle liste de lecture</translation>
</message>

View File

@@ -1,4 +1,31 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS language="ja" version="2.0">
<context>
<name>ACLJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ACLJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AccountFactoryWrapper</name>
<message>
@@ -35,33 +62,6 @@
<translation></translation>
</message>
</context>
<context>
<name>AclJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AclJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ActionCollection</name>
<message>
@@ -300,6 +300,24 @@ connect and stream from you?</source>
<translation></translation>
</message>
</context>
<context>
<name>AudioEngine</name>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="614"/>
<source>Sorry, Tomahawk couldn&apos;t find the track &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="638"/>
<source>Sorry, Tomahawk couldn&apos;t find the artist &apos;%1&apos;</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="664"/>
<source>Sorry, Tomahawk couldn&apos;t find the album &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>CategoryAddItem</name>
<message>
@@ -314,15 +332,13 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>New Station</source>
<translation></translation>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>%1 Station</source>
<translation>%1 </translation>
</message>
@@ -593,6 +609,19 @@ connect and stream from you?</source>
<translation></translation>
</message>
</context>
<context>
<name>LovedTracksItem</name>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.cpp" line="59"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.h" line="36"/>
<source>Loved Tracks</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>NewPlaylistWidget</name>
<message>
@@ -742,12 +771,12 @@ connect and stream from you?</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="147"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="140"/>
<source>All tracks by %1 on album %2</source>
<translation>%1%2</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="167"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="165"/>
<source>All tracks by %1</source>
<translation>%1</translation>
</message>
@@ -1023,47 +1052,47 @@ connect and stream from you?</source>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../src/SettingsDialog.cpp" line="302"/>
<location filename="../src/SettingsDialog.cpp" line="300"/>
<source>Collection</source>
<translation></translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="309"/>
<location filename="../src/SettingsDialog.cpp" line="307"/>
<source>Advanced</source>
<translation></translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="157"/>
<location filename="../src/SettingsDialog.cpp" line="155"/>
<source>All</source>
<translation></translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Some changed settings will not take effect until Tomahawk is restarted</source>
<translation>Tomahawkを再起動すると設定変更が反映されます</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="295"/>
<location filename="../src/SettingsDialog.cpp" line="293"/>
<source>Services</source>
<translation></translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="461"/>
<location filename="../src/SettingsDialog.cpp" line="459"/>
<source>Install resolver from file</source>
<translation></translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="508"/>
<location filename="../src/SettingsDialog.cpp" line="506"/>
<source>Delete all Access Control entries?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="509"/>
<location filename="../src/SettingsDialog.cpp" line="507"/>
<source>Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Information</source>
<translation></translation>
</message>
@@ -1162,19 +1191,19 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="192"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="202"/>
<source>All available tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="285"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="326"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="295"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="336"/>
<source>Show</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="287"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="328"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="297"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="338"/>
<source>Hide</source>
<translation type="unfinished"/>
</message>
@@ -1197,17 +1226,17 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="68"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="70"/>
<source>New Additions</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="71"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="73"/>
<source>My recent activity</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="75"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="77"/>
<source>Recent activity from %1</source>
<translation type="unfinished"/>
</message>
@@ -1221,7 +1250,7 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="72"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="546"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="517"/>
<source>Latest Additions</source>
<translation type="unfinished"/>
</message>
@@ -1231,52 +1260,42 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="80"/>
<source>Loved Tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="144"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="141"/>
<source>SuperCollection</source>
<translation></translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="518"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="549"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="520"/>
<source>Latest additions to your collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="551"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="522"/>
<source>Latest additions to %1&apos;s collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="559"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="530"/>
<source>Sorry, we could not find any recent additions!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="587"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="560"/>
<source>Recently Played Tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="590"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="563"/>
<source>Your recently played tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="592"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="565"/>
<source>%1&apos;s recently played tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="599"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="572"/>
<source>Sorry, we could not find any recent plays!</source>
<translation type="unfinished"/>
</message>
@@ -1766,28 +1785,28 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="182"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="185"/>
<source>History Incomplete. Resume</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="187"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="190"/>
<source>Playback History Imported</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="210"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="225"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="213"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="228"/>
<source>Failed</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="215"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="218"/>
<source>Success</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="231"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="234"/>
<source>Could not contact server</source>
<translation type="unfinished"/>
</message>
@@ -1795,17 +1814,17 @@ connect and stream from you?</source>
<context>
<name>Tomahawk::Accounts::SpotifyAccount</name>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="370"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="419"/>
<source>Sync with Spotify</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="374"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="423"/>
<source>Re-enable syncing with Spotify</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="378"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="427"/>
<source>Stop syncing with Spotify</source>
<translation type="unfinished"/>
</message>
@@ -2005,9 +2024,19 @@ You may wish to try re-authenticating.</source>
<source>Add to &amp;Queue</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>Continue Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>Stop Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="97"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="308"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="316"/>
<source>&amp;Love</source>
<translation>&amp;Love</translation>
</message>
@@ -2017,7 +2046,17 @@ You may wish to try re-authenticating.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="303"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="155"/>
<source>Copy Album &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="197"/>
<source>Copy Artist &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="311"/>
<source>Un-&amp;Love</source>
<translation>Loveじゃないトラック</translation>
</message>
@@ -2026,16 +2065,6 @@ You may wish to try re-authenticating.</source>
<source>&amp;Delete Items</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>&amp;Continue Playback after this Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>&amp;Stop Playback after this Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="108"/>
<source>&amp;Show Track Page</source>
@@ -2591,7 +2620,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::GroovesharkParser</name>
<message>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="255"/>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="256"/>
<source>Error fetching Grooveshark information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2679,7 +2708,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::ItunesParser</name>
<message>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="170"/>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="175"/>
<source>Error fetching iTunes information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2687,27 +2716,27 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::JSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="140"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="144"/>
<source>New Playlist</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Failed to save tracks</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Some tracks in the playlist do not contain an artist and a title. They will be ignored.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>XSPF Error</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>This is not a valid XSPF playlist.</source>
<translation type="unfinished"/>
</message>
@@ -2729,37 +2758,37 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::Query</name>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="723"/>
<location filename="../src/libtomahawk/Query.cpp" line="728"/>
<source> and </source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="731"/>
<location filename="../src/libtomahawk/Query.cpp" line="736"/>
<source>You</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="733"/>
<location filename="../src/libtomahawk/Query.cpp" line="738"/>
<source>you</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>and</source>
<translation type="unfinished"/>
</message>
<message numerus="yes">
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>%n other(s)</source>
<translation type="unfinished"><numerusform></numerusform></translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="745"/>
<location filename="../src/libtomahawk/Query.cpp" line="750"/>
<source>%1 people</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<location filename="../src/libtomahawk/Query.cpp" line="752"/>
<source>loved this track</source>
<translation type="unfinished"/>
</message>
@@ -2767,7 +2796,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::RdioParser</name>
<message>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="193"/>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="200"/>
<source>Error fetching Rdio information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2827,7 +2856,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::SpotifyParser</name>
<message>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="224"/>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="225"/>
<source>Error fetching Spotify information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2843,7 +2872,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>TomahawkApp</name>
<message>
<location filename="../src/TomahawkApp.cpp" line="596"/>
<location filename="../src/TomahawkApp.cpp" line="602"/>
<source>My Collection</source>
<translation type="unfinished"/>
</message>
@@ -3422,14 +3451,14 @@ Meta+Ctrl+Z</translation>
<translation>すべてのアーティスト</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="266"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="291"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<source>My Collection</source>
<translation>マイコレクション</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="270"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="295"/>
<source>Collection of %1</source>
<translation>%1のコレクション</translation>
</message>
@@ -3572,7 +3601,7 @@ Twitterを使っている友達にTomahawkを接続したいなら、ツイー
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="149"/>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="150"/>
<source>No recently created playlists in your network.</source>
<translation></translation>
</message>
@@ -3601,7 +3630,7 @@ Twitterを使っている友達にTomahawkを接続したいなら、ツイー
<context>
<name>XMPPBot</name>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="312"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="315"/>
<source>
Terms for %1:
</source>
@@ -3610,26 +3639,26 @@ Terms for %1:
</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="314"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="317"/>
<source>No terms found, sorry.</source>
<translation></translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="347"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="350"/>
<source>
Hotttness for %1: %2
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="363"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="366"/>
<source>
Familiarity for %1: %2
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="381"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="384"/>
<source>
Lyrics for &quot;%1&quot; by %2:
@@ -3641,22 +3670,22 @@ Lyrics for &quot;%1&quot; by %2:
<context>
<name>XSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="49"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="50"/>
<source>Failed to parse contents of XSPF playlist</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="51"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="52"/>
<source>Some playlist entries were found without artist and track name, they will be omitted</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="53"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="54"/>
<source>Failed to fetch the desired playlist from the network, or the desired file does not exist</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="188"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="191"/>
<source>New Playlist</source>
<translation></translation>
</message>

View File

@@ -1,4 +1,31 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS language="pl" version="2.0">
<context>
<name>ACLJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ACLJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AccountFactoryWrapper</name>
<message>
@@ -35,33 +62,6 @@
<translation>Offline</translation>
</message>
</context>
<context>
<name>AclJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AclJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ActionCollection</name>
<message>
@@ -300,6 +300,24 @@ connect and stream from you?</source>
<translation>Wysoko</translation>
</message>
</context>
<context>
<name>AudioEngine</name>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="614"/>
<source>Sorry, Tomahawk couldn&apos;t find the track &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="638"/>
<source>Sorry, Tomahawk couldn&apos;t find the artist &apos;%1&apos;</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="664"/>
<source>Sorry, Tomahawk couldn&apos;t find the album &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>CategoryAddItem</name>
<message>
@@ -314,15 +332,13 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>New Station</source>
<translation>Nowa stacja</translation>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>%1 Station</source>
<translation>Stacja %1</translation>
</message>
@@ -592,6 +608,19 @@ connect and stream from you?</source>
<translation>Zapisane piosenki</translation>
</message>
</context>
<context>
<name>LovedTracksItem</name>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.cpp" line="59"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.h" line="36"/>
<source>Loved Tracks</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>NewPlaylistWidget</name>
<message>
@@ -741,12 +770,12 @@ connect and stream from you?</source>
<translation>Twoja</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="147"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="140"/>
<source>All tracks by %1 on album %2</source>
<translation>Wszystkie piosenki %1 z albumu %2</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="167"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="165"/>
<source>All tracks by %1</source>
<translation>Wszystkie piosenki %1</translation>
</message>
@@ -1021,47 +1050,47 @@ connect and stream from you?</source>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../src/SettingsDialog.cpp" line="302"/>
<location filename="../src/SettingsDialog.cpp" line="300"/>
<source>Collection</source>
<translation>Kolekcje</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="309"/>
<location filename="../src/SettingsDialog.cpp" line="307"/>
<source>Advanced</source>
<translation>Zaawansowane</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="157"/>
<location filename="../src/SettingsDialog.cpp" line="155"/>
<source>All</source>
<translation>Wszystkie</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Some changed settings will not take effect until Tomahawk is restarted</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="295"/>
<location filename="../src/SettingsDialog.cpp" line="293"/>
<source>Services</source>
<translation>Usługi</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="461"/>
<location filename="../src/SettingsDialog.cpp" line="459"/>
<source>Install resolver from file</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="508"/>
<location filename="../src/SettingsDialog.cpp" line="506"/>
<source>Delete all Access Control entries?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="509"/>
<location filename="../src/SettingsDialog.cpp" line="507"/>
<source>Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Information</source>
<translation>Informacja</translation>
</message>
@@ -1160,19 +1189,19 @@ connect and stream from you?</source>
<translation>Top 10</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="192"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="202"/>
<source>All available tracks</source>
<translation>Wszystkie dostępne utwory</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="285"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="326"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="295"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="336"/>
<source>Show</source>
<translation>Pokaż</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="287"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="328"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="297"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="338"/>
<source>Hide</source>
<translation>Ukryj</translation>
</message>
@@ -1195,17 +1224,17 @@ connect and stream from you?</source>
<translation>Ostatnio Odtwarzane Utwory</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="68"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="70"/>
<source>New Additions</source>
<translation>Nowo dodane</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="71"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="73"/>
<source>My recent activity</source>
<translation>Moja ostatnia aktywność</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="75"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="77"/>
<source>Recent activity from %1</source>
<translation>Ostatnia aktywność %1</translation>
</message>
@@ -1219,7 +1248,7 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="72"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="546"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="517"/>
<source>Latest Additions</source>
<translation>Ostatnio Dodane</translation>
</message>
@@ -1229,52 +1258,42 @@ connect and stream from you?</source>
<translation>Ostatnio Odtworzone</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="80"/>
<source>Loved Tracks</source>
<translation>Ulubione Utwory</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="144"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="141"/>
<source>SuperCollection</source>
<translation>Superkolekcja</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="518"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="549"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="520"/>
<source>Latest additions to your collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="551"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="522"/>
<source>Latest additions to %1&apos;s collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="559"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="530"/>
<source>Sorry, we could not find any recent additions!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="587"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="560"/>
<source>Recently Played Tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="590"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="563"/>
<source>Your recently played tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="592"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="565"/>
<source>%1&apos;s recently played tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="599"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="572"/>
<source>Sorry, we could not find any recent plays!</source>
<translation type="unfinished"/>
</message>
@@ -1768,28 +1787,28 @@ indywidualnego profilu gustu.</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="182"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="185"/>
<source>History Incomplete. Resume</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="187"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="190"/>
<source>Playback History Imported</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="210"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="225"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="213"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="228"/>
<source>Failed</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="215"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="218"/>
<source>Success</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="231"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="234"/>
<source>Could not contact server</source>
<translation type="unfinished"/>
</message>
@@ -1797,17 +1816,17 @@ indywidualnego profilu gustu.</translation>
<context>
<name>Tomahawk::Accounts::SpotifyAccount</name>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="370"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="419"/>
<source>Sync with Spotify</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="374"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="423"/>
<source>Re-enable syncing with Spotify</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="378"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="427"/>
<source>Stop syncing with Spotify</source>
<translation type="unfinished"/>
</message>
@@ -2007,9 +2026,19 @@ You may wish to try re-authenticating.</source>
<source>Add to &amp;Queue</source>
<translation>Dodaj do &amp;kolejki</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>Continue Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>Stop Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="97"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="308"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="316"/>
<source>&amp;Love</source>
<translation>&amp;Uwielbiam</translation>
</message>
@@ -2019,7 +2048,17 @@ You may wish to try re-authenticating.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="303"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="155"/>
<source>Copy Album &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="197"/>
<source>Copy Artist &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="311"/>
<source>Un-&amp;Love</source>
<translation type="unfinished"/>
</message>
@@ -2028,16 +2067,6 @@ You may wish to try re-authenticating.</source>
<source>&amp;Delete Items</source>
<translation>&amp;Usuń pozycje</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>&amp;Continue Playback after this Track</source>
<translation>&amp;Kontynuuj odtwarzanie po tym utworze</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>&amp;Stop Playback after this Track</source>
<translation>&amp;Zatrzymaj odtwarzanie po tym utworze</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="108"/>
<source>&amp;Show Track Page</source>
@@ -2595,7 +2624,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::GroovesharkParser</name>
<message>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="255"/>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="256"/>
<source>Error fetching Grooveshark information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2683,7 +2712,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::ItunesParser</name>
<message>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="170"/>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="175"/>
<source>Error fetching iTunes information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2691,27 +2720,27 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::JSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="140"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="144"/>
<source>New Playlist</source>
<translation>Nowa Lista</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Failed to save tracks</source>
<translation>Nie udało się zapisać utworów</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Some tracks in the playlist do not contain an artist and a title. They will be ignored.</source>
<translation>Niektóre utwory na liście nie zawierają artysty lub tytułu. Zostaną one zignorowane.</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>XSPF Error</source>
<translation>Błąd XSPF</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>This is not a valid XSPF playlist.</source>
<translation>To nie jest poprawna lista XSPF.</translation>
</message>
@@ -2733,37 +2762,37 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::Query</name>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="723"/>
<location filename="../src/libtomahawk/Query.cpp" line="728"/>
<source> and </source>
<translation> i </translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="731"/>
<location filename="../src/libtomahawk/Query.cpp" line="736"/>
<source>You</source>
<translation>Ty</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="733"/>
<location filename="../src/libtomahawk/Query.cpp" line="738"/>
<source>you</source>
<translation>ty</translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>and</source>
<translation>i</translation>
</message>
<message numerus="yes">
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>%n other(s)</source>
<translation><numerusform>%n inny</numerusform><numerusform>%n inne</numerusform><numerusform>%n innych</numerusform></translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="745"/>
<location filename="../src/libtomahawk/Query.cpp" line="750"/>
<source>%1 people</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<location filename="../src/libtomahawk/Query.cpp" line="752"/>
<source>loved this track</source>
<translation type="unfinished"/>
</message>
@@ -2771,7 +2800,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::RdioParser</name>
<message>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="193"/>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="200"/>
<source>Error fetching Rdio information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2831,7 +2860,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::SpotifyParser</name>
<message>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="224"/>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="225"/>
<source>Error fetching Spotify information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2847,7 +2876,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>TomahawkApp</name>
<message>
<location filename="../src/TomahawkApp.cpp" line="596"/>
<location filename="../src/TomahawkApp.cpp" line="602"/>
<source>My Collection</source>
<translation>Moja Kolekcja</translation>
</message>
@@ -3426,14 +3455,14 @@ wprowadź pokazany numer PIN tutaj:</translation>
<translation>Wszyscy Artyści</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="266"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="291"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<source>My Collection</source>
<translation>Moja Kolekcja</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="270"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="295"/>
<source>Collection of %1</source>
<translation>Kolekcja %1</translation>
</message>
@@ -3575,7 +3604,7 @@ Zawsze możesz ponownie wysłać wiadomość synchronizacyjną - po prostu wyśl
<translation>Ostatnio Odtworzone Utwory</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="149"/>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="150"/>
<source>No recently created playlists in your network.</source>
<translation>Brak ostatnio utworzonych list w twojej sieci.</translation>
</message>
@@ -3604,26 +3633,26 @@ Zawsze możesz ponownie wysłać wiadomość synchronizacyjną - po prostu wyśl
<context>
<name>XMPPBot</name>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="312"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="315"/>
<source>
Terms for %1:
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="314"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="317"/>
<source>No terms found, sorry.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="347"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="350"/>
<source>
Hotttness for %1: %2
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="363"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="366"/>
<source>
Familiarity for %1: %2
</source>
@@ -3632,7 +3661,7 @@ Znajomość dla %1: %2
</translation>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="381"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="384"/>
<source>
Lyrics for &quot;%1&quot; by %2:
@@ -3648,22 +3677,22 @@ Tekst dla &quot;%1&quot; wykonawcy %2:
<context>
<name>XSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="49"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="50"/>
<source>Failed to parse contents of XSPF playlist</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="51"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="52"/>
<source>Some playlist entries were found without artist and track name, they will be omitted</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="53"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="54"/>
<source>Failed to fetch the desired playlist from the network, or the desired file does not exist</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="188"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="191"/>
<source>New Playlist</source>
<translation>Nowa Lista</translation>
</message>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,31 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS language="sv" version="2.0">
<context>
<name>ACLJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ACLJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AccountFactoryWrapper</name>
<message>
@@ -35,33 +62,6 @@
<translation>Offline</translation>
</message>
</context>
<context>
<name>AclJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AclJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ActionCollection</name>
<message>
@@ -300,6 +300,24 @@ connect and stream from you?</source>
<translation>Hög</translation>
</message>
</context>
<context>
<name>AudioEngine</name>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="614"/>
<source>Sorry, Tomahawk couldn&apos;t find the track &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="638"/>
<source>Sorry, Tomahawk couldn&apos;t find the artist &apos;%1&apos;</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="664"/>
<source>Sorry, Tomahawk couldn&apos;t find the album &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>CategoryAddItem</name>
<message>
@@ -314,15 +332,13 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>New Station</source>
<translation>Ny station</translation>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>%1 Station</source>
<translation>%1 station</translation>
</message>
@@ -592,6 +608,19 @@ connect and stream from you?</source>
<translation>Sparade spår</translation>
</message>
</context>
<context>
<name>LovedTracksItem</name>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.cpp" line="59"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.h" line="36"/>
<source>Loved Tracks</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>NewPlaylistWidget</name>
<message>
@@ -741,12 +770,12 @@ connect and stream from you?</source>
<translation>dig</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="147"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="140"/>
<source>All tracks by %1 on album %2</source>
<translation>Alla spår av %1 från albumet %2</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="167"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="165"/>
<source>All tracks by %1</source>
<translation>Alla spår av %1</translation>
</message>
@@ -1022,47 +1051,47 @@ connect and stream from you?</source>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../src/SettingsDialog.cpp" line="302"/>
<location filename="../src/SettingsDialog.cpp" line="300"/>
<source>Collection</source>
<translation>Samling</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="309"/>
<location filename="../src/SettingsDialog.cpp" line="307"/>
<source>Advanced</source>
<translation>Avancerat</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="157"/>
<location filename="../src/SettingsDialog.cpp" line="155"/>
<source>All</source>
<translation>Alla</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Some changed settings will not take effect until Tomahawk is restarted</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="295"/>
<location filename="../src/SettingsDialog.cpp" line="293"/>
<source>Services</source>
<translation>Tjänster</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="461"/>
<location filename="../src/SettingsDialog.cpp" line="459"/>
<source>Install resolver from file</source>
<translation>Installera resolver från fil</translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="508"/>
<location filename="../src/SettingsDialog.cpp" line="506"/>
<source>Delete all Access Control entries?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="509"/>
<location filename="../src/SettingsDialog.cpp" line="507"/>
<source>Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Information</source>
<translation>Information</translation>
</message>
@@ -1161,19 +1190,19 @@ connect and stream from you?</source>
<translation>Topp 10</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="192"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="202"/>
<source>All available tracks</source>
<translation>Alla tillgängliga spår</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="285"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="326"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="295"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="336"/>
<source>Show</source>
<translation>Visa</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="287"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="328"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="297"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="338"/>
<source>Hide</source>
<translation>Göm</translation>
</message>
@@ -1196,17 +1225,17 @@ connect and stream from you?</source>
<translation>Senaste spelade spår</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="68"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="70"/>
<source>New Additions</source>
<translation>Nya tillägg</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="71"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="73"/>
<source>My recent activity</source>
<translation>Min senaste aktivitet</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="75"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="77"/>
<source>Recent activity from %1</source>
<translation>Senaste aktivitet från %1</translation>
</message>
@@ -1220,7 +1249,7 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="72"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="546"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="517"/>
<source>Latest Additions</source>
<translation>Senast tillagda</translation>
</message>
@@ -1230,52 +1259,42 @@ connect and stream from you?</source>
<translation>Senast spelade spår</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="80"/>
<source>Loved Tracks</source>
<translation>Älskade låtar</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="144"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="141"/>
<source>SuperCollection</source>
<translation>SuperCollection</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="518"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="549"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="520"/>
<source>Latest additions to your collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="551"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="522"/>
<source>Latest additions to %1&apos;s collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="559"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="530"/>
<source>Sorry, we could not find any recent additions!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="587"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="560"/>
<source>Recently Played Tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="590"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="563"/>
<source>Your recently played tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="592"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="565"/>
<source>%1&apos;s recently played tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="599"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="572"/>
<source>Sorry, we could not find any recent plays!</source>
<translation type="unfinished"/>
</message>
@@ -1415,7 +1434,7 @@ connect and stream from you?</source>
<message>
<location filename="../src/sourcetree/SourcesModel.cpp" line="306"/>
<source>Charts</source>
<translation type="unfinished"/>
<translation>Topplistor</translation>
</message>
<message>
<location filename="../src/sourcetree/SourcesModel.cpp" line="311"/>
@@ -1425,7 +1444,7 @@ connect and stream from you?</source>
<message>
<location filename="../src/sourcetree/SourcesModel.cpp" line="316"/>
<source>Friends</source>
<translation type="unfinished"/>
<translation>Vänner</translation>
</message>
</context>
<context>
@@ -1473,12 +1492,12 @@ connect and stream from you?</source>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccountConfig.ui" line="79"/>
<source>Username:</source>
<translation type="unfinished"/>
<translation>Användarnamn:</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccountConfig.ui" line="96"/>
<source>Password:</source>
<translation type="unfinished"/>
<translation>Lösenord:</translation>
</message>
</context>
<context>
@@ -1509,7 +1528,7 @@ connect and stream from you?</source>
<message>
<location filename="../src/StackedSettingsDialog.ui" line="166"/>
<source>Path to scan for music files:</source>
<translation type="unfinished"/>
<translation>Sökväg att leta efter musik i</translation>
</message>
<message>
<location filename="../src/StackedSettingsDialog.ui" line="180"/>
@@ -1527,12 +1546,12 @@ connect and stream from you?</source>
<message>
<location filename="../src/StackedSettingsDialog.ui" line="199"/>
<source>Watch for changes</source>
<translation type="unfinished"/>
<translation>Bevaka förändringar</translation>
</message>
<message>
<location filename="../src/StackedSettingsDialog.ui" line="208"/>
<source>Time between scans, in seconds:</source>
<translation type="unfinished"/>
<translation>Intervall mellan letande, i sekunder</translation>
</message>
<message>
<location filename="../src/StackedSettingsDialog.ui" line="245"/>
@@ -1582,17 +1601,17 @@ connect and stream from you?</source>
<message>
<location filename="../src/StackedSettingsDialog.ui" line="98"/>
<source>Internet Services</source>
<translation type="unfinished"/>
<translation>Internet-tjänster</translation>
</message>
<message>
<location filename="../src/StackedSettingsDialog.ui" line="109"/>
<source>Install from file...</source>
<translation type="unfinished"/>
<translation>Installera från fil</translation>
</message>
<message>
<location filename="../src/StackedSettingsDialog.ui" line="129"/>
<source>Filter by capability:</source>
<translation type="unfinished"/>
<translation>Filtrera efter funktion:</translation>
</message>
<message>
<location filename="../src/StackedSettingsDialog.ui" line="305"/>
@@ -1617,7 +1636,7 @@ connect and stream from you?</source>
<message>
<location filename="../src/StackedSettingsDialog.ui" line="414"/>
<source>Send reports after Tomahawk crashed</source>
<translation type="unfinished"/>
<translation>Skicka en felrapport om Tomahawk kraschar</translation>
</message>
<message>
<location filename="../src/StackedSettingsDialog.ui" line="401"/>
@@ -1648,7 +1667,7 @@ connect and stream from you?</source>
<message>
<location filename="../src/libtomahawk/accounts/AccountDelegate.cpp" line="224"/>
<source>Add Account</source>
<translation type="unfinished"/>
<translation>Lägg till konto</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/AccountDelegate.cpp" line="274"/>
@@ -1668,7 +1687,7 @@ connect and stream from you?</source>
<message>
<location filename="../src/libtomahawk/accounts/AccountDelegate.cpp" line="575"/>
<source>Connecting...</source>
<translation type="unfinished"/>
<translation>Ansluter</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/AccountDelegate.cpp" line="580"/>
@@ -1694,12 +1713,12 @@ connect and stream from you?</source>
<message>
<location filename="../src/accounts/xmpp/googlewrapper/GoogleWrapper.cpp" line="82"/>
<source>Configure this Google Account</source>
<translation type="unfinished"/>
<translation>Konfigurera Google-konto</translation>
</message>
<message>
<location filename="../src/accounts/xmpp/googlewrapper/GoogleWrapper.cpp" line="83"/>
<source>Google Address</source>
<translation type="unfinished"/>
<translation>Google-adress</translation>
</message>
<message>
<location filename="../src/accounts/xmpp/googlewrapper/GoogleWrapper.cpp" line="84"/>
@@ -1709,7 +1728,7 @@ connect and stream from you?</source>
<message>
<location filename="../src/accounts/xmpp/googlewrapper/GoogleWrapper.cpp" line="85"/>
<source>username@gmail.com</source>
<translation type="unfinished"/>
<translation>användarnamn@gmail.com</translation>
</message>
</context>
<context>
@@ -1725,12 +1744,12 @@ connect and stream from you?</source>
<message>
<location filename="../src/accounts/xmpp/googlewrapper/GoogleWrapper.cpp" line="61"/>
<source>Add Friend</source>
<translation type="unfinished"/>
<translation>Lägg till vän</translation>
</message>
<message>
<location filename="../src/accounts/xmpp/googlewrapper/GoogleWrapper.cpp" line="62"/>
<source>Enter Google Address:</source>
<translation type="unfinished"/>
<translation>Ange Google-adress:</translation>
</message>
</context>
<context>
@@ -1765,28 +1784,28 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="182"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="185"/>
<source>History Incomplete. Resume</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="187"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="190"/>
<source>Playback History Imported</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="210"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="225"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="213"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="228"/>
<source>Failed</source>
<translation type="unfinished"/>
<translation>Misslyckades</translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="215"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="218"/>
<source>Success</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="231"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="234"/>
<source>Could not contact server</source>
<translation type="unfinished"/>
</message>
@@ -1794,17 +1813,17 @@ connect and stream from you?</source>
<context>
<name>Tomahawk::Accounts::SpotifyAccount</name>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="370"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="419"/>
<source>Sync with Spotify</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="374"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="423"/>
<source>Re-enable syncing with Spotify</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="378"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="427"/>
<source>Stop syncing with Spotify</source>
<translation type="unfinished"/>
</message>
@@ -1855,7 +1874,7 @@ connect and stream from you?</source>
<location filename="../src/accounts/twitter/TwitterConfigWidget.cpp" line="143"/>
<location filename="../src/accounts/twitter/TwitterConfigWidget.cpp" line="191"/>
<source>Tweet!</source>
<translation type="unfinished"/>
<translation>Twittra</translation>
</message>
<message>
<location filename="../src/accounts/twitter/TwitterConfigWidget.cpp" line="68"/>
@@ -2004,9 +2023,19 @@ You may wish to try re-authenticating.</source>
<source>Add to &amp;Queue</source>
<translation>Lägg till i &amp;</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>Continue Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>Stop Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="97"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="308"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="316"/>
<source>&amp;Love</source>
<translation type="unfinished"/>
</message>
@@ -2016,7 +2045,17 @@ You may wish to try re-authenticating.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="303"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="155"/>
<source>Copy Album &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="197"/>
<source>Copy Artist &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="311"/>
<source>Un-&amp;Love</source>
<translation type="unfinished"/>
</message>
@@ -2025,16 +2064,6 @@ You may wish to try re-authenticating.</source>
<source>&amp;Delete Items</source>
<translation>&amp;Ta bort objekt</translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>&amp;Continue Playback after this Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>&amp;Stop Playback after this Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="108"/>
<source>&amp;Show Track Page</source>
@@ -2590,7 +2619,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::GroovesharkParser</name>
<message>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="255"/>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="256"/>
<source>Error fetching Grooveshark information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2678,7 +2707,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::ItunesParser</name>
<message>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="170"/>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="175"/>
<source>Error fetching iTunes information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2686,27 +2715,27 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::JSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="140"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="144"/>
<source>New Playlist</source>
<translation>Ny spellista</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Failed to save tracks</source>
<translation>Misslyckades med att spara spår</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Some tracks in the playlist do not contain an artist and a title. They will be ignored.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>XSPF Error</source>
<translation>XSPF-fel</translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>This is not a valid XSPF playlist.</source>
<translation>Detta är inte en giltig XSPF-spellista.</translation>
</message>
@@ -2728,37 +2757,37 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::Query</name>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="723"/>
<location filename="../src/libtomahawk/Query.cpp" line="728"/>
<source> and </source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="731"/>
<location filename="../src/libtomahawk/Query.cpp" line="736"/>
<source>You</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="733"/>
<location filename="../src/libtomahawk/Query.cpp" line="738"/>
<source>you</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>and</source>
<translation type="unfinished"/>
</message>
<message numerus="yes">
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>%n other(s)</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="745"/>
<location filename="../src/libtomahawk/Query.cpp" line="750"/>
<source>%1 people</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<location filename="../src/libtomahawk/Query.cpp" line="752"/>
<source>loved this track</source>
<translation type="unfinished"/>
</message>
@@ -2766,7 +2795,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::RdioParser</name>
<message>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="193"/>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="200"/>
<source>Error fetching Rdio information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2826,7 +2855,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::SpotifyParser</name>
<message>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="224"/>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="225"/>
<source>Error fetching Spotify information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2842,7 +2871,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>TomahawkApp</name>
<message>
<location filename="../src/TomahawkApp.cpp" line="596"/>
<location filename="../src/TomahawkApp.cpp" line="602"/>
<source>My Collection</source>
<translation type="unfinished"/>
</message>
@@ -3420,14 +3449,14 @@ enter the displayed PIN number here:</source>
<translation>Alla artister</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="266"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="291"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<source>My Collection</source>
<translation>Min samling</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="270"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="295"/>
<source>Collection of %1</source>
<translation>Samling av %1</translation>
</message>
@@ -3564,7 +3593,7 @@ You can re-send a sync message at any time simply by sending another tweet using
<translation>Senaste spelade spår</translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="149"/>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="150"/>
<source>No recently created playlists in your network.</source>
<translation>Inga skapade spellistor i ditt nätverk sistone.</translation>
</message>
@@ -3593,33 +3622,33 @@ You can re-send a sync message at any time simply by sending another tweet using
<context>
<name>XMPPBot</name>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="312"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="315"/>
<source>
Terms for %1:
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="314"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="317"/>
<source>No terms found, sorry.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="347"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="350"/>
<source>
Hotttness for %1: %2
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="363"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="366"/>
<source>
Familiarity for %1: %2
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="381"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="384"/>
<source>
Lyrics for &quot;%1&quot; by %2:
@@ -3631,22 +3660,22 @@ Lyrics for &quot;%1&quot; by %2:
<context>
<name>XSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="49"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="50"/>
<source>Failed to parse contents of XSPF playlist</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="51"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="52"/>
<source>Some playlist entries were found without artist and track name, they will be omitted</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="53"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="54"/>
<source>Failed to fetch the desired playlist from the network, or the desired file does not exist</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="188"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="191"/>
<source>New Playlist</source>
<translation>Ny spellista</translation>
</message>

View File

@@ -1,4 +1,31 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS language="tr" version="2.0">
<context>
<name>ACLJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ACLJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AccountFactoryWrapper</name>
<message>
@@ -35,33 +62,6 @@
<translation>Çevrimdışı</translation>
</message>
</context>
<context>
<name>AclJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AclJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ActionCollection</name>
<message>
@@ -300,6 +300,24 @@ connect and stream from you?</source>
<translation>Yüksek</translation>
</message>
</context>
<context>
<name>AudioEngine</name>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="614"/>
<source>Sorry, Tomahawk couldn&apos;t find the track &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="638"/>
<source>Sorry, Tomahawk couldn&apos;t find the artist &apos;%1&apos;</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="664"/>
<source>Sorry, Tomahawk couldn&apos;t find the album &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>CategoryAddItem</name>
<message>
@@ -314,15 +332,13 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>New Station</source>
<translation>Yeni İstasyon</translation>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>%1 Station</source>
<translation>%1 İstasyon</translation>
</message>
@@ -592,6 +608,19 @@ connect and stream from you?</source>
<translation>Kaydedilen parçalar</translation>
</message>
</context>
<context>
<name>LovedTracksItem</name>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.cpp" line="59"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.h" line="36"/>
<source>Loved Tracks</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>NewPlaylistWidget</name>
<message>
@@ -741,12 +770,12 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="147"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="140"/>
<source>All tracks by %1 on album %2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="167"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="165"/>
<source>All tracks by %1</source>
<translation type="unfinished"/>
</message>
@@ -1021,47 +1050,47 @@ connect and stream from you?</source>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../src/SettingsDialog.cpp" line="302"/>
<location filename="../src/SettingsDialog.cpp" line="300"/>
<source>Collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="309"/>
<location filename="../src/SettingsDialog.cpp" line="307"/>
<source>Advanced</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="157"/>
<location filename="../src/SettingsDialog.cpp" line="155"/>
<source>All</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Some changed settings will not take effect until Tomahawk is restarted</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="295"/>
<location filename="../src/SettingsDialog.cpp" line="293"/>
<source>Services</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="461"/>
<location filename="../src/SettingsDialog.cpp" line="459"/>
<source>Install resolver from file</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="508"/>
<location filename="../src/SettingsDialog.cpp" line="506"/>
<source>Delete all Access Control entries?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="509"/>
<location filename="../src/SettingsDialog.cpp" line="507"/>
<source>Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Information</source>
<translation type="unfinished"/>
</message>
@@ -1160,19 +1189,19 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="192"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="202"/>
<source>All available tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="285"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="326"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="295"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="336"/>
<source>Show</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="287"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="328"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="297"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="338"/>
<source>Hide</source>
<translation type="unfinished"/>
</message>
@@ -1195,17 +1224,17 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="68"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="70"/>
<source>New Additions</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="71"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="73"/>
<source>My recent activity</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="75"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="77"/>
<source>Recent activity from %1</source>
<translation type="unfinished"/>
</message>
@@ -1219,7 +1248,7 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="72"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="546"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="517"/>
<source>Latest Additions</source>
<translation type="unfinished"/>
</message>
@@ -1229,52 +1258,42 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="80"/>
<source>Loved Tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="144"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="141"/>
<source>SuperCollection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="518"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="549"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="520"/>
<source>Latest additions to your collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="551"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="522"/>
<source>Latest additions to %1&apos;s collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="559"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="530"/>
<source>Sorry, we could not find any recent additions!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="587"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="560"/>
<source>Recently Played Tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="590"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="563"/>
<source>Your recently played tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="592"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="565"/>
<source>%1&apos;s recently played tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="599"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="572"/>
<source>Sorry, we could not find any recent plays!</source>
<translation type="unfinished"/>
</message>
@@ -1764,28 +1783,28 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="182"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="185"/>
<source>History Incomplete. Resume</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="187"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="190"/>
<source>Playback History Imported</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="210"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="225"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="213"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="228"/>
<source>Failed</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="215"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="218"/>
<source>Success</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="231"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="234"/>
<source>Could not contact server</source>
<translation type="unfinished"/>
</message>
@@ -1793,17 +1812,17 @@ connect and stream from you?</source>
<context>
<name>Tomahawk::Accounts::SpotifyAccount</name>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="370"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="419"/>
<source>Sync with Spotify</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="374"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="423"/>
<source>Re-enable syncing with Spotify</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="378"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="427"/>
<source>Stop syncing with Spotify</source>
<translation type="unfinished"/>
</message>
@@ -2003,9 +2022,19 @@ You may wish to try re-authenticating.</source>
<source>Add to &amp;Queue</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>Continue Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>Stop Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="97"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="308"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="316"/>
<source>&amp;Love</source>
<translation type="unfinished"/>
</message>
@@ -2015,7 +2044,17 @@ You may wish to try re-authenticating.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="303"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="155"/>
<source>Copy Album &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="197"/>
<source>Copy Artist &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="311"/>
<source>Un-&amp;Love</source>
<translation type="unfinished"/>
</message>
@@ -2024,16 +2063,6 @@ You may wish to try re-authenticating.</source>
<source>&amp;Delete Items</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>&amp;Continue Playback after this Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>&amp;Stop Playback after this Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="108"/>
<source>&amp;Show Track Page</source>
@@ -2589,7 +2618,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::GroovesharkParser</name>
<message>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="255"/>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="256"/>
<source>Error fetching Grooveshark information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2677,7 +2706,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::ItunesParser</name>
<message>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="170"/>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="175"/>
<source>Error fetching iTunes information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2685,27 +2714,27 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::JSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="140"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="144"/>
<source>New Playlist</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Failed to save tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Some tracks in the playlist do not contain an artist and a title. They will be ignored.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>XSPF Error</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>This is not a valid XSPF playlist.</source>
<translation type="unfinished"/>
</message>
@@ -2727,37 +2756,37 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::Query</name>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="723"/>
<location filename="../src/libtomahawk/Query.cpp" line="728"/>
<source> and </source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="731"/>
<location filename="../src/libtomahawk/Query.cpp" line="736"/>
<source>You</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="733"/>
<location filename="../src/libtomahawk/Query.cpp" line="738"/>
<source>you</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>and</source>
<translation type="unfinished"/>
</message>
<message numerus="yes">
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>%n other(s)</source>
<translation type="unfinished"><numerusform></numerusform></translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="745"/>
<location filename="../src/libtomahawk/Query.cpp" line="750"/>
<source>%1 people</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<location filename="../src/libtomahawk/Query.cpp" line="752"/>
<source>loved this track</source>
<translation type="unfinished"/>
</message>
@@ -2765,7 +2794,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::RdioParser</name>
<message>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="193"/>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="200"/>
<source>Error fetching Rdio information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2825,7 +2854,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::SpotifyParser</name>
<message>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="224"/>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="225"/>
<source>Error fetching Spotify information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2841,7 +2870,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>TomahawkApp</name>
<message>
<location filename="../src/TomahawkApp.cpp" line="596"/>
<location filename="../src/TomahawkApp.cpp" line="602"/>
<source>My Collection</source>
<translation type="unfinished"/>
</message>
@@ -3419,14 +3448,14 @@ enter the displayed PIN number here:</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="266"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="291"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<source>My Collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="270"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="295"/>
<source>Collection of %1</source>
<translation type="unfinished"/>
</message>
@@ -3563,7 +3592,7 @@ You can re-send a sync message at any time simply by sending another tweet using
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="149"/>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="150"/>
<source>No recently created playlists in your network.</source>
<translation type="unfinished"/>
</message>
@@ -3592,33 +3621,33 @@ You can re-send a sync message at any time simply by sending another tweet using
<context>
<name>XMPPBot</name>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="312"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="315"/>
<source>
Terms for %1:
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="314"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="317"/>
<source>No terms found, sorry.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="347"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="350"/>
<source>
Hotttness for %1: %2
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="363"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="366"/>
<source>
Familiarity for %1: %2
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="381"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="384"/>
<source>
Lyrics for &quot;%1&quot; by %2:
@@ -3630,22 +3659,22 @@ Lyrics for &quot;%1&quot; by %2:
<context>
<name>XSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="49"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="50"/>
<source>Failed to parse contents of XSPF playlist</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="51"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="52"/>
<source>Some playlist entries were found without artist and track name, they will be omitted</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="53"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="54"/>
<source>Failed to fetch the desired playlist from the network, or the desired file does not exist</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="188"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="191"/>
<source>New Playlist</source>
<translation type="unfinished"/>
</message>

View File

@@ -1,4 +1,31 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS language="zh_CN" version="2.0">
<context>
<name>ACLJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ACLJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AccountFactoryWrapper</name>
<message>
@@ -35,33 +62,6 @@
<translation>线</translation>
</message>
</context>
<context>
<name>AclJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AclJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ActionCollection</name>
<message>
@@ -300,6 +300,24 @@ connect and stream from you?</source>
<translation></translation>
</message>
</context>
<context>
<name>AudioEngine</name>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="614"/>
<source>Sorry, Tomahawk couldn&apos;t find the track &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="638"/>
<source>Sorry, Tomahawk couldn&apos;t find the artist &apos;%1&apos;</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="664"/>
<source>Sorry, Tomahawk couldn&apos;t find the album &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>CategoryAddItem</name>
<message>
@@ -314,15 +332,13 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>New Station</source>
<translation></translation>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>%1 Station</source>
<translation>%1 </translation>
</message>
@@ -592,6 +608,19 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>LovedTracksItem</name>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.cpp" line="59"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.h" line="36"/>
<source>Loved Tracks</source>
<translation></translation>
</message>
</context>
<context>
<name>NewPlaylistWidget</name>
<message>
@@ -741,12 +770,12 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="147"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="140"/>
<source>All tracks by %1 on album %2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="167"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="165"/>
<source>All tracks by %1</source>
<translation type="unfinished"/>
</message>
@@ -1021,47 +1050,47 @@ connect and stream from you?</source>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../src/SettingsDialog.cpp" line="302"/>
<location filename="../src/SettingsDialog.cpp" line="300"/>
<source>Collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="309"/>
<location filename="../src/SettingsDialog.cpp" line="307"/>
<source>Advanced</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="157"/>
<location filename="../src/SettingsDialog.cpp" line="155"/>
<source>All</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Some changed settings will not take effect until Tomahawk is restarted</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="295"/>
<location filename="../src/SettingsDialog.cpp" line="293"/>
<source>Services</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="461"/>
<location filename="../src/SettingsDialog.cpp" line="459"/>
<source>Install resolver from file</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="508"/>
<location filename="../src/SettingsDialog.cpp" line="506"/>
<source>Delete all Access Control entries?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="509"/>
<location filename="../src/SettingsDialog.cpp" line="507"/>
<source>Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Information</source>
<translation type="unfinished"/>
</message>
@@ -1160,19 +1189,19 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="192"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="202"/>
<source>All available tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="285"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="326"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="295"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="336"/>
<source>Show</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="287"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="328"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="297"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="338"/>
<source>Hide</source>
<translation type="unfinished"/>
</message>
@@ -1195,17 +1224,17 @@ connect and stream from you?</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="68"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="70"/>
<source>New Additions</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="71"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="73"/>
<source>My recent activity</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="75"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="77"/>
<source>Recent activity from %1</source>
<translation type="unfinished"/>
</message>
@@ -1219,7 +1248,7 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="72"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="546"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="517"/>
<source>Latest Additions</source>
<translation type="unfinished"/>
</message>
@@ -1229,52 +1258,42 @@ connect and stream from you?</source>
<translation></translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="80"/>
<source>Loved Tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="144"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="141"/>
<source>SuperCollection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="518"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="549"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="520"/>
<source>Latest additions to your collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="551"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="522"/>
<source>Latest additions to %1&apos;s collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="559"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="530"/>
<source>Sorry, we could not find any recent additions!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="587"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="560"/>
<source>Recently Played Tracks</source>
<translation></translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="590"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="563"/>
<source>Your recently played tracks</source>
<translation></translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="592"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="565"/>
<source>%1&apos;s recently played tracks</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="599"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="572"/>
<source>Sorry, we could not find any recent plays!</source>
<translation type="unfinished"/>
</message>
@@ -1764,28 +1783,28 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="182"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="185"/>
<source>History Incomplete. Resume</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="187"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="190"/>
<source>Playback History Imported</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="210"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="225"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="213"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="228"/>
<source>Failed</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="215"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="218"/>
<source>Success</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="231"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="234"/>
<source>Could not contact server</source>
<translation type="unfinished"/>
</message>
@@ -1793,17 +1812,17 @@ connect and stream from you?</source>
<context>
<name>Tomahawk::Accounts::SpotifyAccount</name>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="370"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="419"/>
<source>Sync with Spotify</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="374"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="423"/>
<source>Re-enable syncing with Spotify</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="378"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="427"/>
<source>Stop syncing with Spotify</source>
<translation type="unfinished"/>
</message>
@@ -2003,9 +2022,19 @@ You may wish to try re-authenticating.</source>
<source>Add to &amp;Queue</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>Continue Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>Stop Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="97"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="308"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="316"/>
<source>&amp;Love</source>
<translation type="unfinished"/>
</message>
@@ -2015,7 +2044,17 @@ You may wish to try re-authenticating.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="303"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="155"/>
<source>Copy Album &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="197"/>
<source>Copy Artist &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="311"/>
<source>Un-&amp;Love</source>
<translation type="unfinished"/>
</message>
@@ -2024,16 +2063,6 @@ You may wish to try re-authenticating.</source>
<source>&amp;Delete Items</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>&amp;Continue Playback after this Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>&amp;Stop Playback after this Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="108"/>
<source>&amp;Show Track Page</source>
@@ -2589,7 +2618,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::GroovesharkParser</name>
<message>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="255"/>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="256"/>
<source>Error fetching Grooveshark information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2640,7 +2669,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmInfoPlugin.cpp" line="459"/>
<source>Loved Tracks</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmInfoPlugin.cpp" line="462"/>
@@ -2677,7 +2706,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::ItunesParser</name>
<message>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="170"/>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="175"/>
<source>Error fetching iTunes information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2685,27 +2714,27 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::JSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="140"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="144"/>
<source>New Playlist</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Failed to save tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Some tracks in the playlist do not contain an artist and a title. They will be ignored.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>XSPF Error</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>This is not a valid XSPF playlist.</source>
<translation type="unfinished"/>
</message>
@@ -2727,37 +2756,37 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::Query</name>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="723"/>
<location filename="../src/libtomahawk/Query.cpp" line="728"/>
<source> and </source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="731"/>
<location filename="../src/libtomahawk/Query.cpp" line="736"/>
<source>You</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="733"/>
<location filename="../src/libtomahawk/Query.cpp" line="738"/>
<source>you</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>and</source>
<translation type="unfinished"/>
</message>
<message numerus="yes">
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>%n other(s)</source>
<translation type="unfinished"><numerusform></numerusform></translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="745"/>
<location filename="../src/libtomahawk/Query.cpp" line="750"/>
<source>%1 people</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<location filename="../src/libtomahawk/Query.cpp" line="752"/>
<source>loved this track</source>
<translation type="unfinished"/>
</message>
@@ -2765,7 +2794,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::RdioParser</name>
<message>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="193"/>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="200"/>
<source>Error fetching Rdio information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2825,7 +2854,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::SpotifyParser</name>
<message>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="224"/>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="225"/>
<source>Error fetching Spotify information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2841,7 +2870,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>TomahawkApp</name>
<message>
<location filename="../src/TomahawkApp.cpp" line="596"/>
<location filename="../src/TomahawkApp.cpp" line="602"/>
<source>My Collection</source>
<translation type="unfinished"/>
</message>
@@ -3419,14 +3448,14 @@ enter the displayed PIN number here:</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="266"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="291"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<source>My Collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="270"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="295"/>
<source>Collection of %1</source>
<translation type="unfinished"/>
</message>
@@ -3563,7 +3592,7 @@ You can re-send a sync message at any time simply by sending another tweet using
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="149"/>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="150"/>
<source>No recently created playlists in your network.</source>
<translation type="unfinished"/>
</message>
@@ -3592,33 +3621,33 @@ You can re-send a sync message at any time simply by sending another tweet using
<context>
<name>XMPPBot</name>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="312"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="315"/>
<source>
Terms for %1:
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="314"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="317"/>
<source>No terms found, sorry.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="347"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="350"/>
<source>
Hotttness for %1: %2
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="363"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="366"/>
<source>
Familiarity for %1: %2
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="381"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="384"/>
<source>
Lyrics for &quot;%1&quot; by %2:
@@ -3630,22 +3659,22 @@ Lyrics for &quot;%1&quot; by %2:
<context>
<name>XSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="49"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="50"/>
<source>Failed to parse contents of XSPF playlist</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="51"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="52"/>
<source>Some playlist entries were found without artist and track name, they will be omitted</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="53"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="54"/>
<source>Failed to fetch the desired playlist from the network, or the desired file does not exist</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="188"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="191"/>
<source>New Playlist</source>
<translation type="unfinished"/>
</message>

View File

@@ -1,4 +1,31 @@
<?xml version="1.0" ?><!DOCTYPE TS><TS language="zh_TW" version="2.0">
<context>
<name>ACLJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ACLJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AccountFactoryWrapper</name>
<message>
@@ -35,33 +62,6 @@
<translation></translation>
</message>
</context>
<context>
<name>AclJobDelegate</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="71"/>
<source>Allow %1 to
connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="87"/>
<source>Allow Streaming</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="90"/>
<source>Deny Access</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AclJobItem</name>
<message>
<location filename="../src/libtomahawk/jobview/AclJobItem.cpp" line="187"/>
<source>Tomahawk needs you to decide whether %1 is allowed to connect.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>ActionCollection</name>
<message>
@@ -300,6 +300,24 @@ connect and stream from you?</source>
<translation></translation>
</message>
</context>
<context>
<name>AudioEngine</name>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="614"/>
<source>Sorry, Tomahawk couldn&apos;t find the track &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="638"/>
<source>Sorry, Tomahawk couldn&apos;t find the artist &apos;%1&apos;</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/audio/AudioEngine.cpp" line="664"/>
<source>Sorry, Tomahawk couldn&apos;t find the album &apos;%1&apos; by %2</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>CategoryAddItem</name>
<message>
@@ -314,15 +332,13 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>New Station</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="183"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="293"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="295"/>
<location filename="../src/sourcetree/items/CategoryItems.cpp" line="292"/>
<source>%1 Station</source>
<translation type="unfinished"/>
</message>
@@ -592,6 +608,19 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>LovedTracksItem</name>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.cpp" line="59"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/LovedTracksItem.h" line="36"/>
<source>Loved Tracks</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>NewPlaylistWidget</name>
<message>
@@ -741,12 +770,12 @@ connect and stream from you?</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="147"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="140"/>
<source>All tracks by %1 on album %2</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="167"/>
<location filename="../src/libtomahawk/playlist/PlaylistModel.cpp" line="165"/>
<source>All tracks by %1</source>
<translation type="unfinished"/>
</message>
@@ -1021,47 +1050,47 @@ connect and stream from you?</source>
<context>
<name>SettingsDialog</name>
<message>
<location filename="../src/SettingsDialog.cpp" line="302"/>
<location filename="../src/SettingsDialog.cpp" line="300"/>
<source>Collection</source>
<translation></translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="309"/>
<location filename="../src/SettingsDialog.cpp" line="307"/>
<source>Advanced</source>
<translation></translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="157"/>
<location filename="../src/SettingsDialog.cpp" line="155"/>
<source>All</source>
<translation></translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Some changed settings will not take effect until Tomahawk is restarted</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="295"/>
<location filename="../src/SettingsDialog.cpp" line="293"/>
<source>Services</source>
<translation></translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="461"/>
<location filename="../src/SettingsDialog.cpp" line="459"/>
<source>Install resolver from file</source>
<translation></translation>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="508"/>
<location filename="../src/SettingsDialog.cpp" line="506"/>
<source>Delete all Access Control entries?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="509"/>
<location filename="../src/SettingsDialog.cpp" line="507"/>
<source>Do you really want to delete all Access Control entries? You will be asked for a decision again for each peer that you connect to.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/SettingsDialog.cpp" line="248"/>
<location filename="../src/SettingsDialog.cpp" line="246"/>
<source>Information</source>
<translation></translation>
</message>
@@ -1160,19 +1189,19 @@ connect and stream from you?</source>
<translation>10</translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="192"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="202"/>
<source>All available tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="285"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="326"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="295"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="336"/>
<source>Show</source>
<translation></translation>
</message>
<message>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="287"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="328"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="297"/>
<location filename="../src/sourcetree/SourceDelegate.cpp" line="338"/>
<source>Hide</source>
<translation></translation>
</message>
@@ -1195,17 +1224,17 @@ connect and stream from you?</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="68"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="70"/>
<source>New Additions</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="71"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="73"/>
<source>My recent activity</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="75"/>
<location filename="../src/libtomahawk/widgets/infowidgets/SourceInfoWidget.cpp" line="77"/>
<source>Recent activity from %1</source>
<translation type="unfinished"/>
</message>
@@ -1219,7 +1248,7 @@ connect and stream from you?</source>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="72"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="546"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="517"/>
<source>Latest Additions</source>
<translation></translation>
</message>
@@ -1229,52 +1258,42 @@ connect and stream from you?</source>
<translation></translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="80"/>
<source>Loved Tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="144"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="141"/>
<source>SuperCollection</source>
<translation></translation>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="518"/>
<source>Sorry, we could not find any loved tracks!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="549"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="520"/>
<source>Latest additions to your collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="551"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="522"/>
<source>Latest additions to %1&apos;s collection</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="559"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="530"/>
<source>Sorry, we could not find any recent additions!</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="587"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="560"/>
<source>Recently Played Tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="590"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="563"/>
<source>Your recently played tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="592"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="565"/>
<source>%1&apos;s recently played tracks</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="599"/>
<location filename="../src/sourcetree/items/SourceItem.cpp" line="572"/>
<source>Sorry, we could not find any recent plays!</source>
<translation type="unfinished"/>
</message>
@@ -1764,28 +1783,28 @@ connect and stream from you?</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="182"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="185"/>
<source>History Incomplete. Resume</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="187"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="190"/>
<source>Playback History Imported</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="210"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="225"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="213"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="228"/>
<source>Failed</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="215"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="218"/>
<source>Success</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="231"/>
<location filename="../src/libtomahawk/accounts/lastfm/LastFmConfig.cpp" line="234"/>
<source>Could not contact server</source>
<translation></translation>
</message>
@@ -1793,17 +1812,17 @@ connect and stream from you?</source>
<context>
<name>Tomahawk::Accounts::SpotifyAccount</name>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="370"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="419"/>
<source>Sync with Spotify</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="374"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="423"/>
<source>Re-enable syncing with Spotify</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="378"/>
<location filename="../src/libtomahawk/accounts/spotify/SpotifyAccount.cpp" line="427"/>
<source>Stop syncing with Spotify</source>
<translation type="unfinished"/>
</message>
@@ -2003,9 +2022,19 @@ You may wish to try re-authenticating.</source>
<source>Add to &amp;Queue</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>Continue Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>Stop Playback after this &amp;Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="97"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="308"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="316"/>
<source>&amp;Love</source>
<translation type="unfinished"/>
</message>
@@ -2015,7 +2044,17 @@ You may wish to try re-authenticating.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="303"/>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="155"/>
<source>Copy Album &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="197"/>
<source>Copy Artist &amp;Link</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="311"/>
<source>Un-&amp;Love</source>
<translation type="unfinished"/>
</message>
@@ -2024,16 +2063,6 @@ You may wish to try re-authenticating.</source>
<source>&amp;Delete Items</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="88"/>
<source>&amp;Continue Playback after this Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="90"/>
<source>&amp;Stop Playback after this Track</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/ContextMenu.cpp" line="108"/>
<source>&amp;Show Track Page</source>
@@ -2589,7 +2618,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::GroovesharkParser</name>
<message>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="255"/>
<location filename="../src/libtomahawk/utils/GroovesharkParser.cpp" line="256"/>
<source>Error fetching Grooveshark information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2677,7 +2706,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::ItunesParser</name>
<message>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="170"/>
<location filename="../src/libtomahawk/utils/ItunesParser.cpp" line="175"/>
<source>Error fetching iTunes information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2685,27 +2714,27 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::JSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="140"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="144"/>
<source>New Playlist</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Failed to save tracks</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="166"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="170"/>
<source>Some tracks in the playlist do not contain an artist and a title. They will be ignored.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>XSPF Error</source>
<translation>XSPF </translation>
</message>
<message>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="185"/>
<location filename="../src/libtomahawk/utils/JspfLoader.cpp" line="192"/>
<source>This is not a valid XSPF playlist.</source>
<translation type="unfinished"/>
</message>
@@ -2727,37 +2756,37 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::Query</name>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="723"/>
<location filename="../src/libtomahawk/Query.cpp" line="728"/>
<source> and </source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="731"/>
<location filename="../src/libtomahawk/Query.cpp" line="736"/>
<source>You</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="733"/>
<location filename="../src/libtomahawk/Query.cpp" line="738"/>
<source>you</source>
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>and</source>
<translation></translation>
</message>
<message numerus="yes">
<location filename="../src/libtomahawk/Query.cpp" line="742"/>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<source>%n other(s)</source>
<translation type="unfinished"><numerusform></numerusform></translation>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="745"/>
<location filename="../src/libtomahawk/Query.cpp" line="750"/>
<source>%1 people</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/Query.cpp" line="747"/>
<location filename="../src/libtomahawk/Query.cpp" line="752"/>
<source>loved this track</source>
<translation type="unfinished"/>
</message>
@@ -2765,7 +2794,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::RdioParser</name>
<message>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="193"/>
<location filename="../src/libtomahawk/utils/RdioParser.cpp" line="200"/>
<source>Error fetching Rdio information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2825,7 +2854,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>Tomahawk::SpotifyParser</name>
<message>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="224"/>
<location filename="../src/libtomahawk/utils/SpotifyParser.cpp" line="225"/>
<source>Error fetching Spotify information from the network!</source>
<translation type="unfinished"/>
</message>
@@ -2841,7 +2870,7 @@ Try tweaking the filters for a new set of songs to play.</source>
<context>
<name>TomahawkApp</name>
<message>
<location filename="../src/TomahawkApp.cpp" line="596"/>
<location filename="../src/TomahawkApp.cpp" line="602"/>
<source>My Collection</source>
<translation></translation>
</message>
@@ -3419,14 +3448,14 @@ enter the displayed PIN number here:</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="266"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="291"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<source>My Collection</source>
<translation>我的收藏</translation>
</message>
<message>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="268"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="293"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="270"/>
<location filename="../src/libtomahawk/playlist/TreeModel.cpp" line="295"/>
<source>Collection of %1</source>
<translation type="unfinished"/>
</message>
@@ -3563,7 +3592,7 @@ You can re-send a sync message at any time simply by sending another tweet using
<translation></translation>
</message>
<message>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="149"/>
<location filename="../src/libtomahawk/widgets/WelcomeWidget.cpp" line="150"/>
<source>No recently created playlists in your network.</source>
<translation></translation>
</message>
@@ -3592,33 +3621,33 @@ You can re-send a sync message at any time simply by sending another tweet using
<context>
<name>XMPPBot</name>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="312"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="315"/>
<source>
Terms for %1:
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="314"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="317"/>
<source>No terms found, sorry.</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="347"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="350"/>
<source>
Hotttness for %1: %2
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="363"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="366"/>
<source>
Familiarity for %1: %2
</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/xmppbot/XmppBot.cpp" line="381"/>
<location filename="../src/xmppbot/XmppBot.cpp" line="384"/>
<source>
Lyrics for &quot;%1&quot; by %2:
@@ -3630,22 +3659,22 @@ Lyrics for &quot;%1&quot; by %2:
<context>
<name>XSPFLoader</name>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="49"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="50"/>
<source>Failed to parse contents of XSPF playlist</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="51"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="52"/>
<source>Some playlist entries were found without artist and track name, they will be omitted</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="53"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="54"/>
<source>Failed to fetch the desired playlist from the network, or the desired file does not exist</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="188"/>
<location filename="../src/libtomahawk/utils/XspfLoader.cpp" line="191"/>
<source>New Playlist</source>
<translation></translation>
</message>

View File

@@ -85,7 +85,7 @@ AudioControls::AudioControls( QWidget* parent )
ui->socialButton->setPixmap( RESPATH "images/share.png" );
ui->loveButton->setPixmap( RESPATH "images/not-loved.png" );
ui->loveButton->setCheckable( true );
ui->socialButton->setFixedSize( QSize( 20, 20 ) );
ui->loveButton->setFixedSize( QSize( 20, 20 ) );
@@ -588,7 +588,7 @@ AudioControls::droppedTracks( QList< query_ptr > tracks )
{
// queue and play the first no matter what
GlobalActionManager::instance()->handlePlayTrack( tracks.first() );
ViewManager::instance()->queue()->model()->append( tracks );
ViewManager::instance()->queue()->model()->appendQueries( tracks );
}
}

View File

@@ -129,6 +129,8 @@ IF( UNIX )
ENDIF( UNIX )
IF( APPLE )
SET( CMAKE_LINKER_FLAGS "-headerpad_max_install_names ${CMAKE_LINKER_FLAGS}" )
INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/thirdparty/SPMediaKeyTap )
SET( tomahawkSources ${tomahawkSources} mac/TomahawkApp_Mac.mm mac/MacShortcutHandler.cpp )

View File

@@ -200,7 +200,7 @@ TomahawkApp::init()
QFontMetrics fm( f );
TomahawkUtils::setHeaderHeight( fm.height() + 8 );
#endif
TomahawkUtils::setHeadless( m_headless );
TomahawkSettings* s = TomahawkSettings::instance();
@@ -210,11 +210,18 @@ TomahawkApp::init()
Q_UNUSED( TomahawkUtils::nam() );
m_audioEngine = QWeakPointer<AudioEngine>( new AudioEngine );
m_scanManager = QWeakPointer<ScanManager>( new ScanManager( this ) );
// init pipeline and resolver factories
new Pipeline();
m_servent = QWeakPointer<Servent>( new Servent( this ) );
connect( m_servent.data(), SIGNAL( ready() ), SLOT( initSIP() ) );
tDebug() << "Init Database.";
initDatabase();
m_scanManager = QWeakPointer<ScanManager>( new ScanManager( this ) );
#ifndef ENABLE_HEADLESS
Pipeline::instance()->addExternalResolverFactory( boost::bind( &QtScriptResolver::factory, _1 ) );
Pipeline::instance()->addExternalResolverFactory( boost::bind( &ScriptResolver::factory, _1 ) );
@@ -223,12 +230,6 @@ TomahawkApp::init()
connect( ActionCollection::instance()->getAction( "quit" ), SIGNAL( triggered() ), SLOT( quit() ), Qt::UniqueConnection );
#endif
m_servent = QWeakPointer<Servent>( new Servent( this ) );
connect( m_servent.data(), SIGNAL( ready() ), SLOT( initSIP() ) );
tDebug() << "Init Database.";
initDatabase();
QByteArray magic = QByteArray::fromBase64( enApiSecret );
QByteArray wand = QByteArray::fromBase64( QCoreApplication::applicationName().toLatin1() );
int length = magic.length(), n2 = wand.length();

View File

@@ -66,17 +66,17 @@ CrashReporter::CrashReporter( const QStringList& args )
m_minidump = m_dir + '/' + args.value( 2 ) + ".dmp";
m_product_name = args.value( 3 );
setFixedSize( sizeHint() );
//hide until "send report" has been clicked
ui.progressBar->setVisible( false );
ui.button->setVisible( false );
ui.progressLabel->setVisible( false );
connect( ui.sendButton, SIGNAL( clicked() ), SLOT( onSendButton() ));
connect( ui.sendButton, SIGNAL( clicked() ), SLOT( onSendButton() ) );
adjustSize();
setFixedSize( size() );
}
CrashReporter::~CrashReporter()
{
delete m_http;
@@ -186,6 +186,7 @@ CrashReporter::onFail( int error, const QString& errorString )
qDebug() << "Error:" << error << errorString;
}
void
CrashReporter::onSendButton()
{
@@ -194,5 +195,9 @@ CrashReporter::onSendButton()
ui.progressLabel->setVisible( true );
ui.sendButton->setEnabled( false );
ui.dontSendButton->setEnabled( false );
adjustSize();
setFixedSize( size() );
QTimer::singleShot( 0, this, SLOT( send() ) );
}

View File

@@ -9,8 +9,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>438</width>
<height>246</height>
<width>376</width>
<height>216</height>
</rect>
</property>
<property name="sizePolicy">

View File

@@ -109,7 +109,7 @@ FdoNotifyPlugin::notifyUser( const QString &messageText )
arguments << quint32( 0 ); //notification_id
arguments << QString(); //app_icon
arguments << QString( "Tomahawk" ); //summary
arguments << messageText; //body
arguments << QString( messageText ).replace("&", "&amp;"); //body
arguments << QStringList(); //actions
QVariantMap dict;
dict["desktop-entry"] = QString( "tomahawk" );
@@ -150,7 +150,7 @@ FdoNotifyPlugin::nowPlaying( const QVariant &input )
arguments << m_nowPlayingId; //notification_id
arguments << QString(); //app_icon
arguments << QString( "Tomahawk" ); //summary
arguments << messageText; //body
arguments << messageText.replace("&", "&amp;"); //body
arguments << QStringList(); //actions
QVariantMap dict;
dict["desktop-entry"] = QString( "tomahawk" );

View File

@@ -174,8 +174,14 @@ Album::infoSystemInfo( const Tomahawk::InfoSystem::InfoRequestData& requestData,
return;
}
if ( !output.isNull() && output.isValid() )
if ( output.isNull() )
{
m_coverLoaded = true;
}
else if ( output.isValid() )
{
m_coverLoaded = true;
QVariantMap returnedData = output.value< QVariantMap >();
const QByteArray ba = returnedData["imgbytes"].toByteArray();
if ( ba.length() )
@@ -183,8 +189,6 @@ Album::infoSystemInfo( const Tomahawk::InfoSystem::InfoRequestData& requestData,
m_coverBuffer = ba;
emit coverChanged();
}
m_coverLoaded = true;
}
}
@@ -237,6 +241,6 @@ Album::infoid() const
{
if ( m_uuid.isEmpty() )
m_uuid = uuid();
return m_uuid;
}

View File

@@ -120,7 +120,7 @@ AlbumPlaylistInterface::tracks()
DatabaseCommand_AllTracks* cmd = new DatabaseCommand_AllTracks( m_collection );
cmd->setAlbum( m_album );
cmd->setSortOrder( DatabaseCommand_AllTracks::AlbumPosition );
connect( cmd, SIGNAL( tracks( QList<Tomahawk::query_ptr>, QVariant ) ),
SLOT( onTracksLoaded( QList<Tomahawk::query_ptr> ) ) );
@@ -188,7 +188,7 @@ AlbumPlaylistInterface::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData re
cmd->setAlbum( m_album );
//this takes discnumber into account as well
cmd->setSortOrder( DatabaseCommand_AllTracks::AlbumPosition );
connect( cmd, SIGNAL( tracks( QList<Tomahawk::query_ptr>, QVariant ) ),
SLOT( onTracksLoaded( QList<Tomahawk::query_ptr> ) ) );
@@ -196,6 +196,7 @@ AlbumPlaylistInterface::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData re
}
else
{
m_finished = true;
emit tracksLoaded( m_mode, m_collection );
}
}
@@ -212,5 +213,6 @@ AlbumPlaylistInterface::onTracksLoaded( const QList< query_ptr >& tracks )
else
m_queries << tracks;
m_finished = true;
emit tracksLoaded( m_mode, m_collection );
}

View File

@@ -315,16 +315,20 @@ Artist::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVari
case Tomahawk::InfoSystem::InfoArtistImages:
{
if ( !output.isNull() && output.isValid() )
if ( output.isNull() )
{
m_coverLoaded = true;
}
else if ( output.isValid() )
{
m_coverLoaded = true;
const QByteArray ba = returnedData["imgbytes"].toByteArray();
if ( ba.length() )
{
m_coverBuffer = ba;
emit coverChanged();
}
m_coverLoaded = true;
}
break;
@@ -353,7 +357,7 @@ Artist::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVari
if ( source == "last.fm" )
m_biography = bmap[ source ].toHash()[ "text" ].toString();
}
m_biographyLoaded = true;
emit biographyLoaded();
@@ -459,7 +463,7 @@ Artist::playlistInterface( ModelMode mode, const Tomahawk::collection_ptr& colle
pli = Tomahawk::playlistinterface_ptr( new Tomahawk::ArtistPlaylistInterface( this, mode, collection ) );
connect( pli.data(), SIGNAL( tracksLoaded( Tomahawk::ModelMode, Tomahawk::collection_ptr ) ),
SLOT( onTracksLoaded( Tomahawk::ModelMode, Tomahawk::collection_ptr ) ) );
m_playlistInterface[ mode ][ collection ] = pli;
}
@@ -479,6 +483,6 @@ Artist::infoid() const
{
if ( m_uuid.isEmpty() )
m_uuid = uuid();
return m_uuid;
}

View File

@@ -118,7 +118,7 @@ ArtistPlaylistInterface::tracks()
DatabaseCommand_AllTracks* cmd = new DatabaseCommand_AllTracks( m_collection );
cmd->setArtist( m_artist );
cmd->setSortOrder( DatabaseCommand_AllTracks::AlbumPosition );
connect( cmd, SIGNAL( tracks( QList<Tomahawk::query_ptr>, QVariant ) ),
SLOT( onTracksLoaded( QList<Tomahawk::query_ptr> ) ) );
@@ -186,7 +186,7 @@ ArtistPlaylistInterface::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData r
cmd->setArtist( m_artist );
//this takes discnumber into account as well
cmd->setSortOrder( DatabaseCommand_AllTracks::AlbumPosition );
connect( cmd, SIGNAL( tracks( QList<Tomahawk::query_ptr>, QVariant ) ),
SLOT( onTracksLoaded( QList<Tomahawk::query_ptr> ) ) );
@@ -194,6 +194,7 @@ ArtistPlaylistInterface::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData r
}
else
{
m_finished = true;
emit tracksLoaded( m_mode, m_collection );
}
}
@@ -210,5 +211,6 @@ ArtistPlaylistInterface::onTracksLoaded( const QList< query_ptr >& tracks )
else
m_queries << tracks;
m_finished = true;
emit tracksLoaded( m_mode, m_collection );
}

View File

@@ -31,6 +31,9 @@
#include <QTemporaryFile>
#include <QDir>
#include <QTimer>
#include <QDomDocument>
#include <QDomElement>
#include <QDomNode>
#include "utils/Logger.h"
#include "accounts/ResolverAccount.h"
@@ -64,7 +67,7 @@ AtticaManager::AtticaManager( QObject* parent )
// resolvers
// m_manager.addProviderFile( QUrl( "http://bakery.tomahawk-player.org/resolvers/providers.xml" ) );
const QString url = QString( "http://bakery.tomahawk-player.org/resolvers/providers.xml?version=%1" ).arg( TomahawkUtils::appFriendlyVersion() );
const QString url = QString( "%1/resolvers/providers.xml?version=%2" ).arg( hostname() ).arg( TomahawkUtils::appFriendlyVersion() );
QNetworkReply* reply = TomahawkUtils::nam()->get( QNetworkRequest( QUrl( url ) ) );
NewClosure( reply, SIGNAL( finished() ), this, SLOT( providerFetched( QNetworkReply* ) ), reply );
connect( reply, SIGNAL( error( QNetworkReply::NetworkError ) ), this, SLOT( providerError( QNetworkReply::NetworkError ) ) );
@@ -90,6 +93,12 @@ AtticaManager::~AtticaManager()
}
QString
AtticaManager::hostname() const
{
return "http://bakery.tomahawk-player.org";
}
void
AtticaManager::loadPixmapsFromCache()
{
@@ -523,14 +532,15 @@ void AtticaManager::doInstallResolver( const Content& resolver, bool autoCreate,
m_resolverStates[ resolver.id() ].version = resolver.version();
emit resolverStateChanged( resolver.id() );
ItemJob< DownloadItem >* job = m_resolverProvider.downloadLink( resolver.id() );
connect( job, SIGNAL( finished( Attica::BaseJob* ) ), this, SLOT( resolverDownloadFinished( Attica::BaseJob* ) ) );
job->setProperty( "resolverId", resolver.id() );
job->setProperty( "createAccount", autoCreate );
job->setProperty( "handler", QVariant::fromValue< QObject* >( handler ) );
job->setProperty( "binarySignature", resolver.attribute("signature"));
job->start();
// ItemJob< DownloadItem >* job = m_resolverProvider.downloadLink( resolver.id() );
QUrl url( QString( "%1/resolvers/v1/content/download/%2/1" ).arg( hostname() ).arg( resolver.id() ) );
url.addQueryItem( "tomahawkversion", TomahawkUtils::appFriendlyVersion() );
QNetworkReply* r = TomahawkUtils::nam()->get( QNetworkRequest( url ) );
NewClosure( r, SIGNAL( finished() ), this, SLOT( resolverDownloadFinished( QNetworkReply* ) ), r );
r->setProperty( "resolverId", resolver.id() );
r->setProperty( "createAccount", autoCreate );
r->setProperty( "handler", QVariant::fromValue< QObject* >( handler ) );
r->setProperty( "binarySignature", resolver.attribute("signature"));
}
@@ -552,25 +562,49 @@ AtticaManager::upgradeResolver( const Content& resolver )
void
AtticaManager::resolverDownloadFinished ( BaseJob* j )
AtticaManager::resolverDownloadFinished ( QNetworkReply *j )
{
ItemJob< DownloadItem >* job = static_cast< ItemJob< DownloadItem >* >( j );
Q_ASSERT( j );
if ( !j )
return;
if ( job->metadata().error() == Attica::Metadata::NoError )
if ( j->error() == QNetworkReply::NoError )
{
DownloadItem item = job->result();
QUrl url = item.url();
// download the resolver itself :)
QNetworkReply* reply = TomahawkUtils::nam()->get( QNetworkRequest( url ) );
connect( reply, SIGNAL( finished() ), this, SLOT( payloadFetched() ) );
reply->setProperty( "resolverId", job->property( "resolverId" ) );
reply->setProperty( "createAccount", job->property( "createAccount" ) );
reply->setProperty( "handler", job->property( "handler" ) );
reply->setProperty( "binarySignature", job->property( "binarySignature" ) );
QDomDocument doc;
doc.setContent( j );
const QDomNodeList nodes = doc.documentElement().elementsByTagName( "downloadlink" );
if ( nodes.length() < 1 )
{
tLog() << "Found no download link for resolver:" << doc.toString();
return;
}
QUrl url( nodes.item( 0 ).toElement().text() );
// download the resolver itself :)
tDebug() << "Downloading resolver from url:" << url.toString();
const QDomNodeList signatures = doc.documentElement().elementsByTagName( "signature" );
// Use the original signature provided
QString signature = j->property( "binarySignature" ).toString();
if ( signatures.size() > 0 )
{
// THis download has an overriding signature. Take that one instead
const QString sig = signatures.item( 0 ).toElement().text();
tLog() << "Found overridden signature in binary download:" << sig;
signature = sig;
}
QNetworkReply* reply = TomahawkUtils::nam()->get( QNetworkRequest( url ) );
connect( reply, SIGNAL( finished() ), this, SLOT( payloadFetched() ) );
reply->setProperty( "resolverId", j->property( "resolverId" ) );
reply->setProperty( "createAccount", j->property( "createAccount" ) );
reply->setProperty( "handler", j->property( "handler" ) );
reply->setProperty( "binarySignature", signature );
}
else
{
tLog() << "Failed to do resolver download job!" << job->metadata().error();
tLog() << "Failed to do resolver download job!" << j->errorString() << j->error();
}
}
@@ -703,19 +737,6 @@ AtticaManager::uninstallResolver( const Content& resolver )
m_resolverStates[ resolver.id() ].state = Uninstalled;
TomahawkSettingsGui::instanceGui()->setAtticaResolverState( resolver.id(), Uninstalled );
// remove account as well
QList< Tomahawk::Accounts::Account* > accounts = Tomahawk::Accounts::AccountManager::instance()->accounts( Tomahawk::Accounts::ResolverType );
foreach ( Tomahawk::Accounts::Account* account, accounts )
{
if ( Tomahawk::Accounts::AtticaResolverAccount* atticaAccount = qobject_cast< Tomahawk::Accounts::AtticaResolverAccount* >( account ) )
{
if ( atticaAccount->atticaId() == resolver.id() ) // this is the account we want to remove
{
Tomahawk::Accounts::AccountManager::instance()->removeAccount( atticaAccount );
}
}
}
}
doResolverRemove( resolver.id() );

View File

@@ -132,7 +132,7 @@ private slots:
void categoriesReturned( Attica::BaseJob* );
void resolversList( Attica::BaseJob* );
void binaryResolversList( Attica::BaseJob* );
void resolverDownloadFinished( Attica::BaseJob* );
void resolverDownloadFinished( QNetworkReply* );
void payloadFetched();
void loadPixmapsFromCache();
@@ -144,6 +144,7 @@ private slots:
private:
void doResolverRemove( const QString& id ) const;
void doInstallResolver( const Attica::Content& resolver, bool autoCreate, Tomahawk::Accounts::AtticaResolverAccount* handler );
QString hostname() const;
Attica::ProviderManager m_manager;

View File

@@ -17,7 +17,6 @@ add_definitions( -DQT_SHARED )
add_definitions( -DDLLEXPORT_PRO )
add_definitions( -DQT_SHAREDPOINTER_TRACK_POINTERS )
set( libGuiSources
ActionCollection.cpp
@@ -380,6 +379,8 @@ IF( APPLE )
FIND_LIBRARY( SCRIPTINGBRIDGE_LIBRARY ScriptingBridge )
MARK_AS_ADVANCED( COREAUDIO_LIBRARY COREFOUNDATION_LIBRARY FOUNDATION_LIBRARY SCRIPTINGBRIDGE_LIBRARY )
SET( CMAKE_SHARED_LINKER_FLAGS "-headerpad_max_install_names ${CMAKE_SHARED_LINKER_FLAGS}" )
SET( libSources ${libSources}
utils/TomahawkUtils_Mac.mm
mac/FileHelpers.mm

View File

@@ -85,9 +85,9 @@ ContextMenu::setQueries( const QList<Tomahawk::query_ptr>& queries )
if ( m_supportedActions & ActionStopAfter && itemCount() == 1 )
{
if ( AudioEngine::instance()->stopAfterTrack() == queries.first() )
m_sigmap->setMapping( addAction( tr( "&Continue Playback after this Track" ) ), ActionStopAfter );
m_sigmap->setMapping( addAction( tr( "Continue Playback after this &Track" ) ), ActionStopAfter );
else
m_sigmap->setMapping( addAction( tr( "&Stop Playback after this Track" ) ), ActionStopAfter );
m_sigmap->setMapping( addAction( tr( "Stop Playback after this &Track" ) ), ActionStopAfter );
}
addSeparator();
@@ -151,8 +151,8 @@ ContextMenu::setAlbums( const QList<Tomahawk::album_ptr>& albums )
addSeparator();
/* if ( m_supportedActions & ActionCopyLink && itemCount() == 1 )
m_sigmap->setMapping( addAction( tr( "Copy Album &Link" ) ), ActionCopyLink ); */
if ( m_supportedActions & ActionCopyLink && itemCount() == 1 )
m_sigmap->setMapping( addAction( tr( "Copy Album &Link" ) ), ActionCopyLink );
foreach ( QAction* action, actions() )
{
@@ -193,8 +193,8 @@ ContextMenu::setArtists( const QList<Tomahawk::artist_ptr>& artists )
addSeparator();
/* if ( m_supportedActions & ActionCopyLink && itemCount() == 1 )
m_sigmap->setMapping( addAction( tr( "Copy Artist &Link" ) ), ActionCopyLink ); */
if ( m_supportedActions & ActionCopyLink && itemCount() == 1 )
m_sigmap->setMapping( addAction( tr( "Copy Artist &Link" ) ), ActionCopyLink );
foreach ( QAction* action, actions() )
{
@@ -224,7 +224,7 @@ ContextMenu::onTriggered( int action )
case ActionCopyLink:
copyLink();
break;
case ActionPage:
openPage();
break;
@@ -252,15 +252,15 @@ ContextMenu::addToQueue()
{
foreach ( const query_ptr& query, m_queries )
{
ViewManager::instance()->queue()->model()->append( query );
ViewManager::instance()->queue()->model()->appendQuery( query );
}
foreach ( const artist_ptr& artist, m_artists )
{
ViewManager::instance()->queue()->model()->append( artist );
ViewManager::instance()->queue()->model()->appendArtist( artist );
}
foreach ( const album_ptr& album, m_albums )
{
ViewManager::instance()->queue()->model()->append( album );
ViewManager::instance()->queue()->model()->appendAlbum( album );
}
ViewManager::instance()->showQueue();
@@ -274,6 +274,14 @@ ContextMenu::copyLink()
{
GlobalActionManager::instance()->copyToClipboard( m_queries.first() );
}
else if ( m_albums.count() )
{
GlobalActionManager::instance()->copyOpenLink( m_albums.first() );
}
else if ( m_artists.count() )
{
GlobalActionManager::instance()->copyOpenLink( m_artists.first() );
}
}

View File

@@ -553,7 +553,7 @@ GlobalActionManager::handleOpenCommand( const QUrl& url )
void
GlobalActionManager::handleOpenTrack( const query_ptr& q )
{
ViewManager::instance()->queue()->model()->append( q );
ViewManager::instance()->queue()->model()->appendQuery( q );
ViewManager::instance()->showQueue();
if ( !AudioEngine::instance()->isPlaying() && !AudioEngine::instance()->isPaused() )
@@ -570,7 +570,7 @@ GlobalActionManager::handleOpenTracks( const QList< query_ptr >& queries )
if ( queries.isEmpty() )
return;
ViewManager::instance()->queue()->model()->append( queries );
ViewManager::instance()->queue()->model()->appendQueries( queries );
ViewManager::instance()->showQueue();
if ( !AudioEngine::instance()->isPlaying() && !AudioEngine::instance()->isPaused() )
@@ -617,16 +617,15 @@ GlobalActionManager::doQueueAdd( const QStringList& parts, const QList< QPair< Q
{
if ( parts.size() && parts[ 0 ] == "track" )
{
if ( queueSpotify( parts, queryItems ) )
return true;
else if ( queueRdio( parts, queryItems ) )
return true;
QPair< QString, QString > pair;
QString title, artist, album, urlStr;
foreach ( pair, queryItems ) {
foreach ( pair, queryItems )
{
pair.second = pair.second.replace( "+", " " ); // QUrl::queryItems doesn't decode + to a space :(
if ( pair.first == "title" )
title = pair.second;
@@ -642,9 +641,12 @@ GlobalActionManager::doQueueAdd( const QStringList& parts, const QList< QPair< Q
{
// an individual; query to add to queue
query_ptr q = Query::get( artist, title, album, uuid(), false );
if ( q.isNull() )
return false;
if ( !urlStr.isEmpty() )
q->setResultHint( urlStr );
Pipeline::instance()->resolve( q, true );
Pipeline::instance()->resolve( q );
handleOpenTrack( q );
return true;
@@ -666,11 +668,13 @@ GlobalActionManager::doQueueAdd( const QStringList& parts, const QList< QPair< Q
{ // give it a web result hint
QFileInfo info( track.path() );
query_ptr q = Query::get( QString(), info.baseName(), QString(), uuid(), false );
if ( q.isNull() )
continue;
q->setResultHint( track.toString() );
Pipeline::instance()->resolve( q );
Pipeline::instance()->resolve( q, true );
ViewManager::instance()->queue()->model()->append( q );
ViewManager::instance()->queue()->model()->appendQuery( q );
ViewManager::instance()->showQueue();
}
return true;
@@ -1067,6 +1071,9 @@ GlobalActionManager::handlePlayCommand( const QUrl& url )
}
query_ptr q = Query::get( artist, title, album );
if ( q.isNull() )
return false;
if ( !urlStr.isEmpty() )
q->setResultHint( urlStr );
@@ -1155,18 +1162,25 @@ bool GlobalActionManager::handleBookmarkCommand(const QUrl& url)
urlStr = pair.second;
}
query_ptr q = Query::get( artist, title, album );
if ( q.isNull() )
return false;
if ( !urlStr.isEmpty() )
q->setResultHint( urlStr );
Pipeline::instance()->resolve( q, true );
Pipeline::instance()->resolve( q );
// now we add it to the special "bookmarks" playlist, creating it if it doesn't exist. if nothing is playing, start playing the track
QSharedPointer< LocalCollection > col = SourceList::instance()->getLocal()->collection().dynamicCast< LocalCollection >();
playlist_ptr bookmarkpl = col->bookmarksPlaylist();
if ( bookmarkpl.isNull() ) { // create it and do the deed then
if ( bookmarkpl.isNull() )
{
// create it and do the deed then
m_waitingToBookmark = q;
col->createBookmarksPlaylist();
connect( col.data(), SIGNAL( bookmarkPlaylistCreated( Tomahawk::playlist_ptr ) ), this, SLOT( bookmarkPlaylistCreated( Tomahawk::playlist_ptr ) ), Qt::UniqueConnection );
} else {
}
else
{
doBookmark( bookmarkpl, q );
}
@@ -1343,7 +1357,7 @@ GlobalActionManager::waitingForResolved( bool /* success */ )
AudioEngine::instance()->playItem( AudioEngine::instance()->playlist(), m_waitingToPlay->results().first() );
else
{
ViewManager::instance()->queue()->model()->append( m_waitingToPlay );
ViewManager::instance()->queue()->model()->appendQuery( m_waitingToPlay );
AudioEngine::instance()->play();
}
}

View File

@@ -29,6 +29,7 @@ using namespace Tomahawk;
PlaylistInterface::PlaylistInterface ()
: QObject()
, m_latchMode( PlaylistModes::StayOnSong )
, m_finished( false )
{
m_id = uuid();
}

View File

@@ -40,6 +40,7 @@ public:
const QString id() { return m_id; }
virtual QList< Tomahawk::query_ptr > tracks() = 0;
virtual bool isFinished() const { return m_finished; }
virtual int unfilteredTrackCount() const = 0;
virtual int trackCount() const = 0;
@@ -91,7 +92,8 @@ protected:
virtual QList<Tomahawk::query_ptr> filterTracks( const QList<Tomahawk::query_ptr>& queries );
PlaylistModes::LatchMode m_latchMode;
bool m_finished;
private:
Q_DISABLE_COPY( PlaylistInterface )

View File

@@ -82,6 +82,9 @@ PlaybackLog::PlaybackLog( const PlaybackLog& other )
query_ptr
Query::get( const QString& artist, const QString& track, const QString& album, const QID& qid, bool autoResolve )
{
if ( artist.trimmed().isEmpty() || track.trimmed().isEmpty() )
return query_ptr();
if ( qid.isEmpty() )
autoResolve = false;
@@ -98,6 +101,8 @@ Query::get( const QString& artist, const QString& track, const QString& album, c
query_ptr
Query::get( const QString& query, const QID& qid )
{
Q_ASSERT( !query.trimmed().isEmpty() );
query_ptr q = query_ptr( new Query( query, qid ), &QObject::deleteLater );
q->setWeakRef( q.toWeakRef() );
@@ -170,14 +175,14 @@ Query::updateSortNames()
if ( isFullTextQuery() )
{
m_artistSortname = DatabaseImpl::sortname( m_fullTextQuery, true );
m_composerSortName = DatabaseImpl::sortname( m_composer, true );
m_composerSortname = DatabaseImpl::sortname( m_composer, true );
m_albumSortname = DatabaseImpl::sortname( m_fullTextQuery );
m_trackSortname = m_albumSortname;
}
else
{
m_artistSortname = DatabaseImpl::sortname( m_artist, true );
m_composerSortName = DatabaseImpl::sortname( m_composer, true );
m_composerSortname = DatabaseImpl::sortname( m_composer, true );
m_albumSortname = DatabaseImpl::sortname( m_album );
m_trackSortname = DatabaseImpl::sortname( m_track );
}
@@ -189,7 +194,7 @@ Query::displayQuery() const
{
if ( !results().isEmpty() )
return results().first()->toQuery();
return m_ownRef.toStrongRef();
}
@@ -493,13 +498,13 @@ Query::howSimilar( const Tomahawk::result_ptr& r )
{
// result values
const QString rArtistname = r->artist()->sortname();
const QString rAlbumname = DatabaseImpl::sortname( r->album()->name() );
const QString rAlbumname = r->album()->sortname();
const QString rTrackname = DatabaseImpl::sortname( r->track() );
// normal edit distance
int artdist = levenshtein( m_artistSortname, rArtistname );
int albdist = levenshtein( m_albumSortname, rAlbumname );
int trkdist = levenshtein( m_trackSortname, rTrackname );
int artdist = TomahawkUtils::levenshtein( m_artistSortname, rArtistname );
int albdist = TomahawkUtils::levenshtein( m_albumSortname, rAlbumname );
int trkdist = TomahawkUtils::levenshtein( m_trackSortname, rTrackname );
// max length of name
int mlart = qMax( m_artistSortname.length(), rArtistname.length() );
@@ -516,7 +521,7 @@ Query::howSimilar( const Tomahawk::result_ptr& r )
const QString artistTrackname = DatabaseImpl::sortname( fullTextQuery() );
const QString rArtistTrackname = DatabaseImpl::sortname( r->artist()->name() + " " + r->track() );
int atrdist = levenshtein( artistTrackname, rArtistTrackname );
int atrdist = TomahawkUtils::levenshtein( artistTrackname, rArtistTrackname );
int mlatr = qMax( artistTrackname.length(), rArtistTrackname.length() );
float dcatr = (float)( mlatr - atrdist ) / mlatr;
@@ -566,7 +571,7 @@ Query::playbackHistory( const Tomahawk::source_ptr& source ) const
history << log;
}
}
return history;
}
@@ -588,7 +593,7 @@ Query::playbackCount( const source_ptr& source )
if ( source.isNull() || log.source == source )
count++;
}
return count;
}
@@ -670,12 +675,12 @@ Query::setLoved( bool loved )
trackInfo["album"] = album();
loveInfo[ "trackinfo" ] = QVariant::fromValue< Tomahawk::InfoSystem::InfoStringHash >( trackInfo );
Tomahawk::InfoSystem::InfoPushData pushData ( id(),
( loved ? Tomahawk::InfoSystem::InfoLove : Tomahawk::InfoSystem::InfoUnLove ),
loveInfo,
Tomahawk::InfoSystem::PushShortUrlFlag );
Tomahawk::InfoSystem::InfoSystem::instance()->pushInfo( pushData );
DatabaseCommand_SocialAction* cmd = new DatabaseCommand_SocialAction( q, QString( "Love" ), loved ? QString( "true" ) : QString( "false" ) );
@@ -783,10 +788,10 @@ Query::coverLoaded() const
{
if ( m_albumPtr.isNull() )
return false;
if ( m_albumPtr->coverLoaded() && !m_albumPtr->cover( QSize( 0, 0 ) ).isNull() )
return true;
return m_artistPtr->coverLoaded();
}
@@ -809,7 +814,7 @@ Query::similarTracks() const
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 );
@@ -821,7 +826,7 @@ Query::similarTracks() const
m_infoJobs++;
Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData );
}
return m_similarTracks;
}
@@ -842,7 +847,7 @@ Query::lyrics() const
requestData.input = QVariant::fromValue< Tomahawk::InfoSystem::InfoStringHash >( trackInfo );
requestData.type = Tomahawk::InfoSystem::InfoTrackLyrics;
requestData.requestId = TomahawkUtils::infosystemRequestId();
connect( Tomahawk::InfoSystem::InfoSystem::instance(),
SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ),
SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), Qt::UniqueConnection );
@@ -854,7 +859,7 @@ Query::lyrics() const
m_infoJobs++;
Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData );
}
return m_lyrics;
}
@@ -871,7 +876,7 @@ Query::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVaria
case InfoSystem::InfoTrackLyrics:
{
m_lyrics = output.value< QVariant >().toString().split( "\n" );
m_lyricsLoaded = true;
emit lyricsLoaded();
break;
@@ -887,7 +892,7 @@ Query::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVaria
m_similarTracks << Query::get( artists.at( i ), tracks.at( i ), QString(), uuid(), false );
}
Pipeline::instance()->resolve( m_similarTracks );
m_simTracksLoaded = true;
emit similarTracksLoaded();
@@ -917,83 +922,3 @@ Query::infoSystemFinished( QString target )
emit updated();
}
int
Query::levenshtein( const QString& source, const QString& target )
{
// Step 1
const int n = source.length();
const int m = target.length();
if ( n == 0 )
return m;
if ( m == 0 )
return n;
// Good form to declare a TYPEDEF
typedef QVector< QVector<int> > Tmatrix;
Tmatrix matrix;
matrix.resize( n + 1 );
// Size the vectors in the 2.nd dimension. Unfortunately C++ doesn't
// allow for allocation on declaration of 2.nd dimension of vec of vec
for ( int i = 0; i <= n; i++ )
{
QVector<int> tmp;
tmp.resize( m + 1 );
matrix.insert( i, tmp );
}
// Step 2
for ( int i = 0; i <= n; i++ )
matrix[i][0] = i;
for ( int j = 0; j <= m; j++ )
matrix[0][j] = j;
// Step 3
for ( int i = 1; i <= n; i++ )
{
const QChar s_i = source[i - 1];
// Step 4
for ( int j = 1; j <= m; j++ )
{
const QChar t_j = target[j - 1];
// Step 5
int cost;
if ( s_i == t_j )
cost = 0;
else
cost = 1;
// Step 6
const int above = matrix[i - 1][j];
const int left = matrix[i][j - 1];
const int diag = matrix[i - 1][j - 1];
int cell = ( ( ( left + 1 ) > ( diag + cost ) ) ? diag + cost : left + 1 );
if ( above + 1 < cell )
cell = above + 1;
// Step 6A: Cover transposition, in addition to deletion,
// insertion and substitution. This step is taken from:
// Berghel, Hal ; Roach, David : "An Extension of Ukkonen's
// Enhanced Dynamic Programming ASM Algorithm"
// (http://www.acm.org/~hlb/publications/asm/asm.html)
if ( i > 2 && j > 2 )
{
int trans = matrix[i - 2][j - 2] + 1;
if ( source[ i - 2 ] != t_j ) trans++;
if ( s_i != target[ j - 2 ] ) trans++;
if ( cell > trans ) cell = trans;
}
matrix[i][j] = cell;
}
}
// Step 7
return matrix[n][m];
}

View File

@@ -97,7 +97,7 @@ public:
QID id() const;
/// sorter for list of results
static bool resultSorter( const result_ptr &left, const result_ptr& right );
static bool resultSorter( const result_ptr& left, const result_ptr& right );
/// true when a perfect result has been found (score of 1.0)
bool solved() const { return m_solved; }
@@ -129,6 +129,7 @@ public:
QString resultHint() const { return m_resultHint; }
QString artistSortname() const { return m_artistSortname; }
QString composerSortname() const { return m_composerSortname; }
QString albumSortname() const { return m_albumSortname; }
QString trackSortname() const { return m_trackSortname; }
@@ -139,7 +140,7 @@ public:
int duration() const { return m_duration; }
unsigned int albumpos() const { return m_albumpos; }
unsigned int discnumber() const { return m_discnumber; }
query_ptr displayQuery() const;
#ifndef ENABLE_HEADLESS
@@ -220,7 +221,6 @@ private:
void checkResults();
void updateSortNames();
static int levenshtein( const QString& source, const QString& target );
void parseSocialActions();
@@ -233,7 +233,7 @@ private:
mutable QID m_qid;
QString m_artistSortname;
QString m_composerSortName;
QString m_composerSortname;
QString m_albumSortname;
QString m_trackSortname;
@@ -266,10 +266,10 @@ private:
bool m_simTracksLoaded;
QList<Tomahawk::query_ptr> m_similarTracks;
bool m_lyricsLoaded;
QStringList m_lyrics;
mutable int m_infoJobs;
};

View File

@@ -305,7 +305,7 @@ ViewManager::show( const Tomahawk::collection_ptr& collection )
view = new TreeView();
TreeModel* model = new TreeModel();
view->setTreeModel( model );
if ( collection && collection->source()->isLocal() )
view->setEmptyTip( tr( "After you have scanned your music collection you will find your tracks right here." ) );
else
@@ -483,7 +483,7 @@ ViewManager::showRecentPlaysPage()
{
PlaylistView* pv = new PlaylistView( m_widget );
RecentlyPlayedModel* raModel = new RecentlyPlayedModel( source_ptr(), pv );
RecentlyPlayedModel* raModel = new RecentlyPlayedModel( pv );
raModel->setTitle( tr( "Recently Played Tracks" ) );
raModel->setDescription( tr( "Recently played tracks from all your friends" ) );
raModel->setStyle( PlayableModel::Large );
@@ -493,6 +493,7 @@ ViewManager::showRecentPlaysPage()
pv->setItemDelegate( del );
pv->setPlaylistModel( raModel );
raModel->setSource( source_ptr() );
m_recentPlaysWidget = pv;
}
@@ -570,7 +571,7 @@ ViewManager::historyBack()
return;
ViewPage* page = m_pageHistoryBack.takeLast();
if ( m_currentPage )
{
m_pageHistoryFwd << m_currentPage;
@@ -589,7 +590,7 @@ ViewManager::historyForward()
return;
ViewPage* page = m_pageHistoryFwd.takeLast();
if ( m_currentPage )
{
m_pageHistoryBack << m_currentPage;
@@ -615,14 +616,7 @@ ViewManager::destroyPage( ViewPage* page )
return;
tDebug() << Q_FUNC_INFO << "Deleting page:" << page->title();
if ( m_currentPage == page )
{
delete page;
m_currentPage = 0;
historyBack();
}
else if ( historyPages().contains( page ) )
if ( historyPages().contains( page ) )
{
m_pageHistoryBack.removeAll( page );
m_pageHistoryFwd.removeAll( page );
@@ -632,6 +626,13 @@ ViewManager::destroyPage( ViewPage* page )
delete page;
}
if ( m_currentPage == page )
{
m_currentPage = 0;
historyBack();
}
}
@@ -640,6 +641,8 @@ ViewManager::setPage( ViewPage* page, bool trackHistory )
{
if ( !page )
return;
if ( page == m_currentPage )
return;
// save the old playlist shuffle state in config before we change playlists
saveCurrentPlaylistSettings();
@@ -865,7 +868,7 @@ ViewManager::onWidgetDestroyed( QWidget* widget )
{
m_dynamicWidgets.remove( dynamicPlaylistForInterface( page->playlistInterface() ) );
}
m_pageHistoryBack.removeAll( page );
m_pageHistoryFwd.removeAll( page );
}

View File

@@ -132,7 +132,7 @@ LastFmConfig::onHistoryLoaded()
uint total = 0;
bool finished = false;
QNetworkReply* reply = qobject_cast< QNetworkReply* >( sender() );
try
{
lastfm::XmlQuery lfm;
@@ -142,22 +142,25 @@ LastFmConfig::onHistoryLoaded()
{
// tDebug() << "Found:" << e["artist"].text() << e["name"].text() << e["date"].attribute( "uts" ).toUInt();
Tomahawk::query_ptr query = Query::get( e["artist"].text(), e["name"].text(), QString(), QString(), false );
if ( query.isNull() )
continue;
m_lastTimeStamp = e["date"].attribute( "uts" ).toUInt();
DatabaseCommand_LogPlayback* cmd = new DatabaseCommand_LogPlayback( query, DatabaseCommand_LogPlayback::Finished, m_lastTimeStamp );
Database::instance()->enqueue( QSharedPointer<DatabaseCommand>(cmd) );
}
if ( !lfm.children( "recenttracks" ).isEmpty() )
{
lastfm::XmlQuery stats = lfm.children( "recenttracks" ).first();
uint page = stats.attribute( "page" ).toUInt();
total = stats.attribute( "totalPages" ).toUInt();
m_ui->progressBar->setMaximum( total );
m_ui->progressBar->setValue( page );
if ( page < total )
{
m_page = page + 1;
@@ -174,7 +177,7 @@ LastFmConfig::onHistoryLoaded()
tDebug() << "XmlQuery error:" << e.message();
finished = true;
}
if ( finished )
{
if ( m_page != total )

View File

@@ -212,7 +212,7 @@ LastFmInfoPlugin::scrobble()
return;
tLog() << Q_FUNC_INFO << "Scrobbling now:" << m_track.toString();
// FIXME: workaround for the duration-less dilandau (and others) tracks
if ( m_track.duration() == 0 )
m_track.setDuration( 31 );
@@ -525,7 +525,7 @@ LastFmInfoPlugin::notInCacheSlot( QHash<QString, QString> criteria, Tomahawk::In
imgurl.addEncodedQueryItem( "artist", QUrl::toPercentEncoding( artistName, "", "+" ) );
imgurl.addEncodedQueryItem( "album", QUrl::toPercentEncoding( albumName, "", "+" ) );
imgurl.addQueryItem( "autocorrect", QString::number( 1 ) );
imgurl.addQueryItem( "size", "largesquare" );
imgurl.addQueryItem( "size", "large" );
imgurl.addQueryItem( "api_key", "7a90f6672a04b809ee309af169f34b8b" );
QNetworkRequest req( imgurl );

View File

@@ -121,7 +121,6 @@ SpotifyAccount::init()
void
SpotifyAccount::delayedInit()
{
connect( AtticaManager::instance(), SIGNAL( resolverInstalled( QString ) ), this, SLOT( resolverInstalled( QString ) ) );
const Attica::Content res = AtticaManager::instance()->resolverForId( s_resolverId );
@@ -131,6 +130,11 @@ SpotifyAccount::delayedInit()
if ( !checkForResolver() && state != AtticaManager::Uninstalled )
{
// If the user manually deleted the resolver, mark it as uninstalled, so we re-fetch for the user
QVariantHash conf = configuration();
conf.remove( "path" );
setConfiguration( conf );
sync();
AtticaManager::instance()->uninstallResolver( res );
}
else if ( state == AtticaManager::Installed || !path.isEmpty() )
@@ -138,9 +142,15 @@ SpotifyAccount::delayedInit()
if ( !path.isEmpty() )
{
QFileInfo info( path );
// Resolver was deleted, so abort.
// Resolver was deleted, so abort and remove our manual override, as it's no longer valid
if ( !info.exists() )
{
QVariantHash conf = configuration();
conf.remove( "path" );
setConfiguration( conf );
sync();
return;
}
}
hookupResolver();
}
@@ -165,6 +175,21 @@ SpotifyAccount::hookupResolver()
}
qDebug() << "Starting spotify resolver with path:" << path;
if ( !m_spotifyResolver.isNull() )
{
delete m_spotifyResolver.data();
}
if ( !QFile::exists( path ) )
{
qWarning() << "Asked to hook up spotify resolver but it doesn't exist, ignoring";
return;
}
// HACK
// Since the resolver in 0.4.x used an incompatible version of kdsingleappguard, we can't auto-kill old resolvers on the
// 0.4.x->0.5.x upgrade. So we do it manually for a while
killExistingResolvers();
m_spotifyResolver = QWeakPointer< ScriptResolver >( qobject_cast< ScriptResolver* >( Pipeline::instance()->addScriptResolver( path ) ) );
connect( m_spotifyResolver.data(), SIGNAL( changed() ), this, SLOT( resolverChanged() ) );
@@ -182,6 +207,20 @@ SpotifyAccount::hookupResolver()
}
void
SpotifyAccount::killExistingResolvers()
{
QProcess p;
#if defined(Q_OS_UNIX)
const int ret = p.execute( "killall -9 spotify_tomahawkresolver" );
qDebug() << "Tried to killall -9 spotify_tomahawkresolver with return code:" << ret;
#elif defined(Q_OS_WIN)
const int ret = p.execute( "taskkill.exe /F /im spotify_tomahawkresolver.exe" );
qDebug() << "Tried to taskkill.exe /F /im spotify_tomahawkresolver.exe with return code:" << ret;
#endif
}
bool
SpotifyAccount::checkForResolver()
{
@@ -228,13 +267,18 @@ SpotifyAccount::authenticate()
const AtticaManager::ResolverState state = AtticaManager::instance()->resolverState( res );
qDebug() << "Spotify account authenticating...";
const QString path = configuration().value( "path" ).toString();
const QFileInfo info( path );
const bool manualResolverRemoved = !path.isEmpty() && !info.exists();
if ( m_spotifyResolver.isNull() && state == AtticaManager::Installed )
{
// We don;t have the resolver but it has been installed via attica already, so lets just turn it on
qDebug() << "No valid spotify resolver running, but attica reports it is installed, so start it up";
hookupResolver();
}
else if ( m_spotifyResolver.isNull() )
else if ( m_spotifyResolver.isNull() || manualResolverRemoved )
{
qDebug() << "Got null resolver but asked to authenticate, so installing if we have one from attica:" << res.isValid() << res.id();
if ( res.isValid() && !res.id().isEmpty() )
@@ -318,6 +362,11 @@ SpotifyAccount::setManualResolverPath( const QString &resolverPath )
setConfiguration( conf );
sync();
// uninstall
const Attica::Content res = AtticaManager::instance()->resolverForId( s_resolverId );
if ( AtticaManager::instance()->resolverState( res ) != AtticaManager::Uninstalled )
AtticaManager::instance()->uninstallResolver( res );
m_preventEnabling = false;
if ( !m_spotifyResolver.isNull() )

View File

@@ -126,6 +126,7 @@ private:
void init();
bool checkForResolver();
void hookupResolver();
void killExistingResolvers();
void loadPlaylists();
void clearUser( bool permanentlyDelete = false );

View File

@@ -674,6 +674,9 @@ SpotifyPlaylistUpdater::variantToQueries( const QVariantList& list )
{
QVariantMap trackMap = blob.toMap();
const query_ptr q = Query::get( trackMap.value( "artist" ).toString(), trackMap.value( "track" ).toString(), trackMap.value( "album" ).toString(), uuid(), false );
if ( q.isNull() )
continue;
if ( trackMap.contains( "id" ) )
q->setProperty( "annotation", trackMap.value( "id" ) );

View File

@@ -37,6 +37,9 @@
#include "infosystem/InfoSystem.h"
#include "Album.h"
#include "Pipeline.h"
#include "jobview/JobStatusView.h"
#include "jobview/JobStatusModel.h"
#include "jobview/ErrorStatusMessage.h"
#include "utils/Logger.h"
@@ -94,12 +97,9 @@ AudioEngine::AudioEngine()
AudioEngine::~AudioEngine()
{
tDebug() << Q_FUNC_INFO;
m_mediaObject->stop();
TomahawkSettings::instance()->setVolume( volume() );
delete m_audioOutput;
delete m_mediaObject;
}
@@ -604,8 +604,17 @@ AudioEngine::playItem( Tomahawk::playlistinterface_ptr playlist, const Tomahawk:
{
if ( query->resolvingFinished() )
{
if ( query->numResults() )
if ( query->numResults() && query->results().first()->isOnline() )
{
playItem( playlist, query->results().first() );
return;
}
JobStatusView::instance()->model()->addJob(
new ErrorStatusMessage( tr( "Sorry, Tomahawk couldn't find the track '%1' by %2" ).arg( query->track() ).arg( query->artist() ), 15 ) );
if ( isStopped() )
emit stopped(); // we do this so the original caller knows we couldn't find this track
}
else
{
@@ -621,9 +630,18 @@ void
AudioEngine::playItem( const Tomahawk::artist_ptr& artist )
{
playlistinterface_ptr pli = artist->playlistInterface( Mixed );
if ( pli->trackCount() )
if ( pli->isFinished() )
{
playItem( pli, pli->tracks().first() );
if ( !pli->tracks().count() )
{
JobStatusView::instance()->model()->addJob(
new ErrorStatusMessage( tr( "Sorry, Tomahawk couldn't find the artist '%1'" ).arg( artist->name() ), 15 ) );
if ( isStopped() )
emit stopped(); // we do this so the original caller knows we couldn't find this track
}
else
playItem( pli, pli->tracks().first() );
}
else
{
@@ -638,9 +656,18 @@ void
AudioEngine::playItem( const Tomahawk::album_ptr& album )
{
playlistinterface_ptr pli = album->playlistInterface( Mixed );
if ( pli->trackCount() )
if ( pli->isFinished() )
{
playItem( pli, pli->tracks().first() );
if ( !pli->tracks().count() )
{
JobStatusView::instance()->model()->addJob(
new ErrorStatusMessage( tr( "Sorry, Tomahawk couldn't find the album '%1' by %2" ).arg( album->name() ).arg( album->artist()->name() ), 15 ) );
if ( isStopped() )
emit stopped(); // we do this so the original caller knows we couldn't find this track
}
else
playItem( pli, pli->tracks().first() );
}
else
{
@@ -734,7 +761,7 @@ AudioEngine::onStateChanged( Phonon::State newState, Phonon::State oldState )
}
}
}
if ( newState == Phonon::PausedState || newState == Phonon::PlayingState || newState == Phonon::ErrorState )
{
tDebug() << "Phonon state now:" << newState;
@@ -860,10 +887,10 @@ AudioEngine::checkStateQueue()
m_mediaObject->play();
if ( paused )
setVolume( m_volume );
break;
}
case Paused:
{
m_volume = volume();

View File

@@ -138,7 +138,7 @@ private slots:
void sendNowPlayingNotification( const Tomahawk::InfoSystem::InfoType type );
void sendWaitingNotification() const;
void queueStateSafety();
private:

View File

@@ -100,7 +100,7 @@ TopTracksContext::onTracksFound( const QList<Tomahawk::query_ptr>& queries, Mode
{
Q_UNUSED( mode );
m_topHitsModel->append( queries );
m_topHitsModel->appendQueries( queries );
}

View File

@@ -62,10 +62,13 @@ DatabaseCommand_DeleteDynamicPlaylist::postCommitHook()
if( playlist.isNull() )
playlist = source()->collection()->station( m_playlistguid );
qDebug() << "Just tried to load playlist for deletion:" << m_playlistguid << "Did we get a null one?" << playlist.isNull() << "is it a station?" << (playlist->mode() == OnDemand);
tLog( LOGVERBOSE ) << "Just tried to load playlist for deletion:" << m_playlistguid << "Did we get a null one?" << playlist.isNull();
Q_ASSERT( !playlist.isNull() );
playlist->reportDeleted( playlist );
if ( !playlist.isNull() )
{
tLog( LOGVERBOSE ) << "is it a station?" << ( playlist->mode() == OnDemand );
playlist->reportDeleted( playlist );
}
if( source()->isLocal() )
Servent::instance()->triggerDBSync();

View File

@@ -91,6 +91,8 @@ DatabaseCommand_GenericSelect::exec( DatabaseImpl* dbi )
artist = query.value( 1 ).toString();
qry = Tomahawk::Query::get( artist, track, QString() );
if ( qry.isNull() )
continue;
}
else if ( m_queryType == Artist )
{

View File

@@ -77,6 +77,9 @@ DatabaseCommand_LoadPlaylistEntries::generateEntries( DatabaseImpl* dbi )
e->setResultHint( query.value( 8 ).toString() );
Tomahawk::query_ptr q = Tomahawk::Query::get( query.value( 2 ).toString(), query.value( 1 ).toString(), query.value( 3 ).toString() );
if ( q.isNull() )
continue;
q->setResultHint( query.value( 8 ).toString() );
q->setProperty( "annotation", e->annotation() );
e->setQuery( q );

View File

@@ -111,11 +111,18 @@ DatabaseCommand_SetDynamicPlaylistRevision::postCommitHook()
if( playlist.isNull() ) // if it's neither an auto or station, it must not be auto-loaded, so we MUST have been told about it directly
rawPl = m_playlist;
if ( rawPl == 0 )
{
tLog() <<"Got null playlist with guid:" << playlistguid() << "from source and collection:" << source()->friendlyName() << source()->collection()->name() << "and mode is static?:" << (m_mode == Static);
Q_ASSERT( false );
return;
}
// workaround a bug in pre-0.1.0 tomahawks. they created dynamic playlists in OnDemand mode *always*, and then set the mode to the real one.
// now that we separate them, if we get them as one and then get a changed mode, the playlist ends up in the wrong bucket in Collection.
// so here we fix it if we have to.
// HACK
tDebug() << "Does this need the 0.3->0.1 playlist category hack fix?" << ( rawPl->mode() == Static && source()->collection()->autoPlaylist( playlistguid() ).isNull() )
tDebug() << "Does this need the 0.3->0.1 playlist category hack fix?" << ( rawPl->mode() == Static && source()->collection()->autoPlaylist( playlistguid() ).isNull() )
<< ( rawPl->mode() == OnDemand && source()->collection()->station( playlistguid() ).isNull() )
<< rawPl->mode() << source()->collection()->autoPlaylist( playlistguid() ).isNull() << source()->collection()->station( playlistguid() ).isNull();
if( rawPl->mode() == Static && source()->collection()->autoPlaylist( playlistguid() ).isNull() ) // should be here
@@ -123,13 +130,7 @@ DatabaseCommand_SetDynamicPlaylistRevision::postCommitHook()
else if ( rawPl->mode() == OnDemand && source()->collection()->station( playlistguid() ).isNull() ) // should be here
source()->collection()->moveAutoToStation( playlistguid() );
if ( rawPl == 0 )
{
tLog() <<"Got null playlist with guid:" << playlistguid() << "from source and collection:" << source()->friendlyName() << source()->collection()->name() << "and mode is static?:" << (m_mode == Static);
Q_ASSERT( false );
return;
}
if ( !m_controlsV.isEmpty() && m_controls.isEmpty() )
if ( !m_controlsV.isEmpty() && m_controls.isEmpty() )
{
QList<QVariantMap> controlMap;
foreach( const QVariant& v, m_controlsV )

View File

@@ -328,9 +328,10 @@ DatabaseImpl::artistId( const QString& name_orig, bool autoCreate )
int id = 0;
QString sortname = DatabaseImpl::sortname( name_orig );
QString queryString = QString( "SELECT id FROM artist WHERE sortname = '%1'" ).arg( TomahawkSqlQuery::escape( sortname ) );
TomahawkSqlQuery query = newquery();
query.exec( queryString );
query.prepare( "SELECT id FROM artist WHERE sortname = ?" );
query.addBindValue( sortname );
query.exec();
if ( query.next() )
{
id = query.value( 0 ).toInt();

View File

@@ -83,7 +83,7 @@ FuzzyIndex::wipeIndex()
endIndexing();
QTimer::singleShot( 0, this, SLOT( updateIndex() ) );
return true; // FIXME
}
@@ -189,8 +189,8 @@ FuzzyIndex::appendFields( const QMap< unsigned int, QMap< QString, QString > >&
catch( CLuceneError& error )
{
tDebug() << "Caught CLucene error:" << error.what();
wipeIndex();
QTimer::singleShot( 0, this, SLOT( wipeIndex() ) );
}
}
@@ -282,9 +282,9 @@ FuzzyIndex::search( const Tomahawk::query_ptr& query )
}
catch( CLuceneError& error )
{
tDebug() << "Caught CLucene error:" << error.what();
wipeIndex();
tDebug() << "Caught CLucene error:" << error.what() << query->toString();
QTimer::singleShot( 0, this, SLOT( wipeIndex() ) );
}
return resultsmap;
@@ -338,8 +338,8 @@ FuzzyIndex::searchAlbum( const Tomahawk::query_ptr& query )
catch( CLuceneError& error )
{
tDebug() << "Caught CLucene error:" << error.what();
wipeIndex();
QTimer::singleShot( 0, this, SLOT( wipeIndex() ) );
}
return resultsmap;

View File

@@ -61,7 +61,7 @@ public:
void beginIndexing();
void endIndexing();
void appendFields( const QMap< unsigned int, QMap< QString, QString > >& trackData );
signals:
void indexReady();
@@ -73,10 +73,9 @@ public slots:
private slots:
void updateIndex();
private:
bool wipeIndex();
private:
QMutex m_mutex;
QString m_lucenePath;

View File

@@ -51,6 +51,14 @@ TomahawkSqlQuery::escape( QString identifier )
}
bool
TomahawkSqlQuery::prepare( const QString& query )
{
m_query = query;
return QSqlQuery::prepare( query );
}
bool
TomahawkSqlQuery::exec( const QString& query )
{
@@ -76,6 +84,21 @@ TomahawkSqlQuery::exec()
unsigned int retries = 0;
while ( !QSqlQuery::exec() && ++retries < 10 )
{
if ( lastError().text().toLower().contains( "no query" ) ||
lastError().text().toLower().contains( "parameter count mismatch" ) )
{
tDebug() << Q_FUNC_INFO << "Re-preparing query!";
QMap< QString, QVariant > bv = boundValues();
prepare( m_query );
foreach ( const QString& key, bv.keys() )
{
tDebug() << Q_FUNC_INFO << "Rebinding key" << key << "with value" << bv.value( key );
bindValue( key, bv.value( key ) );
}
}
if ( isBusyError( lastError() ) )
retries = 0;
@@ -104,7 +127,7 @@ TomahawkSqlQuery::commitTransaction()
#endif
if ( log )
tLog( LOGSQL ) << "TomahawkSqlQuery::commitTransaction running in thread " << QThread::currentThread();
unsigned int retries = 0;
while ( !m_db.commit() && ++retries < 10 )
{
@@ -114,7 +137,7 @@ TomahawkSqlQuery::commitTransaction()
tDebug() << "INFO: Retrying failed commit:" << retries << lastError().text();
TomahawkUtils::msleep( 10 );
}
return ( retries < 10 );
}
@@ -136,5 +159,5 @@ TomahawkSqlQuery::isBusyError( const QSqlError& error ) const
{
const QString text = error.text().trimmed().toLower();
return ( text.contains( "no query" ) || text.contains( "locked" ) || text.contains( "busy" ) || text.isEmpty() );
return ( text.contains( "locked" ) || text.contains( "busy" ) || text.isEmpty() );
}

View File

@@ -35,17 +35,19 @@ public:
static QString escape( QString identifier );
bool prepare( const QString& query );
bool exec( const QString& query );
bool exec();
bool commitTransaction();
private:
bool isBusyError( const QSqlError& error ) const;
void showError();
QSqlDatabase m_db;
QString m_query;
};
#endif // TOMAHAWKSQLQUERY_H

View File

@@ -132,10 +132,11 @@ InfoBar::setDescription( const QString& s )
ui->descriptionLabel->setText( s );
}
void
InfoBar::setDescription( const artist_ptr& artist )
{
m_queryLabel->setQuery( Query::get( artist->name(), QString(), QString() ) );
m_queryLabel->setArtist( artist );
m_queryLabel->setExtraContentsMargins( 4, 0, 0, 0 );
if ( !m_queryLabel->isVisible() )
@@ -151,16 +152,17 @@ InfoBar::setDescription( const artist_ptr& artist )
}
void
InfoBar::setDescription( const album_ptr& )
InfoBar::setDescription( const album_ptr& )
{
// TODO
}
void
InfoBar::artistClicked()
{
if ( m_queryLabel && !m_queryLabel->query().isNull() )
ViewManager::instance()->show( Artist::get( m_queryLabel->artist() ) );
if ( m_queryLabel && !m_queryLabel->artist().isNull() )
ViewManager::instance()->show( m_queryLabel->artist() );
}
@@ -212,7 +214,6 @@ InfoBar::setUpdaters( const QList<PlaylistUpdaterInterface*>& updaters )
newUpdaterWidgets << updater->configurationWidget();
}
foreach ( QWidget* updaterWidget, m_updaterConfigurations )
{
updaterWidget->hide();

View File

@@ -26,8 +26,10 @@
#include <QListView>
#define ROW_HEIGHT 20
#define ICON_PADDING 1
#define ICON_PADDING 2
#define PADDING 2
JobStatusDelegate::JobStatusDelegate( QObject* parent )
: QStyledItemDelegate ( parent )
, m_parentView( qobject_cast< QListView* >( parent ) )
@@ -35,6 +37,7 @@ JobStatusDelegate::JobStatusDelegate( QObject* parent )
Q_ASSERT( m_parentView );
}
JobStatusDelegate::~JobStatusDelegate()
{
@@ -55,7 +58,7 @@ JobStatusDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option,
// painter->drawLine( opt.rect.topLeft(), opt.rect.topRight() );
painter->setRenderHint( QPainter::Antialiasing );
QRect iconRect( ICON_PADDING, ICON_PADDING + opt.rect.y(), ROW_HEIGHT - 2*ICON_PADDING, ROW_HEIGHT - 2*ICON_PADDING );
QRect iconRect( ICON_PADDING, ICON_PADDING + opt.rect.y(), ROW_HEIGHT - 2 * ICON_PADDING, ROW_HEIGHT - 2 * ICON_PADDING );
if ( allowMultiLine )
iconRect.moveTop( opt.rect.top() + opt.rect.height() / 2 - iconRect.height() / 2);
QPixmap p = index.data( Qt::DecorationRole ).value< QPixmap >();
@@ -71,22 +74,24 @@ JobStatusDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option,
if ( !rCol.isEmpty() )
{
const int w = fm.width( rCol );
const QRect rRect( opt.rect.right() - PADDING - w, PADDING + opt.rect.y(), w, opt.rect.height() - 2*PADDING );
const QRect rRect( opt.rect.right() - PADDING - w, PADDING + opt.rect.y(), w, opt.rect.height() - 2 * PADDING );
painter->drawText( rRect, Qt::AlignCenter, rCol );
rightEdge = rRect.left();
}
const int mainW = rightEdge - 3*PADDING - iconRect.right();
const int mainW = rightEdge - 4 * PADDING - iconRect.right();
QString mainText = index.data( Qt::DisplayRole ).toString();
QTextOption to( Qt::AlignLeft | Qt::AlignVCenter );
if ( !allowMultiLine )
mainText = fm.elidedText( mainText, Qt::ElideRight, mainW );
mainText = fm.elidedText( mainText, Qt::ElideRight, mainW );
else
to.setWrapMode( QTextOption::WrapAtWordBoundaryOrAnywhere );
painter->drawText( QRect( iconRect.right() + 2*PADDING, PADDING + opt.rect.y(), mainW, opt.rect.height() - 2*PADDING ), mainText, to );
painter->drawText( QRect( iconRect.right() + 4 * PADDING, PADDING + opt.rect.y(), mainW, opt.rect.height() - 2 * PADDING ), mainText, to );
}
QSize
JobStatusDelegate::sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
@@ -102,11 +107,11 @@ JobStatusDelegate::sizeHint( const QStyleOptionViewItem& option, const QModelInd
initStyleOption( &opt, index );
const QString text = index.data( Qt::DisplayRole ).toString();
const int leftEdge = ICON_PADDING + ROW_HEIGHT + 2*PADDING;
const int leftEdge = ICON_PADDING + ROW_HEIGHT + 2 * PADDING;
const QRect rect = opt.fontMetrics.boundingRect( leftEdge, opt.rect.top(), m_parentView->width() - leftEdge, 200, Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap, text );
m_cachedMultiLineHeights.insert( index, rect.height() + 4*PADDING );
m_cachedMultiLineHeights.insert( index, rect.height() + 4 * PADDING );
return QSize( QStyledItemDelegate::sizeHint ( option, index ).width(), rect.height() + 4*PADDING );
return QSize( QStyledItemDelegate::sizeHint ( option, index ).width(), rect.height() + 4 * PADDING );
}

View File

@@ -101,13 +101,12 @@ JobStatusView::setModel( JobStatusModel* m )
void
JobStatusView::customDelegateJobInserted( int row, JobStatusItem* item )
{
tLog() << Q_FUNC_INFO << "item is " << item << ", row is " << row;
tLog() << Q_FUNC_INFO << "item is" << item << ", row is" << row;
if ( !item )
return;
tLog() << Q_FUNC_INFO << "telling item to create delegate";
item->createDelegate( m_view );
tLog() << Q_FUNC_INFO << "item delegate is " << item->customDelegate();
tLog() << Q_FUNC_INFO << "item delegate is" << item->customDelegate();
m_view->setItemDelegateForRow( row, item->customDelegate() );
AclJobDelegate* delegate = qobject_cast< AclJobDelegate* >( item->customDelegate() );
if ( delegate )
@@ -127,7 +126,7 @@ JobStatusView::customDelegateJobInserted( int row, JobStatusItem* item )
void
JobStatusView::customDelegateJobRemoved( int row )
{
tLog() << Q_FUNC_INFO << "row is " << row;
tLog() << Q_FUNC_INFO << "row is" << row;
}
@@ -138,12 +137,12 @@ JobStatusView::refreshDelegates()
int count = m_model->rowCount();
for ( int i = 0; i < count; i++ )
{
tLog() << Q_FUNC_INFO << "checking row " << i;
tLog() << Q_FUNC_INFO << "checking row" << i;
QModelIndex index = m_model->index( i );
QVariant itemVar = index.data( JobStatusModel::JobDataRole );
if ( !itemVar.canConvert< JobStatusItem* >() || !itemVar.value< JobStatusItem* >() )
{
tLog() << Q_FUNC_INFO << "unable to fetch JobStatusItem* at row " << i;
tLog() << Q_FUNC_INFO << "unable to fetch JobStatusItem* at row" << i;
continue;
}
JobStatusItem* item = itemVar.value< JobStatusItem* >();

View File

@@ -107,16 +107,17 @@ void
DBSyncConnection::check()
{
qDebug() << Q_FUNC_INFO << this << m_source->id();
if ( m_state != UNKNOWN && m_state != SYNCED )
{
qDebug() << "Syncing in progress already.";
return;
}
if ( m_state == SHUTDOWN )
{
qDebug() << "Aborting sync due to shutdown.";
return;
}
if ( m_state != UNKNOWN && m_state != SYNCED )
{
qDebug() << "Syncing in progress already.";
return;
}
m_uscache.clear();
changeState( CHECKING );

View File

@@ -112,7 +112,7 @@ CustomPlaylistView::tracksGenerated( QList< query_ptr > tracks )
return;
m_model->clear();
m_model->append( newTracks );
m_model->appendQueries( newTracks );
}

View File

@@ -56,7 +56,8 @@ GridItemDelegate::GridItemDelegate( QAbstractItemView* parent, PlayableProxyMode
if ( m_view && m_view->metaObject()->indexOfSignal( "modelChanged()" ) > -1 )
connect( m_view, SIGNAL( modelChanged() ), this, SLOT( modelChanged() ) );
connect( m_view, SIGNAL( scrolledContents( int, int ) ), SLOT( onScrolled( int, int ) ) );
connect( m_view, SIGNAL( scrolledContents( int, int ) ), SLOT( onViewChanged() ) );
connect( m_view, SIGNAL( resized() ), SLOT( onViewChanged() ) );
}
@@ -244,6 +245,9 @@ GridItemDelegate::onPlayClicked( const QPersistentModelIndex& index )
closure = NewClosure( AudioEngine::instance(), SIGNAL( started( Tomahawk::result_ptr ) ),
const_cast<GridItemDelegate*>(this), SLOT( onPlaylistChanged( QPersistentModelIndex ) ), QPersistentModelIndex( index ) );
closure = NewClosure( AudioEngine::instance(), SIGNAL( stopped() ),
const_cast<GridItemDelegate*>(this), SLOT( onPlaylistChanged( QPersistentModelIndex ) ), QPersistentModelIndex( index ) );
closure->setAutoDelete( false );
connect( AudioEngine::instance(), SIGNAL( stopped() ), SLOT( onPlaybackFinished() ) );
@@ -421,19 +425,22 @@ GridItemDelegate::doUpdateIndex( const QPersistentModelIndex& idx )
void
GridItemDelegate::onScrolled( int dx, int dy )
GridItemDelegate::onViewChanged()
{
foreach ( QWidget* widget, m_spinner.values() )
foreach ( const QPersistentModelIndex& index, m_spinner.keys() )
{
widget->move( widget->pos() + QPoint( dx, dy ) );
QRect rect = m_view->visualRect( index );
m_spinner.value( index )->move( rect.center() - QPoint( 23, 23 ) );
}
foreach ( ImageButton* button, m_playButton.values() )
foreach ( const QPersistentModelIndex& index, m_playButton.keys() )
{
button->move( button->pos() + QPoint( dx, dy ) );
QRect rect = m_view->visualRect( index );
m_playButton.value( index )->move( rect.center() - QPoint( 23, 23 ) );
}
foreach ( ImageButton* button, m_pauseButton.values() )
foreach ( const QPersistentModelIndex& index, m_pauseButton.keys() )
{
button->move( button->pos() + QPoint( dx, dy ) );
QRect rect = m_view->visualRect( index );
m_pauseButton.value( index )->move( rect.center() - QPoint( 23, 23 ) );
}
}
@@ -478,6 +485,11 @@ GridItemDelegate::onPlaylistChanged( const QPersistentModelIndex& index )
m_pauseButton[ index ]->deleteLater();
m_pauseButton.remove( index );
}
if ( m_spinner.contains( index ) )
{
m_spinner[ index ]->deleteLater();
m_spinner.remove( index );
}
}
}
}

View File

@@ -55,7 +55,7 @@ private slots:
void modelChanged();
void doUpdateIndex( const QPersistentModelIndex& idx );
void onScrolled( int dx, int dy );
void onViewChanged();
void onPlaybackStarted( const QPersistentModelIndex& index );
void onPlaybackFinished();
@@ -64,6 +64,7 @@ private slots:
void fadingFrameChanged( const QPersistentModelIndex& );
void fadingFrameFinished( const QPersistentModelIndex& );
private:
QTimeLine* createTimeline( QTimeLine::Direction direction );

View File

@@ -77,9 +77,6 @@ GridView::GridView( QWidget* parent )
setAutoResize( false );
setProxyModel( new PlayableProxyModel( this ) );
/* m_overlay->setText( tr( "After you have scanned your music collection you will find your latest album additions right here." ) );
m_overlay->setText( tr( "This collection doesn't have any recent albums." ) );*/
connect( this, SIGNAL( doubleClicked( QModelIndex ) ), SLOT( onItemActivated( QModelIndex ) ) );
connect( this, SIGNAL( customContextMenuRequested( QPoint ) ), SLOT( onCustomContextMenu( QPoint ) ) );
@@ -208,6 +205,8 @@ GridView::resizeEvent( QResizeEvent* event )
{
QListView::resizeEvent( event );
layoutItems();
emit resized();
}

View File

@@ -78,6 +78,7 @@ public slots:
signals:
void modelChanged();
void scrolledContents( int dx, int dy );
void resized();
protected:
virtual void startDrag( Qt::DropActions supportedActions );

View File

@@ -46,7 +46,7 @@ PlayableModel::PlayableModel( QObject* parent, bool loading )
{
connect( AudioEngine::instance(), SIGNAL( started( Tomahawk::result_ptr ) ), SLOT( onPlaybackStarted( Tomahawk::result_ptr ) ), Qt::DirectConnection );
connect( AudioEngine::instance(), SIGNAL( stopped() ), SLOT( onPlaybackStopped() ), Qt::DirectConnection );
m_header << tr( "Artist" ) << tr( "Title" ) << tr( "Composer" ) << tr( "Album" ) << tr( "Track" ) << tr( "Duration" )
<< tr( "Bitrate" ) << tr( "Age" ) << tr( "Year" ) << tr( "Size" ) << tr( "Origin" ) << tr( "Score" ) << tr( "Name" );
@@ -200,11 +200,11 @@ PlayableModel::queryData( const query_ptr& query, int column, int role ) const
case Album:
return query->album();
break;
case Composer:
return query->composer();
break;
case Duration:
return TomahawkUtils::timeToString( query->duration() );
break;
@@ -223,7 +223,7 @@ PlayableModel::queryData( const query_ptr& query, int column, int role ) const
}
}
break;
default:
break;
}
@@ -256,7 +256,7 @@ PlayableModel::queryData( const query_ptr& query, int column, int role ) const
case Score:
return query->results().first()->score();
break;
default:
break;
}
@@ -305,7 +305,7 @@ PlayableModel::data( const QModelIndex& index, int role ) const
{
return albumData( entry->album(), role );
}
return QVariant();
}
@@ -576,20 +576,6 @@ PlayableModel::queries() const
}
template<typename T>
void
PlayableModel::insertInternal( const T& item, int row )
{
if ( item.isNull() )
return;
QList< T > list;
list << item;
insert( list, row );
}
template <typename T>
void
PlayableModel::insertInternal( const QList< T >& items, int row )
@@ -598,7 +584,7 @@ PlayableModel::insertInternal( const QList< T >& items, int row )
{
emit trackCountChanged( rowCount( QModelIndex() ) );
emit itemCountChanged( rowCount( QModelIndex() ) );
finishLoading();
return;
}
@@ -633,12 +619,12 @@ PlayableModel::insertInternal( const QList< T >& items, int row )
void
PlayableModel::remove( int row, bool moreToCome )
{
remove( index( row, 0, QModelIndex() ), moreToCome );
removeIndex( index( row, 0, QModelIndex() ), moreToCome );
}
void
PlayableModel::remove( const QModelIndex& index, bool moreToCome )
PlayableModel::removeIndex( const QModelIndex& index, bool moreToCome )
{
if ( QThread::currentThread() != thread() )
{
@@ -666,7 +652,7 @@ PlayableModel::remove( const QModelIndex& index, bool moreToCome )
void
PlayableModel::remove( const QList<QModelIndex>& indexes )
PlayableModel::removeIndexes( const QList<QModelIndex>& indexes )
{
QList<QPersistentModelIndex> pil;
foreach ( const QModelIndex& idx, indexes )
@@ -674,12 +660,12 @@ PlayableModel::remove( const QList<QModelIndex>& indexes )
pil << idx;
}
remove( pil );
removeIndexes( pil );
}
void
PlayableModel::remove( const QList<QPersistentModelIndex>& indexes )
PlayableModel::removeIndexes( const QList<QPersistentModelIndex>& indexes )
{
QList<QPersistentModelIndex> finalIndexes;
foreach ( const QPersistentModelIndex index, indexes )
@@ -691,7 +677,7 @@ PlayableModel::remove( const QList<QPersistentModelIndex>& indexes )
for ( int i = 0; i < finalIndexes.count(); i++ )
{
remove( finalIndexes.at( i ), i + 1 != finalIndexes.count() );
removeIndex( finalIndexes.at( i ), i + 1 != finalIndexes.count() );
}
}
@@ -828,84 +814,102 @@ PlayableModel::itemFromIndex( const QModelIndex& index ) const
void
PlayableModel::append( const Tomahawk::artist_ptr& artist )
PlayableModel::appendArtist( const Tomahawk::artist_ptr& artist )
{
insert( artist, rowCount( QModelIndex() ) );
QList< artist_ptr > artists;
artists << artist;
appendArtists( artists );
}
void
PlayableModel::append( const Tomahawk::album_ptr& album )
PlayableModel::appendAlbum( const Tomahawk::album_ptr& album )
{
insert( album, rowCount( QModelIndex() ) );
QList< album_ptr > albums;
albums << album;
appendAlbums( albums );
}
void
PlayableModel::append( const Tomahawk::query_ptr& query )
PlayableModel::appendQuery( const Tomahawk::query_ptr& query )
{
insert( query, rowCount( QModelIndex() ) );
QList< query_ptr > queries;
queries << query;
appendQueries( queries );
}
void
PlayableModel::append( const QList< Tomahawk::artist_ptr >& artists )
PlayableModel::appendArtists( const QList< Tomahawk::artist_ptr >& artists )
{
insert( artists, rowCount( QModelIndex() ) );
insertArtists( artists, rowCount( QModelIndex() ) );
}
void
PlayableModel::append( const QList< Tomahawk::album_ptr >& albums )
PlayableModel::appendAlbums( const QList< Tomahawk::album_ptr >& albums )
{
insert( albums, rowCount( QModelIndex() ) );
insertAlbums( albums, rowCount( QModelIndex() ) );
}
void
PlayableModel::append( const QList< Tomahawk::query_ptr >& queries )
PlayableModel::appendQueries( const QList< Tomahawk::query_ptr >& queries )
{
insert( queries, rowCount( QModelIndex() ) );
insertQueries( queries, rowCount( QModelIndex() ) );
}
void
PlayableModel::insert( const Tomahawk::artist_ptr& artist, int row )
PlayableModel::insertArtist( const Tomahawk::artist_ptr& artist, int row )
{
insertInternal( artist, row );
QList< artist_ptr > artists;
artists << artist;
insertArtists( artists, row );
}
void
PlayableModel::insert( const Tomahawk::album_ptr& album, int row )
PlayableModel::insertAlbum( const Tomahawk::album_ptr& album, int row )
{
insertInternal( album, row );
QList< album_ptr > albums;
albums << album;
insertAlbums( albums, row );
}
void
PlayableModel::insert( const Tomahawk::query_ptr& query, int row )
PlayableModel::insertQuery( const Tomahawk::query_ptr& query, int row )
{
insertInternal( query, row );
QList< query_ptr > queries;
queries << query;
insertQueries( queries, row );
}
void
PlayableModel::insert( const QList< Tomahawk::artist_ptr >& artists, int row )
PlayableModel::insertArtists( const QList< Tomahawk::artist_ptr >& artists, int row )
{
insertInternal( artists, row );
}
void
PlayableModel::insert( const QList< Tomahawk::album_ptr >& albums, int row )
PlayableModel::insertAlbums( const QList< Tomahawk::album_ptr >& albums, int row )
{
insertInternal( albums, row );
}
void
PlayableModel::insert( const QList< Tomahawk::query_ptr >& queries, int row )
PlayableModel::insertQueries( const QList< Tomahawk::query_ptr >& queries, int row )
{
insertInternal( queries, row );
}

View File

@@ -91,7 +91,7 @@ public:
virtual QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const;
virtual QVariant headerData( int section, Qt::Orientation orientation, int role ) const;
virtual QVariant artistData( const Tomahawk::artist_ptr& artist, int role = Qt::DisplayRole ) const;
virtual QVariant albumData( const Tomahawk::album_ptr& album, int role = Qt::DisplayRole ) const;
virtual QVariant queryData( const Tomahawk::query_ptr&, int column, int role = Qt::DisplayRole ) const;
@@ -114,7 +114,7 @@ public:
QList< Tomahawk::query_ptr > queries() const;
void updateDetailedInfo( const QModelIndex& index );
QSize itemSize() const { return m_itemSize; }
void setItemSize( const QSize& size ) { m_itemSize = size; }
@@ -136,24 +136,24 @@ public slots:
virtual void clear();
virtual void append( const QList< Tomahawk::query_ptr >& queries );
virtual void append( const QList< Tomahawk::artist_ptr >& artists );
virtual void append( const QList< Tomahawk::album_ptr >& albums );
virtual void append( const Tomahawk::query_ptr& query );
virtual void append( const Tomahawk::artist_ptr& artist );
virtual void append( const Tomahawk::album_ptr& album );
virtual void appendQueries( const QList< Tomahawk::query_ptr >& queries );
virtual void appendArtists( const QList< Tomahawk::artist_ptr >& artists );
virtual void appendAlbums( const QList< Tomahawk::album_ptr >& albums );
virtual void appendQuery( const Tomahawk::query_ptr& query );
virtual void appendArtist( const Tomahawk::artist_ptr& artist );
virtual void appendAlbum( const Tomahawk::album_ptr& album );
virtual void insert( const QList< Tomahawk::query_ptr >& queries, int row = 0 );
virtual void insert( const QList< Tomahawk::artist_ptr >& artists, int row = 0 );
virtual void insert( const QList< Tomahawk::album_ptr >& albums, int row = 0 );
virtual void insert( const Tomahawk::query_ptr& query, int row = 0 );
virtual void insert( const Tomahawk::artist_ptr& artist, int row = 0 );
virtual void insert( const Tomahawk::album_ptr& album, int row = 0 );
virtual void insertQueries( const QList< Tomahawk::query_ptr >& queries, int row = 0 );
virtual void insertArtists( const QList< Tomahawk::artist_ptr >& artists, int row = 0 );
virtual void insertAlbums( const QList< Tomahawk::album_ptr >& albums, int row = 0 );
virtual void insertQuery( const Tomahawk::query_ptr& query, int row = 0 );
virtual void insertArtist( const Tomahawk::artist_ptr& artist, int row = 0 );
virtual void insertAlbum( const Tomahawk::album_ptr& album, int row = 0 );
virtual void remove( int row, bool moreToCome = false );
virtual void remove( const QModelIndex& index, bool moreToCome = false );
virtual void remove( const QList<QModelIndex>& indexes );
virtual void remove( const QList<QPersistentModelIndex>& indexes );
virtual void removeIndex( const QModelIndex& index, bool moreToCome = false );
virtual void removeIndexes( const QList<QModelIndex>& indexes );
virtual void removeIndexes( const QList<QPersistentModelIndex>& indexes );
virtual void setRepeatMode( Tomahawk::PlaylistModes::RepeatMode /*mode*/ ) {}
virtual void setShuffled( bool /*shuffled*/ ) {}
@@ -170,8 +170,6 @@ private slots:
private:
template <typename T>
void insertInternal( const QList< T >& items, int row );
template <typename T>
void insertInternal( const T& item, int row );
Qt::Alignment columnAlignment( int column ) const;

View File

@@ -84,7 +84,7 @@ PlayableProxyModel::setSourcePlayableModel( PlayableModel* sourceModel )
{
if ( m_model->metaObject()->indexOfSignal( "trackCountChanged(uint)" ) > -1 )
connect( m_model, SIGNAL( trackCountChanged( unsigned int ) ), playlistInterface().data(), SIGNAL( sourceTrackCountChanged( unsigned int ) ) );
connect( m_model, SIGNAL( loadingStarted() ), SIGNAL( loadingStarted() ) );
connect( m_model, SIGNAL( loadingFinished() ), SIGNAL( loadingFinished() ) );
}
@@ -99,10 +99,10 @@ PlayableProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourcePa
PlayableItem* pi = itemFromIndex( sourceModel()->index( sourceRow, 0, sourceParent ) );
if ( !pi )
return false;
if ( m_maxVisibleItems >= 0 && sourceRow > m_maxVisibleItems - 1 )
return false;
if ( m_hideDupeItems )
{
for ( int i = 0; i < sourceRow; i++ )
@@ -132,10 +132,10 @@ PlayableProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourcePa
if ( !m_showOfflineResults && !r.isNull() && !r->isOnline() )
return false;
if ( filterRegExp().isEmpty() )
return true;
QStringList sl = filterRegExp().pattern().split( " ", QString::SkipEmptyParts );
foreach( QString s, sl )
{
@@ -188,19 +188,19 @@ PlayableProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourcePa
void
PlayableProxyModel::remove( const QModelIndex& index )
PlayableProxyModel::removeIndex( const QModelIndex& index )
{
if ( !sourceModel() )
return;
if ( !index.isValid() )
return;
sourceModel()->remove( mapToSource( index ) );
sourceModel()->removeIndex( mapToSource( index ) );
}
void
PlayableProxyModel::remove( const QModelIndexList& indexes )
PlayableProxyModel::removeIndexes( const QModelIndexList& indexes )
{
if ( !sourceModel() )
return;
@@ -212,12 +212,12 @@ PlayableProxyModel::remove( const QModelIndexList& indexes )
pil << mapToSource( idx );
}
sourceModel()->remove( pil );
sourceModel()->removeIndexes( pil );
}
void
PlayableProxyModel::remove( const QList< QPersistentModelIndex >& indexes )
PlayableProxyModel::removeIndexes( const QList< QPersistentModelIndex >& indexes )
{
if ( !sourceModel() )
return;
@@ -229,7 +229,7 @@ PlayableProxyModel::remove( const QList< QPersistentModelIndex >& indexes )
pil << mapToSource( idx );
}
sourceModel()->remove( pil );
sourceModel()->removeIndexes( pil );
}
@@ -269,6 +269,8 @@ PlayableProxyModel::lessThan( int column, const Tomahawk::query_ptr& q1, const T
const QString album2 = q2->albumSortname();
const QString track1 = q1->trackSortname();
const QString track2 = q2->trackSortname();
const QString composer1 = q1->composerSortname();
const QString composer2 = q2->composerSortname();
const unsigned int albumpos1 = q1->albumpos();
const unsigned int albumpos2 = q2->albumpos();
const unsigned int discnumber1 = q1->discnumber();
@@ -277,6 +279,8 @@ PlayableProxyModel::lessThan( int column, const Tomahawk::query_ptr& q1, const T
unsigned int mtime1 = 0, mtime2 = 0;
unsigned int size1 = 0, size2 = 0;
float score1 = 0, score2 = 0;
QString origin1;
QString origin2;
qint64 id1 = 0, id2 = 0;
if ( q1->numResults() )
@@ -286,6 +290,7 @@ PlayableProxyModel::lessThan( int column, const Tomahawk::query_ptr& q1, const T
mtime1 = r->modificationTime();
size1 = r->size();
score1 = r->score();
origin1 = r->friendlySource().toLower();
id1 = (qint64)&r;
}
if ( q2->numResults() )
@@ -295,6 +300,7 @@ PlayableProxyModel::lessThan( int column, const Tomahawk::query_ptr& q1, const T
mtime2 = r->modificationTime();
size2 = r->size();
score2 = r->score();
origin2 = r->friendlySource().toLower();
id2 = (qint64)&r;
}
@@ -327,6 +333,28 @@ PlayableProxyModel::lessThan( int column, const Tomahawk::query_ptr& q1, const T
return QString::localeAwareCompare( artist1, artist2 ) < 0;
}
else if ( column == PlayableModel::Composer ) // sort by composer
{
if ( composer1 == composer2 )
{
if ( album1 == album2 )
{
if ( discnumber1 == discnumber2 )
{
if ( albumpos1 == albumpos2 )
return id1 < id2;
return albumpos1 < albumpos2;
}
return discnumber1 < discnumber2;
}
return QString::localeAwareCompare( album1, album2 ) < 0;
}
return QString::localeAwareCompare( composer1, composer2 ) < 0;
}
else if ( column == PlayableModel::Album ) // sort by album
{
if ( album1 == album2 )
@@ -372,6 +400,13 @@ PlayableProxyModel::lessThan( int column, const Tomahawk::query_ptr& q1, const T
return score1 < score2;
}
else if ( column == PlayableModel::Origin ) // sort by file origin
{
if ( origin1 == origin2 )
return id1 < id2;
return origin1 < origin2;
}
else if ( column == PlayableModel::AlbumPos ) // sort by album pos
{
if ( discnumber1 != discnumber2 )
@@ -384,7 +419,7 @@ PlayableProxyModel::lessThan( int column, const Tomahawk::query_ptr& q1, const T
return albumpos1 < albumpos2;
}
}
const QString& lefts = q1->track();
const QString& rights = q2->track();
if ( lefts == rights )

View File

@@ -44,9 +44,9 @@ public:
virtual QPersistentModelIndex currentIndex() const { return mapFromSource( m_model->currentItem() ); }
virtual void setCurrentIndex( const QModelIndex& index ) { m_model->setCurrentItem( mapToSource( index ) ); }
virtual void remove( const QModelIndex& index );
virtual void remove( const QModelIndexList& indexes );
virtual void remove( const QList< QPersistentModelIndex >& indexes );
virtual void removeIndex( const QModelIndex& index );
virtual void removeIndexes( const QModelIndexList& indexes );
virtual void removeIndexes( const QList< QPersistentModelIndex >& indexes );
virtual bool showOfflineResults() const { return m_showOfflineResults; }
virtual void setShowOfflineResults( bool b );

View File

@@ -227,7 +227,7 @@ PlaylistItemDelegate::paintDetailed( QPainter* painter, const QStyleOptionViewIt
opt.text.clear();
qApp->style()->drawControl( QStyle::CE_ItemViewItem, &opt, painter );
if ( m_view->hoveredIndex().row() == index.row() && m_view->hoveredIndex().column() == index.column() &&
if ( m_view->hoveredIndex().row() == index.row() && m_view->hoveredIndex().column() == index.column() && !index.data().toString().isEmpty() &&
( index.column() == PlayableModel::Artist || index.column() == PlayableModel::Album || index.column() == PlayableModel::Track ) )
{
opt.rect.setWidth( opt.rect.width() - 16 );

View File

@@ -93,10 +93,10 @@ PlaylistModel::loadPlaylist( const Tomahawk::playlist_ptr& playlist, bool loadEn
}
QList<plentry_ptr> entries = playlist->entries();
foreach( const plentry_ptr& p, entries )
qDebug() << p->guid() << p->query()->track() << p->query()->artist();
/* foreach ( const plentry_ptr& p, entries )
qDebug() << p->guid() << p->query()->track() << p->query()->artist();*/
append( entries );
appendEntries( entries );
m_isLoading = false;
}
@@ -112,78 +112,67 @@ PlaylistModel::clear()
void
PlaylistModel::append( const QList< plentry_ptr >& entries )
PlaylistModel::appendEntries( const QList< plentry_ptr >& entries )
{
insert( entries, rowCount( QModelIndex() ) );
insertEntries( entries, rowCount( QModelIndex() ) );
}
void
PlaylistModel::append( const QList< query_ptr >& queries )
PlaylistModel::insertAlbums( const QList< Tomahawk::album_ptr >& albums, int row )
{
insert( queries, rowCount( QModelIndex() ) );
}
// FIXME: This currently appends, not inserts!
void
PlaylistModel::append( const Tomahawk::query_ptr& query )
{
insert( query, rowCount( QModelIndex() ) );
}
void
PlaylistModel::append( const Tomahawk::album_ptr& album )
{
if ( album.isNull() )
return;
connect( album.data(), SIGNAL( tracksAdded( QList<Tomahawk::query_ptr>, Tomahawk::ModelMode, Tomahawk::collection_ptr ) ),
SLOT( append( QList<Tomahawk::query_ptr> ) ) );
if ( rowCount( QModelIndex() ) == 0 )
foreach ( const album_ptr& album, albums )
{
setTitle( album->name() );
setDescription( tr( "All tracks by %1 on album %2" ).arg( album->artist()->name() ).arg( album->name() ) );
m_isTemporary = true;
if ( album.isNull() )
return;
connect( album.data(), SIGNAL( tracksAdded( QList<Tomahawk::query_ptr>, Tomahawk::ModelMode, Tomahawk::collection_ptr ) ),
SLOT( appendQueries( QList<Tomahawk::query_ptr> ) ) );
appendQueries( album->playlistInterface( Mixed )->tracks() );
}
append( album->playlistInterface( Mixed )->tracks() );
}
void
PlaylistModel::append( const Tomahawk::artist_ptr& artist )
{
if ( artist.isNull() )
return;
connect( artist.data(), SIGNAL( tracksAdded( QList<Tomahawk::query_ptr>, Tomahawk::ModelMode, Tomahawk::collection_ptr ) ),
SLOT( append( QList<Tomahawk::query_ptr> ) ) );
if ( rowCount( QModelIndex() ) == 0 )
if ( rowCount( QModelIndex() ) == 0 && albums.count() == 1 )
{
setTitle( artist->name() );
setDescription( tr( "All tracks by %1" ).arg( artist->name() ) );
setTitle( albums.first()->name() );
setDescription( tr( "All tracks by %1 on album %2" ).arg( albums.first()->artist()->name() ).arg( albums.first()->name() ) );
m_isTemporary = true;
}
append( artist->playlistInterface( Mixed )->tracks() );
}
void
PlaylistModel::insert( const Tomahawk::query_ptr& query, int row )
PlaylistModel::insertArtists( const QList< Tomahawk::artist_ptr >& artists, int row )
{
PlayableModel::insert( query, row );
// FIXME: This currently appends, not inserts!
foreach ( const artist_ptr& artist, artists )
{
if ( artist.isNull() )
return;
connect( artist.data(), SIGNAL( tracksAdded( QList<Tomahawk::query_ptr>, Tomahawk::ModelMode, Tomahawk::collection_ptr ) ),
SLOT( appendQueries( QList<Tomahawk::query_ptr> ) ) );
appendQueries( artist->playlistInterface( Mixed )->tracks() );
}
if ( rowCount( QModelIndex() ) == 0 && artists.count() == 1 )
{
setTitle( artists.first()->name() );
setDescription( tr( "All tracks by %1" ).arg( artists.first()->name() ) );
m_isTemporary = true;
}
}
void
PlaylistModel::insert( const QList< Tomahawk::query_ptr >& queries, int row )
PlaylistModel::insertQueries( const QList< Tomahawk::query_ptr >& queries, int row )
{
QList< Tomahawk::plentry_ptr > entries;
foreach( const query_ptr& query, queries )
foreach ( const query_ptr& query, queries )
{
plentry_ptr entry = plentry_ptr( new PlaylistEntry() );
@@ -200,12 +189,12 @@ PlaylistModel::insert( const QList< Tomahawk::query_ptr >& queries, int row )
entries << entry;
}
insert( entries, row );
insertEntries( entries, row );
}
void
PlaylistModel::insert( const QList< Tomahawk::plentry_ptr >& entries, int row )
PlaylistModel::insertEntries( const QList< Tomahawk::plentry_ptr >& entries, int row )
{
if ( !entries.count() )
{
@@ -368,7 +357,7 @@ PlaylistModel::parsedDroppedTracks( QList< query_ptr > tracks )
if ( update )
beginPlaylistChanges();
insert( tracks, beginRow );
insertQueries( tracks, beginRow );
if ( update && m_dropStorage.action & Qt::CopyAction )
endPlaylistChanges();
@@ -488,14 +477,7 @@ PlaylistModel::playlistEntries() const
void
PlaylistModel::remove( int row, bool moreToCome )
{
PlayableModel::remove( row, moreToCome );
}
void
PlaylistModel::remove( const QModelIndex& index, bool moreToCome )
PlaylistModel::removeIndex( const QModelIndex& index, bool moreToCome )
{
PlayableItem* item = itemFromIndex( index );
@@ -513,27 +495,13 @@ PlaylistModel::remove( const QModelIndex& index, bool moreToCome )
if ( item && !m_isLoading )
m_savedRemoveTracks << item->query();
PlayableModel::remove( index, moreToCome );
PlayableModel::removeIndex( index, moreToCome );
if ( !moreToCome )
endPlaylistChanges();
}
void
PlaylistModel::remove( const QList<QModelIndex>& indexes )
{
PlayableModel::remove( indexes );
}
void
PlaylistModel::remove( const QList<QPersistentModelIndex>& indexes )
{
PlayableModel::remove( indexes );
}
bool
PlaylistModel::isTemporary() const
{

View File

@@ -58,20 +58,14 @@ public:
public slots:
virtual void clear();
virtual void append( const Tomahawk::query_ptr& query );
virtual void append( const Tomahawk::album_ptr& album );
virtual void append( const Tomahawk::artist_ptr& artist );
virtual void append( const QList< Tomahawk::query_ptr >& queries );
virtual void append( const QList< Tomahawk::plentry_ptr >& entries );
virtual void appendEntries( const QList< Tomahawk::plentry_ptr >& entries );
virtual void insert( const Tomahawk::query_ptr& query, int row = 0 );
virtual void insert( const QList< Tomahawk::query_ptr >& queries, int row = 0 );
virtual void insert( const QList< Tomahawk::plentry_ptr >& entries, int row = 0 );
virtual void insertAlbums( const QList< Tomahawk::album_ptr >& album, int row = 0 );
virtual void insertArtists( const QList< Tomahawk::artist_ptr >& artist, int row = 0 );
virtual void insertQueries( const QList< Tomahawk::query_ptr >& queries, int row = 0 );
virtual void insertEntries( const QList< Tomahawk::plentry_ptr >& entries, int row = 0 );
virtual void remove( int row, bool moreToCome = false );
virtual void remove( const QModelIndex& index, bool moreToCome = false );
virtual void remove( const QList<QModelIndex>& indexes );
virtual void remove( const QList<QPersistentModelIndex>& indexes );
virtual void removeIndex( const QModelIndex& index, bool moreToCome = false );
signals:
void repeatModeChanged( Tomahawk::PlaylistModes::RepeatMode mode );

View File

@@ -92,7 +92,7 @@ PlaylistView::keyPressEvent( QKeyEvent* event )
if ( ( event->key() == Qt::Key_Delete || event->key() == Qt::Key_Backspace ) && !model()->isReadOnly() )
{
qDebug() << "Removing selected items";
proxyModel()->remove( selectedIndexes() );
deleteItems();
}
}
@@ -132,7 +132,7 @@ PlaylistView::eventFilter( QObject* obj, QEvent* event )
void
PlaylistView::deleteItems()
{
proxyModel()->remove( selectedIndexes() );
proxyModel()->removeIndexes( selectedIndexes() );
}

View File

@@ -52,7 +52,7 @@ QueueProxyModel::onPlaybackStarted( const Tomahawk::result_ptr& result )
PlayableItem* item = itemFromIndex( mapToSource( idx ) );
if ( item && item->query() && ( item->query()->results().contains( result ) ||
item->query()->equals( result->toQuery() ) ) )
remove( idx );
removeIndex( idx );
}
}
@@ -61,7 +61,7 @@ void
QueueProxyModel::onIndexActivated( const QModelIndex& index )
{
setCurrentIndex( QModelIndex() );
remove( index );
removeIndex( index );
}

View File

@@ -33,21 +33,10 @@
using namespace Tomahawk;
RecentlyAddedModel::RecentlyAddedModel( const source_ptr& source, QObject* parent )
RecentlyAddedModel::RecentlyAddedModel( QObject* parent )
: PlayableModel( parent )
, m_source( source )
, m_limit( LATEST_TRACK_ITEMS )
{
if ( source.isNull() )
{
connect( SourceList::instance(), SIGNAL( ready() ), SLOT( onSourcesReady() ) );
connect( SourceList::instance(), SIGNAL( sourceAdded( Tomahawk::source_ptr ) ), SLOT( onSourceAdded( Tomahawk::source_ptr ) ) );
}
else
{
onSourceAdded( source );
loadHistory();
}
}
@@ -63,6 +52,7 @@ RecentlyAddedModel::loadHistory()
{
clear();
}
startLoading();
DatabaseCommand_AllTracks* cmd = new DatabaseCommand_AllTracks( m_source->collection() );
cmd->setLimit( m_limit );
@@ -70,7 +60,7 @@ RecentlyAddedModel::loadHistory()
cmd->setSortDescending( true );
connect( cmd, SIGNAL( tracks( QList<Tomahawk::query_ptr>, QVariant ) ),
SLOT( append( QList<Tomahawk::query_ptr> ) ), Qt::QueuedConnection );
SLOT( appendQueries( QList<Tomahawk::query_ptr> ) ), Qt::QueuedConnection );
Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) );
}
@@ -88,6 +78,28 @@ RecentlyAddedModel::onSourcesReady()
}
void
RecentlyAddedModel::setSource( const Tomahawk::source_ptr& source )
{
m_source = source;
if ( source.isNull() )
{
if ( SourceList::instance()->isReady() )
onSourcesReady();
else
connect( SourceList::instance(), SIGNAL( ready() ), SLOT( onSourcesReady() ) );
connect( SourceList::instance(), SIGNAL( sourceAdded( Tomahawk::source_ptr ) ), SLOT( onSourceAdded( Tomahawk::source_ptr ) ) );
}
else
{
onSourceAdded( source );
loadHistory();
}
}
void
RecentlyAddedModel::onSourceAdded( const Tomahawk::source_ptr& source )
{

View File

@@ -32,7 +32,7 @@ class DLLEXPORT RecentlyAddedModel : public PlayableModel
Q_OBJECT
public:
explicit RecentlyAddedModel( const Tomahawk::source_ptr& source, QObject* parent = 0 );
explicit RecentlyAddedModel( QObject* parent = 0 );
~RecentlyAddedModel();
unsigned int limit() const { return m_limit; }
@@ -40,6 +40,9 @@ public:
bool isTemporary() const;
public slots:
void setSource( const Tomahawk::source_ptr& source );
private slots:
void onSourcesReady();
void onSourceAdded( const Tomahawk::source_ptr& source );

View File

@@ -34,25 +34,10 @@
using namespace Tomahawk;
RecentlyPlayedModel::RecentlyPlayedModel( const source_ptr& source, QObject* parent )
RecentlyPlayedModel::RecentlyPlayedModel( QObject* parent )
: PlaylistModel( parent )
, m_source( source )
, m_limit( HISTORY_TRACK_ITEMS )
{
if ( source.isNull() )
{
if ( SourceList::instance()->isReady() )
onSourcesReady();
else
connect( SourceList::instance(), SIGNAL( ready() ), SLOT( onSourcesReady() ) );
connect( SourceList::instance(), SIGNAL( sourceAdded( Tomahawk::source_ptr ) ), SLOT( onSourceAdded( Tomahawk::source_ptr ) ) );
}
else
{
onSourceAdded( source );
loadHistory();
}
}
@@ -68,13 +53,13 @@ RecentlyPlayedModel::loadHistory()
{
clear();
}
loadingStarted();
startLoading();
DatabaseCommand_PlaybackHistory* cmd = new DatabaseCommand_PlaybackHistory( m_source );
cmd->setLimit( m_limit );
connect( cmd, SIGNAL( tracks( QList<Tomahawk::query_ptr> ) ),
SLOT( append( QList<Tomahawk::query_ptr> ) ), Qt::QueuedConnection );
SLOT( appendQueries( QList<Tomahawk::query_ptr> ) ), Qt::QueuedConnection );
Database::instance()->enqueue( QSharedPointer<DatabaseCommand>( cmd ) );
}
@@ -92,6 +77,27 @@ RecentlyPlayedModel::onSourcesReady()
}
void
RecentlyPlayedModel::setSource( const Tomahawk::source_ptr& source )
{
m_source = source;
if ( source.isNull() )
{
if ( SourceList::instance()->isReady() )
onSourcesReady();
else
connect( SourceList::instance(), SIGNAL( ready() ), SLOT( onSourcesReady() ) );
connect( SourceList::instance(), SIGNAL( sourceAdded( Tomahawk::source_ptr ) ), SLOT( onSourceAdded( Tomahawk::source_ptr ) ) );
}
else
{
onSourceAdded( source );
loadHistory();
}
}
void
RecentlyPlayedModel::onSourceAdded( const Tomahawk::source_ptr& source )
{
@@ -113,7 +119,7 @@ RecentlyPlayedModel::onPlaybackFinished( const Tomahawk::query_ptr& query )
PlayableItem* youngestItem = itemFromIndex( index( 0, 0, QModelIndex() ) );
if ( youngestItem->query()->playedBy().second <= playtime )
insert( query, 0 );
insertQuery( query, 0 );
else
{
for ( int i = 0; i < count - 1; i++ )
@@ -123,14 +129,14 @@ RecentlyPlayedModel::onPlaybackFinished( const Tomahawk::query_ptr& query )
if ( item1->query()->playedBy().second >= playtime && item2->query()->playedBy().second <= playtime )
{
insert( query, i + 1 );
insertQuery( query, i + 1 );
break;
}
}
}
}
else
insert( query, 0 );
insertQuery( query, 0 );
if ( trackCount() > (int)m_limit )
remove( m_limit );

View File

@@ -32,7 +32,7 @@ class DLLEXPORT RecentlyPlayedModel : public PlaylistModel
Q_OBJECT
public:
explicit RecentlyPlayedModel( const Tomahawk::source_ptr& source, QObject* parent = 0 );
explicit RecentlyPlayedModel( QObject* parent = 0 );
~RecentlyPlayedModel();
unsigned int limit() const { return m_limit; }
@@ -40,6 +40,9 @@ public:
bool isTemporary() const;
public slots:
void setSource( const Tomahawk::source_ptr& source );
private slots:
void onSourcesReady();
void onSourceAdded( const Tomahawk::source_ptr& source );

View File

@@ -99,7 +99,7 @@ TrackView::TrackView( QWidget* parent )
connect( this, SIGNAL( doubleClicked( QModelIndex ) ), SLOT( onItemActivated( QModelIndex ) ) );
connect( this, SIGNAL( customContextMenuRequested( const QPoint& ) ), SLOT( onCustomContextMenu( const QPoint& ) ) );
connect( m_contextMenu, SIGNAL( triggered( int ) ), SLOT( onMenuTriggered( int ) ) );
setProxyModel( new PlayableProxyModel( this ) );
}
@@ -554,7 +554,7 @@ TrackView::startDrag( Qt::DropActions supportedActions )
Qt::DropAction action = drag->exec( supportedActions, Qt::CopyAction );
if ( action == Qt::MoveAction )
{
m_proxyModel->remove( pindexes );
m_proxyModel->removeIndexes( pindexes );
}
}

View File

@@ -110,7 +110,7 @@ TreeItemDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option,
o.rect.setX( oldX );
if ( m_view->hoveredIndex().row() == index.row() && m_view->hoveredIndex().column() == index.column() &&
( index.column() == 0 ) )
!index.data().toString().isEmpty() && index.column() == 0 )
{
o.rect.setWidth( o.rect.width() - 16 );
QRect arrowRect( o.rect.x() + o.rect.width(), o.rect.y() + 1, o.rect.height() - 2, o.rect.height() - 2 );

View File

@@ -249,6 +249,8 @@ TreeModel::addCollection( const collection_ptr& collection )
<< collection->source()->id()
<< collection->source()->userName();
startLoading();
m_collection = collection;
DatabaseCommand_AllArtists* cmd = new DatabaseCommand_AllArtists( collection );

View File

@@ -121,7 +121,7 @@ DynamicModel::newTrackGenerated( const Tomahawk::query_ptr& query )
connect( query.data(), SIGNAL( resolvingFinished( bool ) ), this, SLOT( trackResolveFinished( bool ) ) );
m_waitingFor << query.data();
append( query );
appendQuery( query );
}
}
@@ -316,11 +316,9 @@ DynamicModel::addToPlaylist( const QList< query_ptr >& entries, bool clearFirst
m_playlist->addEntries( entries, m_playlist->currentrevision() );
}
else
{ // read-only, so add tracks only in the GUI, not to the playlist itself
foreach ( const query_ptr& query, entries )
{
append( query );
}
{
// read-only, so add tracks only in the GUI, not to the playlist itself
appendQueries( entries );
}
emit tracksAdded();
@@ -328,7 +326,7 @@ DynamicModel::addToPlaylist( const QList< query_ptr >& entries, bool clearFirst
void
DynamicModel::remove(const QModelIndex& idx, bool moreToCome)
DynamicModel::removeIndex( const QModelIndex& idx, bool moreToCome )
{
if ( m_playlist->mode() == Static && isReadOnly() )
return;
@@ -340,10 +338,10 @@ DynamicModel::remove(const QModelIndex& idx, bool moreToCome)
{ // if the user is manually removing the last one, re-add as we're a station
newTrackLoading();
}
PlayableModel::remove( idx );
PlayableModel::removeIndex( idx );
}
else
PlaylistModel::remove( idx, moreToCome );
PlaylistModel::removeIndex( idx, moreToCome );
// don't call onPlaylistChanged.
if( !moreToCome )

View File

@@ -46,7 +46,7 @@ public:
void loadPlaylist( const dynplaylist_ptr& playlist, bool loadEntries = true );
virtual void remove( const QModelIndex& index, bool moreToCome = false );
virtual void removeIndex( const QModelIndex& index, bool moreToCome = false );
bool searchingForNext() const { return m_searchingForNext; }

View File

@@ -260,7 +260,7 @@ DynamicView::collapseEntries( int startRow, int num, int numToKeep )
todel << proxyModel()->index( startRow + i, k );
}
}
proxyModel()->remove( todel );
proxyModel()->removeIndexes( todel );
}

View File

@@ -442,7 +442,7 @@ DynamicWidget::steeringChanged()
toRemove << m_view->proxyModel()->index( i, 0, QModelIndex() );
}
m_view->proxyModel()->remove( toRemove );
m_view->proxyModel()->removeIndexes( toRemove );
m_playlist->generator()->fetchNext();
}

View File

@@ -213,7 +213,7 @@ void
ScriptEngine::javaScriptConsoleMessage( const QString& message, int lineNumber, const QString& sourceID )
{
tLog() << "JAVASCRIPT:" << m_scriptPath << message << lineNumber << sourceID;
#ifdef DEBUG_BUILD
#ifndef QT_NO_DEBUG
QMessageBox::critical( 0, "Script Resolver Error", QString( "%1 %2 %3 %4" ).arg( m_scriptPath ).arg( message ).arg( lineNumber ).arg( sourceID ) );
#endif
}

View File

@@ -76,7 +76,6 @@ ScriptResolver::~ScriptResolver()
if ( !finished || m_proc.state() == QProcess::Running )
{
qDebug() << "External resolver didn't exit after waiting 2s for it to die, killing forcefully";
Q_ASSERT(false);
#ifdef Q_OS_WIN
m_proc.kill();
#else
@@ -160,6 +159,7 @@ ScriptResolver::running() const
return !m_stopped;
}
void
ScriptResolver::sendMessage( const QVariantMap& map )
{
@@ -255,7 +255,11 @@ ScriptResolver::handleMsg( const QByteArray& msg )
setupConfWidget( m );
return;
}
else if ( msgtype == "status" )
{
sendStatus();
return;
}
else if ( msgtype == "results" )
{
const QString qid = m.value( "qid" ).toString();
@@ -333,6 +337,7 @@ ScriptResolver::cmdExited( int code, QProcess::ExitStatus status )
}
}
void
ScriptResolver::resolve( const Tomahawk::query_ptr& query )
{
@@ -358,6 +363,16 @@ ScriptResolver::resolve( const Tomahawk::query_ptr& query )
}
void
ScriptResolver::sendStatus()
{
QVariantMap msg;
msg[ "_msgtype" ] = "status";
msg[ "_status" ] = 1;
sendMessage( msg );
}
void
ScriptResolver::doSetup( const QVariantMap& m )
{
@@ -398,7 +413,8 @@ ScriptResolver::setupConfWidget( const QVariantMap& m )
}
void ScriptResolver::startProcess()
void
ScriptResolver::startProcess()
{
if ( !QFile::exists( filePath() ) )
m_error = Tomahawk::ExternalResolver::FileNotFound;
@@ -407,10 +423,14 @@ void ScriptResolver::startProcess()
m_error = Tomahawk::ExternalResolver::NoError;
}
QFileInfo fi( filePath() );
const QFileInfo fi( filePath() );
QString interpreter;
QString runPath = filePath();
// have to enclose in quotes if path contains spaces...
const QString runPath = QString( "\"%1\"" ).arg( filePath() );
QFile file( filePath() );
file.setPermissions( file.permissions() | QFile::ExeOwner | QFile::ExeGroup | QFile::ExeOther );
#ifdef Q_OS_WIN
if ( fi.suffix().toLower() != "exe" )
@@ -434,14 +454,9 @@ void ScriptResolver::startProcess()
interpreter = QString( "\"%1\"" ).arg(QString::fromUtf16((const ushort *) path));
}
}
else
{
// have to enclose in quotes if path contains spaces on windows...
runPath = QString( "\"%1\"" ).arg( filePath() );
}
#endif // Q_OS_WIN
if( interpreter.isEmpty() )
if ( interpreter.isEmpty() )
{
#ifndef Q_OS_WIN
const QFileInfo info( runPath );

View File

@@ -77,6 +77,7 @@ private:
void sendMsg( const QByteArray& msg );
void doSetup( const QVariantMap& m );
void setupConfWidget( const QVariantMap& m );
void sendStatus();
void startProcess();

View File

@@ -35,71 +35,37 @@ namespace TomahawkUtils
void
BinaryExtractWorker::run()
{
ScopedDeleter deleter( this );
#ifdef Q_OS_MAC
// Platform-specific handling of resolver payload now. We know it's good
// Unzip the file.
QFileInfo info( m_zipFileName );
QDir tmpDir = QDir::tempPath();
if ( !tmpDir.mkdir( info.baseName() ) )
{
qWarning() << "Failed to create temporary directory to unzip in:" << tmpDir.absolutePath();
return;
}
tmpDir.cd( info.baseName() );
TomahawkUtils::unzipFileInFolder( info.absoluteFilePath(), tmpDir );
// On OSX it just contains 1 file, the resolver executable itself. For now. We just copy it to
// the Tomahawk.app/Contents/MacOS/ folder alongside the Tomahawk executable.
const QString dest = QCoreApplication::applicationDirPath();
// Find the filename
const QDir toList( tmpDir.absolutePath() );
const QStringList files = toList.entryList( QStringList(), QDir::Files );
Q_ASSERT( files.size() == 1 );
const QString src = toList.absoluteFilePath( files.first() );
qDebug() << "OS X: Copying binary resolver from to:" << src << dest;
copyWithAuthentication( src, dest, m_receiver );
ScopedDeleter deleter( this );
// We unzip directly to the target location, just like normal attica resolvers
Q_ASSERT( m_receiver );
if ( !m_receiver )
return;
#elif defined(Q_OS_WIN) || defined(Q_OS_LINUX)
// We unzip directly to the target location, just like normal attica resolvers
Q_ASSERT( m_receiver );
if ( !m_receiver )
return;
const QString resolverId = m_receiver->property( "resolverid" ).toString();
const QString resolverId = m_receiver->property( "resolverid" ).toString();
Q_ASSERT( !resolverId.isEmpty() );
if ( resolverId.isEmpty() )
return;
Q_ASSERT( !resolverId.isEmpty() );
if ( resolverId.isEmpty() )
return;
const QDir resolverPath( extractScriptPayload( m_zipFileName, resolverId ) );
const QDir resolverPath( extractScriptPayload( m_zipFileName, resolverId ) );
#ifdef Q_OS_WIN
const QStringList files = resolverPath.entryList( QStringList() << "*.exe", QDir::Files );
#elif defined(Q_OS_LINUX)
const QStringList files = resolverPath.entryList( QStringList() << "*_tomahawkresolver", QDir::Files );
const QStringList files = resolverPath.entryList( QStringList() << "*.exe", QDir::Files );
#else
const QStringList files = resolverPath.entryList( QStringList() << "*_tomahawkresolver", QDir::Files );
#endif
qDebug() << "Found executables in unzipped binary resolver dir:" << files;
Q_ASSERT( files.size() == 1 );
if ( files.size() < 1 )
return;
qDebug() << "Found executables in unzipped binary resolver dir:" << files;
Q_ASSERT( files.size() == 1 );
if ( files.size() < 1 )
return;
const QString resolverToUse = resolverPath.absoluteFilePath( files.first() );
const QString resolverToUse = resolverPath.absoluteFilePath( files.first() );
#ifdef Q_OS_LINUX
QProcess p;
p.start( "chmod", QStringList() << "744" << resolverToUse, QIODevice::ReadOnly );
p.waitForFinished();
#endif
QFile file( resolverToUse );
file.setPermissions( file.permissions() | QFile::ExeOwner | QFile::ExeGroup | QFile::ExeOther );
QMetaObject::invokeMethod( m_receiver, "installSucceeded", Qt::QueuedConnection, Q_ARG( QString, resolverToUse ) );
#endif
QMetaObject::invokeMethod( m_receiver, "installSucceeded", Qt::QueuedConnection, Q_ARG( QString, resolverToUse ) );
}
}

View File

@@ -199,7 +199,8 @@ GroovesharkParser::trackPageFetchFinished()
tDebug() << "Got track info from grooveshark, enough to create a query:" << title.toPlainText() << artist.toPlainText() << album.toPlainText();
Tomahawk::query_ptr q = Tomahawk::Query::get( artist.toPlainText(), title.toPlainText(), album.toPlainText(), uuid(), true );
m_tracks << q;
if ( !q.isNull() )
m_tracks << q;
}
checkTrackFinished();

View File

@@ -37,18 +37,18 @@ using namespace Tomahawk;
QPixmap* ItunesParser::s_pixmap = 0;
ItunesParser::ItunesParser( const QStringList& urls, QObject* parent )
: QObject ( parent )
, m_single( false )
{
foreach ( const QString& url, urls )
{
lookupItunesUri( url );
}
}
ItunesParser::ItunesParser( const QString& Url, QObject* parent )
: QObject ( parent )
, m_single( true )
@@ -56,11 +56,12 @@ ItunesParser::ItunesParser( const QString& Url, QObject* parent )
lookupItunesUri( Url );
}
ItunesParser::~ItunesParser()
{
}
void
ItunesParser::lookupItunesUri( const QString& link )
{
@@ -89,17 +90,17 @@ ItunesParser::lookupItunesUri( const QString& link )
}
else
return;
}
tLog() << "Parsing itunes track:" << link;
QUrl url;
DropJob::DropType type;
if( link.contains( "artist" ) )
if ( link.contains( "artist" ) )
{
type = DropJob::Artist;
url = QUrl( QString( "http://ax.phobos.apple.com.edgesuite.net/WebObjects/MZStoreServices.woa/wa/wsLookup?id=%1&entity=song&limit=30" ).arg( id ) );
}else
}
else
{
type = ( trackId.isEmpty() ? DropJob::Album : DropJob::Track );
url = QUrl( QString( "http://ax.phobos.apple.com.edgesuite.net/WebObjects/MZStoreServices.woa/wa/wsLookup?id=%1&entity=song" ).arg( ( trackId.isEmpty() ? id : trackId ) ) );
@@ -113,8 +114,9 @@ ItunesParser::lookupItunesUri( const QString& link )
JobStatusView::instance()->model()->addJob( j );
m_queries.insert( reply );
}
void
ItunesParser::itunesResponseLookupFinished()
{
@@ -134,7 +136,8 @@ ItunesParser::itunesResponseLookupFinished()
tLog() << "Failed to parse json from Spotify track lookup:" << p.errorString() << "On line" << p.errorLine();
checkTrackFinished();
return;
} else if ( !res.contains( "results" ) )
}
else if ( !res.contains( "results" ) )
{
tLog() << "No 'results' item in the itunes track lookup result... not doing anything";
checkTrackFinished();
@@ -149,23 +152,25 @@ ItunesParser::itunesResponseLookupFinished()
if ( ituneMap.value( "wrapperType" ).toString().contains( "track" ) )
{
title = ituneMap.value( "trackName" ).toString();
artist = ituneMap.value( "artistName" ).toString();
album = ituneMap.value( "collectionName" ).toString();
if ( title.isEmpty() && artist.isEmpty() ) // don't have enough...
{
tLog() << "Didn't get an artist and track name from itunes, not enough to build a query on. Aborting" << title << artist << album;
}else{
}
else
{
Tomahawk::query_ptr q = Tomahawk::Query::get( artist, title, album, uuid(), true );
if ( q.isNull() )
continue;
m_tracks << q;
}
}
}
} else
}
else
{
JobStatusView::instance()->model()->addJob( new ErrorStatusMessage( tr( "Error fetching iTunes information from the network!" ) ) );
tLog() << "Error in network request to Itunes for track decoding:" << r->errorString();
@@ -187,9 +192,9 @@ ItunesParser::checkTrackFinished()
deleteLater();
}
}
QPixmap
ItunesParser::pixmap() const
{

View File

@@ -34,16 +34,20 @@
using namespace Tomahawk;
JSPFLoader::JSPFLoader( bool autoCreate, QObject *parent )
JSPFLoader::JSPFLoader( bool autoCreate, QObject* parent )
: QObject( parent )
, m_autoCreate( autoCreate )
, m_autoDelete( true )
{}
{
}
JSPFLoader::~JSPFLoader()
{
}
QList< Tomahawk::query_ptr >
JSPFLoader::entries() const
{
@@ -159,9 +163,9 @@ JSPFLoader::gotBody()
if ( tM.value( "location" ).toList().size() > 0 )
url = tM.value( "location" ).toList().first().toString();
if( artist.isEmpty() || track.isEmpty() )
if ( artist.isEmpty() || track.isEmpty() )
{
if( !shownError )
if ( !shownError )
{
QMessageBox::warning( 0, tr( "Failed to save tracks" ), tr( "Some tracks in the playlist do not contain an artist and a title. They will be ignored." ), QMessageBox::Ok );
shownError = true;
@@ -170,6 +174,9 @@ JSPFLoader::gotBody()
}
query_ptr q = Tomahawk::Query::get( artist, track, album, uuid() );
if ( q.isNull() )
continue;
q->setDuration( duration.toInt() / 1000 );
if( !url.isEmpty() )
q->setResultHint( url );
@@ -201,7 +208,6 @@ JSPFLoader::gotBody()
m_creator,
false,
m_entries );
}
emit ok( m_playlist );

View File

@@ -38,8 +38,10 @@
#define LOG_SQL_QUERIES 1
using namespace std;
ofstream logfile;
static int s_threshold = -1;
QMutex s_mutex;
namespace Logger
{
@@ -66,7 +68,7 @@ log( const char *msg, unsigned int debugLevel, bool toDisk = true )
if ( debugLevel > DEBUG_LEVEL_THRESHOLD )
toDisk = false;
#endif
#ifdef LOG_SQL_QUERIES
if ( debugLevel == LOGSQL )
toDisk = true;
@@ -74,6 +76,8 @@ log( const char *msg, unsigned int debugLevel, bool toDisk = true )
if ( toDisk || (int)debugLevel <= s_threshold )
{
QMutexLocker lock( &s_mutex );
#ifdef LOG_SQL_QUERIES
if ( debugLevel == LOGSQL )
logfile << "TSQLQUERY: ";
@@ -85,6 +89,8 @@ log( const char *msg, unsigned int debugLevel, bool toDisk = true )
if ( debugLevel <= LOGEXTRA || (int)debugLevel <= s_threshold )
{
QMutexLocker lock( &s_mutex );
cout << msg << endl;
cout.flush();
}

View File

@@ -91,7 +91,8 @@ M3uLoader::getTags( const QFileInfo& info )
{
qDebug() << Q_FUNC_INFO << artist << track << album;
Tomahawk::query_ptr q = Tomahawk::Query::get( artist, track, album, uuid(), !m_createNewPlaylist );
m_tracks << q;
if ( !q.isNull() )
m_tracks << q;
}
}

View File

@@ -48,6 +48,7 @@ QPixmap* RdioParser::s_pixmap = 0;
QCA::Initializer RdioParser::m_qcaInit = QCA::Initializer();
#endif
RdioParser::RdioParser( QObject* parent )
: QObject( parent )
, m_count( 0 )
@@ -56,10 +57,12 @@ RdioParser::RdioParser( QObject* parent )
{
}
RdioParser::~RdioParser()
{
}
void
RdioParser::parse( const QString& url )
{
@@ -68,6 +71,7 @@ RdioParser::parse( const QString& url )
parseUrl( url );
}
void
RdioParser::parse( const QStringList& urls )
{
@@ -109,9 +113,9 @@ RdioParser::parseUrl( const QString& url )
// artist, album, or playlist link requre fetching
fetchObjectsFromUrl( url, type );
}
}
void
RdioParser::fetchObjectsFromUrl( const QString& url, DropJob::DropType type )
{
@@ -134,10 +138,10 @@ RdioParser::fetchObjectsFromUrl( const QString& url, DropJob::DropType type )
m_reqQueries.insert( reply );
}
void
RdioParser::rdioReturned()
{
QNetworkReply* r = qobject_cast< QNetworkReply* >( sender() );
Q_ASSERT( r );
m_reqQueries.remove( r );
@@ -185,21 +189,22 @@ RdioParser::rdioReturned()
}
Tomahawk::query_ptr q = Tomahawk::Query::get( artist, title, album, uuid(), !m_createPlaylist );
if ( q.isNull() )
continue;
m_tracks << q;
}
} else
}
else
{
JobStatusView::instance()->model()->addJob( new ErrorStatusMessage( tr( "Error fetching Rdio information from the network!" ) ) );
tLog() << "Error in network request to Rdio for track decoding:" << r->errorString();
}
checkFinished();
}
void
RdioParser::parseTrack( const QString& origUrl )
{
@@ -313,6 +318,7 @@ RdioParser::hmacSha1(QByteArray key, QByteArray baseString)
#endif
}
void
RdioParser::checkFinished()
{
@@ -325,7 +331,7 @@ RdioParser::checkFinished()
if ( m_tracks.isEmpty() )
return;
if( m_createPlaylist )
if ( m_createPlaylist )
{
m_playlist = Playlist::create( SourceList::instance()->getLocal(),
uuid(),
@@ -353,6 +359,7 @@ RdioParser::checkFinished()
}
}
void
RdioParser::playlistCreated( Tomahawk::PlaylistRevision )
{
@@ -370,6 +377,7 @@ RdioParser::expandedLinks( const QStringList& urls )
}
}
QPixmap
RdioParser::pixmap() const
{
@@ -378,4 +386,3 @@ RdioParser::pixmap() const
return *s_pixmap;
}

View File

@@ -39,6 +39,7 @@ using namespace Tomahawk;
QPixmap* SpotifyParser::s_pixmap = 0;
SpotifyParser::SpotifyParser( const QStringList& Urls, bool createNewPlaylist, QObject* parent )
: QObject ( parent )
, m_limit ( 40 )
@@ -52,6 +53,7 @@ SpotifyParser::SpotifyParser( const QStringList& Urls, bool createNewPlaylist, Q
lookupUrl( url );
}
SpotifyParser::SpotifyParser( const QString& Url, bool createNewPlaylist, QObject* parent )
: QObject ( parent )
, m_limit ( 40 )
@@ -63,6 +65,7 @@ SpotifyParser::SpotifyParser( const QString& Url, bool createNewPlaylist, QObjec
lookupUrl( Url );
}
SpotifyParser::~SpotifyParser()
{
}
@@ -71,12 +74,12 @@ SpotifyParser::~SpotifyParser()
void
SpotifyParser::lookupUrl( const QString& link )
{
if( link.contains( "track" ) )
if ( link.contains( "track" ) )
{
m_trackMode = true;
lookupTrack( link );
}
else if( link.contains( "playlist" ) || link.contains( "album" ) || link.contains( "artist" ) )
else if ( link.contains( "playlist" ) || link.contains( "album" ) || link.contains( "artist" ) )
{
if( !m_createNewPlaylist )
m_trackMode = true;
@@ -87,7 +90,6 @@ SpotifyParser::lookupUrl( const QString& link )
}
else
return; // Not valid spotify item
}
@@ -103,7 +105,6 @@ SpotifyParser::lookupSpotifyBrowse( const QString& linkRaw )
browseUri = "spotify:" + browseUri;
}
DropJob::DropType type;
if ( browseUri.contains( "spotify:user" ) )
@@ -133,6 +134,7 @@ SpotifyParser::lookupSpotifyBrowse( const QString& linkRaw )
m_queries.insert( reply );
}
void
SpotifyParser::lookupTrack( const QString& link )
{
@@ -159,7 +161,6 @@ SpotifyParser::lookupTrack( const QString& link )
JobStatusView::instance()->model()->addJob( j );
m_queries.insert( reply );
}
@@ -186,8 +187,6 @@ SpotifyParser::spotifyBrowseFinished()
}
QVariantMap resultResponse = res.value( res.value( "type" ).toString() ).toMap();
if ( !resultResponse.isEmpty() )
{
m_title = resultResponse.value( "name" ).toString();
@@ -214,12 +213,14 @@ SpotifyParser::spotifyBrowseFinished()
}
Tomahawk::query_ptr q = Tomahawk::Query::get( artist, title, album, uuid(), m_trackMode );
if ( q.isNull() )
continue;
m_tracks << q;
}
}
} else
}
else
{
JobStatusView::instance()->model()->addJob( new ErrorStatusMessage( tr( "Error fetching Spotify information from the network!" ) ) );
tLog() << "Error in network request to Spotify for track decoding:" << r->errorString();
@@ -232,7 +233,6 @@ SpotifyParser::spotifyBrowseFinished()
}
void
SpotifyParser::spotifyTrackLookupFinished()
{
@@ -252,7 +252,8 @@ SpotifyParser::spotifyTrackLookupFinished()
tLog() << "Failed to parse json from Spotify track lookup:" << p.errorString() << "On line" << p.errorLine();
checkTrackFinished();
return;
} else if ( !res.contains( "track" ) )
}
else if ( !res.contains( "track" ) )
{
tLog() << "No 'track' item in the spotify track lookup result... not doing anything";
checkTrackFinished();
@@ -261,7 +262,6 @@ SpotifyParser::spotifyTrackLookupFinished()
// lets parse this baby
QVariantMap t = res.value( "track" ).toMap();
QString title, artist, album;
title = t.value( "name", QString() ).toString();
@@ -278,8 +278,10 @@ SpotifyParser::spotifyTrackLookupFinished()
}
Tomahawk::query_ptr q = Tomahawk::Query::get( artist, title, album, uuid(), m_trackMode );
m_tracks << q;
} else
if ( !q.isNull() )
m_tracks << q;
}
else
{
tLog() << "Error in network request to Spotify for track decoding:" << r->errorString();
}
@@ -288,9 +290,9 @@ SpotifyParser::spotifyTrackLookupFinished()
checkTrackFinished();
else
checkBrowseFinished();
}
void
SpotifyParser::checkBrowseFinished()
{
@@ -300,7 +302,7 @@ SpotifyParser::checkBrowseFinished()
if ( m_browseJob )
m_browseJob->setFinished();
if( m_createNewPlaylist && !m_tracks.isEmpty() )
if ( m_createNewPlaylist && !m_tracks.isEmpty() )
{
m_playlist = Playlist::create( SourceList::instance()->getLocal(),
uuid(),
@@ -322,6 +324,7 @@ SpotifyParser::checkBrowseFinished()
}
}
void
SpotifyParser::checkTrackFinished()
{
@@ -338,13 +341,12 @@ SpotifyParser::checkTrackFinished()
deleteLater();
}
}
void
SpotifyParser::playlistCreated()
{
ViewManager::instance()->show( m_playlist );
deleteLater();

View File

@@ -108,7 +108,7 @@ appConfigDir()
QDir ret;
#ifdef Q_WS_MAC
if( getenv( "HOME" ) )
if ( getenv( "HOME" ) )
{
return QDir( QString( "%1" ).arg( getenv( "HOME" ) ) );
}
@@ -124,11 +124,11 @@ appConfigDir()
return QDir( "c:\\" ); //TODO refer to Qt documentation to get code to do this
#else
if( getenv( "XDG_CONFIG_HOME" ) )
if ( getenv( "XDG_CONFIG_HOME" ) )
{
ret = QDir( QString( "%1/Tomahawk" ).arg( getenv( "XDG_CONFIG_HOME" ) ) );
}
else if( getenv( "HOME" ) )
else if ( getenv( "HOME" ) )
{
ret = QDir( QString( "%1/.config/Tomahawk" ).arg( getenv( "HOME" ) ) );
}
@@ -139,7 +139,7 @@ appConfigDir()
ret = QDir( "/tmp" );
}
if( !ret.exists() )
if ( !ret.exists() )
{
ret.mkpath( ret.canonicalPath() );
}
@@ -329,13 +329,93 @@ void
msleep( unsigned int ms )
{
#ifdef WIN32
Sleep( ms );
Sleep( ms );
#else
::usleep( ms * 1000 );
#endif
}
int
levenshtein( const QString& source, const QString& target )
{
// Step 1
const int n = source.length();
const int m = target.length();
if ( n == 0 )
return m;
if ( m == 0 )
return n;
// Good form to declare a TYPEDEF
typedef QVector< QVector<int> > Tmatrix;
Tmatrix matrix;
matrix.resize( n + 1 );
// Size the vectors in the 2.nd dimension. Unfortunately C++ doesn't
// allow for allocation on declaration of 2.nd dimension of vec of vec
for ( int i = 0; i <= n; i++ )
{
QVector<int> tmp;
tmp.resize( m + 1 );
matrix.insert( i, tmp );
}
// Step 2
for ( int i = 0; i <= n; i++ )
matrix[i][0] = i;
for ( int j = 0; j <= m; j++ )
matrix[0][j] = j;
// Step 3
for ( int i = 1; i <= n; i++ )
{
const QChar s_i = source[i - 1];
// Step 4
for ( int j = 1; j <= m; j++ )
{
const QChar t_j = target[j - 1];
// Step 5
int cost;
if ( s_i == t_j )
cost = 0;
else
cost = 1;
// Step 6
const int above = matrix[i - 1][j];
const int left = matrix[i][j - 1];
const int diag = matrix[i - 1][j - 1];
int cell = ( ( ( left + 1 ) > ( diag + cost ) ) ? diag + cost : left + 1 );
if ( above + 1 < cell )
cell = above + 1;
// Step 6A: Cover transposition, in addition to deletion,
// insertion and substitution. This step is taken from:
// Berghel, Hal ; Roach, David : "An Extension of Ukkonen's
// Enhanced Dynamic Programming ASM Algorithm"
// (http://www.acm.org/~hlb/publications/asm/asm.html)
if ( i > 2 && j > 2 )
{
int trans = matrix[i - 2][j - 2] + 1;
if ( source[ i - 2 ] != t_j ) trans++;
if ( s_i != target[ j - 2 ] ) trans++;
if ( cell > trans ) cell = trans;
}
matrix[i][j] = cell;
}
}
// Step 7
return matrix[n][m];
}
static QMutex s_noProxyHostsMutex;
static QStringList s_noProxyHosts;
@@ -348,7 +428,7 @@ NetworkProxyFactory::NetworkProxyFactory( const NetworkProxyFactory& other )
QList< QNetworkProxy >
NetworkProxyFactory::queryProxy( const QNetworkProxyQuery& query )
{
//tDebug() << Q_FUNC_INFO << "query hostname is " << query.peerHostName() << ", proxy host is " << m_proxy.hostName();
//tDebug() << Q_FUNC_INFO << "query hostname is" << query.peerHostName() << ", proxy host is" << m_proxy.hostName();
QList< QNetworkProxy > proxies;
QString hostname = query.peerHostName();
@@ -369,13 +449,15 @@ NetworkProxyFactory::setNoProxyHosts( const QStringList& hosts )
{
QStringList newList;
tDebug() << Q_FUNC_INFO << "No-proxy hosts:" << hosts;
foreach( QString host, hosts )
foreach ( const QString& host, hosts )
{
QString munge = host.simplified();
newList << munge;
//TODO: wildcard support
}
tDebug() << Q_FUNC_INFO << "New no-proxy hosts:" << newList;
s_noProxyHostsMutex.lock();
s_noProxyHosts = newList;
s_noProxyHostsMutex.unlock();
@@ -466,7 +548,7 @@ setProxyFactory( NetworkProxyFactory* factory, bool noMutexLocker )
if ( QThread::currentThread() == TOMAHAWK_APPLICATION::instance()->thread() )
{
foreach( QThread* thread, s_threadProxyFactoryHash.keys() )
foreach ( QThread* thread, s_threadProxyFactoryHash.keys() )
{
if ( thread != QThread::currentThread() )
{
@@ -513,9 +595,9 @@ nam()
s_threadNamHash[ QThread::currentThread() ] = newNam;
tDebug( LOGEXTRA ) << Q_FUNC_INFO << "created new nam for thread " << QThread::currentThread();
tDebug( LOGEXTRA ) << Q_FUNC_INFO << "created new nam for thread" << QThread::currentThread();
//QNetworkProxy proxy = dynamic_cast< TomahawkUtils::NetworkProxyFactory* >( newNam->proxyFactory() )->proxy();
//tDebug() << Q_FUNC_INFO << "reply proxy properties: " << proxy.type() << proxy.hostName() << proxy.port();
//tDebug() << Q_FUNC_INFO << "reply proxy properties:" << proxy.type() << proxy.hostName() << proxy.port();
return newNam;
}
@@ -632,23 +714,30 @@ mergePlaylistChanges( const QList< Tomahawk::query_ptr >& orig, const QList< Tom
bool
removeDirectory( const QString& dir )
{
const QDir aDir(dir);
const QDir aDir( dir );
tLog() << "Deleting DIR:" << dir;
bool has_err = false;
if (aDir.exists()) {
foreach(const QFileInfo& entry, aDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files | QDir::NoSymLinks)) {
if ( aDir.exists() )
{
foreach ( const QFileInfo& entry, aDir.entryInfoList( QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files | QDir::NoSymLinks ) )
{
QString path = entry.absoluteFilePath();
if (entry.isDir()) {
has_err = !removeDirectory(path) || has_err;
} else if (!QFile::remove(path)) {
if ( entry.isDir() )
{
has_err = !removeDirectory( path ) || has_err;
}
else if ( !QFile::remove( path ) )
{
has_err = true;
}
}
if (!aDir.rmdir(aDir.absolutePath())) {
if ( !aDir.rmdir( aDir.absolutePath() ) )
{
has_err = true;
}
}
return !has_err;
}
@@ -680,11 +769,11 @@ crash()
bool
verifyFile( const QString &filePath, const QString &signature )
verifyFile( const QString& filePath, const QString& signature )
{
QCA::Initializer init;
if( !QCA::isSupported( "sha1" ) )
if ( !QCA::isSupported( "sha1" ) )
{
qWarning() << "SHA1 not supported by QCA, aborting.";
return false;
@@ -761,7 +850,7 @@ extractScriptPayload( const QString& filename, const QString& resolverId )
QDir resolverDir = appDataDir();
if ( !resolverDir.mkpath( QString( "atticaresolvers/%1" ).arg( resolverId ) ) )
{
tLog() << "Failed to mkdir resolver save dir: " << TomahawkUtils::appDataDir().absoluteFilePath( QString( "atticaresolvers/%1" ).arg( resolverId ) );
tLog() << "Failed to mkdir resolver save dir:" << TomahawkUtils::appDataDir().absoluteFilePath( QString( "atticaresolvers/%1" ).arg( resolverId ) );
return QString();
}
resolverDir.cd( QString( "atticaresolvers/%1" ).arg( resolverId ) );
@@ -777,7 +866,7 @@ extractScriptPayload( const QString& filename, const QString& resolverId )
bool
unzipFileInFolder( const QString &zipFileName, const QDir &folder )
unzipFileInFolder( const QString& zipFileName, const QDir& folder )
{
Q_ASSERT( !zipFileName.isEmpty() );
Q_ASSERT( folder.exists() );
@@ -791,7 +880,7 @@ unzipFileInFolder( const QString &zipFileName, const QDir &folder )
if ( !zipFile.goToFirstFile() )
{
tLog() << "Failed to go to first file in zip archive: " << zipFile.getZipError();
tLog() << "Failed to go to first file in zip archive:" << zipFile.getZipError();
return false;
}

View File

@@ -67,7 +67,7 @@ namespace TomahawkUtils
public:
NetworkProxyFactory()
: m_proxy( QNetworkProxy::NoProxy )
{}
{}
NetworkProxyFactory( const NetworkProxyFactory &other );
virtual ~NetworkProxyFactory() {}
@@ -100,9 +100,10 @@ namespace TomahawkUtils
DLLEXPORT QString ageToString( const QDateTime& time, bool appendAgoString = false );
DLLEXPORT QString filesizeToString( unsigned int size );
DLLEXPORT QString extensionToMimetype( const QString& extension );
DLLEXPORT void msleep( unsigned int ms );
DLLEXPORT bool newerVersion( const QString& oldVersion, const QString& newVersion );
DLLEXPORT int levenshtein( const QString& source, const QString& target );
DLLEXPORT NetworkProxyFactory* proxyFactory( bool makeClone = false, bool noMutexLocker = false );
DLLEXPORT void setProxyFactory( TomahawkUtils::NetworkProxyFactory* factory, bool noMutexLocker = false );

View File

@@ -40,6 +40,7 @@
using namespace Tomahawk;
QString
XSPFLoader::errorToString( XSPFErrorCode error )
{
@@ -56,7 +57,8 @@ XSPFLoader::errorToString( XSPFErrorCode error )
}
}
XSPFLoader::XSPFLoader( bool autoCreate, bool autoUpdate, QObject *parent )
XSPFLoader::XSPFLoader( bool autoCreate, bool autoUpdate, QObject* parent )
: QObject( parent )
, m_autoCreate( autoCreate )
, m_autoUpdate( autoUpdate )
@@ -69,7 +71,8 @@ XSPFLoader::XSPFLoader( bool autoCreate, bool autoUpdate, QObject *parent )
XSPFLoader::~XSPFLoader()
{}
{
}
void
@@ -235,6 +238,9 @@ XSPFLoader::gotBody()
}
query_ptr q = Tomahawk::Query::get( artist, track, album, uuid(), false );
if ( q.isNull() )
continue;
q->setDuration( duration.toInt() / 1000 );
if ( !url.isEmpty() )
q->setResultHint( url );
@@ -279,5 +285,4 @@ XSPFLoader::gotBody()
if ( m_autoDelete )
deleteLater();
}

View File

@@ -27,47 +27,52 @@ ChartDataLoader::ChartDataLoader()
{
}
void
ChartDataLoader::go()
{
switch ( m_type )
{
case Track:
{
QList< query_ptr > track_ptrs;
foreach ( const Tomahawk::InfoSystem::InfoStringHash& track, m_data )
case Track:
{
track_ptrs << Query::get( track[ "artist" ], track[ "track" ], QString(), uuid(), false );
QList< query_ptr > track_ptrs;
foreach ( const Tomahawk::InfoSystem::InfoStringHash& track, m_data )
{
query_ptr q = Query::get( track[ "artist" ], track[ "track" ], QString(), uuid(), false );
if ( q.isNull() )
continue;
track_ptrs << q;
}
emit tracks( this, track_ptrs );
break;
}
emit tracks( this, track_ptrs );
break;
}
case Artist:
{
QList< artist_ptr > artist_ptrs;
foreach ( const QString& artistname, m_artists )
case Artist:
{
artist_ptrs << Artist::get( artistname, false );
QList< artist_ptr > artist_ptrs;
foreach ( const QString& artistname, m_artists )
{
artist_ptrs << Artist::get( artistname, false );
}
emit artists( this, artist_ptrs );
break;
}
emit artists( this, artist_ptrs );
break;
}
case Album:
{
QList< album_ptr > album_ptrs;
foreach ( const Tomahawk::InfoSystem::InfoStringHash& album, m_data )
case Album:
{
artist_ptr artistPtr = Artist::get( album[ "artist" ], false );
album_ptr albumPtr = Album::get( artistPtr, album[ "album" ], false );
album_ptrs << albumPtr;
}
QList< album_ptr > album_ptrs;
emit albums( this, album_ptrs );
break;
}
foreach ( const Tomahawk::InfoSystem::InfoStringHash& album, m_data )
{
artist_ptr artistPtr = Artist::get( album[ "artist" ], false );
album_ptr albumPtr = Album::get( artistPtr, album[ "album" ], false );
album_ptrs << albumPtr;
}
emit albums( this, album_ptrs );
break;
}
}
}

View File

@@ -125,10 +125,7 @@ NewPlaylistWidget::suggestionsFound()
m_suggestionsModel = new PlaylistModel( ui->suggestionsView );
ui->suggestionsView->setPlaylistModel( m_suggestionsModel );
foreach( const Tomahawk::query_ptr& query, m_queries )
{
m_suggestionsModel->append( query );
}
m_suggestionsModel->appendQueries( m_queries );
loader->deleteLater();
}

Some files were not shown because too many files have changed in this diff Show More