.DS_Store
.cproject
.project
+local/
+*.swp
+
-1.0 - April ?, 2010
+1.2 - Oct 11, 2010
+- Ability to download videos
+- Support for media keys on GNOME
+- More style, especially on the Mac
+- Fixed crash when trying delete or move the the las playlist item
+
+1.1 - Jul 27, 2010
+- Minitube now correctly plays cat and mouse with YouTube
+- Toolbar restyling
+- Levente Polyak fixed moving more than one video down or up in the playlist
+- Simplified Chinese translation by Changtai Liang
+
+1.0 - May 3, 2010
- Ability to play Full HD (1080p) videos
- Ability to copy the YouTube link and the video stream URL to the clipboard
- Fixed videos failing to play
# Build instructions
## Prerequisites
+To compile Minitube you need at least Qt 4.5, Qt >= 4.6 is recommended.
+The following Qt modules are needed: core, gui, network, xml, phonon, dbus
-To compile Minitube you need Qt >= 4.5 installed.
-
-On a Debian or Ubuntu system just type:
- sudo apt-get install build-essential qt4-dev-tools libphonon-dev
-
-Windows and Mac users can get the Qt libraries from:
-http://qt.nokia.com/downloads
+On a Debian or Ubuntu system type:
+sudo apt-get install build-essential qt4-dev-tools libphonon-dev
## Compiling
-
-Compiling on Linux is fairly easy. Just run:
- qmake
-and then
- make
-
+Run:
+ $ qmake
+and then:
+ $ make
Beware of the Qt3 version of qmake! If things go wrong try running qmake-qt4 instead.
## Running
+./build/target/minitunes
-Just type:
- ./build/target/minitube
-
-## The visual way
+## A word about Phonon on Linux
+To be able to actually listen to music you need a working Phonon setup.
+Please don't contact me about this, ask for help on your distribution support channels.
-There is also a visual way to build and run Qt apps.
-Download the Qt SDK from: http://qt.nokia.com/downloads
-Open `minitube.pro` with Qt Creator and use the Run (big green "play" icon) command.
+## Installing on Linux
+Run:
+ $ sudo make install
+This is for packagers. End users should not install applications in this way.
## Legal Stuff
-
-Copyright (C) 2009 Flavio Tordini
+Copyright (C) 2009-2010 Flavio Tordini
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleName</key>
- <string>Minitube</string>
- <key>CFBundleIconFile</key>
- <string>minitube.icns</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleGetInfoString</key>
- <string>Copyright 2009 Flavio Tordini</string>
- <key>CFBundleExecutable</key>
- <string>minitube</string>
- <key>CFBundleIdentifier</key>
- <string>org.tordini.flavio.minitube</string>
-</dict>
-</plist>
# Minitube TODO list
-## Known Bugs
-- Wrong item positions when moving more than one item down or up
-
## Killer features
-- Video download
- Playlist items should have a download icon that appears on mouse hover.
- Once the icon is clicked a mini-progressbar appears and the download icon remains visible
- even on "mouseout", maybe with a different color.
- Videos should be downloaded in HD format, if available.
- Videos should be downloaded directly on the Desktop without asking for a location.
-
- YouTube related videos
List of related videos identical to the playlist.
When a related video is clicked Minitube will keep playing the next related videos.
- Windows build
Stefan Brueck has compiled on Windows but there are problems with Phonon's directX backend
- Marco di Antonio tried with the Mplayer backend, but it is very unstable
+ Marco di Antonio tried with the Mplayer backend, but it is very unstable.
+ Waiting for the VLC backend to work.
- Subtitles, see http://google2srt.sourceforge.net/
- Safe search levels (in the status bar beside HD)
- Show buffering progress (when Phonon backends will work)
- Show more thumbs on hover with animated crossfade
+- Time filter on the bottom of the playlist: Today, 7 days, 30 days
## Unsure features
- Restore status when a recent keyword is clicked: skipped videos, sortBar and play time
<translation>مسح</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation>bytes</translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation>MB</translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation>bytes/sec</translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation>KB/sec</translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation>MB/sec</translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation>seconds</translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation>minutes</translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation>%4 %5 متبقي</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation>
+ <numerusform>التحميل %n</numerusform>
+ <numerusform>التحميل %n</numerusform>
+ <numerusform>التحميل %n</numerusform>
+ <numerusform>التحميل %n</numerusform>
+ <numerusform>التحميل %n</numerusform>
+ <numerusform>التحميل %n</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation>هذه ليست سوى النسخة التجريبية من %1.</translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation>يمكن تحميل الفيديو في أقل من %1 دقيقة بحيث يمكنك اختبار وظيفة التحميل.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>متابعة</translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation>احصل على النسخة الكاملة</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation>تغيير الموقع...</translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation>اختر موقع التحميل</translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation>موقع التحميل تغير.</translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation>التحميل سيتم في الموقع السابق.</translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation>التحميل الى:%1</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation>التحميلات</translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation>Play</translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation>Pause</translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation>Play/Pause</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation>Stop</translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation>ايقاف تشغيل المقطع الحالي</translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation>المقطع التالي</translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation>المقطع السابق</translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation>رفع الصوت</translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation>خفض الصوت</translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation>صامت</translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation>امام</translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation>خلف</translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Your privacy is now safe</source>
<translation>خصوصيتك امنة</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation>&التحميلات</translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation>عرض تفاصيل عن تحميلات الفيديو</translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation>&التحميلات</translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation>تحميل الفيديو الحالي</translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation>هل تريد الخروج %1 رغم وجود تحميل?</translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation>عند اغلاق %1 التحميل سيلغى.</translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation>الاغلاق و الغاء التحميل</translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation>انتظار انتهاء التحميل</translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation>التحميل انتهى</translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>You're watching "%1"</source>
<translation>انت تشاهد "%1"</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation>هذه ليست سوى النسخة التجريبية من %1.</translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation>انها تتيح لك تجربة البرنامج.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>متابعة</translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation>احصل على النسخة الكاملة</translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation>جاري تحميل %1</translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 مشاهدات</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation>%1 of %2 (%3) ? %4</translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation>تهيئة</translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation>فشل</translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation>تم</translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation>متوقف</translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation>ايقاف التحميل</translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation>اظهار في %1</translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation>فتح المجلد الرئيسي</translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation>اعادة التحميل</translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
-<!DOCTYPE TS><TS>
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
<defaultcodec>UTF-8</defaultcodec>
<context>
<name>AboutView</name>
<translation>Изчисти</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Your privacy is now safe</source>
<translation>Вашата интимност вече е обезопасена</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>You're watching "%1"</source>
<translation>Вие гледате "%1"</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 гледания</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<context>
<name>AboutView</name>
<message>
- <location filename="../src/AboutView.cpp" line="20"/>
+ <location filename="../src/AboutView.cpp" line="21"/>
<source>There's life outside the browser!</source>
<translation>Život existuje i mimo prohlížeč!</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="21"/>
+ <location filename="../src/AboutView.cpp" line="22"/>
<source>Version %1</source>
<translation>Verze %1</translation>
</message>
<translation type="obsolete">Toto je vývojová verze, neočekávejte plnou funkčnost.</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="28"/>
+ <location filename="../src/AboutView.cpp" line="29"/>
<source>Report bugs and send in your ideas to %1</source>
<translation>Hlaste chyby a posílejte své nápady na %1</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="24"/>
+ <location filename="../src/AboutView.cpp" line="25"/>
<source>%1 is Free Software but its development takes precious time.</source>
<translation>%1 je svobodný software, ale jeho vývoj stojí drahocenný čas.</translation>
</message>
<translation type="obsolete">Prosím <a href='%1'>přispějte přes PayPal</a> a podpořte další vývoj aplikace %2.</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="25"/>
+ <location filename="../src/AboutView.cpp" line="26"/>
<source>Please <a href='%1'>donate</a> to support the continued development of %2.</source>
<translation>Prosím <a href='%1'>přispějte</a> na další vývoj %2.</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="32"/>
+ <location filename="../src/AboutView.cpp" line="33"/>
<source>Icon designed by %1.</source>
<translation>Autor ikony: %1.</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="33"/>
+ <location filename="../src/AboutView.cpp" line="34"/>
<source>Compact mode contributed by %1.</source>
<translation>Autor kompaktního módu: %1.</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="34"/>
+ <location filename="../src/AboutView.cpp" line="35"/>
<source>HTTP proxy support contributed by %1.</source>
<translation>Autor podpory HTTP proxy: %1.</translation>
</message>
<translation type="obsolete">Verzi pro Windows sestavil: %1</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="37"/>
+ <location filename="../src/AboutView.cpp" line="38"/>
<source>Translated by %1</source>
<translation>Přeložili: %1</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="58"/>
+ <location filename="../src/AboutView.cpp" line="65"/>
<source>Released under the <a href='%1'>GNU General Public License</a></source>
<translation>Vydáno pod <a href='%1'>licencí GNU General Public License</a></translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="69"/>
+ <location filename="../src/AboutView.cpp" line="77"/>
<source>&Close</source>
<translation>&Zavřít</translation>
</message>
<translation>Odstranit vše</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="214"/>
+ <source>bytes</source>
+ <translation>bajtů</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="217"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="220"/>
+ <source>MB</source>
+ <translation>MB</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="236"/>
+ <source>bytes/sec</source>
+ <translation>bajtů/sec</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="239"/>
+ <source>KB/sec</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="242"/>
+ <source>MB/sec</source>
+ <translation>MB/se</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="248"/>
+ <source>seconds</source>
+ <translation>sekund</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="251"/>
+ <source>minutes</source>
+ <translation>minut</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="254"/>
+ <source>%4 %5 remaining</source>
+ <translation>%4 %5 zbývá</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message>
+ <location filename="../src/downloadmanager.cpp" line="47"/>
+ <source>This is just the demo version of %1.</source>
+ <translation>Toto je pouze demoverze %1.</translation>
+ </message>
+ <message>
+ <location filename="../src/downloadmanager.cpp" line="49"/>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation>Umí stahovat pouze videa délky do %1 minut, abyste mohli funkci stahování vyzkoušet</translation>
+ </message>
+ <message>
+ <location filename="../src/downloadmanager.cpp" line="53"/>
+ <source>Continue</source>
+ <translation>Pokračovat</translation>
+ </message>
+ <message>
+ <location filename="../src/downloadmanager.cpp" line="54"/>
+ <source>Get the full version</source>
+ <translation>Získat plnou verzi</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../src/downloadmanager.cpp" line="126"/>
+ <source>%n Download(s)</source>
+ <translation>
+ <numerusform>%n stahování</numerusform>
+ <numerusform>%n stahování</numerusform>
+ <numerusform>%n stahování</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <location filename="../src/downloadsettings.cpp" line="14"/>
+ <source>Change location...</source>
+ <translation>Změnit složku pro stahování...</translation>
+ </message>
+ <message>
+ <location filename="../src/downloadsettings.cpp" line="38"/>
+ <source>Choose the download location</source>
+ <translation>Vyberte složku, do které se bude stahovat</translation>
+ </message>
+ <message>
+ <location filename="../src/downloadsettings.cpp" line="49"/>
+ <source>Download location changed.</source>
+ <translation>Nastavení složky pro stahování bylo změněno.</translation>
+ </message>
+ <message>
+ <location filename="../src/downloadsettings.cpp" line="51"/>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation>Probíhající stahování budou stále pokračovat v ukládání do dříve nastaveného adresáře</translation>
+ </message>
+ <message>
+ <location filename="../src/downloadsettings.cpp" line="63"/>
+ <source>Downloading to: %1</source>
+ <translation>Stahováno do: %1</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <location filename="../src/downloadview.cpp" line="18"/>
+ <location filename="../src/downloadview.h" line="22"/>
+ <source>Downloads</source>
+ <translation>Stahování</translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="16"/>
+ <source>Play</source>
+ <translation>Přehrát</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="17"/>
+ <source>Pause</source>
+ <translation>Pozastavit</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="18"/>
+ <source>Play/Pause</source>
+ <translation>Pustit/Pozastavit</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="19"/>
+ <source>Stop</source>
+ <translation>Zastavit</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="20"/>
+ <source>Stop playing after current track</source>
+ <translation>Zastavit přehrávání po dokončení nyní přehrávaného videa</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="21"/>
+ <source>Next track</source>
+ <translation>Další video</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="22"/>
+ <source>Previous track</source>
+ <translation>Předchozí video</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="23"/>
+ <source>Increase volume</source>
+ <translation>Zvýšit hlasitost</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="24"/>
+ <source>Decrease volume</source>
+ <translation>Snížit hlasitost</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="25"/>
+ <source>Mute</source>
+ <translation>Ztlumit hlasitost</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="26"/>
+ <source>Seek forward</source>
+ <translation>Rychle vpřed</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="27"/>
+ <source>Seek backward</source>
+ <translation>Rychle vzad</translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<translation type="obsolete">Vrátit se k předchozí obrazovce</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="80"/>
+ <location filename="../src/MainWindow.cpp" line="102"/>
<source>&Stop</source>
<translation>&Stop</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="81"/>
+ <location filename="../src/MainWindow.cpp" line="103"/>
<source>Stop playback and go back to the search view</source>
<translation>Zastaví přehrávání a vrátí se zpět na vyhledávání</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="86"/>
+ <location filename="../src/MainWindow.cpp" line="109"/>
<source>S&kip</source>
<translation>Př&eskočit</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="87"/>
+ <location filename="../src/MainWindow.cpp" line="110"/>
<source>Skip to the next video</source>
<translation>Přeskočí na další video</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="93"/>
- <location filename="../src/MainWindow.cpp" line="526"/>
+ <location filename="../src/MainWindow.cpp" line="116"/>
+ <location filename="../src/MainWindow.cpp" line="625"/>
<source>&Pause</source>
<translation>&Pauza</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="94"/>
- <location filename="../src/MainWindow.cpp" line="527"/>
+ <location filename="../src/MainWindow.cpp" line="117"/>
+ <location filename="../src/MainWindow.cpp" line="626"/>
<source>Pause playback</source>
<translation>Pozastaví přehrávání</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="100"/>
- <location filename="../src/MainWindow.cpp" line="605"/>
+ <location filename="../src/MainWindow.cpp" line="123"/>
+ <location filename="../src/MainWindow.cpp" line="709"/>
<source>&Full Screen</source>
<translation>&Celá obrazovka</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="101"/>
+ <location filename="../src/MainWindow.cpp" line="124"/>
<source>Go full screen</source>
<translation>Přepne na celou obrazovku</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="107"/>
+ <location filename="../src/MainWindow.cpp" line="133"/>
<source>&Compact mode</source>
<translation>&Kompaktní mód</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="108"/>
+ <location filename="../src/MainWindow.cpp" line="134"/>
<source>Hide the playlist and the toolbar</source>
<translation>Skryje playlist a toolbar</translation>
</message>
<translation type="obsolete">Otevřít video na YouTube</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="116"/>
+ <location filename="../src/MainWindow.cpp" line="142"/>
<source>Open the &YouTube page</source>
<translation>Otevřít stránku &YouTube</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="117"/>
+ <location filename="../src/MainWindow.cpp" line="143"/>
<source>Go to the YouTube video page and pause playback</source>
<translation>Otevře video na webu YouTube a pozastaví přehrávání</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="123"/>
+ <location filename="../src/MainWindow.cpp" line="149"/>
<source>Copy the YouTube &link</source>
<translation>Zkopírovat &odkaz na YouTube</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="124"/>
+ <location filename="../src/MainWindow.cpp" line="150"/>
<source>Copy the current video YouTube link to the clipboard</source>
<translation>Zkopíruje adresu videa na YouTube do schránky</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="130"/>
+ <location filename="../src/MainWindow.cpp" line="156"/>
<source>Copy the video stream &URL</source>
<translation>Zkopírovat adresu &video streamu</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="131"/>
+ <location filename="../src/MainWindow.cpp" line="157"/>
<source>Copy the current video stream URL to the clipboard</source>
<translation>Zkopíruje do schránky adresu video streamu</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="137"/>
+ <location filename="../src/MainWindow.cpp" line="163"/>
<source>&Remove</source>
<translation>&Odstranit</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="138"/>
+ <location filename="../src/MainWindow.cpp" line="164"/>
<source>Remove the selected videos from the playlist</source>
<translation>Odstraní vybraná videa z playlistu</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="144"/>
+ <location filename="../src/MainWindow.cpp" line="170"/>
<source>Move &Up</source>
<translation>&Nahoru</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="145"/>
+ <location filename="../src/MainWindow.cpp" line="171"/>
<source>Move up the selected videos in the playlist</source>
<translation>Posune vybraná videa výš v playlistu</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="151"/>
+ <location filename="../src/MainWindow.cpp" line="177"/>
<source>Move &Down</source>
<translation>&Dolů</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="152"/>
+ <location filename="../src/MainWindow.cpp" line="178"/>
<source>Move down the selected videos in the playlist</source>
<translation>Posune vybraná videa níž v playlistu</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="158"/>
+ <location filename="../src/MainWindow.cpp" line="184"/>
<source>&Clear recent keywords</source>
<translation>&Vymazat hledané výrazy</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="163"/>
+ <location filename="../src/MainWindow.cpp" line="189"/>
<source>Clear the search history. Cannot be undone.</source>
<translation>Vyprázdní historii vyhledávání. Akci nelze vrátit.</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="168"/>
+ <location filename="../src/MainWindow.cpp" line="194"/>
<source>&Quit</source>
<translation>&Zavřít</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="170"/>
+ <location filename="../src/MainWindow.cpp" line="196"/>
<source>Ctrl+Q</source>
<translation>Ctrl+Q</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="171"/>
+ <location filename="../src/MainWindow.cpp" line="197"/>
<source>Bye</source>
<translation>Sbohem</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="175"/>
+ <location filename="../src/MainWindow.cpp" line="201"/>
<source>&Website</source>
<translation>&Homepage</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="177"/>
+ <location filename="../src/MainWindow.cpp" line="203"/>
<source>%1 on the Web</source>
<translation>%1 na Webu</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="181"/>
+ <location filename="../src/MainWindow.cpp" line="207"/>
<source>Make a &donation</source>
<translation>&Podpořit</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="760"/>
+ <location filename="../src/MainWindow.cpp" line="274"/>
+ <location filename="../src/MainWindow.cpp" line="932"/>
+ <source>&Downloads</source>
+ <translation>&Stahování</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="275"/>
+ <source>Show details about video downloads</source>
+ <translation>Zobrazit podrobnosti o stahování videí</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="283"/>
+ <source>&Download</source>
+ <translation>&Stáhnout</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="284"/>
+ <source>Download the current video</source>
+ <translation>Stáhnout přávě zobrazené video</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="576"/>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation>Chcete ukončit %1, přestože ještě probíhá stahování?</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="577"/>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation>Jestli nyní ukončíte %1, bude nedokončené stahování přerušeno</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="580"/>
+ <source>Close and cancel download</source>
+ <translation>Přerušit stahování a ukončit aplikaci</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="581"/>
+ <source>Wait for download to finish</source>
+ <translation>Počkat na dokončení stahování</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="877"/>
<source>Maximum video definition set to %1</source>
<translation>Maximální rozlišení videa je %1</translation>
</message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="933"/>
+ <source>Downloads complete</source>
+ <translation>Všechna stahování byla dokončena</translation>
+ </message>
<message>
<source>&Donate via PayPal</source>
<translation type="obsolete">&Podpořte přes PayPal</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="182"/>
+ <location filename="../src/MainWindow.cpp" line="208"/>
<source>Please support the continued development of %1</source>
<translation>Prosím přispějte na další vývoj aplikace %1</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="186"/>
+ <location filename="../src/MainWindow.cpp" line="212"/>
<source>&About</source>
<translation>&O aplikaci</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="188"/>
+ <location filename="../src/MainWindow.cpp" line="214"/>
<source>Info about %1</source>
<translation>Info o aplikaci %1</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="196"/>
+ <location filename="../src/MainWindow.cpp" line="222"/>
<source>Search</source>
<translation>Hledat</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="214"/>
+ <location filename="../src/MainWindow.cpp" line="241"/>
<source>Mute volume</source>
<translation>Ztlumit</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="215"/>
+ <location filename="../src/MainWindow.cpp" line="243"/>
<source>Ctrl+M</source>
<translation>Ctrl+M</translation>
</message>
<translation type="obsolete">Aktuální video není v HD</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="800"/>
+ <location filename="../src/MainWindow.cpp" line="917"/>
<source>Your privacy is now safe</source>
<translation>Vaše soukromí je nyní v bezpečí</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="264"/>
+ <location filename="../src/MainWindow.cpp" line="325"/>
<source>&Application</source>
<translation>&Aplikace</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="272"/>
+ <location filename="../src/MainWindow.cpp" line="333"/>
<source>&Playlist</source>
<translation>&Playlist</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="279"/>
+ <location filename="../src/MainWindow.cpp" line="340"/>
<source>&Video</source>
<translation>&Video</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="292"/>
+ <location filename="../src/MainWindow.cpp" line="359"/>
<source>&Help</source>
<translation>&Nápověda</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="337"/>
+ <location filename="../src/MainWindow.cpp" line="418"/>
<source>Press %1 to raise the volume, %2 to lower it</source>
<translation>Stiskněte %1 pro zvýšení hlasitosti; %2 pro snížení</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="467"/>
- <location filename="../src/MainWindow.cpp" line="473"/>
+ <location filename="../src/MainWindow.cpp" line="557"/>
+ <location filename="../src/MainWindow.cpp" line="563"/>
<source>Opening %1</source>
<translation>Otevírám %1</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="517"/>
+ <location filename="../src/MainWindow.cpp" line="616"/>
<source>Fatal error: %1</source>
<translation>Chyba: %1</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="519"/>
+ <location filename="../src/MainWindow.cpp" line="618"/>
<source>Error: %1</source>
<translation>Chyba: %1</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="540"/>
+ <location filename="../src/MainWindow.cpp" line="641"/>
<source>&Play</source>
<translation>&Play</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="541"/>
+ <location filename="../src/MainWindow.cpp" line="642"/>
<source>Resume playback</source>
<translation>Pokračovat v přehrávání</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="618"/>
+ <location filename="../src/MainWindow.cpp" line="732"/>
<source>Exit &Full Screen</source>
<translation>Vypnout &fullscreen</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="701"/>
+ <location filename="../src/MainWindow.cpp" line="815"/>
<source>Remaining time: %1</source>
<translation>Zbývající čas: %1</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="747"/>
+ <location filename="../src/MainWindow.cpp" line="861"/>
<source>Volume at %1%</source>
<translation>Hlasitost na %1%</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="752"/>
+ <location filename="../src/MainWindow.cpp" line="867"/>
<source>Volume is muted</source>
<translation>Zvuk je ztlumen</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="754"/>
+ <location filename="../src/MainWindow.cpp" line="870"/>
<source>Volume is unmuted</source>
<translation>Zvuk je zapnut</translation>
</message>
<context>
<name>MediaView</name>
<message>
- <location filename="../src/MediaView.cpp" line="25"/>
+ <location filename="../src/MediaView.cpp" line="26"/>
<source>Most relevant</source>
<translation>Nalezená videa</translation>
</message>
<message>
- <location filename="../src/MediaView.cpp" line="32"/>
+ <location filename="../src/MediaView.cpp" line="33"/>
<source>Most recent</source>
<translation>Nejnovější</translation>
</message>
<message>
- <location filename="../src/MediaView.cpp" line="39"/>
+ <location filename="../src/MediaView.cpp" line="40"/>
<source>Most viewed</source>
<translation>Nejsledovanější</translation>
</message>
<message>
- <location filename="../src/MediaView.cpp" line="339"/>
+ <location filename="../src/MediaView.cpp" line="360"/>
<source>You can now paste the YouTube link into another application</source>
<translation>Nyní můžete vložit odkaz na video na YouTube do jiného programu</translation>
</message>
<message>
- <location filename="../src/MediaView.cpp" line="347"/>
+ <location filename="../src/MediaView.cpp" line="368"/>
<source>You can now paste the video stream URL into another application</source>
<translation>Nyní můžete vložit odkaz na video stream do jiné aplikace</translation>
</message>
<message>
- <location filename="../src/MediaView.cpp" line="348"/>
+ <location filename="../src/MediaView.cpp" line="369"/>
<source>The link will be valid only for a limited time.</source>
<translation>Tento odkaz platí jen po omezenou dobu.</translation>
</message>
<message>
- <location filename="../src/MediaView.h" line="31"/>
+ <location filename="../src/MediaView.cpp" line="465"/>
+ <source>This is just the demo version of %1.</source>
+ <translation>Toto je %1 -- demoverze.</translation>
+ </message>
+ <message>
+ <location filename="../src/MediaView.cpp" line="466"/>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation>Umožňuje vyzkoušet aplikaci, abyste ověřili, jestli pro vás funguje.</translation>
+ </message>
+ <message>
+ <location filename="../src/MediaView.cpp" line="469"/>
+ <source>Continue</source>
+ <translation>Pokračovat</translation>
+ </message>
+ <message>
+ <location filename="../src/MediaView.cpp" line="470"/>
+ <source>Get the full version</source>
+ <translation>Stáhnout plnou verzi</translation>
+ </message>
+ <message>
+ <location filename="../src/MediaView.cpp" line="495"/>
+ <source>Downloading %1</source>
+ <translation>Je stahováno %1</translation>
+ </message>
+ <message>
+ <location filename="../src/MediaView.h" line="36"/>
<source>You're watching "%1"</source>
<translation>Sledujete "%1"</translation>
</message>
<context>
<name>NetworkAccess</name>
<message>
- <location filename="../src/networkaccess.cpp" line="188"/>
+ <location filename="../src/networkaccess.cpp" line="192"/>
<source>Network error: %1</source>
<translation>Chyba připojení: %1</translation>
</message>
<context>
<name>PrettyItemDelegate</name>
<message>
- <location filename="../src/playlist/PrettyItemDelegate.cpp" line="145"/>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="150"/>
<source>%1 views</source>
<translation>Shlédnuto %1x</translation>
</message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="266"/>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation>1 z %2 (%3) ? %4</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="273"/>
+ <source>Preparing</source>
+ <translation>Připravuje se</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="275"/>
+ <source>Failed</source>
+ <translation>Selhalo</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="277"/>
+ <source>Completed</source>
+ <translation>Dokončeno</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="279"/>
+ <source>Stopped</source>
+ <translation>Zastaveno</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="315"/>
+ <source>Stop downloading</source>
+ <translation>Zastavit stahování</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="325"/>
+ <source>Show in %1</source>
+ <translation>Ukázat v %1</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="327"/>
+ <source>Open parent folder</source>
+ <translation>Otevřít příslušný adresář</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="336"/>
+ <source>Restart downloading</source>
+ <translation>Začít stahovat znova</translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<context>
<name>SearchView</name>
<message>
- <location filename="../src/SearchView.cpp" line="46"/>
+ <location filename="../src/SearchView.cpp" line="50"/>
<source>Welcome to <a href='%1'>%2</a>,</source>
<translation>Vítejte v <a href='%1'>%2</a></translation>
</message>
<message>
- <location filename="../src/SearchView.cpp" line="55"/>
+ <location filename="../src/SearchView.cpp" line="60"/>
<source>Enter a keyword to start watching videos.</source>
<translation>Zadejte klíčové slovo pro vyhledávání videí.</translation>
</message>
<message>
- <location filename="../src/SearchView.cpp" line="75"/>
+ <location filename="../src/SearchView.cpp" line="80"/>
<source>Watch</source>
<translation>Sledovat</translation>
</message>
<message>
- <location filename="../src/SearchView.cpp" line="91"/>
+ <location filename="../src/SearchView.cpp" line="97"/>
<source>Recent keywords</source>
<translation>Poslední klíčová slova</translation>
</message>
<message>
- <location filename="../src/SearchView.cpp" line="186"/>
+ <location filename="../src/SearchView.cpp" line="199"/>
<source>A new version of %1 is available. Please <a href='%2'>update to version %3</a></source>
<translation>Nová verze aplikace %1 je dostupná. Prosím <a href='%2'>aktualizujte na verzi %3</a></translation>
</message>
<context>
<name>Video</name>
<message>
- <location filename="../src/video.cpp" line="121"/>
+ <location filename="../src/video.cpp" line="173"/>
<source>Network error: %1 for %2</source>
<translation>Chyba přípojení: %1 pro %2</translation>
</message>
<context>
<name>AboutView</name>
<message>
- <location filename="../src/AboutView.cpp" line="20"/>
+ <location filename="../src/AboutView.cpp" line="21"/>
<source>There's life outside the browser!</source>
- <translation>Es existiert Leben neben dem Browser !</translation>
+ <translation>Es gibt Leben außerhalb des Browsers!</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="21"/>
+ <location filename="../src/AboutView.cpp" line="22"/>
<source>Version %1</source>
<translation>Version %1</translation>
</message>
<message>
- <source>This is a "Technology Preview" release, do not expect it to be perfect.</source>
- <translation type="obsolete">Dies ist eine "Technology Vorschau", erwarte nicht, dass sie perfekt ist.</translation>
- </message>
- <message>
- <location filename="../src/AboutView.cpp" line="28"/>
+ <location filename="../src/AboutView.cpp" line="29"/>
<source>Report bugs and send in your ideas to %1</source>
- <translation>Bitte berichte Fehler und sende Deine Ideen an %1</translation>
+ <translation>Berichten Sie Fehler und senden Sie Ihre Ideen an %1</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="24"/>
+ <location filename="../src/AboutView.cpp" line="25"/>
<source>%1 is Free Software but its development takes precious time.</source>
<translation>%1 ist freie Software, aber die Entwicklung kostet wertvolle Zeit.</translation>
</message>
<message>
- <source>Please <a href='%1'>donate via PayPal</a> to support the continued development of %2.</source>
- <translation type="obsolete">Bitte <a href='%1'>spende via PayPal</a> um die dauerhafte Entwicklung von %2 zu unterstützen.</translation>
- </message>
- <message>
- <location filename="../src/AboutView.cpp" line="25"/>
+ <location filename="../src/AboutView.cpp" line="26"/>
<source>Please <a href='%1'>donate</a> to support the continued development of %2.</source>
- <translation>Bitte <a href='%1'>Spenden</a> um die ständige Entwicklung von %2 zu unterstützen.</translation>
+ <translation>Bitte <a href='%1'>spenden</a> Sie um die ständige Entwicklung von %2 zu unterstützen.</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="32"/>
+ <location filename="../src/AboutView.cpp" line="33"/>
<source>Icon designed by %1.</source>
- <translation>Icon Entwurf durch %1.</translation>
+ <translation>Icon entworfen von %1.</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="33"/>
+ <location filename="../src/AboutView.cpp" line="34"/>
<source>Compact mode contributed by %1.</source>
- <translation>Kompakt Modus beigetragen von %1.</translation>
+ <translation>Kompakt-Ansicht beigetragen von %1.</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="34"/>
+ <location filename="../src/AboutView.cpp" line="35"/>
<source>HTTP proxy support contributed by %1.</source>
- <translation>HTTP Proxy unterstützung beigetragen von %1.</translation>
- </message>
- <message>
- <source>Windows version built by %1</source>
- <translation type="obsolete">Windows Version erstellt durch %1</translation>
+ <translation>HTTP-Proxy Unterstützung beigetragen von %1.</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="37"/>
+ <location filename="../src/AboutView.cpp" line="38"/>
<source>Translated by %1</source>
- <translation>Übersetzung durch %1</translation>
+ <translation>Übersetzt von %1</translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="58"/>
+ <location filename="../src/AboutView.cpp" line="65"/>
<source>Released under the <a href='%1'>GNU General Public License</a></source>
<translation>Veröffentlicht unter der <a href='%1'>GNU General Public License</a></translation>
</message>
<message>
- <location filename="../src/AboutView.cpp" line="69"/>
+ <location filename="../src/AboutView.cpp" line="77"/>
<source>&Close</source>
<translation>S&chließen</translation>
</message>
<message>
<location filename="../src/AboutView.h" line="20"/>
<source>What you always wanted to know about %1 and never dared to ask</source>
- <translation>Was Du schon immer über %1 wissen wolltest, aber nie zu fragen wagtest</translation>
+ <translation>Was Sie schon immer über %1 wissen wollten, aber nie zu fragen wagten</translation>
</message>
</context>
<context>
<message>
<location filename="../src/searchlineedit.cpp" line="56"/>
<source>Clear</source>
- <translation>Säubern</translation>
+ <translation>Löschen</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="214"/>
+ <source>bytes</source>
+ <translation>Bytes</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="236"/>
+ <source>bytes/sec</source>
+ <translation>Bytes/s</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="217"/>
+ <source>KiB</source>
+ <translation>KiB</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="220"/>
+ <source>MiB</source>
+ <translation>MiB</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="239"/>
+ <source>KiB/sec</source>
+ <translation>KiB/s</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="242"/>
+ <source>MiB/sec</source>
+ <translation>MiB/s</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="248"/>
+ <source>seconds</source>
+ <translation>Sekunden</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="251"/>
+ <source>minutes</source>
+ <translation>Minuten</translation>
+ </message>
+ <message>
+ <location filename="../src/downloaditem.cpp" line="254"/>
+ <source>%4 %5 remaining</source>
+ <translation>%4 %5 verbleibend</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message>
+ <location filename="../src/downloadmanager.cpp" line="47"/>
+ <source>This is just the demo version of %1.</source>
+ <translation>Dies ist nur eine Demoversion von %1.</translation>
+ </message>
+ <message>
+ <location filename="../src/downloadmanager.cpp" line="49"/>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation>Sie kann nur Videos herunterladen, die kürzer als %1 Minuten sind, damit Sie diese Funktion testen können.</translation>
+ </message>
+ <message>
+ <location filename="../src/downloadmanager.cpp" line="53"/>
+ <source>Continue</source>
+ <translation>Fortfahren</translation>
+ </message>
+ <message>
+ <location filename="../src/downloadmanager.cpp" line="54"/>
+ <source>Get the full version</source>
+ <translation>Volle Version herunterladen</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../src/downloadmanager.cpp" line="126"/>
+ <source>%n Download(s)</source>
+ <translation>
+ <numerusform>%n Download</numerusform>
+ <numerusform>%n Downloads</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <location filename="../src/downloadsettings.cpp" line="14"/>
+ <source>Change location...</source>
+ <translation>Pfad ändern...</translation>
+ </message>
+ <message>
+ <location filename="../src/downloadsettings.cpp" line="38"/>
+ <source>Choose the download location</source>
+ <translation>Download-Verzeichnis auswählen</translation>
+ </message>
+ <message>
+ <location filename="../src/downloadsettings.cpp" line="49"/>
+ <source>Download location changed.</source>
+ <translation>Download-Verzeichnis geändert.</translation>
+ </message>
+ <message>
+ <location filename="../src/downloadsettings.cpp" line="51"/>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation>Bereits laufende Downloads bleiben weiterhin im alten Verzeichnis.</translation>
+ </message>
+ <message>
+ <location filename="../src/downloadsettings.cpp" line="63"/>
+ <source>Downloading to: %1</source>
+ <translation>Speichere in: %1</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <location filename="../src/downloadview.cpp" line="18"/>
+ <location filename="../src/downloadview.h" line="22"/>
+ <source>Downloads</source>
+ <translation>Downloads</translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="16"/>
+ <source>Play</source>
+ <translation>Abspielen</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="17"/>
+ <source>Pause</source>
+ <translation>Pausieren</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="18"/>
+ <source>Play/Pause</source>
+ <translation>Wiedergeben/Pausieren</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="19"/>
+ <source>Stop</source>
+ <translation>Anhalten</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="20"/>
+ <source>Stop playing after current track</source>
+ <translation>Wiedergabe nach aktuellem Titel anhalten</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="21"/>
+ <source>Next track</source>
+ <translation>Nächster Titel</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="22"/>
+ <source>Previous track</source>
+ <translation>Vorheriger Titel</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="23"/>
+ <source>Increase volume</source>
+ <translation>Lautstärke erhöhen</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="24"/>
+ <source>Decrease volume</source>
+ <translation>Lautstärke verringern</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="25"/>
+ <source>Mute</source>
+ <translation>Stumm schalten</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="26"/>
+ <source>Seek forward</source>
+ <translation>Vorspulen</translation>
+ </message>
+ <message>
+ <location filename="../src/globalshortcuts.cpp" line="27"/>
+ <source>Seek backward</source>
+ <translation>Zurückspulen</translation>
</message>
</context>
<context>
<context>
<name>MainWindow</name>
<message>
- <source>&Back</source>
- <translation type="obsolete">&Zurück</translation>
- </message>
- <message>
- <source>Go to the previous view</source>
- <translation type="obsolete">Gehe zur vorherigen Ansicht</translation>
- </message>
- <message>
- <location filename="../src/MainWindow.cpp" line="80"/>
+ <location filename="../src/MainWindow.cpp" line="102"/>
<source>&Stop</source>
- <translation>&Halt</translation>
+ <translation>An&alten</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="81"/>
+ <location filename="../src/MainWindow.cpp" line="103"/>
<source>Stop playback and go back to the search view</source>
<translation>Wiedergabe anhalten und zurück zur Suchansicht</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="86"/>
+ <location filename="../src/MainWindow.cpp" line="109"/>
<source>S&kip</source>
<translation>Ü&berspringen</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="87"/>
+ <location filename="../src/MainWindow.cpp" line="110"/>
<source>Skip to the next video</source>
- <translation>Überspringe zum nächsten Video</translation>
+ <translation>Springe zum nächsten Video</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="93"/>
- <location filename="../src/MainWindow.cpp" line="526"/>
+ <location filename="../src/MainWindow.cpp" line="116"/>
+ <location filename="../src/MainWindow.cpp" line="625"/>
<source>&Pause</source>
<translation>&Pause</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="94"/>
- <location filename="../src/MainWindow.cpp" line="527"/>
+ <location filename="../src/MainWindow.cpp" line="117"/>
+ <location filename="../src/MainWindow.cpp" line="626"/>
<source>Pause playback</source>
<translation>Wiedergabe pausieren</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="100"/>
- <location filename="../src/MainWindow.cpp" line="605"/>
+ <location filename="../src/MainWindow.cpp" line="123"/>
+ <location filename="../src/MainWindow.cpp" line="709"/>
<source>&Full Screen</source>
<translation>&Vollbildmodus</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="101"/>
+ <location filename="../src/MainWindow.cpp" line="124"/>
<source>Go full screen</source>
<translation>Vollbildmodus aktivieren</translation>
</message>
<message>
- <source>&Compact View</source>
- <translation type="obsolete">&Kompakt Ansicht</translation>
- </message>
- <message>
- <source>Go compact view</source>
- <translation type="obsolete">Kompakt Ansicht aktivieren</translation>
- </message>
- <message>
- <source>&YouTube</source>
- <translation type="obsolete">&YouTube</translation>
- </message>
- <message>
- <source>Open the YouTube video page</source>
- <translation type="obsolete">Öffne die YouTube Video Seite</translation>
- </message>
- <message>
- <source>Ctrl+Y</source>
- <translation type="obsolete">Ctrl+Y</translation>
- </message>
- <message>
- <location filename="../src/MainWindow.cpp" line="107"/>
+ <location filename="../src/MainWindow.cpp" line="133"/>
<source>&Compact mode</source>
<translation>&Kompakt-Ansicht</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="108"/>
+ <location filename="../src/MainWindow.cpp" line="134"/>
<source>Hide the playlist and the toolbar</source>
<translation>Verstecke Abspielliste und Werkzeugleiste</translation>
</message>
<message>
+ <location filename="../src/MainWindow.cpp" line="283"/>
<source>&Download</source>
- <translation type="obsolete">&Herunterladen</translation>
+ <translation>&Herunterladen</translation>
</message>
<message>
- <source>Download this video</source>
- <translation type="obsolete">Dieses Video herunterladen</translation>
- </message>
- <message>
- <source>Ctrl+S</source>
- <translation type="obsolete">Strg+S</translation>
- </message>
- <message>
- <location filename="../src/MainWindow.cpp" line="116"/>
+ <location filename="../src/MainWindow.cpp" line="142"/>
<source>Open the &YouTube page</source>
<translation>Öffne die &YouTube Seite</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="117"/>
+ <location filename="../src/MainWindow.cpp" line="143"/>
<source>Go to the YouTube video page and pause playback</source>
<translation>Gehe zur YouTube Video Seite und pausiere die Wiedergabe</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="123"/>
+ <location filename="../src/MainWindow.cpp" line="149"/>
<source>Copy the YouTube &link</source>
<translation>YouTube &Link kopieren</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="124"/>
+ <location filename="../src/MainWindow.cpp" line="150"/>
<source>Copy the current video YouTube link to the clipboard</source>
<translation>YouTube Link in die Zwischenablage kopieren</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="130"/>
+ <location filename="../src/MainWindow.cpp" line="156"/>
<source>Copy the video stream &URL</source>
<translation>Video &URL kopieren</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="131"/>
+ <location filename="../src/MainWindow.cpp" line="157"/>
<source>Copy the current video stream URL to the clipboard</source>
<translation>Video URL in die Zwischenablage kopieren</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="137"/>
+ <location filename="../src/MainWindow.cpp" line="163"/>
<source>&Remove</source>
<translation>Entfe&rnen</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="138"/>
+ <location filename="../src/MainWindow.cpp" line="164"/>
<source>Remove the selected videos from the playlist</source>
<translation>Entferne das ausgewählte Video aus der Abspielliste</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="144"/>
+ <location filename="../src/MainWindow.cpp" line="170"/>
<source>Move &Up</source>
<translation>Bewege &hinauf</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="145"/>
+ <location filename="../src/MainWindow.cpp" line="171"/>
<source>Move up the selected videos in the playlist</source>
<translation>Bewerge das ausgewählte Video in der Abspielliste hinauf</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="151"/>
+ <location filename="../src/MainWindow.cpp" line="177"/>
<source>Move &Down</source>
<translation>Bewege hin&ab</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="152"/>
+ <location filename="../src/MainWindow.cpp" line="178"/>
<source>Move down the selected videos in the playlist</source>
<translation>Bewege das ausgewählte Video in der Abspielliste hinunter</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="158"/>
+ <location filename="../src/MainWindow.cpp" line="184"/>
<source>&Clear recent keywords</source>
<translation>Kürzlich genutzte S&chlüsselwörter entfernen</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="163"/>
+ <location filename="../src/MainWindow.cpp" line="189"/>
<source>Clear the search history. Cannot be undone.</source>
- <translation>Such Historie leeren. Kann nicht rückgängig gemacht werden.</translation>
+ <translation>Such-Chronik löschen. Kann nicht rückgängig gemacht werden.</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="168"/>
+ <location filename="../src/MainWindow.cpp" line="194"/>
<source>&Quit</source>
<translation>&Verlassen</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="170"/>
+ <location filename="../src/MainWindow.cpp" line="196"/>
<source>Ctrl+Q</source>
<translation>Ctrl+Q</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="171"/>
+ <location filename="../src/MainWindow.cpp" line="197"/>
<source>Bye</source>
<translation>Tschüss</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="175"/>
+ <location filename="../src/MainWindow.cpp" line="201"/>
<source>&Website</source>
<translation>&Webseite</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="177"/>
+ <location filename="../src/MainWindow.cpp" line="203"/>
<source>%1 on the Web</source>
<translation>%1 im Internet</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="181"/>
+ <location filename="../src/MainWindow.cpp" line="207"/>
<source>Make a &donation</source>
- <translation>Eine Spen&den machen</translation>
+ <translation>Eine Spen&de machen</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="274"/>
+ <location filename="../src/MainWindow.cpp" line="932"/>
+ <source>&Downloads</source>
+ <translation>&Downloads</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="760"/>
+ <location filename="../src/MainWindow.cpp" line="275"/>
+ <source>Show details about video downloads</source>
+ <translation>Details über Video-Downloads zeigen</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="284"/>
+ <source>Download the current video</source>
+ <translation>Video herunterladen</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="576"/>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation>Wollen Sie %1 mit einem aktivem Download beenden?</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="577"/>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation>Wenn Sie %1 beenden, wird das Herunterladen abgebrochen.</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="580"/>
+ <source>Close and cancel download</source>
+ <translation>Beenden und Herunterladen abbrechen</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="581"/>
+ <source>Wait for download to finish</source>
+ <translation>Warten, bis das Herunterladen abgeschlossen ist</translation>
+ </message>
+ <message>
+ <location filename="../src/MainWindow.cpp" line="877"/>
<source>Maximum video definition set to %1</source>
- <translation>Maximale video Definition wurde auf %1 gesetzt</translation>
+ <translation>Maximale Videoauflösung wurde auf %1 gesetzt</translation>
</message>
<message>
- <source>&Donate via PayPal</source>
- <translation type="obsolete">Spen&den via PayPal</translation>
+ <location filename="../src/MainWindow.cpp" line="933"/>
+ <source>Downloads complete</source>
+ <translation>Downloads abgeschlossen</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="182"/>
+ <location filename="../src/MainWindow.cpp" line="208"/>
<source>Please support the continued development of %1</source>
- <translation>Bitte unterstüte die fortwährende Entwicklung von %1</translation>
+ <translation>Bitte unterstützen Sie die fortwährende Entwicklung von %1</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="186"/>
+ <location filename="../src/MainWindow.cpp" line="212"/>
<source>&About</source>
<translation>&Über</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="188"/>
+ <location filename="../src/MainWindow.cpp" line="214"/>
<source>Info about %1</source>
<translation>Informationen über %1</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="196"/>
+ <location filename="../src/MainWindow.cpp" line="222"/>
<source>Search</source>
<translation>Suche</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="214"/>
+ <location filename="../src/MainWindow.cpp" line="241"/>
<source>Mute volume</source>
- <translation>Audio ausschalten</translation>
+ <translation>Ton stumm schalten</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="215"/>
+ <location filename="../src/MainWindow.cpp" line="243"/>
<source>Ctrl+M</source>
<translation>Strg+M</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="337"/>
+ <location filename="../src/MainWindow.cpp" line="418"/>
<source>Press %1 to raise the volume, %2 to lower it</source>
<translation>%1 drücken um die Lautstärke zu erhöhen, %2 um sie zu verringern</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="701"/>
+ <location filename="../src/MainWindow.cpp" line="815"/>
<source>Remaining time: %1</source>
<translation>Verbleibende Zeit: %1</translation>
</message>
<message>
- <source>High Definition video is enabled</source>
- <translation type="obsolete">High Definition Video ist eingeschaltet</translation>
- </message>
- <message>
- <source>High Definition video is not enabled</source>
- <translation type="obsolete">High Definition Video ist nicht eingeschaltet</translation>
- </message>
- <message>
- <source>The current video is in High Definition</source>
- <translation type="obsolete">Das derzeitige Video ist in High Definition</translation>
- </message>
- <message>
- <source>The current video is not in High Definition</source>
- <translation type="obsolete">Das derzeitige Video ist nicht in High Definition</translation>
- </message>
- <message>
- <location filename="../src/MainWindow.cpp" line="800"/>
+ <location filename="../src/MainWindow.cpp" line="917"/>
<source>Your privacy is now safe</source>
- <translation>Deine Privatsphäre ist nun geschützt</translation>
- </message>
- <message>
- <source>No Video playing</source>
- <translation type="obsolete">Es wird kein Video abgespielt</translation>
+ <translation>Ihre Privatsphäre ist nun geschützt</translation>
</message>
<message>
- <source>You must first play the video you intent to download !</source>
- <translation type="obsolete">Du musst das Video erst abspielen !</translation>
- </message>
- <message>
- <source>Save video as...</source>
- <translation type="obsolete">Video speichern unter...</translation>
- </message>
- <message>
- <source>minitube video.mp4</source>
- <translation type="obsolete">minitube video.mp4</translation>
- </message>
- <message>
- <source>Downloading: </source>
- <translation type="obsolete">Herunterladen:</translation>
- </message>
- <message>
- <source>Abort Download</source>
- <translation type="obsolete">Herunterladen abbrechen</translation>
- </message>
- <message>
- <source>File creation failed</source>
- <translation type="obsolete">Das anlegen der Datei ist fehlgeschlagen</translation>
- </message>
- <message>
- <source>Download failed</source>
- <translation type="obsolete">Herunterladen fehlgeschlagen</translation>
- </message>
- <message>
- <location filename="../src/MainWindow.cpp" line="747"/>
+ <location filename="../src/MainWindow.cpp" line="861"/>
<source>Volume at %1%</source>
<translation>Lautstärke %1%</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="752"/>
+ <location filename="../src/MainWindow.cpp" line="867"/>
<source>Volume is muted</source>
- <translation>Audio ist ausgeschaltet</translation>
+ <translation>Ton ist stumm geschaltet</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="754"/>
+ <location filename="../src/MainWindow.cpp" line="870"/>
<source>Volume is unmuted</source>
- <translation>Audio eingeschaltet</translation>
- </message>
- <message>
- <source>&Search</source>
- <translation type="obsolete">&Suche</translation>
+ <translation>Stummschaltung deaktiviert</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="264"/>
+ <location filename="../src/MainWindow.cpp" line="325"/>
<source>&Application</source>
<translation>&Anwendung</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="272"/>
+ <location filename="../src/MainWindow.cpp" line="333"/>
<source>&Playlist</source>
<translation>&Abspielliste</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="279"/>
+ <location filename="../src/MainWindow.cpp" line="340"/>
<source>&Video</source>
<translation>&Video</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="292"/>
+ <location filename="../src/MainWindow.cpp" line="359"/>
<source>&Help</source>
<translation>&Hilfe</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="467"/>
- <location filename="../src/MainWindow.cpp" line="473"/>
+ <location filename="../src/MainWindow.cpp" line="557"/>
+ <location filename="../src/MainWindow.cpp" line="563"/>
<source>Opening %1</source>
<translation>Öffne %1</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="517"/>
+ <location filename="../src/MainWindow.cpp" line="616"/>
<source>Fatal error: %1</source>
<translation>Schwerer Fehler: %1</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="519"/>
+ <location filename="../src/MainWindow.cpp" line="618"/>
<source>Error: %1</source>
<translation>Fehler: %1</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="540"/>
+ <location filename="../src/MainWindow.cpp" line="641"/>
<source>&Play</source>
<translation>&Abspielen</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="541"/>
+ <location filename="../src/MainWindow.cpp" line="642"/>
<source>Resume playback</source>
<translation>Wiedergabe fortsetzen</translation>
</message>
<message>
- <location filename="../src/MainWindow.cpp" line="618"/>
+ <location filename="../src/MainWindow.cpp" line="732"/>
<source>Exit &Full Screen</source>
<translation>Vollbildmodus &verlassen</translation>
</message>
<context>
<name>MediaView</name>
<message>
- <location filename="../src/MediaView.cpp" line="25"/>
+ <location filename="../src/MediaView.cpp" line="26"/>
<source>Most relevant</source>
<translation>Die bedeutsamsten</translation>
</message>
<message>
- <location filename="../src/MediaView.cpp" line="32"/>
+ <location filename="../src/MediaView.cpp" line="33"/>
<source>Most recent</source>
<translation>Die neusten</translation>
</message>
<message>
- <location filename="../src/MediaView.cpp" line="39"/>
+ <location filename="../src/MediaView.cpp" line="40"/>
<source>Most viewed</source>
<translation>Meist gesehen</translation>
</message>
<message>
- <location filename="../src/MediaView.cpp" line="339"/>
+ <location filename="../src/MediaView.cpp" line="360"/>
<source>You can now paste the YouTube link into another application</source>
- <translation>Du kann den YouTube Link nun in einer anderen Anwendung einfügen</translation>
+ <translation>Sie können nun den YouTube Link in einer anderen Anwendung einfügen</translation>
</message>
<message>
- <location filename="../src/MediaView.cpp" line="347"/>
+ <location filename="../src/MediaView.cpp" line="368"/>
<source>You can now paste the video stream URL into another application</source>
- <translation>Die kannst die Video URL nun in einer anderen Anwendung einfügen</translation>
+ <translation>Sie können nun die Video URL in einer anderen Anwendung einfügen</translation>
</message>
<message>
- <location filename="../src/MediaView.cpp" line="348"/>
+ <location filename="../src/MediaView.cpp" line="369"/>
<source>The link will be valid only for a limited time.</source>
<translation>Der Link wird nur eine beschränkte Zeit gültig sein.</translation>
</message>
<message>
- <location filename="../src/MediaView.h" line="31"/>
+ <location filename="../src/MediaView.cpp" line="465"/>
+ <source>This is just the demo version of %1.</source>
+ <translation>Dies ist nur eine Demoversion von %1.</translation>
+ </message>
+ <message>
+ <location filename="../src/MediaView.cpp" line="466"/>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation>Es gibt Ihnen die Möglichkeit das Programm zu testen und zu sehen, ob es funktioniert.</translation>
+ </message>
+ <message>
+ <location filename="../src/MediaView.cpp" line="469"/>
+ <source>Continue</source>
+ <translation>Fortfahren</translation>
+ </message>
+ <message>
+ <location filename="../src/MediaView.cpp" line="470"/>
+ <source>Get the full version</source>
+ <translation>Volle Version herunterladen</translation>
+ </message>
+ <message>
+ <location filename="../src/MediaView.cpp" line="495"/>
+ <source>Downloading %1</source>
+ <translation>Lade %1 herunter</translation>
+ </message>
+ <message>
+ <location filename="../src/MediaView.h" line="36"/>
<source>You're watching "%1"</source>
- <translation>Du betrachtest "%1"</translation>
+ <translation>Sie betrachten "%1"</translation>
</message>
</context>
<context>
<name>NetworkAccess</name>
<message>
- <location filename="../src/networkaccess.cpp" line="188"/>
+ <location filename="../src/networkaccess.cpp" line="192"/>
<source>Network error: %1</source>
- <translation>Netzwerk Fehler: %1</translation>
+ <translation>Netzwerk-Fehler: %1</translation>
</message>
</context>
<context>
<name>PrettyItemDelegate</name>
<message>
- <location filename="../src/playlist/PrettyItemDelegate.cpp" line="145"/>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="150"/>
<source>%1 views</source>
<translation>%1 mal betrachtet</translation>
</message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="266"/>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation>%1 von %2 (%3) ? %4</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="273"/>
+ <source>Preparing</source>
+ <translation>Initialisiere</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="275"/>
+ <source>Failed</source>
+ <translation>Fehlgeschlagen</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="277"/>
+ <source>Completed</source>
+ <translation>Abgeschlossen</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="279"/>
+ <source>Stopped</source>
+ <translation>Abgebrochen</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="315"/>
+ <source>Stop downloading</source>
+ <translation>Herunterladen abbrechen</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="325"/>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="327"/>
+ <source>Open parent folder</source>
+ <translation>Beinhaltenden Ordner öffnen</translation>
+ </message>
+ <message>
+ <location filename="../src/playlist/PrettyItemDelegate.cpp" line="336"/>
+ <source>Restart downloading</source>
+ <translation>Herunterladen neustarten</translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<context>
<name>SearchView</name>
<message>
- <location filename="../src/SearchView.cpp" line="46"/>
+ <location filename="../src/SearchView.cpp" line="50"/>
<source>Welcome to <a href='%1'>%2</a>,</source>
<translation>Willkommen bei <a href='%1'>%2</a>,</translation>
</message>
<message>
- <location filename="../src/SearchView.cpp" line="55"/>
+ <location filename="../src/SearchView.cpp" line="60"/>
<source>Enter a keyword to start watching videos.</source>
<translation>Schlüsselwort eingeben um die Wiedergabe zu starten.</translation>
</message>
<message>
- <location filename="../src/SearchView.cpp" line="75"/>
+ <location filename="../src/SearchView.cpp" line="80"/>
<source>Watch</source>
<translation>Anschauen</translation>
</message>
<message>
- <location filename="../src/SearchView.cpp" line="91"/>
+ <location filename="../src/SearchView.cpp" line="97"/>
<source>Recent keywords</source>
- <translation>Aktuelle Schlüsselwörter</translation>
+ <translation>Kürzlich verwendete Schlüsselwörter</translation>
</message>
<message>
- <location filename="../src/SearchView.cpp" line="186"/>
+ <location filename="../src/SearchView.cpp" line="199"/>
<source>A new version of %1 is available. Please <a href='%2'>update to version %3</a></source>
- <translation>Eine neue Version von %1 ist verfügbar. Bitte <a href='%2'>auf Version %3 aktuallisieren</a></translation>
+ <translation>Eine neue Version von %1 ist verfügbar. Bitte <a href='%2'>auf Version %3 aktualisieren</a></translation>
</message>
<message>
<location filename="../src/SearchView.h" line="29"/>
<source>Make yourself comfortable</source>
- <translation>Mach es Dir gemütlich</translation>
- </message>
-</context>
-<context>
- <name>SettingsView</name>
- <message>
- <source>Preferences</source>
- <translation type="obsolete">Einstellungen</translation>
- </message>
- <message>
- <source>&Close</source>
- <translation type="obsolete">S&chließen</translation>
+ <translation>Machen Sie es sich gemütlich</translation>
</message>
</context>
<context>
<name>Video</name>
<message>
- <location filename="../src/video.cpp" line="121"/>
+ <location filename="../src/video.cpp" line="173"/>
<source>Network error: %1 for %2</source>
<translation>Netzwerk Fehler: %1 für %2</translation>
</message>
<translation>Καθαρισμός</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation>δευτερόλεπτα</translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation>λεπτά</translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation>απομένουν %4 %5</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation>
+ <numerusform>%n Λήψεις</numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation>Αυτή είναι απλά η δοκιμαστική έκδοση του %1.</translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation>Μπορεί να κατεβάσει βίντεο μικρότερα από %1 λεπτά ώστε να δοκιμάσετε τη λειτουργία κατεβάσματος.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Συνέχεια</translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation>Αποκτήστε την πλήρη έκδοση</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation>Αλλάξτε τοποθεσία...</translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation>Επιλέξτε την τοποθεσία λήψης</translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation>Η τοποθεσία λήψης άλλαξε.</translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation>Τα ήδη ληφθέντα θα παραμείνουν στην προηγούμενη τοποθεσία.</translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation>Λήψη στο: %1</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation>Λήψεις</translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation>Αναπαραγωγή</translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation>Παύση</translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation>Αναπαραγωγή/Παύση</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation>Διακοπή</translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation>Διακοπή αναπαραγωγής μετά το τρέχον κομμάτι</translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation>Επόμενο κομμάτι</translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation>Προηγούμενο κομμάτι</translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation>Αύξηση έντασης</translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation>Μείωση έντασης</translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation>Σίγαση</translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation>Αναζήτηση μπροστά</translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation>Αναζήτηση πίσω</translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Maximum video definition set to %1</source>
<translation>H μέγιστη ανάλυση βίντεο τέθηκε σε %1</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation>&Λήψεις</translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation>Εμφάνιση λεπτομερειών για τις λήψεις βίντεο</translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation>&Λήψη</translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation>Λήψη του τρέχοντος βίντεο</translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation>Θέλετε να κλείσετε το %1 ενώ βρίσκεται μια λήψη σε εξέλιξη;</translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation>Αν κλείσετε το %1 τώρα, η λήψη θα ακυρωθεί.</translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation>Κλείσιμο και ακύρωση λήψης</translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation>Αναμονή ολοκλήρωσης λήψης</translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation>Οι λήψεις ολοκληρώθηκαν</translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation>Ο σύνδεμος θα είναι έγκυρος μόνο για περιορισμένο χρονικό διάστημα.</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation>Αυτή είναι απλά μια δοκιμαστική έκδοση του %1.</translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation>Σαε επιτρέπει να δοκιμάσετε την εφαρμογή και να δείτε αν σας κάνει.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Συνέχεια</translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation>Αποκτήστε την πλήρη έκδοση</translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation>Λήψη %1</translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>Προβολές %1</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translatorcomment>needed description of what this variables represent so it can be translated..</translatorcomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation>Προετοιμάζεται</translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation>Απέτυχε</translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation>Ολοκληρώθηκε</translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation>Διακόπηκε</translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation>Διακοπή λήψης</translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation>Εμφάνιση σε %1</translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation>Άνοιγμα γονικού φακέλου</translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation>Επανεκκίνηση λήψης</translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>AboutView</name>
+ <message>
+ <location filename="src/AboutView.cpp" line="21"/>
+ <source>There's life outside the browser!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/AboutView.cpp" line="22"/>
+ <source>Version %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/AboutView.cpp" line="25"/>
+ <source>%1 is Free Software but its development takes precious time.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/AboutView.cpp" line="26"/>
+ <source>Please <a href='%1'>donate</a> to support the continued development of %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/AboutView.cpp" line="29"/>
+ <source>Report bugs and send in your ideas to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/AboutView.cpp" line="33"/>
+ <source>Icon designed by %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/AboutView.cpp" line="34"/>
+ <source>Compact mode contributed by %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/AboutView.cpp" line="35"/>
+ <source>HTTP proxy support contributed by %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/AboutView.cpp" line="38"/>
+ <source>Translated by %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/AboutView.cpp" line="65"/>
+ <source>Released under the <a href='%1'>GNU General Public License</a></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/AboutView.cpp" line="77"/>
+ <source>&Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/AboutView.h" line="18"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/AboutView.h" line="20"/>
+ <source>What you always wanted to know about %1 and never dared to ask</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ClearButton</name>
+ <message>
+ <location filename="src/searchlineedit.cpp" line="56"/>
+ <source>Clear</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <location filename="src/downloaditem.cpp" line="214"/>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloaditem.cpp" line="217"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloaditem.cpp" line="220"/>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloaditem.cpp" line="236"/>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloaditem.cpp" line="239"/>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloaditem.cpp" line="242"/>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloaditem.cpp" line="248"/>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloaditem.cpp" line="251"/>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloaditem.cpp" line="254"/>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message>
+ <location filename="src/downloadmanager.cpp" line="47"/>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloadmanager.cpp" line="49"/>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloadmanager.cpp" line="53"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloadmanager.cpp" line="54"/>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <location filename="src/downloadmanager.cpp" line="126"/>
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <location filename="src/downloadsettings.cpp" line="14"/>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloadsettings.cpp" line="38"/>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloadsettings.cpp" line="49"/>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloadsettings.cpp" line="51"/>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/downloadsettings.cpp" line="63"/>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <location filename="src/downloadview.cpp" line="18"/>
+ <location filename="src/downloadview.h" line="22"/>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <location filename="src/globalshortcuts.cpp" line="16"/>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/globalshortcuts.cpp" line="17"/>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/globalshortcuts.cpp" line="18"/>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/globalshortcuts.cpp" line="19"/>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/globalshortcuts.cpp" line="20"/>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/globalshortcuts.cpp" line="21"/>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/globalshortcuts.cpp" line="22"/>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/globalshortcuts.cpp" line="23"/>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/globalshortcuts.cpp" line="24"/>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/globalshortcuts.cpp" line="25"/>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/globalshortcuts.cpp" line="26"/>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/globalshortcuts.cpp" line="27"/>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListModel</name>
+ <message>
+ <location filename="src/ListModel.cpp" line="46"/>
+ <source>Searching...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/ListModel.cpp" line="47"/>
+ <source>Show %1 More</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/ListModel.cpp" line="48"/>
+ <source>No videos</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/ListModel.cpp" line="49"/>
+ <source>No more videos</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LoadingWidget</name>
+ <message>
+ <location filename="src/loadingwidget.cpp" line="66"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <location filename="src/MainWindow.cpp" line="102"/>
+ <source>&Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="103"/>
+ <source>Stop playback and go back to the search view</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="109"/>
+ <source>S&kip</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="110"/>
+ <source>Skip to the next video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="116"/>
+ <location filename="src/MainWindow.cpp" line="625"/>
+ <source>&Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="117"/>
+ <location filename="src/MainWindow.cpp" line="626"/>
+ <source>Pause playback</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="123"/>
+ <location filename="src/MainWindow.cpp" line="709"/>
+ <source>&Full Screen</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="124"/>
+ <source>Go full screen</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="133"/>
+ <source>&Compact mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="134"/>
+ <source>Hide the playlist and the toolbar</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="142"/>
+ <source>Open the &YouTube page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="143"/>
+ <source>Go to the YouTube video page and pause playback</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="149"/>
+ <source>Copy the YouTube &link</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="150"/>
+ <source>Copy the current video YouTube link to the clipboard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="156"/>
+ <source>Copy the video stream &URL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="157"/>
+ <source>Copy the current video stream URL to the clipboard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="163"/>
+ <source>&Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="164"/>
+ <source>Remove the selected videos from the playlist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="170"/>
+ <source>Move &Up</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="171"/>
+ <source>Move up the selected videos in the playlist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="177"/>
+ <source>Move &Down</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="178"/>
+ <source>Move down the selected videos in the playlist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="184"/>
+ <source>&Clear recent keywords</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="189"/>
+ <source>Clear the search history. Cannot be undone.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="194"/>
+ <source>&Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="196"/>
+ <source>Ctrl+Q</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="197"/>
+ <source>Bye</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="201"/>
+ <source>&Website</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="203"/>
+ <source>%1 on the Web</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="207"/>
+ <source>Make a &donation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="208"/>
+ <source>Please support the continued development of %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="212"/>
+ <source>&About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="214"/>
+ <source>Info about %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="222"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="241"/>
+ <source>Mute volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="243"/>
+ <source>Ctrl+M</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="274"/>
+ <location filename="src/MainWindow.cpp" line="932"/>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="275"/>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="283"/>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="284"/>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="325"/>
+ <source>&Application</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="333"/>
+ <source>&Playlist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="340"/>
+ <source>&Video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="359"/>
+ <source>&Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="418"/>
+ <source>Press %1 to raise the volume, %2 to lower it</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="557"/>
+ <location filename="src/MainWindow.cpp" line="563"/>
+ <source>Opening %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="576"/>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="577"/>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="580"/>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="581"/>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="616"/>
+ <source>Fatal error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="618"/>
+ <source>Error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="641"/>
+ <source>&Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="642"/>
+ <source>Resume playback</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="732"/>
+ <source>Exit &Full Screen</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="815"/>
+ <source>Remaining time: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="861"/>
+ <source>Volume at %1%</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="867"/>
+ <source>Volume is muted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="870"/>
+ <source>Volume is unmuted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="877"/>
+ <source>Maximum video definition set to %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="917"/>
+ <source>Your privacy is now safe</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MainWindow.cpp" line="933"/>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MediaView</name>
+ <message>
+ <location filename="src/MediaView.cpp" line="26"/>
+ <source>Most relevant</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MediaView.cpp" line="33"/>
+ <source>Most recent</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MediaView.cpp" line="40"/>
+ <source>Most viewed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MediaView.cpp" line="360"/>
+ <source>You can now paste the YouTube link into another application</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MediaView.cpp" line="368"/>
+ <source>You can now paste the video stream URL into another application</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MediaView.cpp" line="369"/>
+ <source>The link will be valid only for a limited time.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MediaView.cpp" line="465"/>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MediaView.cpp" line="466"/>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MediaView.cpp" line="469"/>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MediaView.cpp" line="470"/>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MediaView.cpp" line="495"/>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/MediaView.h" line="36"/>
+ <source>You're watching "%1"</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NetworkAccess</name>
+ <message>
+ <location filename="src/networkaccess.cpp" line="192"/>
+ <source>Network error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PrettyItemDelegate</name>
+ <message>
+ <location filename="src/playlist/PrettyItemDelegate.cpp" line="150"/>
+ <source>%1 views</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/playlist/PrettyItemDelegate.cpp" line="266"/>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/playlist/PrettyItemDelegate.cpp" line="273"/>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/playlist/PrettyItemDelegate.cpp" line="275"/>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/playlist/PrettyItemDelegate.cpp" line="277"/>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/playlist/PrettyItemDelegate.cpp" line="279"/>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/playlist/PrettyItemDelegate.cpp" line="315"/>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/playlist/PrettyItemDelegate.cpp" line="325"/>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/playlist/PrettyItemDelegate.cpp" line="327"/>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/playlist/PrettyItemDelegate.cpp" line="336"/>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SearchLineEdit</name>
+ <message>
+ <location filename="src/searchlineedit.cpp" line="177"/>
+ <source>Search</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SearchView</name>
+ <message>
+ <location filename="src/SearchView.cpp" line="50"/>
+ <source>Welcome to <a href='%1'>%2</a>,</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/SearchView.cpp" line="60"/>
+ <source>Enter a keyword to start watching videos.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/SearchView.cpp" line="80"/>
+ <source>Watch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/SearchView.cpp" line="97"/>
+ <source>Recent keywords</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/SearchView.cpp" line="199"/>
+ <source>A new version of %1 is available. Please <a href='%2'>update to version %3</a></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="src/SearchView.h" line="29"/>
+ <source>Make yourself comfortable</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>Video</name>
+ <message>
+ <location filename="src/video.cpp" line="173"/>
+ <source>Network error: %1 for %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en_US">
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <location filename="src/downloadmanager.cpp" line="126"/>
+ <source>%n Download(s)</source>
+ <translation>
+ <numerusform>1 Download</numerusform>
+ <numerusform>%n Downloads</numerusform>
+ </translation>
+ </message>
+</context>
+</TS>
-<!DOCTYPE TS><TS>
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
<defaultcodec>UTF-8</defaultcodec>
<context>
<name>AboutView</name>
<translation>Limpiar</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Maximum video definition set to %1</source>
<translation>Resolución máxima de video fijada en %1</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation>El enlace es válido sólo por un tiempo limitado.</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 visualizaciones</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<translation>Limpiar</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Maximum video definition set to %1</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1-visitas</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<translation>Limpiar</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Maximum video definition set to %1</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1-visualizaciones</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<name>AboutView</name>
<message>
<source>There's life outside the browser!</source>
- <translation>Elämää on muuallakin kuin selaimessa!</translation>
+ <translation>Selaimen ulkopuolellakin on elämää!</translation>
</message>
<message>
<source>Version %1</source>
- <translation>Versio numero: %1</translation>
+ <translation>Versionumero: %1</translation>
</message>
<message>
<source>%1 is Free Software but its development takes precious time.</source>
</message>
<message>
<source>Please <a href='%1'>donate</a> to support the continued development of %2.</source>
- <translation>Olisi mukaavaa jos tukisit %2 kehitystä tekemällä <a href='%1'>lahjoituksen</a>.</translation>
+ <translation>Voit tukea %2n kehityksen jatkumista tekemällä <a href='%1'>lahjoituksen</a>.</translation>
</message>
<message>
<source>Report bugs and send in your ideas to %1</source>
- <translation>Kerro virheistä/ongelmista ja jaa ideoitasi osoitteeseen %1</translation>
+ <translation>Ilmoita bugit ja kerro ideasi osoitteeseen %1</translation>
</message>
<message>
<source>Icon designed by %1.</source>
</message>
<message>
<source>HTTP proxy support contributed by %1.</source>
- <translation>HTTP välityspalvelin tuen teki %1.</translation>
+ <translation>HTTP-välityspalvelintuen teki %1.</translation>
</message>
<message>
<source>Translated by %1</source>
</message>
<message>
<source>Released under the <a href='%1'>GNU General Public License</a></source>
- <translation>Julkaistu <a href='%1'>GNU General Public License</a> lisenssin alla</translation>
+ <translation>Julkaistu <a href='%1'>GNU General Public License</a> -lisenssillä</translation>
</message>
<message>
<source>&Close</source>
</message>
<message>
<source>What you always wanted to know about %1 and never dared to ask</source>
- <translation>Mitä olet aina halunnut tietää %1sta muttet ole koskaan kehdannut kysyä</translation>
+ <translation>Mitä olet aina halunnut tietää %1sta, muttet ole koskaan kehdannut kysyä</translation>
</message>
</context>
<context>
<translation>Tyhjennä</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
</message>
<message>
<source>Stop playback and go back to the search view</source>
- <translation>Pysäytä taista ja palaa hakuruuttun</translation>
+ <translation>Pysäytä toisto ja palaa hakuruutuun</translation>
</message>
<message>
<source>S&kip</source>
</message>
<message>
<source>&Pause</source>
- <translation>&Stoppaa</translation>
+ <translation>&Keskeytä</translation>
</message>
<message>
<source>Pause playback</source>
- <translation>Pysäytä toistaminen</translation>
+ <translation>Keskeytä toisto</translation>
</message>
<message>
<source>&Full Screen</source>
</message>
<message>
<source>Go full screen</source>
- <translation>Vaihda kokoruutu tilaan</translation>
+ <translation>Siirry kokoruututilaan</translation>
</message>
<message>
<source>&Compact mode</source>
</message>
<message>
<source>Open the &YouTube page</source>
- <translation>Avaa &Youtube sivusto</translation>
+ <translation>Avaa &Youtube -sivu</translation>
</message>
<message>
<source>Go to the YouTube video page and pause playback</source>
- <translation>Pysäytä toisto ja mene YouTube sivulle</translation>
+ <translation>Keskeytä toisto ja mene videon YouTube -sivulle</translation>
</message>
<message>
<source>Copy the YouTube &link</source>
- <translation>Kopio YouTube &linkki</translation>
+ <translation>Kopio YouTube -&linkki</translation>
</message>
<message>
<source>Copy the current video YouTube link to the clipboard</source>
- <translation>Kopio nykyisen videon YouTube linkki</translation>
+ <translation>Kopio nykyisen videon YouTube -linkki leikepöydälle</translation>
</message>
<message>
<source>Copy the video stream &URL</source>
- <translation>Kopio videovirran osoite (&URL)</translation>
+ <translation>Kopioi videovirran osoite (&URL)</translation>
</message>
<message>
<source>Copy the current video stream URL to the clipboard</source>
- <translation>Kopio nykyisen videvirran osoite (URL)</translation>
+ <translation>Kopioi nykyisen videvirran osoite (URL) leikepöydälle</translation>
</message>
<message>
<source>&Remove</source>
</message>
<message>
<source>Remove the selected videos from the playlist</source>
- <translation>Poista valittu video listalta</translation>
+ <translation>Poista valitut videot toistolistalta</translation>
</message>
<message>
<source>Move &Up</source>
- <translation>Siirrä &Ylös päin</translation>
+ <translation>Siirrä &Ylös</translation>
</message>
<message>
<source>Move up the selected videos in the playlist</source>
- <translation>Siirrä valittu video ylemmäksi listalla</translation>
+ <translation>Siirrä valitut videot ylemmäksi toistolistalla</translation>
</message>
<message>
<source>Move &Down</source>
- <translation>Sirrä &Alas päin</translation>
+ <translation>Sirrä &Alas</translation>
</message>
<message>
<source>Move down the selected videos in the playlist</source>
- <translation>Siirrä valittu video alemmaksi listalla</translation>
+ <translation>Siirrä valitut videot alemmaksi toistolistalla</translation>
</message>
<message>
<source>&Clear recent keywords</source>
- <translation>&Poista viimeisimmät haut</translation>
+ <translation>&Poista viimeisimmät hakusanat</translation>
</message>
<message>
<source>Clear the search history. Cannot be undone.</source>
- <translation>Tyhjennä haku historia. Tätä toimintoa ei voi kumota.</translation>
+ <translation>Tyhjennä hakuhistoria. Tätä toimintoa ei voi kumota.</translation>
</message>
<message>
<source>&Quit</source>
- <translation>&Poistu</translation>
+ <translation>&Lopeta</translation>
</message>
<message>
<source>Ctrl+Q</source>
</message>
<message>
<source>Bye</source>
- <translation>Heippa</translation>
+ <translation>Näkemiin</translation>
</message>
<message>
<source>&Website</source>
- <translation>&Nettisivu</translation>
+ <translation>&Nettisivusto</translation>
</message>
<message>
<source>%1 on the Web</source>
</message>
<message>
<source>Please support the continued development of %1</source>
- <translation>Tue %1n jatkuvaa kehitystä</translation>
+ <translation>Tue %1n jatkokehitystä</translation>
</message>
<message>
<source>&About</source>
</message>
<message>
<source>Info about %1</source>
- <translation>Tiotoja %1sta</translation>
+ <translation>Tietoja %1sta</translation>
</message>
<message>
<source>Search</source>
</message>
<message>
<source>&Application</source>
- <translation>&Ohjelma</translation>
+ <translation>&Sovellus</translation>
</message>
<message>
<source>&Playlist</source>
- <translation>&Soittolista</translation>
+ <translation>&Toistolista</translation>
</message>
<message>
<source>&Video</source>
</message>
<message>
<source>Press %1 to raise the volume, %2 to lower it</source>
- <translation>Paina %1ta nostaaksesi tai %2ta laskeaksesi äänen voimakkuutta</translation>
+ <translation>Paina näppäinyhdistelmää %1 nostaaksesi tai %2 laskeaksesi äänenvoimakkuutta</translation>
</message>
<message>
<source>Opening %1</source>
- <translation>Avataan %1ta/tä</translation>
+ <translation>Avataan kohdetta %1</translation>
</message>
<message>
<source>Fatal error: %1</source>
- <translation>Kauhia Virhe: %1</translation>
+ <translation>Kohtalokas virhe: %1</translation>
</message>
<message>
<source>Error: %1</source>
</message>
<message>
<source>Volume at %1%</source>
- <translation>Äänen tasa %1%</translation>
+ <translation>Äänentaso: %1%</translation>
</message>
<message>
<source>Volume is muted</source>
</message>
<message>
<source>Maximum video definition set to %1</source>
- <translation>Suurin videon laatu on rajoiteetu %1aan/ään</translation>
+ <translation>Korkein videonlaatu on rajoitettu tarkkuteen %1</translation>
</message>
<message>
<source>Your privacy is now safe</source>
<translation>Yksityisyytesi on nyt turvattu</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<message>
<source>Most relevant</source>
- <translation>Olennaisin</translation>
+ <translation>Osuvin</translation>
</message>
<message>
<source>Most recent</source>
- <translation>Uusin</translation>
+ <translation>Viimeisin</translation>
</message>
<message>
<source>Most viewed</source>
</message>
<message>
<source>You can now paste the YouTube link into another application</source>
- <translation>Voit nyt liittää YouTube linkin johonkin toiseen ohjelmaan</translation>
+ <translation>Voit nyt liittää YouTube-linkin johonkin toiseen sovellukseen</translation>
</message>
<message>
<source>You can now paste the video stream URL into another application</source>
- <translation>Voit nyt liittää videovirran osoitteen(URL) johonkin toiseen ohjelmaan</translation>
+ <translation>Voit nyt liittää videovirran osoitteen (URL) johonkin toiseen sovellukseen</translation>
</message>
<message>
<source>The link will be valid only for a limited time.</source>
<source>You're watching "%1"</source>
<translation>Nyt pyörii "%1"</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<message>
<source>Network error: %1</source>
- <translation>Verkko virhe: %1</translation>
+ <translation>Verkkovirhe: %1</translation>
</message>
</context>
<context>
<source>%1 views</source>
<translation>Katsottu %1 kertaa</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<name>SearchView</name>
<message>
<source>Welcome to <a href='%1'>%2</a>,</source>
- <translation><a href='%1'>%2en</a></translation>
+ <translation>Tervetuloa <a href='%1'>%2en</a></translation>
</message>
<message>
<source>Enter a keyword to start watching videos.</source>
- <translation>Anna hakusana alkaaksesi katsella videoita.</translation>
+ <translation>Anna hakusana aloittaaksesi videoiden katselu.</translation>
</message>
<message>
<source>Watch</source>
<name>Video</name>
<message>
<source>Network error: %1 for %2</source>
- <translation>Verkko virhe: "%1" "%2"lle</translation>
+ <translation>Verkkovirhe: "%1" "%2"lle</translation>
</message>
</context>
</TS>
-<!DOCTYPE TS><TS>
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
<defaultcodec>UTF-8</defaultcodec>
<context>
<name>AboutView</name>
<translation>Effacer</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Maximum video definition set to %1</source>
<translation>Résolution vidéo maximale fixée à %1</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation>Le lien ne sera valide que pour un temps limité.</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 vues</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
-<!DOCTYPE TS><TS>
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
<defaultcodec>UTF-8</defaultcodec>
<context>
<name>AboutView</name>
<translation>Limpar</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Maximum video definition set to %1</source>
<translation>Resolución máxima de vídeo fixada en %1</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation>A ligazón ten validez só por un tempo limitado.</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 visualizacións</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
</message>
<message>
<source>This is a "Technology Preview" release, do not expect it to be perfect.</source>
- <translation>הפצה זו הנה "הצגה טכנולוגית מקדימה", אל תצפו ממנה להיות מושלמת.</translation>
+ <translation type="obsolete">הפצה זו הנה "הצגה טכנולוגית מקדימה", אל תצפו ממנה להיות מושלמת.</translation>
</message>
<message>
<source>Report bugs and send in your ideas to %1</source>
</message>
<message>
<source>Please <a href='%1'>donate via PayPal</a> to support the continued development of %2.</source>
- <translation>אנא <a href='%1'>תרמו באמצעות PayPal</a> כדי לתמוך בהמשך הפיתוח של %2.</translation>
+ <translation type="obsolete">אנא <a href='%1'>תרמו באמצעות PayPal</a> כדי לתמוך בהמשך הפיתוח של %2.</translation>
</message>
<message>
<source>Icon designed by %1.</source>
</message>
<message>
<source>Released under the </source>
- <translation>שוחרר תחת תנאי</translation>
+ <translation type="obsolete">שוחרר תחת תנאי</translation>
</message>
<message>
<source></source>
</message>
<message>
<source>Windows version built by %1</source>
- <translation>הגרסה ל־Windows נבנתה על ידי %1</translation>
+ <translation type="obsolete">הגרסה ל־Windows נבנתה על ידי %1</translation>
</message>
<message>
<source>Please <a href='%1'>donate</a> to support the continued development of %2.</source>
<translation>מחיקה</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
</message>
<message>
<source>Go to the previous view</source>
- <translation>מעבר אל התצוגה הקודמת</translation>
+ <translation type="obsolete">מעבר אל התצוגה הקודמת</translation>
</message>
<message>
<source>&Stop</source>
</message>
<message>
<source>&YouTube</source>
- <translation>&YouTube</translation>
+ <translation type="obsolete">&YouTube</translation>
</message>
<message>
<source>Open the YouTube video page</source>
- <translation>פתיחת עמוד הווידאו ב־YouTube</translation>
+ <translation type="obsolete">פתיחת עמוד הווידאו ב־YouTube</translation>
</message>
<message>
<source>&Remove</source>
</message>
<message>
<source>&Donate via PayPal</source>
- <translation>&תרומה באמצעות PayPal</translation>
+ <translation type="obsolete">&תרומה באמצעות PayPal</translation>
</message>
<message>
<source>Please support the continued development of %1</source>
</message>
<message>
<source>&Search</source>
- <translation>&חיפוש</translation>
+ <translation type="obsolete">&חיפוש</translation>
</message>
<message>
<source>&Application</source>
</message>
<message>
<source>&Back</source>
- <translation>&חזרה</translation>
+ <translation type="obsolete">&חזרה</translation>
</message>
<message>
<source>Search</source>
</message>
<message>
<source>High Definition video is enabled</source>
- <translation>האפשרות לצפיה באיכות גבוהה פעילה</translation>
+ <translation type="obsolete">האפשרות לצפיה באיכות גבוהה פעילה</translation>
</message>
<message>
<source>High Definition video is not enabled</source>
- <translation>האפשרות לצפיה באיכות גבוהה אינה פעילה</translation>
+ <translation type="obsolete">האפשרות לצפיה באיכות גבוהה אינה פעילה</translation>
</message>
<message>
<source>The current video is in High Definition</source>
- <translation>סרטון הווידאו הנוכחי הנו באיכות גבוהה (HD)</translation>
+ <translation type="obsolete">סרטון הווידאו הנוכחי הנו באיכות גבוהה (HD)</translation>
</message>
<message>
<source>The current video is not in High Definition</source>
- <translation>סרטון הווידאו הנוכחי אינו באיכות גבוהה (HD)</translation>
+ <translation type="obsolete">סרטון הווידאו הנוכחי אינו באיכות גבוהה (HD)</translation>
</message>
<message>
<source>&Clear recent keywords</source>
<source>Maximum video definition set to %1</source>
<translation>איכות הנגינה המירבית מוגדרת ל־%1</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation>הקישור יהיה תקף לזמן מוגבל בלבד.</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 צפיות</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<name>SettingsView</name>
<message>
<source>Preferences</source>
- <translation>העדפות</translation>
+ <translation type="obsolete">העדפות</translation>
</message>
</context>
<context>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0" language="hr_HR">
+<TS version="2.0">
<defaultcodec>UTF-8</defaultcodec>
<context>
<name>AboutView</name>
<message>
<source>There's life outside the browser!</source>
- <translation>Postoji život izvan preglednika!</translation>
+ <translation>Postoji život izvan web preglednika!</translation>
</message>
<message>
<source>Version %1</source>
<translation>Verzija %1</translation>
</message>
<message>
- <source>This is a "Technology Preview" release, do not expect it to be perfect.</source>
- <translation type="obsolete">Ovo je "Technology Preview"izdanje, te ne očekujte da bude savršeno.</translation>
- </message>
- <message>
- <source>Report bugs and send in your ideas to %1</source>
- <translation>Prijavite sve bugove i posaljite svoje ideje na %1</translation>
+ <source>%1 is Free Software but its development takes precious time.</source>
+ <translation>%1 je besplatan program ali njegov razvoj zahtijeva dosta dragocjenog vremena.</translation>
</message>
<message>
- <source>%1 is Free Software but its development takes precious time.</source>
- <translation>%1 je besplatan program ali njegov razvoj uzima dragocjeno vrijeme.</translation>
+ <source>Please <a href='%1'>donate</a> to support the continued development of %2.</source>
+ <translation>Molimo Vas da <a href='%1'>donirate pomoću PayPala</a> kako biste osigurali kontinuirani razvoj %2 programa. </translation>
</message>
<message>
- <source>Please <a href='%1'>donate via PayPal</a> to support the continued development of %2.</source>
- <translation type="obsolete">Molimo <a href='%1 '>donirajte preko PayPal-a</a> za podršku i kontinuiran razvoj %2.</translation>
+ <source>Report bugs and send in your ideas to %1</source>
+ <translation>Prijavite greške te šaljite svoje ideje i prijedloge na %1</translation>
</message>
<message>
<source>Icon designed by %1.</source>
</message>
<message>
<source>Compact mode contributed by %1.</source>
- <translation>Kompaktni način pridonio je %1.</translation>
+ <translation>Kompaktni način prikaza omogućio je %1.</translation>
</message>
<message>
<source>HTTP proxy support contributed by %1.</source>
- <translation>HTTP proxy podršku je pridonio %1.</translation>
- </message>
- <message>
- <source>Windows version built by %1</source>
- <translation type="obsolete">Windows verziju uradio je %1</translation>
+ <translation>HTTP proxy podršku omogućio je %1.</translation>
</message>
<message>
<source>Translated by %1</source>
- <translation>Preveo je %1</translation>
+ <translation>Minitube su preveli: %1</translation>
</message>
<message>
<source>Released under the <a href='%1'>GNU General Public License</a></source>
- <translation>Objavljeno je pod <a href='%1'>GNU General Public License</a></translation>
+ <translation>Program je objavljen pod <a href='%1'>GNU General Public Licencom</a></translation>
</message>
<message>
<source>&Close</source>
</message>
<message>
<source>About</source>
- <translation>O</translation>
+ <translation>O programu</translation>
</message>
<message>
<source>What you always wanted to know about %1 and never dared to ask</source>
- <translation>Što ste oduvijek željeli znati o %1 a nikad se niste usudili pitati</translation>
- </message>
- <message>
- <source>Please <a href='%1'>donate</a> to support the continued development of %2.</source>
- <translation type="unfinished"></translation>
+ <translation>Sve što ste željeli znati o %1, a niste se usudili pitati</translation>
</message>
</context>
<context>
<translation>Očisti</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Searching...</source>
- <translation>Pretraživanje...</translation>
+ <translation>Tražim...</translation>
</message>
<message>
<source>Show %1 More</source>
- <translation>Pokaži još jedan %1</translation>
+ <translation>Prikaži još %1 videa</translation>
</message>
<message>
<source>No videos</source>
<name>LoadingWidget</name>
<message>
<source>Error</source>
- <translation>Greška</translation>
+ <translation>Pogreška</translation>
</message>
</context>
<context>
<name>MainWindow</name>
- <message>
- <source>&Back</source>
- <translation type="obsolete">&Natrag</translation>
- </message>
- <message>
- <source>Go to the previous view</source>
- <translation type="obsolete">Idi na prethodni prikaz</translation>
- </message>
<message>
<source>&Stop</source>
- <translation>&Stani</translation>
+ <translation>&Zaustavi</translation>
</message>
<message>
<source>Stop playback and go back to the search view</source>
- <translation>Zaustavi playback i vrati se na pretraživanje</translation>
+ <translation>Zaustavi prikazivanje videa i vrati se na pretraživanje</translation>
</message>
<message>
<source>S&kip</source>
- <translation>Preskoči</translation>
+ <translation>P&reskoči</translation>
</message>
<message>
<source>Skip to the next video</source>
- <translation>Preskoči na sljedeći video</translation>
+ <translation>Preskoči na slijedeći video</translation>
</message>
<message>
<source>&Pause</source>
</message>
<message>
<source>Pause playback</source>
- <translation>Pauziraj playback</translation>
+ <translation>Pauziraj izvođenje videa</translation>
</message>
<message>
<source>&Full Screen</source>
</message>
<message>
<source>Go full screen</source>
- <translation>Gledaj preko cijelog ekrana</translation>
+ <translation>Gledaj video preko cijelog ekrana</translation>
</message>
<message>
<source>&Compact mode</source>
- <translation>&Kompaktan način</translation>
+ <translation>&Kompaktni način</translation>
</message>
<message>
<source>Hide the playlist and the toolbar</source>
- <translation>Sakrij naslove i alatnu traku</translation>
+ <translation>Sakrij listu izvođenja i alatnu traku</translation>
+ </message>
+ <message>
+ <source>Open the &YouTube page</source>
+ <translation>&YouTube web stranica</translation>
+ </message>
+ <message>
+ <source>Go to the YouTube video page and pause playback</source>
+ <translation>Otvori video na YouTube web stranici i pauziraj izvođenje videa</translation>
+ </message>
+ <message>
+ <source>Copy the YouTube &link</source>
+ <translation>Kopiraj &YouTube poveznicu</translation>
+ </message>
+ <message>
+ <source>Copy the current video YouTube link to the clipboard</source>
+ <translation>Kopiraj YouTube poveznicu videa koji se izvodi u međuspremnik</translation>
</message>
<message>
- <source>&YouTube</source>
- <translation type="obsolete">&YouTube</translation>
+ <source>Copy the video stream &URL</source>
+ <translation>Kopiraj web &adresu videa</translation>
</message>
<message>
- <source>Open the YouTube video page</source>
- <translation type="obsolete">Otvori YouTube video stranicu</translation>
+ <source>Copy the current video stream URL to the clipboard</source>
+ <translation>Kopiraj web adresu videa koji se izvodi u međuspremnik</translation>
</message>
<message>
<source>&Remove</source>
</message>
<message>
<source>Remove the selected videos from the playlist</source>
- <translation>Ukloni odabrane snimke sa playliste</translation>
+ <translation>Ukloni označene video isječke sa liste izvođenja</translation>
</message>
<message>
<source>Move &Up</source>
- <translation>Premjesti gore</translation>
+ <translation>Premjesti &gore</translation>
</message>
<message>
<source>Move up the selected videos in the playlist</source>
- <translation>Premjesti gore selektirane snimke u playlistu</translation>
+ <translation>Premjesti odabrane video isječke prema gore u listi izvođenja</translation>
</message>
<message>
<source>Move &Down</source>
- <translation>Premjesti &Dolje</translation>
+ <translation>Premjesti &dolje</translation>
</message>
<message>
<source>Move down the selected videos in the playlist</source>
- <translation>Premjesti dolje selektirane snimke u playlistu</translation>
+ <translation>Premjesti odabrane video isječke prema dolje u listi izvođenja</translation>
+ </message>
+ <message>
+ <source>&Clear recent keywords</source>
+ <translation>&Obriši povijest pretraživanja</translation>
+ </message>
+ <message>
+ <source>Clear the search history. Cannot be undone.</source>
+ <translation>Obriši povijest pretraživanja. Ova akcija se ne može poništiti.</translation>
</message>
<message>
<source>&Quit</source>
- <translation>&Odustani</translation>
+ <translation>&Zatvori program</translation>
</message>
<message>
<source>Ctrl+Q</source>
</message>
<message>
<source>Bye</source>
- <translation>Pozdrav</translation>
+ <translation>Doviđenja</translation>
</message>
<message>
<source>&Website</source>
<translation>%1 na internetu</translation>
</message>
<message>
- <source>&Donate via PayPal</source>
- <translation type="obsolete">&Donirajte preko PayPal-a</translation>
+ <source>Make a &donation</source>
+ <translation>Napravi &donaciju</translation>
</message>
<message>
<source>Please support the continued development of %1</source>
- <translation>Molimo potporu u daljnjem razvoju %1</translation>
+ <translation>Molimo Vas da podržite kontinuirani razvoj %1</translation>
</message>
<message>
<source>&About</source>
- <translation>&O</translation>
+ <translation>&O programu</translation>
</message>
<message>
<source>Info about %1</source>
- <translation>Info o %1</translation>
+ <translation>Informacije o %1</translation>
</message>
<message>
<source>Search</source>
- <translation>Pretraga</translation>
+ <translation>Traži</translation>
</message>
<message>
<source>Mute volume</source>
<source>Ctrl+M</source>
<translation>Ctrl+M</translation>
</message>
+ <message>
+ <source>&Application</source>
+ <translation>&Program</translation>
+ </message>
<message>
<source>&Playlist</source>
- <translation>&Playlista</translation>
+ <translation>&Lista izvođenja</translation>
</message>
<message>
<source>&Video</source>
</message>
<message>
<source>Press %1 to raise the volume, %2 to lower it</source>
- <translation>Pritisnite %1 za povećati zvuk, %2 za smanjiti zvuk</translation>
+ <translation>Pritisni %1 za pojačavanje zvuka, %2 za stišavanje</translation>
</message>
<message>
<source>Opening %1</source>
- <translation>Otvaranje %1</translation>
+ <translation>Otvaram %1</translation>
</message>
<message>
<source>Fatal error: %1</source>
- <translation>Fatalna greška: %1</translation>
+ <translation>Fatalna pogreška: %1</translation>
</message>
<message>
<source>Error: %1</source>
- <translation>Greška: %1</translation>
+ <translation>Pogreška: %1</translation>
</message>
<message>
<source>&Play</source>
- <translation>&Pusti</translation>
+ <translation>&Pokreni</translation>
</message>
<message>
<source>Resume playback</source>
- <translation>Nastavi playback</translation>
+ <translation>Nastavi izvođenje</translation>
</message>
<message>
<source>Exit &Full Screen</source>
- <translation>Izlaz&Cijeli ekran</translation>
+ <translation>&Prekini prikaz preko cijelog ekrana</translation>
</message>
<message>
<source>Remaining time: %1</source>
</message>
<message>
<source>Volume at %1%</source>
- <translation>Jačina zvuka je na %1%</translation>
+ <translation>Jačina zvuka %1%</translation>
</message>
<message>
<source>Volume is muted</source>
<translation>Zvuk je uključen</translation>
</message>
<message>
- <source>High Definition video is enabled</source>
- <translation type="obsolete">Visoka rezolucija videa je uključena</translation>
- </message>
- <message>
- <source>High Definition video is not enabled</source>
- <translation type="obsolete">Visoka rezolucija videa je isključena</translation>
- </message>
- <message>
- <source>The current video is in High Definition</source>
- <translation type="obsolete">Odabrani video je u visokoj rezoluciji</translation>
- </message>
- <message>
- <source>The current video is not in High Definition</source>
- <translation type="obsolete">Odabrani video nije u visokoj rezoluciji</translation>
- </message>
- <message>
- <source>&Clear recent keywords</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>&Application</source>
- <translation type="unfinished"></translation>
+ <source>Maximum video definition set to %1</source>
+ <translation>Maksimalna video rezolucija je postavljena na %1</translation>
</message>
<message>
- <source>Clear the search history. Cannot be undone.</source>
- <translation type="unfinished"></translation>
+ <source>Your privacy is now safe</source>
+ <translation>Vaša privatnost je sada sigurna</translation>
</message>
<message>
- <source>Your privacy is now safe</source>
+ <source>&Downloads</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Open the &YouTube page</source>
+ <source>Show details about video downloads</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Go to the YouTube video page and pause playback</source>
+ <source>&Download</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Copy the YouTube &link</source>
+ <source>Download the current video</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Copy the current video YouTube link to the clipboard</source>
+ <source>Do you want to exit %1 with a download in progress?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Copy the video stream &URL</source>
+ <source>If you close %1 now, this download will be cancelled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Copy the current video stream URL to the clipboard</source>
+ <source>Close and cancel download</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Make a &donation</source>
+ <source>Wait for download to finish</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Maximum video definition set to %1</source>
+ <source>Downloads complete</source>
<translation type="unfinished"></translation>
</message>
</context>
<source>Most viewed</source>
<translation>Najgledaniji</translation>
</message>
+ <message>
+ <source>You can now paste the YouTube link into another application</source>
+ <translation>Možete zalijepiti YouTube poveznicu u drugu aplikaciju</translation>
+ </message>
+ <message>
+ <source>You can now paste the video stream URL into another application</source>
+ <translation>Možete zalijepiti web adresu video isječka u drugu aplikaciju</translation>
+ </message>
+ <message>
+ <source>The link will be valid only for a limited time.</source>
+ <translation>Poveznica će vrijediti samo neko vrijeme.</translation>
+ </message>
<message>
<source>You're watching "%1"</source>
<translation>Gledate "%1"</translation>
</message>
<message>
- <source>You can now paste the YouTube link into another application</source>
+ <source>This is just the demo version of %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>You can now paste the video stream URL into another application</source>
+ <source>It allows you to test the application and see if it works for you.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>The link will be valid only for a limited time.</source>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
<translation type="unfinished"></translation>
</message>
</context>
<name>NetworkAccess</name>
<message>
<source>Network error: %1</source>
- <translation>Greška u mreži:%1</translation>
+ <translation>Greška na mreži: %1</translation>
</message>
</context>
<context>
<name>PrettyItemDelegate</name>
<message>
<source>%1 views</source>
- <translation>%1 gledano</translation>
+ <translation>%1 pregleda</translation>
+ </message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SearchLineEdit</name>
<message>
<source>Search</source>
- <translation>Pretraga</translation>
+ <translation>Traži</translation>
</message>
</context>
<context>
<name>SearchView</name>
<message>
<source>Welcome to <a href='%1'>%2</a>,</source>
- <translation>Dobro došli <a href='%1'>%2</a></translation>
+ <translation>Dobrodošli na <a href='%1'>%2</a>,</translation>
</message>
<message>
<source>Enter a keyword to start watching videos.</source>
</message>
<message>
<source>A new version of %1 is available. Please <a href='%2'>update to version %3</a></source>
- <translation>Nova verzija %1 je dostupna. Molimo <a href='%2'>nadogradite verziju %3</a></translation>
+ <translation>Nova verzija %1 je dostupna. Molimo <a href='%2'>nadogradite na verziju %3</a></translation>
</message>
<message>
<source>Make yourself comfortable</source>
- <translation>Osjećajte se udobno</translation>
- </message>
-</context>
-<context>
- <name>SettingsView</name>
- <message>
- <source>Preferences</source>
- <translation type="obsolete">Postavke</translation>
+ <translation>Udobno se smjestite i opustite se</translation>
</message>
</context>
<context>
<name>Video</name>
<message>
<source>Network error: %1 for %2</source>
- <translation>Greška u mreži:%1 za %2</translation>
+ <translation>Greška na mreži: %1 za %2</translation>
</message>
</context>
</TS>
<translation>Törlés</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Maximum video definition set to %1</source>
<translation>Maximum videó minőség beállítása %1-ra</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation>A link korlátozott ideig érvényes</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1x megtekintve</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
</message>
<message>
<source>Compact mode contributed by %1.</source>
- <translation>Modalità compatta sviluppata da %1</translation>
+ <translation>Modalità compatta sviluppata da %1.</translation>
</message>
<message>
<source>Translated by %1</source>
</message>
<message>
<source>HTTP proxy support contributed by %1.</source>
- <translation>Supporto per i proxy HTTP svilupparo da %1</translation>
+ <translation>Supporto per i proxy HTTP svilupparo da %1.</translation>
</message>
<message>
<source>Windows version built by %1</source>
<translation>Cancella</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation>secondi</translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation>minuti</translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation>%4 %5 al termine</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation>
+ <numerusform>1 download</numerusform>
+ <numerusform>%n download</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation>Questa è solo la versione demo di %1.</translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation>Puoi scaricare solo video più corti di %1 minuti, così puoi testare la funzionalità dei download.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Continua</translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation>Compra la versione completa</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation>Cambia destinazione...</translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation>Scegli la destinazione dei download</translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation>La destinazione dei download è cambiata.</translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation>I download già in corso andranno comunque nella destinazione precedente.</translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation>Scarica in: %1</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation>Download</translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation>Play</translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation>Pausa</translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation>Play/Pausa</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation>Stop</translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation>Ferma al termine del video corrente</translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation>Prossima traccia</translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation>Traccia precedente</translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation>Aumenta il volume</translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation>Diminuisci il volume</translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation>Senza audio</translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation>Salta in avanti</translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation>Salta indietro</translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
</message>
<message>
<source>&Compact mode</source>
- <translation>Modalità compatta</translation>
+ <translation>Modalità &compatta</translation>
</message>
<message>
<source>Hide the playlist and the toolbar</source>
</message>
<message>
<source>Clear the search history. Cannot be undone.</source>
- <translation>&Cancella le ultime ricerche. L'azione non potrà essere annullata.</translation>
+ <translation>Cancella le ultime ricerche. L'azione non potrà essere annullata.</translation>
</message>
<message>
<source>Your privacy is now safe</source>
</message>
<message>
<source>Make a &donation</source>
- <translation>Fai una donazione</translation>
+ <translation>Fai una &donazione</translation>
</message>
<message>
<source>Maximum video definition set to %1</source>
<translation>La definizione video massima è impostata a %1</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation>&Download</translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation>Mostra informazioni sui download</translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation>&Download</translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation>Scarica il video corrente</translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation>Vuoi uscire da %1 con un download in corso?</translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation>Se chiudi %1 adesso, i download verranno annullati.</translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation>Chiudi e annulla i download</translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation>Aspetta che i download siano completi</translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation>I download sono completi</translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation>Il link rimarrà valido per un periodo di tempo limitato.</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation>Questa è solo la versione demo di %1.</translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation>Ti permette di testare l'applicazione e verificare che funzioni sul tuo computer.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Continua</translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation>Compra la versione completa</translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation>Scarica in: %1</translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 visualizzazioni</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation>%1 di %2 (%3) ? %4</translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation>In preparazione</translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation>Fallito</translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation>Completato</translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation>Fermo</translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation>Interrompi il download</translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation>Mostra nel %1</translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation>Mostra nella cartella</translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation>Prova a scaricare di nuovo</translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<translation>クリア</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Maximum video definition set to %1</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1回 閲覧</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
</message>
<message>
<source>This is a "Technology Preview" release, do not expect it to be perfect.</source>
- <translation>Šis ir priekšapskates izlaidums, negaidiet no tā brīnumus.</translation>
+ <translation type="obsolete">Šis ir priekšapskates izlaidums, negaidiet no tā brīnumus.</translation>
</message>
<message>
<source>Report bugs and send in your ideas to %1</source>
</message>
<message>
<source>Please <a href='%1'>donate via PayPal</a> to support the continued development of %2.</source>
- <translation>Lūdzu, <a href='%1'>ziedojiet ar PayPal</a>, lai atbalstītu %2 turpmāku izstrādi.</translation>
+ <translation type="obsolete">Lūdzu, <a href='%1'>ziedojiet ar PayPal</a>, lai atbalstītu %2 turpmāku izstrādi.</translation>
</message>
<message>
<source>Icon designed by %1.</source>
</message>
<message>
<source>Windows version built by %1</source>
- <translation>Windows versiju izveidoja %1</translation>
+ <translation type="obsolete">Windows versiju izveidoja %1</translation>
</message>
<message>
<source>Translated by %1</source>
</message>
<message>
<source>Please <a href='%1'>donate</a> to support the continued development of %2.</source>
- <translation>Lūdzu, <a href='%1'>ziedojiet</a>, lai atbalstītu %2 turpmāku izstrādi.</translation>
+ <translation>Lūdzu, <a href='%1'>ziedojiet</a>, lai atbalstītu %2 turpmāku izstrādi.</translation>
</message>
</context>
<context>
<translation>Dzēst</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation>baiti</translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation>MB</translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation>baiti sekundē</translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation>KB/s</translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation>MB/s</translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation>sekundes</translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation>minūtes</translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation>%4 %5 paliek</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation>
+ <numerusform>%n Lejupielāde(s)</numerusform>
+ <numerusform>%n Lejupielāde(s)</numerusform>
+ <numerusform>%n Lejupielāde(s)</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation>Šī ir %1 demo versija.</translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation>Tā spēj lejuplādēt tikai par %1 minūtēm īsākus klipus lai notestētu lejupielādes funkcionālitāti.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Turpināt</translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation>Novilkt pilnu versiju</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation>Mainīt mērķa mapi... </translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation>Izvēlieties mērķa mapi</translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation>Mērķa mape ir mainīta.</translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation>Esošās lejupielādes tiks saglabātas iepriekšējā mapē.</translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation>Lejuplādēju iekš: %1</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation>Lejupielādes</translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation>Atskaņot</translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation>Apturēt</translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation>Atskaņot / Apturēt</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation>Pārtraukt</translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation>Pārtraukt atskaņošanu pēc šī klipa</translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation>Nākošais klips</translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation>Iepriekšējais klips</translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation>Skaļāk</translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation>Klusāk</translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation>Izslēgt skaņu</translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation>Pārtīt uz priekšu</translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation>Pārtīt atpakaļ</translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<name>MainWindow</name>
<message>
<source>&Back</source>
- <translation>Atpakaļ</translation>
+ <translation type="obsolete">Atpakaļ</translation>
</message>
<message>
<source>Go to the previous view</source>
- <translation>Atgriezties iepriekšējā skatā</translation>
+ <translation type="obsolete">Atgriezties iepriekšējā skatā</translation>
</message>
<message>
<source>&Stop</source>
</message>
<message>
<source>&YouTube</source>
- <translation>&YouTube</translation>
+ <translation type="obsolete">&YouTube</translation>
</message>
<message>
<source>Open the YouTube video page</source>
- <translation>Atvērt YouTube vietni</translation>
+ <translation type="obsolete">Atvērt YouTube vietni</translation>
</message>
<message>
<source>&Remove</source>
</message>
<message>
<source>&Donate via PayPal</source>
- <translation>Ziedojiet ar PayPal</translation>
+ <translation type="obsolete">Ziedojiet ar PayPal</translation>
</message>
<message>
<source>Please support the continued development of %1</source>
</message>
<message>
<source>Info par %1</source>
- <translation>Ziņas par %1</translation>
+ <translation type="obsolete">Ziņas par %1</translation>
</message>
<message>
<source>Search</source>
</message>
<message>
<source>High Definition video is enabled</source>
- <translation>Augstā izšķirtspēja ir ieslēgta</translation>
+ <translation type="obsolete">Augstā izšķirtspēja ir ieslēgta</translation>
</message>
<message>
<source>High Definition video is not enabled</source>
- <translation>Augstā izšķirtspēja nav ieslēgta</translation>
+ <translation type="obsolete">Augstā izšķirtspēja nav ieslēgta</translation>
</message>
<message>
<source>The current video is in High Definition</source>
- <translation>Šis ir augstās izšķirtspējas video</translation>
+ <translation type="obsolete">Šis ir augstās izšķirtspējas video</translation>
</message>
<message>
<source>The current video is not in High Definition</source>
- <translation>Šis nav augstās izšķirtspējas video</translation>
+ <translation type="obsolete">Šis nav augstās izšķirtspējas video</translation>
</message>
<message>
<source>&Clear recent keywords</source>
</message>
<message>
<source>Open the &YouTube page</source>
- <translation>Atvērt &YouTube vietni</translation>
+ <translation>Atvērt &YouTube vietni</translation>
</message>
<message>
<source>Go to the YouTube video page and pause playback</source>
</message>
<message>
<source>Copy the video stream &URL</source>
- <translation>Nokopēt video plūsmas &URL</translation>
+ <translation>Nokopēt video plūsmas &URL</translation>
</message>
<message>
<source>Copy the current video stream URL to the clipboard</source>
- <translation>Nokopēt esošās video plūsmas URL starpliktuvē</translation>
+ <translation>Nokopēt esošās video plūsmas URL starpliktuvē</translation>
</message>
<message>
<source>Make a &donation</source>
<source>Maximum video definition set to %1</source>
<translation>Klipa maksimālā izšķirtspēja ir %1</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation>Lejupielādes</translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation>Rādīt klipu lejupielāžu detaļas</translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation>Lejuplādēt</translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation>Lejuplādēt šo klipu</translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation>Vai vēlaties iziet no %1 neskatoties uz notiekošo lejupielādi?</translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation>Ja aizvērsit %1 tagad, šī lejupielāde tiks atcelta.</translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation>Aizvērt un atcelt lejupielādi</translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation>Pagaidīt līdz lejupielādes beigām</translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation>Lejupielādes pabeigtas</translation>
+ </message>
</context>
<context>
<name>MediaView</name>
</message>
<message>
<source>You can now paste the video stream URL into another application</source>
- <translation>Tagad varat ielīmēt video plūsmas URL citā programmā</translation>
+ <translation>Tagad varat ielīmēt video plūsmas URL citā programmā</translation>
</message>
<message>
<source>The link will be valid only for a limited time.</source>
<translation>Norāde būs derīga tikai ierobežotu laiku</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation>Šī ir %1 demo versija.</translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation>Tā ļauj notestēt programmu un noskaidrot vai tā jums der.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Turpināt</translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation>Novilkt pilnu versiju</translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation>Lejuplādēju %1</translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 skatījumi</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation>%1 no %2 (%3) ? %4</translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation>Topošās</translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation>Neizdevušās</translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation>Pabeigtas</translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation>Apturētas</translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation>Pārtraukt lejupielādi</translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation>Rādīt %1</translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation>Atvērt mapi līmeni augstāk</translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation>Atsākt lejupielādi</translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<name>SettingsView</name>
<message>
<source>Preferences</source>
- <translation>Uzstādījumi</translation>
+ <translation type="obsolete">Uzstādījumi</translation>
</message>
</context>
<context>
DEPENDPATH += $$PWD
TRANSLATIONS += \
+ en_US.ts \
it_IT.ts \
pt_BR.ts \
ru_RU.ts \
ar.ts \
pt_PT.ts \
fi_FI.ts \
- bg_BG.ts
+ bg_BG.ts \
+ zh_CN.ts
isEmpty(QMAKE_LRELEASE) {
win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\lrelease.exe
<translation>Nullstill</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Maximum video definition set to %1</source>
<translation>Maksimum video definisjon innstilling til %1</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation>Denne linken vil kun være gyldig i en begrenset tid.</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 visninger</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<translation>Wis</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Your privacy is now safe</source>
<translation>Uw privacy is nu veilig</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>You're watching "%1"</source>
<translation>U kijkt naar "%1"</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 bekeken</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<translation>Wyczyść</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation>bajtów</translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation>MB</translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation>bajtów/s</translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation>KB/s</translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation>MB/s</translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation>sekund</translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation>minut</translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation>Pozostało %4 %5</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation>To tylko wersja demo %1.</translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation>Program pobiera tylko filmy krótsze od %1 minut w celu przetestowania funkcji.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Kontynuuj</translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation>Zdobądź pełną wersję</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation>Zmień położenie</translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation>Wybierz położenie pobierań</translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation>Udało się zmienić położenie pobranych filmów.</translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation>Pobrane filmy nadal będą zapisywane w poprzedniej lokalizacji.</translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation>Pobieranie do: %1</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation>Pobrane filmy</translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation>Odtwórz</translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation>Wstrzymaj</translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation>Odtwórz/Wstrzymaj</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation>Stop</translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation>Zakończ odtwarzanie po tym utworze</translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation>Następny utwór</translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation>Poprzedni utwór</translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation>Zwiększ głośność</translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation>Zmniejsz głośność</translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation>Wycisz</translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation>Przewiń do przodu</translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation>Przewiń do tyłu</translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Maximum video definition set to %1</source>
<translation>Aktualne ustawienie jakości wideo to %1</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation>&Pobrane pliku</translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation>Pokaż szczegóły pobranych filmów</translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation>&Pobierz</translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation>Pobierz aktualnie odtwarzany film</translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation>Czy chcesz zamknąć %1 z uruchomionym procesem pobierania?</translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation>Jeśli zamkniesz %1, proces pobierania zostanie anulowany.</translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation>Zamknij i anuluj pobieranie</translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation>Zaczekaj do końca pobierania</translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation>Pobieranie zakończone</translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation>Link będzie ważny tylko przez określony czas.</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation>To tylko wersja demo %1.</translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation>Pozwala przetestować aplikację i sprawdzić, czy działa.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Kontynuuj</translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation>Zdobądź pełną wersję.</translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation>Pobieranie %1</translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 wyświetleń</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation>%1 z %2 (%3) ? %4</translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation>Przygotowywanie</translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation>Nie udało się</translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation>Zakończono</translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation>Zatrzymano</translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation>Zatrzymaj pobieranie</translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation>Pokaż w %1</translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation>Otwórz nadrzędny folder</translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation>Restartuj pobieranie</translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
</message>
<message>
<source>Use high quality video when available</source>
- <translation type="obsolete">Użyj wysokiej jakości wideo jeśli jest to możliwe</translation>
+ <translation type="obsolete">Użyj wysokiej jakości wideo, jeśli jest to możliwe</translation>
</message>
<message>
<source>&Saved recent keywords</source>
<translation>Limpar</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Maximum video definition set to %1</source>
<translation>Máxima definição de vídeo definida para %1</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation>O link só será válido por um tempo limitado.</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 exibições</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<translation>Limpar</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation>bytes</translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation>MB</translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation>bytes/seg</translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation>KB/sec</translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation>MB/seg</translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation>segundos</translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation>minutos</translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation>%4 %5 restante</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation>
+ <numerusform>%n Transferência</numerusform>
+ <numerusform>%n Transferências</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation>Isto é apenas uma versão de demonstração de %1.</translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation>Apenas pode transferir vídeos mais curtos que %1 minuto(s) de forma a testar a funcionalidade de transferência.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Continuar</translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation>Transfira a versão completa</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translatorcomment>soa melhor assim :)</translatorcomment>
+ <translation>Mudar pasta de destino...</translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation>Escolha a pasta de destino da transferência</translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation>A pasta de destino da transferência foi actualizada.</translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation>A pasta de transferência actual irá manter-se na mesma pasta.</translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation>A transferir para: %1</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation>Transferências</translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translatorcomment>vale a pena traduzir?</translatorcomment>
+ <translation>Iniciar</translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation>Pausa</translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation>Iniciar/Pausar</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translatorcomment>vale a pena traduzir?</translatorcomment>
+ <translation>Parar</translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation>Parar assim que terminar o vídeo ou música corrente</translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation>Próximo vídeo/música</translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation>Vídeo/música anterior</translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation>Aumentar volume</translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation>Diminuir volume</translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation>Silêncio</translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation>Avançar</translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation>Retroceder</translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Your privacy is now safe</source>
<translation>A sua privacidade está agora assegurada</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation>&Transferências</translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation>Mostar detalhes sobre a transferência de vídeos</translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation>&Transferência</translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation>Transferir o vídeo actual</translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation>Deseja sair %1 com uma transferência activa?</translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation>Se fechar %1, a transferência irá ser cancelada.</translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation>Fechar e cancelar a transferência</translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation>Espere que a transferência termine</translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation>Transferência completa</translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>You're watching "%1"</source>
<translation>Está a assistir a "%1"</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation>Isto é apenas uma versão de demonstração de %1.</translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation>Permite testes a aplicacção e verificar como funciona.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Continuar</translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation>Transfira a versão completa</translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation>Transferir: %1</translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 visualizações</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation>%1 de %2 (%3) ? %4</translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation>A preparar</translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation>Falhou</translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation>Completo</translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation>Parado</translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation>Parar a transferência</translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation>Mostrar em %1</translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation>Abrir pasta anterior</translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation>Recomeçar a transferência</translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<translation>Şterge</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Maximum video definition set to %1</source>
<translation>Rezoluţia maxima a videoclipului este setată la %1</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation>Link-ul va fi valid doar pentru o perioadă limitată de timp.</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 vizualizări</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<translation>Очистить</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Maximum video definition set to %1</source>
<translation>Максимальное разрешение видео: %1</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation>Адрес будет существовать ограниченное время.</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 просмотров</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<translation>Temizle</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
</message>
<message>
<source>&Download</source>
- <translation type="obsolete">&Herunterladen</translation>
+ <translation type="unfinished">&Herunterladen</translation>
</message>
<message>
<source>Download this video</source>
<source>Maximum video definition set to %1</source>
<translation>En yüksek video tanımı %1 olarak ayarlı</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation>Bağlantı kısıtlı bir süre için geçerli olacak.</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<source>%1 views</source>
<translation>%1 görüntüleme</translation>
</message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SearchLineEdit</name>
<name>AboutView</name>
<message>
<source>There's life outside the browser!</source>
- <translation>Ð\97а межами бÑ\80аÑ\83зеÑ\80а також є життя!</translation>
+ <translation>Ð\97а межами веб-пеÑ\80еглÑ\8fдаÑ\87а також є життя!</translation>
</message>
<message>
<source>Version %1</source>
</message>
<message>
<source>%1 is Free Software but its development takes precious time.</source>
- <translation>%1 є Вільним Програмним Забезпеченням але на його розробку було затрачено коштовний час.</translation>
+ <translation>%1 — вільне програмне забезпечення, але на його розробку було затрачено коштовний час.</translation>
</message>
<message>
<source>Please <a href='%1'>donate via PayPal</a> to support the continued development of %2.</source>
</message>
<message>
<source>Translated by %1</source>
- <translation>Переклад %1</translation>
+ <translation>Перекладено %1</translation>
</message>
<message>
<source>Released under the <a href='%1'>GNU General Public License</a></source>
- <translation>Ð\92ипÑ\83Ñ\89ено пÑ\96д <a href='%1'>Загальною громадською ліцензією GNU</a></translation>
+ <translation>Ð\92ипÑ\83Ñ\89ено за <a href='%1'>Загальною громадською ліцензією GNU</a></translation>
</message>
<message>
<source>&Close</source>
- <translation>Пове&рнутися</translation>
+ <translation>&Закрити</translation>
</message>
<message>
<source>About</source>
</message>
<message>
<source>What you always wanted to know about %1 and never dared to ask</source>
- <translation>Все що ви завжди хотіли знати про %1 але не наважувались запитати</translation>
+ <translation>Все що ви завжди хотіли знати про %1, але не наважувались запитати</translation>
</message>
<message>
<source>Compact mode contributed by %1.</source>
<translation>Очистити</translation>
</message>
</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation>байт</translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation>КБ</translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation>МБ</translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation>байт/сек</translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation>КБ/сек</translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation>МБ/сек</translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation>сек</translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation>хв</translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation>до завершення %4 %5</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation>
+ <numerusform>%n завантаження</numerusform>
+ <numerusform>%n завантаження</numerusform>
+ <numerusform>%n завантажень</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation>Це демонстраційна версія %1.</translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation>З метою тестування ви можете завантажити відео тривалістю до %1 хв.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Продовжити</translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation>Отримати повнофункціональну версію</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation>Змінити теку для завантаження...</translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation>Оберіть теку для завантаження</translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation>Теку завантаження змінено.</translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation>Поточні завантаження все ще буде збережено в попередньому місці.</translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation>Завантажується в %1</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation>Завантаження</translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation>Грати</translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation>Призупинити</translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation>Грати/Призупинити</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation>Зупинити</translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation>Зупинити по завершенні поточного</translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation>Наступний</translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation>Попередній</translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation>Підвищити гучність</translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation>Знизити гучність</translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation>Приглушити</translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation>Шукати наступне</translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation>Шукати попереднє</translation>
+ </message>
+</context>
<context>
<name>ListModel</name>
<message>
<source>Searching...</source>
- <translation>ШÑ\83каÑ\8e...</translation>
+ <translation>Ð\9fоÑ\88Ñ\83к...</translation>
</message>
<message>
<source>Show %1 More</source>
</message>
<message>
<source>Go full screen</source>
- <translation>Перехід в повноекранний режим</translation>
+ <translation>Перехід у повноекранний режим</translation>
</message>
<message>
<source>Alt+Return</source>
</message>
<message>
<source>&Remove</source>
- <translation>&Ð\92идалити</translation>
+ <translation>&Ð\92илÑ\83Ñ\87ити</translation>
</message>
<message>
<source>Remove the selected videos from the playlist</source>
- <translation>Ð\92идалиÑ\82и обÑ\80анÑ\96 вÑ\96део з пеÑ\80елÑ\96кÑ\83 композиÑ\86Ñ\96й</translation>
+ <translation>Ð\92илÑ\83Ñ\87иÑ\82и вибÑ\80анÑ\96 вÑ\96део зÑ\96 Ñ\81пиÑ\81кÑ\83</translation>
</message>
<message>
<source>Move &Up</source>
</message>
<message>
<source>Move up the selected videos in the playlist</source>
- <translation>Ð\97Ñ\81Ñ\83нÑ\83Ñ\82и обÑ\80ане вÑ\96део на позиÑ\86Ñ\96Ñ\8e вгоÑ\80Ñ\83 в пеÑ\80елÑ\96кÑ\83 композиÑ\86Ñ\96й</translation>
+ <translation>Ð\97Ñ\81Ñ\83нÑ\83Ñ\82и вибÑ\80ане вÑ\96део вгоÑ\80Ñ\83 по Ñ\81пиÑ\81кÑ\83</translation>
</message>
<message>
<source>Ctrl+Up</source>
</message>
<message>
<source>Move down the selected videos in the playlist</source>
- <translation>Ð\97Ñ\81Ñ\83нÑ\83Ñ\82и обÑ\80ане вÑ\96део на позиÑ\86Ñ\96Ñ\8e вниз в пеÑ\80елÑ\96кÑ\83 композиÑ\86Ñ\96й</translation>
+ <translation>Ð\97Ñ\81Ñ\83нÑ\83Ñ\82и вибÑ\80ане вÑ\96део вниз по Ñ\81пиÑ\81кÑ\83</translation>
</message>
<message>
<source>Ctrl+Down</source>
</message>
<message>
<source>Bye</source>
- <translation>Хай Ñ\89аÑ\81Ñ\82иÑ\82Ñ\8c</translation>
+ <translation>Ð\9dа вÑ\81е добÑ\80е</translation>
</message>
<message>
<source>&Website</source>
- <translation>Домашн&я сторінка програми</translation>
+ <translation>&Сайт</translation>
</message>
<message>
<source>Minitube on the Web</source>
</message>
<message>
<source>&Playlist</source>
- <translation>Перелік &композицій</translation>
+ <translation>&Список</translation>
</message>
<message>
<source>&Video</source>
</message>
<message>
<source>&Help</source>
- <translation>&Ð\94опомога</translation>
+ <translation>&Ð\94овÑ\96дка</translation>
</message>
<message>
<source>Opening %1</source>
- <translation>Відкриваю %1</translation>
+ <translation>Відкриття %1</translation>
</message>
<message>
<source>&Play</source>
- <translation>Ð\92Ñ\96дÑ\82воÑ\80Ñ\8eв&ати</translation>
+ <translation>Ð\93Ñ\80&ати</translation>
</message>
<message>
<source>Resume playback</source>
- <translation>Ð\9fÑ\80одовжити відтворення</translation>
+ <translation>Ð\92Ñ\96дновити відтворення</translation>
</message>
<message>
<source>Exit &Full Screen</source>
</message>
<message>
<source>Hide the playlist and the toolbar</source>
- <translation>Ð\9fÑ\80иÑ\85оваÑ\82и пеÑ\80елÑ\96к композиÑ\86Ñ\96й Ñ\82а панель інструментів</translation>
+ <translation>СÑ\85оваÑ\82и Ñ\81пиÑ\81ок Ñ\96 панель інструментів</translation>
</message>
<message>
<source>Fatal error: %1</source>
</message>
<message>
<source>Press %1 to raise the volume, %2 to lower it</source>
- <translation>%1 щоб приглушити гучність, %2 щоб відновити </translation>
+ <translation>Натисніть %1, щоб приглушити гучність, та %2 щоб відновити її</translation>
</message>
<message>
<source>Remaining time: %1</source>
- <translation>ЧаÑ\81 до завеÑ\80Ñ\88еннÑ\8f: %1</translation>
+ <translation>Ð\97алиÑ\88илоÑ\81Ñ\8c Ñ\87аÑ\81Ñ\83: %1</translation>
</message>
<message>
<source>High Definition video is enabled</source>
</message>
<message>
<source>&Clear recent keywords</source>
- <translation>Очистити недавн&і терміни пошуку</translation>
+ <translation>Очистити недавн&ій пошук</translation>
</message>
<message>
<source>Clear the search history. Cannot be undone.</source>
<source>Maximum video definition set to %1</source>
<translation>Режим чіткості відео %1</translation>
</message>
+ <message>
+ <source>&Downloads</source>
+ <translation>&Завантаження</translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation>Показати деталі про завантажувані відео</translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation>&Завантажити</translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation>Завантажити поточне відео</translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation>Триває завантаження, бажаете закрити %1?</translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation>Якщо закрити %1 негайно, всі завантаження буде скасовано.</translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation>Скасувати та закрити</translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation>Дочекатися завершення</translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation>Завантаження завершено</translation>
+ </message>
</context>
<context>
<name>MediaView</name>
<source>The link will be valid only for a limited time.</source>
<translation>Посилання буде дійсне тільки протягом обмеженого часу.</translation>
</message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation>Це демонстраційна версія %1.</translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation>Ми маєте змогу протестувати програму та перевірити працездатність.</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Продовжити</translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation>Отримати повнофункціональну версію</translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation>Завантаження %1</translation>
+ </message>
</context>
<context>
<name>NetworkAccess</name>
<name>PrettyItemDelegate</name>
<message>
<source>%1 views</source>
- <translation>переглядів %1</translation>
+ <translation>%1 переглядів</translation>
+ </message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation>%1 з %2 (%3) ? %4</translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation>Готується</translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation>Невдача</translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation>Завершено</translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation>Зупинено</translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation>Зупинити завантаження</translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation>Відтворити в %1</translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation>Перейти до теки з відео</translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation>Завантажити заново</translation>
</message>
</context>
<context>
<name>SearchView</name>
<message>
<source>Welcome to <a href='%1'>%2</a>,</source>
- <translation>Ð\92Ñ\96Ñ\82аÑ\94мо в <a href='%1'>%2</a>,</translation>
+ <translation>Ð\9bаÑ\81каво пÑ\80оÑ\81имо до <a href='%1'>%2</a>,</translation>
</message>
<message>
<source>Enter a keyword to start watching videos.</source>
- <translation>Ð\92ведÑ\96Ñ\82Ñ\8c Ñ\82еÑ\80мÑ\96ни для пошуку відео.</translation>
+ <translation>Ð\92ведÑ\96Ñ\82Ñ\8c Ñ\84Ñ\80ази для пошуку відео.</translation>
</message>
<message>
<source>Watch</source>
</message>
<message>
<source>A new version of %1 is available. Please <a href='%2'>update to version %3</a></source>
- <translation>Ð\9dаÑ\8fвна нова веÑ\80Ñ\81Ñ\96Ñ\8f %1. Ð\91Ñ\83дÑ\8c лаÑ\81ка <a href='%2'> обновіть програму до версії %3</a></translation>
+ <translation>Ð\92ипÑ\83Ñ\89ено новÑ\83 веÑ\80Ñ\81Ñ\96Ñ\8e %1. Ð\91Ñ\83дÑ\8c лаÑ\81ка, <a href='%2'> оновіть програму до версії %3</a></translation>
</message>
<message>
<source>Make yourself comfortable</source>
- <translation>Влаштовуйтеся зручніше</translation>
+ <translation>Влаштовуйтеся якнайзручніше</translation>
</message>
</context>
<context>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="zh_CN" sourcelanguage="zh_CN">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+ <name>AboutView</name>
+ <message>
+ <source>There's life outside the browser!</source>
+ <translation>浏览器之外,生活亦精彩!</translation>
+ </message>
+ <message>
+ <source>Version %1</source>
+ <translation>版本 %1</translation>
+ </message>
+ <message>
+ <source>%1 is Free Software but its development takes precious time.</source>
+ <translation>%1是自由软件。其开发也同样要耗用宝贵时间的。</translation>
+ </message>
+ <message>
+ <source>Please <a href='%1'>donate</a> to support the continued development of %2.</source>
+ <translation>欢迎您的慷慨<a href='%1'>捐赠</a>支持我们继续开发%2。</translation>
+ </message>
+ <message>
+ <source>Report bugs and send in your ideas to %1</source>
+ <translation>软件错误和建议请发给 %1</translation>
+ </message>
+ <message>
+ <source>Icon designed by %1.</source>
+ <translation>图标设计:%1。</translation>
+ </message>
+ <message>
+ <source>Compact mode contributed by %1.</source>
+ <translation>简洁模式贡献者:%1。</translation>
+ </message>
+ <message>
+ <source>HTTP proxy support contributed by %1.</source>
+ <translation>HTTP代理支持贡献者:%1。</translation>
+ </message>
+ <message>
+ <source>Translated by %1</source>
+ <translation>翻译:%1</translation>
+ </message>
+ <message>
+ <source>Released under the <a href='%1'>GNU General Public License</a></source>
+ <translation>本软件遵循<a href='%1'>GNU通用公共许可证</a>予以发布</translation>
+ </message>
+ <message>
+ <source>&Close</source>
+ <translation>关闭(&C)</translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translation>关于</translation>
+ </message>
+ <message>
+ <source>What you always wanted to know about %1 and never dared to ask</source>
+ <translation>您对 %s 的期望都有什么,还请不吝赐教</translation>
+ </message>
+</context>
+<context>
+ <name>ClearButton</name>
+ <message>
+ <source>Clear</source>
+ <translation>清除</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>bytes/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>KB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>MB/sec</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%4 %5 remaining</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadManager</name>
+ <message numerus="yes">
+ <source>%n Download(s)</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It can only download videos shorter than %1 minutes so you can test the download functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadSettings</name>
+ <message>
+ <source>Change location...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Choose the download location</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download location changed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current downloads will still go in the previous location.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DownloadView</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GlobalShortcuts</name>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Play/Pause</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop playing after current track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous track</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Increase volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decrease volume</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek forward</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Seek backward</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ListModel</name>
+ <message>
+ <source>Searching...</source>
+ <translation>搜索中……</translation>
+ </message>
+ <message>
+ <source>Show %1 More</source>
+ <translation>再多显示 %1</translation>
+ </message>
+ <message>
+ <source>No videos</source>
+ <translation>没有视频</translation>
+ </message>
+ <message>
+ <source>No more videos</source>
+ <translation>没有更多视频</translation>
+ </message>
+</context>
+<context>
+ <name>LoadingWidget</name>
+ <message>
+ <source>Error</source>
+ <translation>错误</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>&Stop</source>
+ <translation>停止(&S)</translation>
+ </message>
+ <message>
+ <source>Stop playback and go back to the search view</source>
+ <translation>停止回放并返回搜索视图</translation>
+ </message>
+ <message>
+ <source>S&kip</source>
+ <translation>跳过(&k)</translation>
+ </message>
+ <message>
+ <source>Skip to the next video</source>
+ <translation>跳至下一视频</translation>
+ </message>
+ <message>
+ <source>&Pause</source>
+ <translation>暂停(&P)</translation>
+ </message>
+ <message>
+ <source>Pause playback</source>
+ <translation>暂停回放</translation>
+ </message>
+ <message>
+ <source>&Full Screen</source>
+ <translation>全屏(&F)</translation>
+ </message>
+ <message>
+ <source>Go full screen</source>
+ <translation>全屏播放</translation>
+ </message>
+ <message>
+ <source>&Compact mode</source>
+ <translation>简洁模式(&C)</translation>
+ </message>
+ <message>
+ <source>Hide the playlist and the toolbar</source>
+ <translation>隐藏播放列表和工具栏</translation>
+ </message>
+ <message>
+ <source>Open the &YouTube page</source>
+ <translation>打开YouTube页面(&Y)</translation>
+ </message>
+ <message>
+ <source>Go to the YouTube video page and pause playback</source>
+ <translation>打开YouTube视频页面并暂停回放</translation>
+ </message>
+ <message>
+ <source>Copy the YouTube &link</source>
+ <translation>复制YouTube链接(&l)</translation>
+ </message>
+ <message>
+ <source>Copy the current video YouTube link to the clipboard</source>
+ <translation>复制当前视频的YouTube链接到剪贴板中</translation>
+ </message>
+ <message>
+ <source>Copy the video stream &URL</source>
+ <translation>复制视频流的URL链接(&U)</translation>
+ </message>
+ <message>
+ <source>Copy the current video stream URL to the clipboard</source>
+ <translation>复制当前视频流的URL到剪贴板中</translation>
+ </message>
+ <message>
+ <source>&Remove</source>
+ <translation>移除(&R)</translation>
+ </message>
+ <message>
+ <source>Remove the selected videos from the playlist</source>
+ <translation>从播放列表中移除选定的视频</translation>
+ </message>
+ <message>
+ <source>Move &Up</source>
+ <translation>上移(&U)</translation>
+ </message>
+ <message>
+ <source>Move up the selected videos in the playlist</source>
+ <translation>在播放列表中向上移动选定的视频</translation>
+ </message>
+ <message>
+ <source>Move &Down</source>
+ <translation>下移(&D)</translation>
+ </message>
+ <message>
+ <source>Move down the selected videos in the playlist</source>
+ <translation>在播放列表中向下移动选定的视频</translation>
+ </message>
+ <message>
+ <source>&Clear recent keywords</source>
+ <translation>清除最近使用的关键字词(&C)</translation>
+ </message>
+ <message>
+ <source>Clear the search history. Cannot be undone.</source>
+ <translation>清除搜索历史。注意:清除的历史不可恢复。</translation>
+ </message>
+ <message>
+ <source>&Quit</source>
+ <translation>退出(&Q)</translation>
+ </message>
+ <message>
+ <source>Ctrl+Q</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Bye</source>
+ <translation>再会</translation>
+ </message>
+ <message>
+ <source>&Website</source>
+ <translation>网站(&W)</translation>
+ </message>
+ <message>
+ <source>%1 on the Web</source>
+ <translation>%1在网站上</translation>
+ </message>
+ <message>
+ <source>Make a &donation</source>
+ <translation>敬请捐赠(&d)</translation>
+ </message>
+ <message>
+ <source>Please support the continued development of %1</source>
+ <translation>请您支持 %1 的可持续发展。</translation>
+ </message>
+ <message>
+ <source>&About</source>
+ <translation>关于(&A)</translation>
+ </message>
+ <message>
+ <source>Info about %1</source>
+ <translation>关于 %1 的信息</translation>
+ </message>
+ <message>
+ <source>Search</source>
+ <translation>搜索</translation>
+ </message>
+ <message>
+ <source>Mute volume</source>
+ <translation>静音</translation>
+ </message>
+ <message>
+ <source>Ctrl+M</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>&Application</source>
+ <translation>应用程序(&A)</translation>
+ </message>
+ <message>
+ <source>&Playlist</source>
+ <translation>播放列表(&P)</translation>
+ </message>
+ <message>
+ <source>&Video</source>
+ <translation>视频(&V)</translation>
+ </message>
+ <message>
+ <source>&Help</source>
+ <translation>帮助(&H)</translation>
+ </message>
+ <message>
+ <source>Press %1 to raise the volume, %2 to lower it</source>
+ <translation>按住 %1 提高音量,%2 降低音量</translation>
+ </message>
+ <message>
+ <source>Opening %1</source>
+ <translation>正在打开 %1</translation>
+ </message>
+ <message>
+ <source>Fatal error: %1</source>
+ <translation>严重错误:%1</translation>
+ </message>
+ <message>
+ <source>Error: %1</source>
+ <translation>错误:%1</translation>
+ </message>
+ <message>
+ <source>&Play</source>
+ <translation>播放(&P)</translation>
+ </message>
+ <message>
+ <source>Resume playback</source>
+ <translation>继续回放</translation>
+ </message>
+ <message>
+ <source>Exit &Full Screen</source>
+ <translation>退出全屏(&F)</translation>
+ </message>
+ <message>
+ <source>Remaining time: %1</source>
+ <translation>剩余时间:%1</translation>
+ </message>
+ <message>
+ <source>Volume at %1%</source>
+ <translation>音量:%1%</translation>
+ </message>
+ <message>
+ <source>Volume is muted</source>
+ <translation>已设为静音</translation>
+ </message>
+ <message>
+ <source>Volume is unmuted</source>
+ <translation>静音已解除</translation>
+ </message>
+ <message>
+ <source>Maximum video definition set to %1</source>
+ <translation>最大视频定义设置为%1</translation>
+ </message>
+ <message>
+ <source>Your privacy is now safe</source>
+ <translation>您的隐私已受保护</translation>
+ </message>
+ <message>
+ <source>&Downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show details about video downloads</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&Download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download the current video</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Do you want to exit %1 with a download in progress?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>If you close %1 now, this download will be cancelled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close and cancel download</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Wait for download to finish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloads complete</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MediaView</name>
+ <message>
+ <source>Most relevant</source>
+ <translation>相关最多</translation>
+ </message>
+ <message>
+ <source>Most recent</source>
+ <translation>最近</translation>
+ </message>
+ <message>
+ <source>Most viewed</source>
+ <translation>观看最多</translation>
+ </message>
+ <message>
+ <source>You can now paste the YouTube link into another application</source>
+ <translation>您现在可以把YouTube的链接粘贴到其他应用了</translation>
+ </message>
+ <message>
+ <source>You can now paste the video stream URL into another application</source>
+ <translation>您现在可以把视频流的链接粘贴到其他应用了</translation>
+ </message>
+ <message>
+ <source>The link will be valid only for a limited time.</source>
+ <translation>此链接仅能保持短时间的有效性。</translation>
+ </message>
+ <message>
+ <source>You're watching "%1"</source>
+ <translation>您正在观看“%1”</translation>
+ </message>
+ <message>
+ <source>This is just the demo version of %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It allows you to test the application and see if it works for you.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Get the full version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Downloading %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>NetworkAccess</name>
+ <message>
+ <source>Network error: %1</source>
+ <translation>网络错误:%1</translation>
+ </message>
+</context>
+<context>
+ <name>PrettyItemDelegate</name>
+ <message>
+ <source>%1 views</source>
+ <translation>%1 人次观看</translation>
+ </message>
+ <message>
+ <source>%1 of %2 (%3) ? %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preparing</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Completed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stopped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stop downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show in %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Open parent folder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restart downloading</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SearchLineEdit</name>
+ <message>
+ <source>Search</source>
+ <translation>搜索</translation>
+ </message>
+</context>
+<context>
+ <name>SearchView</name>
+ <message>
+ <source>Welcome to <a href='%1'>%2</a>,</source>
+ <translation>欢迎访问<a href='%1'>%2</a>,</translation>
+ </message>
+ <message>
+ <source>Enter a keyword to start watching videos.</source>
+ <translation>请输入一个关键字词以开始观看视频。</translation>
+ </message>
+ <message>
+ <source>Watch</source>
+ <translation>观看</translation>
+ </message>
+ <message>
+ <source>Recent keywords</source>
+ <translation>最新关键字词</translation>
+ </message>
+ <message>
+ <source>A new version of %1 is available. Please <a href='%2'>update to version %3</a></source>
+ <translation>%1已有新版本。请<a href='%2'>更新到版本%3</a></translation>
+ </message>
+ <message>
+ <source>Make yourself comfortable</source>
+ <translation>请您安逸享受</translation>
+ </message>
+</context>
+<context>
+ <name>Video</name>
+ <message>
+ <source>Network error: %1 for %2</source>
+ <translation>网络错误:%1。可能原因:%2</translation>
+ </message>
+</context>
+</TS>
-INCLUDEPATH += /usr/include/phonon
CONFIG += release
TEMPLATE = app
+VERSION = 1.2
+DEFINES += APP_VERSION="$$VERSION"
+INCLUDEPATH += /usr/include/phonon
# TODO Saner string behaviour
# DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII QT_STRICT_ITERATORS
TARGET = minitube
-mac {
- TARGET = Minitube
- QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.4
-}
QT += network \
xml \
phonon
include(src/qtsingleapplication/qtsingleapplication.pri)
-include(src/thlibrary/thlibrary.pri)
HEADERS += src/MainWindow.h \
src/SearchView.h \
src/MediaView.h \
src/searchlineedit.h \
src/urllineedit.h \
src/spacer.h \
- src/Constants.h \
+ src/constants.h \
src/iconloader/qticonloader.h \
src/faderwidget/FaderWidget.h \
src/ListModel.h \
src/videoareawidget.h \
src/googlesuggest.h \
src/videowidget.h \
- src/flickcharm.h \
- src/videodefinition.h
+ src/videodefinition.h \
+ src/fontutils.h \
+ src/thlibrary/thblackbar.h \
+ src/globalshortcuts.h \
+ src/globalshortcutbackend.h \
+ src/downloadmanager.h \
+ src/downloaditem.h \
+ src/downloadview.h \
+ src/downloadmodel.h \
+ src/downloadlistview.h \
+ src/downloadsettings.h
SOURCES += src/main.cpp \
src/MainWindow.cpp \
src/SearchView.cpp \
src/videoareawidget.cpp \
src/googlesuggest.cpp \
src/videowidget.cpp \
- src/flickcharm.cpp \
- src/videodefinition.cpp
+ src/videodefinition.cpp \
+ src/constants.cpp \
+ src/fontutils.cpp \
+ src/thlibrary/thblackbar.cpp \
+ src/globalshortcuts.cpp \
+ src/globalshortcutbackend.cpp \
+ src/downloadmanager.cpp \
+ src/downloaditem.cpp \
+ src/downloadview.cpp \
+ src/downloadmodel.cpp \
+ src/downloadlistview.cpp \
+ src/downloadsettings.cpp
RESOURCES += resources.qrc
DESTDIR = build/target/
OBJECTS_DIR = build/obj/
# deploy
DISTFILES += CHANGES \
COPYING
-mac {
- CONFIG += x86 \
- ppc
- QMAKE_INFO_PLIST = Info.plist
- ICON = minitube.icns
-}
-unix {
+unix:!mac {
+ QT += dbus
+ HEADERS += src/gnomeglobalshortcutbackend.h
+ SOURCES += src/gnomeglobalshortcutbackend.cpp
isEmpty(PREFIX):PREFIX = /usr
BINDIR = $$PREFIX/bin
INSTALLS += target
desktop \
iconsvg \
icon16 \
+ icon22 \
icon32 \
icon48 \
icon64 \
icon128 \
- icon256
+ icon256 \
+ icon512
translations.path = $$PKGDATADIR
translations.files += $$DESTDIR/locale
desktop.path = $$DATADIR/applications
iconsvg.files += data/minitube.svg
icon16.path = $$DATADIR/icons/hicolor/16x16/apps
icon16.files += data/16x16/minitube.png
+ icon22.path = $$DATADIR/icons/hicolor/22x22/apps
+ icon22.files += data/22x22/minitube.png
icon32.path = $$DATADIR/icons/hicolor/32x32/apps
icon32.files += data/32x32/minitube.png
icon48.path = $$DATADIR/icons/hicolor/48x48/apps
icon128.files += data/128x128/minitube.png
icon256.path = $$DATADIR/icons/hicolor/256x256/apps
icon256.files += data/256x256/minitube.png
+ icon256.path = $$DATADIR/icons/hicolor/512x512/apps
+ icon256.files += data/256x256/minitube.png
+ icon512.path = $$DATADIR/icons/hicolor/512x512/apps
+ icon512.files += data/512x512/minitube.png
}
-win32:RC_FILE = minitube.rc
+mac|win32:include(local/local.pri)
+++ /dev/null
-IDI_ICON1 ICON DISCARDABLE "minitube.ico"
-
<RCC>
<qresource prefix="/">
<file>images/app.png</file>
- <file>images/view-fullscreen.png</file>
- <file>images/media-playback-pause.png</file>
- <file>images/media-playback-start.png</file>
- <file>images/media-playback-stop.png</file>
- <file>images/media-skip-forward.png</file>
</qresource>
</RCC>
#include "AboutView.h"
-#include "Constants.h"
+#include "constants.h"
AboutView::AboutView(QWidget *parent) : QWidget(parent) {
QBoxLayout *aboutlayout = new QHBoxLayout(this);
aboutlayout->setAlignment(Qt::AlignCenter);
+ aboutlayout->setMargin(30);
aboutlayout->setSpacing(30);
QLabel *logo = new QLabel(this);
layout->setSpacing(30);
aboutlayout->addLayout(layout);
- QString info = "<h1>" + QString(Constants::APP_NAME) + "</h1>"
+ QString info = "<html><style>a { color: palette(text); }</style><body><h1>" + QString(Constants::APP_NAME) + "</h1>"
"<p>" + tr("There's life outside the browser!") + "</p>"
"<p>" + tr("Version %1").arg(Constants::VERSION) + "</p>"
+ QString("<p><a href=\"%1/\">%1</a></p>").arg(Constants::WEBSITE) +
-
+#if !defined(APP_MAC) && !defined(Q_WS_WIN)
"<p>" + tr("%1 is Free Software but its development takes precious time.").arg(Constants::APP_NAME) + "<br/>"
+ tr("Please <a href='%1'>donate</a> to support the continued development of %2.")
.arg(QString(Constants::WEBSITE).append("#donate"), Constants::APP_NAME) + "</p>"
-
+#endif
"<p>" + tr("Report bugs and send in your ideas to %1")
.arg(QString("<a href=\"mailto:%1\">%1</a>").arg(Constants::EMAIL)) + "</p>"
"Yaron Shahrabani (he_IL), "
"Oleksandr Korneta (uk), "
"Inga Muste (lat), "
- "Srecko Belaic (hr_HR), "
+ "Srecko Belaic & Zvonimir Đeri (hr_HR), "
"Miguel Anxo Bouzada (es, gl), "
"Guillaume Betous & Mathieu Dimanche (fr_FR), "
"Krisztián Horváth (hu_HU), "
"Sderawi (ar), "
"Daniel Rodrigues (pt_PT), "
"Jesse Jaara (fi_FI), "
- "Tsvyatko Makazchiev (bg_BG)"
+ "Tsvyatko Makazchiev (bg_BG), "
+ "Changtai Liang (zh_CN)"
) + "</p>"
-
+#if !defined(APP_MAC) && !defined(Q_WS_WIN)
"<p>" + tr("Released under the <a href='%1'>GNU General Public License</a>")
.arg("http://www.gnu.org/licenses/gpl.html") + "</p>"
-
- "<p>© 2009-2010 " + Constants::ORG_NAME + "</p>";
+#endif
+ "<p>© 2009-2010 " + Constants::ORG_NAME + "</p>"
+ "</body></html>";;
QLabel *infoLabel = new QLabel(info, this);
infoLabel->setOpenExternalLinks(true);
infoLabel->setWordWrap(true);
#include <QtGui>
#include "View.h"
-#include "Constants.h"
+#include "constants.h"
class AboutView : public QWidget, public View {
+++ /dev/null
-#ifndef CONSTANTS_H
-#define CONSTANTS_H
-
-#include <QString>
-
-namespace Constants {
- static const char *VERSION = "1.0";
- static const char *APP_NAME = "Minitube";
- static const char *ORG_NAME = "Flavio Tordini";
- static const char *ORG_DOMAIN = "flavio.tordini.org";
- static const char *WEBSITE = "http://flavio.tordini.org/minitube";
- static const char *EMAIL = "flavio.tordini@gmail.com";
- static const QString USER_AGENT = QString(APP_NAME) + " " + VERSION + " (" + WEBSITE + ")";
-}
-
-#endif
case ActiveTrackRole:
return video == m_activeVideo;
case Qt::DisplayRole:
- case Qt::StatusTipRole:
return video->title();
- /*
- case Qt::ToolTipRole:
-
- QString tooltip;
- if (!element.firstChildElement().text().isEmpty()) {
- tooltip.append(QString("<b>").append(element.firstChildElement().text()).append("</b><br/>"));
- }
- if (!fromDate.isEmpty()) {
- tooltip.append("<i>Pubblicato il</i> ").append(fromDate);
- }
- if (!toDate.isEmpty()) {
- tooltip.append("<br/><i>Scadenza</i>: ").append(toDate);
- }
- tooltip.append("<br/><i>Tipo</i>: ").append(typeName)
- .append("<br/><i>Id</i>: ").appen QFont boldFont;
- boldFont.setBold(true);d(id);
- return tooltip;
- */
-
- // case StreamUrlRole:
- // return video->streamUrl();
}
return QVariant();
m_activeRow = row;
m_activeVideo = videoAt(row);
- // setStateOfRow( row, Item::Played );
-
int oldactiverow = m_activeRow;
if ( rowExists( oldactiverow ) )
QList<Video*> originalList(videos);
QList<Video*> delitems;
foreach (QModelIndex index, indexes) {
+ if (index.row() >= originalList.size()) continue;
Video* video = originalList.at(index.row());
int idx = videos.indexOf(video);
if (idx != -1) {
}
void ListModel::move(QModelIndexList &indexes, bool up) {
-
QList<Video*> movedVideos;
foreach (QModelIndex index, indexes) {
int row = index.row();
+ if (row >= videos.size()) continue;
// qDebug() << "index row" << row;
Video *video = videoAt(row);
movedVideos << video;
}
- int counter = 1;
+ int end=up ? -1 : rowCount()-1, mod=up ? -1 : 1;
foreach (Video *video, movedVideos) {
int row = rowForVideo(video);
+ if (row+mod==end) { end=row; continue; }
// qDebug() << "video row" << row;
removeRows(row, 1, QModelIndex());
videos.insert(row, video);
endInsertRows();
- counter++;
}
emit needSelectionFor(movedVideos);
enum DataRoles {
ItemTypeRole = Qt::UserRole,
VideoRole,
- ActiveTrackRole
+ ActiveTrackRole,
+ DownloadItemRole,
+ HoveredItemRole,
+ DownloadButtonHoveredRole,
+ DownloadButtonPressedRole
};
enum ItemTypes {
#include "MainWindow.h"
#include "spacer.h"
-#include "Constants.h"
+#include "constants.h"
#include "iconloader/qticonloader.h"
#include "global.h"
#include "videodefinition.h"
+#include "fontutils.h"
+#include "globalshortcuts.h"
+#ifdef Q_WS_X11
+#include "gnomeglobalshortcutbackend.h"
+#endif
+#ifdef APP_MAC
+// #include "local/mac/mac_startup.h"
+#endif
+#include "downloadmanager.h"
MainWindow::MainWindow() :
+ aboutView(0),
+ downloadView(0),
mediaObject(0),
audioOutput(0),
- aboutView(0),
m_fullscreen(false) {
// views mechanism
history = new QStack<QWidget*>();
views = new QStackedWidget(this);
+ setCentralWidget(views);
// views
searchView = new SearchView(this);
views->addWidget(mediaView);
toolbarSearch = new SearchLineEdit(this);
- toolbarSearch->setFont(qApp->font());
toolbarSearch->setMinimumWidth(toolbarSearch->fontInfo().pixelSize()*15);
connect(toolbarSearch, SIGNAL(search(const QString&)), searchView, SLOT(watch(const QString&)));
// mediaView init stuff thats needs actions
mediaView->initialize();
- // restore window position
- readSettings();
-
- // cool toolbar on the Mac
- // this is too buggy to be enabled
- // setUnifiedTitleAndToolBarOnMac(true);
-
// event filter to block ugly toolbar tooltips
qApp->installEventFilter(this);
+ // restore window position
+ readSettings();
+
// show the initial view
showWidget(searchView);
- setCentralWidget(views);
+ // Global shortcuts
+ GlobalShortcuts &shortcuts = GlobalShortcuts::instance();
+#ifdef Q_WS_X11
+ if (GnomeGlobalShortcutBackend::IsGsdAvailable())
+ shortcuts.setBackend(new GnomeGlobalShortcutBackend(&shortcuts));
+#endif
+#ifdef APP_MAC
+ // mac::MacSetup();
+#endif
+ connect(&shortcuts, SIGNAL(PlayPause()), pauseAct, SLOT(trigger()));
+ connect(&shortcuts, SIGNAL(Stop()), this, SLOT(stop()));
+ connect(&shortcuts, SIGNAL(Next()), skipAct, SLOT(trigger()));
+
+ connect(DownloadManager::instance(), SIGNAL(statusMessageChanged(QString)),
+ SLOT(updateDownloadMessage(QString)));
+ connect(DownloadManager::instance(), SIGNAL(finished()),
+ SLOT(downloadsFinished()));
}
MainWindow::~MainWindow() {
QMap<QString, QAction*> *actions = The::globalActions();
- stopAct = new QAction(QtIconLoader::icon("media-playback-stop", QIcon(":/images/media-playback-stop.png")), tr("&Stop"), this);
+ stopAct = new QAction(QtIconLoader::icon("media-playback-stop"), tr("&Stop"), this);
stopAct->setStatusTip(tr("Stop playback and go back to the search view"));
stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::Key_MediaStop));
+ stopAct->setEnabled(false);
actions->insert("stop", stopAct);
connect(stopAct, SIGNAL(triggered()), this, SLOT(stop()));
- skipAct = new QAction(QtIconLoader::icon("media-skip-forward", QIcon(":/images/media-skip-forward.png")), tr("S&kip"), this);
+ skipAct = new QAction(QtIconLoader::icon("media-skip-forward"), tr("S&kip"), this);
skipAct->setStatusTip(tr("Skip to the next video"));
skipAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::CTRL + Qt::Key_Right) << QKeySequence(Qt::Key_MediaNext));
skipAct->setEnabled(false);
actions->insert("skip", skipAct);
connect(skipAct, SIGNAL(triggered()), mediaView, SLOT(skip()));
- pauseAct = new QAction(QtIconLoader::icon("media-playback-pause", QIcon(":/images/media-playback-pause.png")), tr("&Pause"), this);
+ pauseAct = new QAction(QtIconLoader::icon("media-playback-pause"), tr("&Pause"), this);
pauseAct->setStatusTip(tr("Pause playback"));
pauseAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Space) << QKeySequence(Qt::Key_MediaPlay));
pauseAct->setEnabled(false);
actions->insert("pause", pauseAct);
connect(pauseAct, SIGNAL(triggered()), mediaView, SLOT(pause()));
- fullscreenAct = new QAction(QtIconLoader::icon("view-fullscreen", QIcon(":/images/view-fullscreen.png")), tr("&Full Screen"), this);
+ fullscreenAct = new QAction(QtIconLoader::icon("view-fullscreen"), tr("&Full Screen"), this);
fullscreenAct->setStatusTip(tr("Go full screen"));
fullscreenAct->setShortcut(QKeySequence(Qt::ALT + Qt::Key_Return));
fullscreenAct->setShortcutContext(Qt::ApplicationShortcut);
+#if QT_VERSION >= 0x040600
+ fullscreenAct->setPriority(QAction::LowPriority);
+#endif
actions->insert("fullscreen", fullscreenAct);
connect(fullscreenAct, SIGNAL(triggered()), this, SLOT(fullscreen()));
quitAct->setShortcuts(QList<QKeySequence>() << QKeySequence(tr("Ctrl+Q")) << QKeySequence(Qt::CTRL + Qt::Key_W));
quitAct->setStatusTip(tr("Bye"));
actions->insert("quit", quitAct);
- connect(quitAct, SIGNAL(triggered()), this, SLOT(quit()));
+ connect(quitAct, SIGNAL(triggered()), this, SLOT(close()));
siteAct = new QAction(tr("&Website"), this);
siteAct->setShortcut(QKeySequence::HelpContents);
addAction(volumeDownAct);
volumeMuteAct = new QAction(this);
+ volumeMuteAct->setIcon(QtIconLoader::icon("audio-volume-high"));
volumeMuteAct->setStatusTip(tr("Mute volume"));
- volumeMuteAct->setShortcuts(QList<QKeySequence>() << QKeySequence(tr("Ctrl+M")) << QKeySequence(Qt::Key_VolumeMute));
+ volumeMuteAct->setShortcuts(QList<QKeySequence>()
+ << QKeySequence(tr("Ctrl+M"))
+ << QKeySequence(Qt::Key_VolumeMute));
actions->insert("volume-mute", volumeMuteAct);
- connect(volumeMuteAct, SIGNAL(triggered()), this, SLOT(volumeMute()));
+ connect(volumeMuteAct, SIGNAL(triggered()), SLOT(volumeMute()));
addAction(volumeMuteAct);
QAction *definitionAct = new QAction(this);
+ definitionAct->setIcon(QtIconLoader::icon("video-display"));
definitionAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::CTRL + Qt::Key_D));
/*
QMenu *definitionMenu = new QMenu(this);
connect(definitionAct, SIGNAL(triggered()), SLOT(toggleDefinitionMode()));
addAction(definitionAct);
+ QAction *action;
+
+ /*
+ action = new QAction(tr("&Autoplay"), this);
+ action->setStatusTip(tr("Automatically start playing videos"));
+ action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_P));
+ action->setCheckable(true);
+ connect(action, SIGNAL(toggled(bool)), SLOT(setAutoplay(bool)));
+ actions->insert("autoplay", action);
+ */
+
+ action = new QAction(tr("&Downloads"), this);
+ action->setStatusTip(tr("Show details about video downloads"));
+ action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_J));
+ action->setCheckable(true);
+ action->setIcon(QtIconLoader::icon("go-down"));
+ action->setVisible(false);
+ connect(action, SIGNAL(toggled(bool)), SLOT(toggleDownloads(bool)));
+ actions->insert("downloads", action);
+
+ action = new QAction(tr("&Download"), this);
+ action->setStatusTip(tr("Download the current video"));
+ action->setShortcut(QKeySequence::Save);
+ action->setIcon(QtIconLoader::icon("go-down"));
+ action->setEnabled(false);
+#if QT_VERSION >= 0x040600
+ action->setPriority(QAction::LowPriority);
+#endif
+ connect(action, SIGNAL(triggered()), mediaView, SLOT(downloadVideo()));
+ actions->insert("download", action);
+
// common action properties
foreach (QAction *action, actions->values()) {
fileMenu = menuBar()->addMenu(tr("&Application"));
// menus->insert("file", fileMenu);
fileMenu->addAction(clearAct);
-#ifndef Q_WS_MAC
+#ifndef APP_MAC
fileMenu->addSeparator();
#endif
fileMenu->addAction(quitAct);
viewMenu->addAction(pauseAct);
viewMenu->addAction(skipAct);
viewMenu->addSeparator();
+ viewMenu->addAction(The::globalActions()->value("download"));
+ viewMenu->addSeparator();
viewMenu->addAction(webPageAct);
viewMenu->addAction(copyPageAct);
viewMenu->addAction(copyLinkAct);
viewMenu->addSeparator();
viewMenu->addAction(compactViewAct);
viewMenu->addAction(fullscreenAct);
+#ifdef APP_MAC
+ extern void qt_mac_set_dock_menu(QMenu *);
+ qt_mac_set_dock_menu(viewMenu);
+#endif
helpMenu = menuBar()->addMenu(tr("&Help"));
helpMenu->addAction(siteAct);
void MainWindow::createToolBars() {
+ setUnifiedTitleAndToolBarOnMac(true);
+
mainToolBar = new QToolBar(this);
-#if QT_VERSION < 0x040600 || defined(Q_WS_MAC)
- mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+#if QT_VERSION < 0x040600 | defined(APP_MAC)
+ mainToolBar->setToolButtonStyle(Qt::ToolButtonIconOnly);
#else
mainToolBar->setToolButtonStyle(Qt::ToolButtonFollowStyle);
#endif
mainToolBar->setFloatable(false);
mainToolBar->setMovable(false);
- QFont smallerFont;
- smallerFont.setPointSize(smallerFont.pointSize()*.85);
- QFontInfo fontInfo(smallerFont);
- if (fontInfo.pixelSize() < 10) {
- smallerFont.setPixelSize(10);
- }
- mainToolBar->setFont(smallerFont);
-
-#ifdef Q_WS_MAC
+#ifdef APP_MAC
mainToolBar->setIconSize(QSize(32, 32));
#endif
mainToolBar->addAction(pauseAct);
mainToolBar->addAction(skipAct);
mainToolBar->addAction(fullscreenAct);
+ mainToolBar->addAction(The::globalActions()->value("download"));
+
+ mainToolBar->addWidget(new Spacer());
+
+ QFont smallerFont = FontUtils::small();
+ currentTime = new QLabel(mainToolBar);
+ currentTime->setFont(smallerFont);
+ mainToolBar->addWidget(currentTime);
+
+ mainToolBar->addWidget(new Spacer());
seekSlider = new Phonon::SeekSlider(this);
seekSlider->setIconVisible(false);
- Spacer *seekSliderSpacer = new Spacer(mainToolBar, seekSlider);
- seekSliderSpacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- mainToolBar->addWidget(seekSliderSpacer);
+ seekSlider->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
+ mainToolBar->addWidget(seekSlider);
+
+ mainToolBar->addWidget(new Spacer());
+
+ totalTime = new QLabel(mainToolBar);
+ totalTime->setFont(smallerFont);
+ mainToolBar->addWidget(totalTime);
+
+ mainToolBar->addWidget(new Spacer());
+
+ mainToolBar->addAction(volumeMuteAct);
volumeSlider = new Phonon::VolumeSlider(this);
+ volumeSlider->setMuteVisible(false);
// qDebug() << volumeSlider->children();
// status tip for the volume slider
QSlider* volumeQSlider = volumeSlider->findChild<QSlider*>();
if (volumeQSlider)
volumeQSlider->setStatusTip(tr("Press %1 to raise the volume, %2 to lower it").arg(
volumeUpAct->shortcut().toString(QKeySequence::NativeText), volumeDownAct->shortcut().toString(QKeySequence::NativeText)));
- // status tip for the mute button
- QToolButton* muteToolButton = volumeSlider->findChild<QToolButton*>();
- if (muteToolButton)
- muteToolButton->setStatusTip(volumeMuteAct->statusTip());
// this makes the volume slider smaller
volumeSlider->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
- mainToolBar->addWidget(new Spacer(mainToolBar, volumeSlider));
+ mainToolBar->addWidget(volumeSlider);
+
+ mainToolBar->addWidget(new Spacer());
toolbarSearch->setStatusTip(searchFocusAct->statusTip());
- mainToolBar->addWidget(new Spacer(mainToolBar, toolbarSearch));
+ mainToolBar->addWidget(toolbarSearch);
+
+ mainToolBar->addWidget(new Spacer());
addToolBar(mainToolBar);
}
// also remove excessive spacing
statusBar()->setStyleSheet("::item{border:0 solid} QToolBar {padding:0;spacing:0;margin:0}");
- currentTime = new QLabel(this);
- statusBar()->addPermanentWidget(currentTime);
-
- totalTime = new QLabel(this);
- statusBar()->addPermanentWidget(totalTime);
-
QToolBar *toolBar = new QToolBar(this);
- toolBar->setToolButtonStyle(Qt::ToolButtonTextOnly);
+ toolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+ toolBar->setIconSize(QSize(16, 16));
+ toolBar->addAction(The::globalActions()->value("downloads"));
+ // toolBar->addAction(The::globalActions()->value("autoplay"));
toolBar->addAction(The::globalActions()->value("definition"));
statusBar()->addPermanentWidget(toolBar);
void MainWindow::readSettings() {
QSettings settings;
restoreGeometry(settings.value("geometry").toByteArray());
+#ifdef APP_MAC
+ if (!isMaximized())
+ move(x(), y() + mainToolBar->height() + 8);
+#endif
setDefinitionMode(settings.value("definition", VideoDefinition::getDefinitionNames().first()).toString());
audioOutput->setVolume(settings.value("volume", 1).toDouble());
audioOutput->setMuted(settings.value("volumeMute").toBool());
}
void MainWindow::writeSettings() {
- // do not save geometry when in full screen
- if (m_fullscreen)
- return;
+
QSettings settings;
- settings.setValue("geometry", saveGeometry());
+
+ // do not save geometry when in full screen
+ if (!m_fullscreen) {
+ settings.setValue("geometry", saveGeometry());
+ }
+
settings.setValue("volume", audioOutput->volume());
settings.setValue("volumeMute", audioOutput->isMuted());
mediaView->saveSplitterState();
copyPageAct->setEnabled(widget == mediaView);
copyLinkAct->setEnabled(widget == mediaView);
aboutAct->setEnabled(widget != aboutView);
+ The::globalActions()->value("download")->setEnabled(widget == mediaView);
+ The::globalActions()->value("downloads")->setChecked(widget == downloadView);
// toolbar only for the mediaView
- mainToolBar->setVisible(widget == mediaView && !compactViewAct->isChecked());
+ /* mainToolBar->setVisible(
+ (widget == mediaView && !compactViewAct->isChecked())
+ || widget == downloadView
+ ); */
setUpdatesEnabled(true);
QWidget *oldWidget = views->currentWidget();
views->setCurrentWidget(widget);
-#ifdef Q_WS_MAC
+#ifdef APP_MAC
// crossfade only on OSX
// where we can be sure of video performance
fadeInWidget(oldWidget, widget);
}
void MainWindow::closeEvent(QCloseEvent *event) {
+ if (DownloadManager::instance()->activeItems() > 0) {
+ QMessageBox msgBox;
+ msgBox.setIconPixmap(QPixmap(":/images/app.png").scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation));
+ msgBox.setText(tr("Do you want to exit %1 with a download in progress?").arg(Constants::APP_NAME));
+ msgBox.setInformativeText(tr("If you close %1 now, this download will be cancelled.").arg(Constants::APP_NAME));
+ msgBox.setModal(true);
+
+ msgBox.addButton(tr("Close and cancel download"), QMessageBox::RejectRole);
+ QPushButton *waitButton = msgBox.addButton(tr("Wait for download to finish"), QMessageBox::ActionRole);
+
+ msgBox.exec();
+
+ if (msgBox.clickedButton() == waitButton) {
+ event->ignore();
+ return;
+ }
+
+ }
quit();
QWidget::closeEvent(event);
}
-/*
-void MainWindow::showSettings() {
- if (!settingsView) {
- settingsView = new SettingsView(this);
- views->addWidget(settingsView);
- }
- showWidget(settingsView);
-}*/
-
void MainWindow::showSearch() {
showWidget(searchView);
currentTime->clear();
case Phonon::PlayingState:
pauseAct->setEnabled(true);
- pauseAct->setIcon(QtIconLoader::icon("media-playback-pause", QIcon(":/images/media-playback-pause.png")));
+ pauseAct->setIcon(QtIconLoader::icon("media-playback-pause"));
pauseAct->setText(tr("&Pause"));
pauseAct->setStatusTip(tr("Pause playback") + " (" + pauseAct->shortcut().toString(QKeySequence::NativeText) + ")");
skipAct->setEnabled(true);
+ // stopAct->setEnabled(true);
break;
case Phonon::StoppedState:
pauseAct->setEnabled(false);
skipAct->setEnabled(false);
+ // stopAct->setEnabled(false);
break;
case Phonon::PausedState:
skipAct->setEnabled(true);
pauseAct->setEnabled(true);
- pauseAct->setIcon(QtIconLoader::icon("media-playback-start", QIcon(":/images/media-playback-start.png")));
+ pauseAct->setIcon(QtIconLoader::icon("media-playback-start"));
pauseAct->setText(tr("&Play"));
pauseAct->setStatusTip(tr("Resume playback") + " (" + pauseAct->shortcut().toString(QKeySequence::NativeText) + ")");
+ // stopAct->setEnabled(true);
break;
case Phonon::BufferingState:
pauseAct->setEnabled(false);
currentTime->clear();
totalTime->clear();
+ // stopAct->setEnabled(true);
break;
default:
void MainWindow::fullscreen() {
- setUpdatesEnabled(false);
-
// No compact view action when in full screen
compactViewAct->setVisible(m_fullscreen);
compactViewAct->setChecked(false);
// workaround: prevent focus on the search bar
// it steals the Space key needed for Play/Pause
- mainToolBar->setEnabled(m_fullscreen);
+ toolbarSearch->setEnabled(m_fullscreen);
// Hide anything but the video
mediaView->setPlaylistVisible(m_fullscreen);
statusBar()->setVisible(m_fullscreen);
-#ifndef Q_WS_MAC
+#ifndef APP_MAC
menuBar()->setVisible(m_fullscreen);
#endif
-#ifdef Q_WS_MAC
+#ifdef APP_MAC
// make the actions work when video is fullscreen (on the Mac)
QMap<QString, QAction*> *actions = The::globalActions();
foreach (QAction *action, actions->values()) {
#endif
if (m_fullscreen) {
- // use setShortucs instead of setShortcut
+
+ // Exit full screen
+
+ // use setShortcuts instead of setShortcut
// the latter seems not to work
fullscreenAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::ALT + Qt::Key_Return));
fullscreenAct->setText(tr("&Full Screen"));
stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::Key_MediaStop));
+#ifdef APP_MAC
+ setCentralWidget(views);
+ views->showNormal();
+ show();
+ mediaView->setFocus();
+#else
mainToolBar->show();
if (m_maximized) showMaximized();
else showNormal();
+#endif
- // Make sure the window has focus (Mac)
+ // Make sure the window has focus
activateWindow();
} else {
+
+ // Enter full screen
+
stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_MediaStop));
fullscreenAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::ALT + Qt::Key_Return));
fullscreenAct->setText(tr("Exit &Full Screen"));
// geometry won't be saved
writeSettings();
+#ifdef APP_MAC
+ hide();
+ views->setParent(0);
+ QTimer::singleShot(0, views, SLOT(showFullScreen()));
+#else
mainToolBar->hide();
showFullScreen();
+#endif
+
}
m_fullscreen = !m_fullscreen;
- setUpdatesEnabled(true);
}
void MainWindow::compactView(bool enable) {
- setUpdatesEnabled(false);
-
- mainToolBar->setVisible(!enable);
- mainToolBar->setEnabled(!enable);
mediaView->setPlaylistVisible(!enable);
statusBar()->setVisible(!enable);
-#ifndef Q_WS_MAC
+#ifndef APP_MAC
menuBar()->setVisible(!enable);
#endif
- // ensure focus does not end up to the search box
- // as it would steal the Space shortcut
- // toolbarSearch->setEnabled(!enable);
-
if (enable) {
- stopAct->setShortcut(QString(""));
- QList<QKeySequence> shortcuts;
- // for some reason it is important that ESC comes first
- shortcuts << QKeySequence(Qt::CTRL + Qt::Key_Return) << QKeySequence(Qt::Key_Escape);
- compactViewAct->setShortcuts(shortcuts);
+ stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_MediaStop));
+ compactViewAct->setShortcuts(
+ QList<QKeySequence>() << QKeySequence(Qt::CTRL + Qt::Key_Return)
+ << QKeySequence(Qt::Key_Escape));
+
+ // ensure focus does not end up to the search box
+ // as it would steal the Space shortcut
+ mediaView->setFocus();
} else {
- compactViewAct->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Return));
- stopAct->setShortcut(QKeySequence(Qt::Key_Escape));
+ compactViewAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::CTRL + Qt::Key_Return));
+ stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::Key_MediaStop));
}
- setUpdatesEnabled(true);
}
void MainWindow::searchFocus() {
totalTime->clear();
return;
}
- totalTime->setText("/ " + formatTime(time));
+ totalTime->setText(formatTime(time));
}
QString MainWindow::formatTime(qint64 time) {
}
void MainWindow::volumeMutedChanged(bool muted) {
- if (muted)
+ if (muted) {
+ volumeMuteAct->setIcon(QtIconLoader::icon("audio-volume-muted"));
statusBar()->showMessage(tr("Volume is muted"));
- else
+ } else {
+ volumeMuteAct->setIcon(QtIconLoader::icon("audio-volume-high"));
statusBar()->showMessage(tr("Volume is unmuted"));
+ }
}
void MainWindow::setDefinitionMode(QString definitionName) {
void MainWindow::showFullscreenToolbar(bool show) {
if (!m_fullscreen) return;
-
- if (show) {
- mainToolBar->show();
- } else {
- mainToolBar->hide();
- }
- mainToolBar->setEnabled(show);
+ mainToolBar->setVisible(show);
}
void MainWindow::showFullscreenPlaylist(bool show) {
searchView->updateRecentKeywords();
statusBar()->showMessage(tr("Your privacy is now safe"));
}
+
+/*
+ void MainWindow::setAutoplay(bool enabled) {
+ QSettings settings;
+ settings.setValue("autoplay", QVariant::fromValue(enabled));
+ }
+ */
+
+void MainWindow::updateDownloadMessage(QString message) {
+ The::globalActions()->value("downloads")->setText(message);
+}
+
+void MainWindow::downloadsFinished() {
+ The::globalActions()->value("downloads")->setText(tr("&Downloads"));
+ statusBar()->showMessage(tr("Downloads complete"));
+}
+
+void MainWindow::toggleDownloads(bool show) {
+
+ if (show) {
+ stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_MediaStop));
+ The::globalActions()->value("downloads")->setShortcuts(
+ QList<QKeySequence>() << QKeySequence(Qt::CTRL + Qt::Key_J)
+ << QKeySequence(Qt::Key_Escape));
+ } else {
+ The::globalActions()->value("downloads")->setShortcuts(
+ QList<QKeySequence>() << QKeySequence(Qt::CTRL + Qt::Key_J));
+ stopAct->setShortcuts(QList<QKeySequence>() << QKeySequence(Qt::Key_Escape) << QKeySequence(Qt::Key_MediaStop));
+ }
+
+ if (!downloadView) {
+ downloadView = new DownloadView(this);
+ views->addWidget(downloadView);
+ }
+ if (show) showWidget(downloadView);
+ else goBack();
+}
#include "SearchView.h"
#include "MediaView.h"
#include "AboutView.h"
+#include "downloadview.h"
class MainWindow : public QMainWindow {
void showFullscreenToolbar(bool show);
void showFullscreenPlaylist(bool show);
+ // void setAutoplay(bool enabled);
+ void updateDownloadMessage(QString);
+ void downloadsFinished();
+ void toggleDownloads(bool show);
+
private:
void initPhonon();
void createActions();
SearchView *searchView;
MediaView *mediaView;
QWidget *aboutView;
+ QWidget *downloadView;
// actions
QAction *addGadgetAct;
QAction *webPageAct;
QAction *copyPageAct;
QAction *copyLinkAct;
- QAction *downloadAct;
QAction *volumeUpAct;
QAction *volumeDownAct;
QAction *volumeMuteAct;
#include "networkaccess.h"
#include "videowidget.h"
#include "minisplitter.h"
-#include "flickcharm.h"
+#include "constants.h"
+#include "downloadmanager.h"
namespace The {
QMap<QString, QAction*>* globalActions();
videoAreaWidget = new VideoAreaWidget(this);
videoAreaWidget->setMinimumSize(320,240);
-#ifdef Q_WS_MAC
+#ifdef APP_MAC
// mouse autohide does not work on the Mac (no mouseMoveEvent)
videoWidget = new Phonon::VideoWidget(this);
#else
workaroundTimer->setInterval(3000);
connect(workaroundTimer, SIGNAL(timeout()), SLOT(timerPlay()));
- // TODO Enable this on touch devices
- // FlickCharm *flickCharm = new FlickCharm(this);
- // flickCharm->activateOn(listView);
-
-}
-
-MediaView::~MediaView() {
+#ifdef APP_DEMO
+ demoTimer = new QTimer(this);
+ demoTimer->setSingleShot(true);
+ demoTimer->setInterval(60000);
+ connect(demoTimer, SIGNAL(timeout()), SLOT(demoMessage()));
+#endif
}
void MediaView::search(SearchParams *searchParams) {
reallyStopped = false;
+#ifdef APP_DEMO
+ demoTimer->stop();
+#endif
+
videoAreaWidget->clear();
workaroundTimer->stop();
errorTimer->stop();
// but Phonon on Linux needs a little more help to start playback
if (!reallyStopped) mediaObject->play();
-#ifdef Q_WS_MAC
+#ifdef APP_MAC
// Workaround for Mac playback start problem
if (!timerPlayFlag) {
workaroundTimer->start();
QMainWindow* mainWindow = dynamic_cast<QMainWindow*>(window());
if (mainWindow) mainWindow->statusBar()->showMessage(video->title());
+ The::globalActions()->value("download")->setEnabled(DownloadManager::instance()->itemForVideo(video) == 0);
+
// see you in gotStreamUrl...
}
void MediaView::gotStreamUrl(QUrl streamUrl) {
if (reallyStopped) return;
+ Video *video = static_cast<Video *>(sender());
+ if (!video) {
+ qDebug() << "Cannot get sender";
+ return;
+ }
+ video->disconnect(this);
+
// go!
+ qDebug() << "Playing" << streamUrl.toString();
mediaObject->setCurrentSource(streamUrl);
mediaObject->play();
QModelIndex index = listModel->index(row, 0, QModelIndex());
listView->scrollTo(index, QAbstractItemView::EnsureVisible);
}
+
+#ifdef APP_DEMO
+ demoTimer->start();
+#endif
+
}
void MediaView::itemActivated(const QModelIndex &index) {
else listModel->searchMore();
}
-void MediaView::currentSourceChanged(const Phonon::MediaSource source) {
- qDebug() << "Playing" << source.url().toString();
+void MediaView::currentSourceChanged(const Phonon::MediaSource /* source */ ) {
+
}
void MediaView::skipVideo() {
void MediaView::moveUpSelected() {
if (!listView->selectionModel()->hasSelection()) return;
+
QModelIndexList indexes = listView->selectionModel()->selectedIndexes();
+ qStableSort(indexes.begin(), indexes.end());
listModel->move(indexes, true);
+
+ // set current index after row moves to something more intuitive
+ int row = indexes.first().row();
+ listView->selectionModel()->setCurrentIndex(listModel->index(row>1?row:1), QItemSelectionModel::NoUpdate);
}
void MediaView::moveDownSelected() {
if (!listView->selectionModel()->hasSelection()) return;
+
QModelIndexList indexes = listView->selectionModel()->selectedIndexes();
+ qStableSort(indexes.begin(), indexes.end(), qGreater<QModelIndex>());
listModel->move(indexes, false);
+
+ // set current index after row moves to something more intuitive (respect 1 static item on bottom)
+ int row = indexes.first().row()+1, max = listModel->rowCount() - 2;
+ listView->selectionModel()->setCurrentIndex(listModel->index(row>max?max:row), QItemSelectionModel::NoUpdate);
}
void MediaView::showVideoContextMenu(QPoint point) {
QSettings settings;
settings.setValue("splitter", splitter->saveState());
}
+
+#ifdef APP_DEMO
+void MediaView::demoMessage() {
+ if (mediaObject->state() != Phonon::PlayingState) return;
+ mediaObject->pause();
+
+ QMessageBox msgBox;
+ msgBox.setIconPixmap(QPixmap(":/images/app.png").scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation));
+ msgBox.setText(tr("This is just the demo version of %1.").arg(Constants::APP_NAME));
+ msgBox.setInformativeText(tr("It allows you to test the application and see if it works for you."));
+ msgBox.setModal(true);
+
+ QPushButton *quitButton = msgBox.addButton(tr("Continue"), QMessageBox::RejectRole);
+ QPushButton *buyButton = msgBox.addButton(tr("Get the full version"), QMessageBox::ActionRole);
+
+ msgBox.exec();
+
+ if (msgBox.clickedButton() == buyButton) {
+ QDesktopServices::openUrl(QString(Constants::WEBSITE) + "#download");
+ } else {
+ mediaObject->play();
+ }
+}
+#endif
+
+void MediaView::downloadVideo() {
+ Video* video = listModel->activeVideo();
+ if (!video) return;
+
+ DownloadManager::instance()->addItem(video);
+
+ // TODO animate
+
+ The::globalActions()->value("downloads")->setVisible(true);
+
+ // The::globalActions()->value("download")->setEnabled(DownloadManager::instance()->itemForVideo(video) == 0);
+
+ QMainWindow* mainWindow = dynamic_cast<QMainWindow*>(window());
+ QString message = tr("Downloading %1").arg(video->title());
+ if (mainWindow) mainWindow->statusBar()->showMessage(message);
+}
+
+void MediaView::fullscreen() {
+ videoAreaWidget->setParent(0);
+ videoAreaWidget->showFullScreen();
+}
#include <phonon/videowidget.h>
#include "View.h"
#include "ListModel.h"
-#include "thblackbar.h"
+#include "thlibrary/thblackbar.h"
#include "searchparams.h"
#include "playlistwidget.h"
#include "loadingwidget.h"
#include "videoareawidget.h"
+namespace The {
+ QMap<QString, QAction*>* globalActions();
+}
+
class MediaView : public QWidget, public View {
Q_OBJECT
public:
MediaView(QWidget *parent);
- ~MediaView();
void initialize();
// View
- void appear() {}
+ void appear() {
+ listView->setFocus();
+ }
void disappear();
QMap<QString, QVariant> metadata() {
QMap<QString, QVariant> metadata;
void moveDownSelected();
void setPlaylistVisible(bool visible=true);
void saveSplitterState();
+ void downloadVideo();
+ void fullscreen();
private slots:
// list/model
void searchMostViewed();
// timer
void timerPlay();
+#ifdef APP_DEMO
+ void demoMessage();
+#endif
private:
QTimer *workaroundTimer;
Video *skippedVideo;
+#ifdef APP_DEMO
+ QTimer *demoTimer;
+#endif
+
};
#endif // __MEDIAVIEW_H__
#include "SearchView.h"
-#include "Constants.h"
+#include "constants.h"
+#include "fontutils.h"
namespace The {
QMap<QString, QAction*>* globalActions();
SearchView::SearchView(QWidget *parent) : QWidget(parent) {
- QFont biggerFont;
- biggerFont.setPointSize(biggerFont.pointSize()*1.5);
+ QFont biggerFont = FontUtils::big();
+ QFont smallerFont = FontUtils::smallBold();
- QFont smallerFont;
- smallerFont.setPointSize(smallerFont.pointSize()*.85);
- smallerFont.setBold(true);
+#ifdef APP_MAC
+ // speedup painting since we'll paint the whole background
+ // by ourselves anyway in paintEvent()
+ setAttribute(Qt::WA_OpaquePaintEvent);
+#endif
QBoxLayout *mainLayout = new QVBoxLayout();
mainLayout->setMargin(0);
mainLayout->addWidget(message);
mainLayout->addStretch();
+ mainLayout->addSpacing(PADDING);
QBoxLayout *hLayout = new QHBoxLayout();
hLayout->setAlignment(Qt::AlignCenter);
hLayout->addLayout(layout);
QLabel *welcomeLabel =
- new QLabel("<h1>" +
+ new QLabel("<h1 style='font-weight:normal'>" +
tr("Welcome to <a href='%1'>%2</a>,")
- .replace("<a ", "<a style='color:palette(text)'")
+ // .replace("<a ", "<a style='color:palette(text)'")
+ .replace("<a href", "<a style='text-decoration:none; color:palette(text); font-weight:bold' href")
.arg(Constants::WEBSITE, Constants::APP_NAME)
+ "</h1>", this);
welcomeLabel->setOpenExternalLinks(true);
layout->addWidget(welcomeLabel);
- layout->addSpacing(PADDING);
+ layout->addSpacing(PADDING / 2);
QLabel *tipLabel = new QLabel(tr("Enter a keyword to start watching videos."), this);
tipLabel->setFont(biggerFont);
layout->addWidget(tipLabel);
- layout->addSpacing(10);
+ layout->addSpacing(PADDING / 2);
QHBoxLayout *searchLayout = new QHBoxLayout();
searchLayout->setAlignment(Qt::AlignVCenter);
layout->addItem(searchLayout);
- layout->addSpacing(PADDING);
+ layout->addSpacing(PADDING / 2);
QHBoxLayout *otherLayout = new QHBoxLayout();
+ otherLayout->setMargin(0);
recentKeywordsLayout = new QVBoxLayout();
recentKeywordsLayout->setSpacing(5);
recentKeywordsLayout->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
recentKeywordsLabel = new QLabel(tr("Recent keywords").toUpper(), this);
- recentKeywordsLabel->hide();
+#ifdef APP_MAC
+ QPalette palette = recentKeywordsLabel->palette();
+ palette.setColor(QPalette::WindowText, QColor(0x65, 0x71, 0x80));
+ recentKeywordsLabel->setPalette(palette);
+#else
recentKeywordsLabel->setForegroundRole(QPalette::Dark);
+#endif
+ recentKeywordsLabel->hide();
recentKeywordsLabel->setFont(smallerFont);
recentKeywordsLayout->addWidget(recentKeywordsLabel);
layout->addLayout(otherLayout);
+ mainLayout->addSpacing(PADDING);
mainLayout->addStretch();
setLayout(mainLayout);
void SearchView::gotNewVersion(QString version) {
message->setText(
tr("A new version of %1 is available. Please <a href='%2'>update to version %3</a>")
+ .replace("<a href", "<a style='text-decoration:none; color:palette(text); font-weight:bold' href")
.arg(
Constants::APP_NAME,
QString(Constants::WEBSITE).append("#download"),
);
message->setOpenExternalLinks(true);
message->setMargin(10);
- message->setBackgroundRole(QPalette::ToolTipBase);
- message->setForegroundRole(QPalette::ToolTipText);
- message->setAutoFillBackground(true);
+ message->setAlignment(Qt::AlignCenter);
+ // message->setBackgroundRole(QPalette::ToolTipBase);
+ // message->setForegroundRole(QPalette::ToolTipText);
+ // message->setAutoFillBackground(true);
+ message->setStyleSheet("QLabel { border-bottom: 1px solid palette(mid); }");
message->show();
if (updateChecker) delete updateChecker;
}
+
+void SearchView::paintEvent(QPaintEvent * /*event*/) {
+#ifdef APP_MAC
+ QBrush brush;
+ if (window()->isActiveWindow()) {
+ brush = QBrush(QColor(0xdd, 0xe4, 0xeb));
+ } else {
+ brush = palette().window();
+ }
+ QPainter painter(this);
+ painter.fillRect(0, 0, width(), height(), brush);
+#endif
+}
signals:
void search(QString query);
+protected:
+ void paintEvent(QPaintEvent *);
+
private slots:
void watch();
void textChanged(const QString &text);
--- /dev/null
+#include "constants.h"
+
+#define STR(x) #x
+#define STRINGIFY(x) STR(x)
+
+const char *Constants::VERSION = STRINGIFY(APP_VERSION);
+const char *Constants::APP_NAME = "Minitube";
+const char *Constants::ORG_NAME = "Flavio Tordini";
+const char *Constants::ORG_DOMAIN = "flavio.tordini.org";
+const char *Constants::WEBSITE = "http://flavio.tordini.org/minitube";
+const char *Constants::EMAIL = "flavio.tordini@gmail.com";
--- /dev/null
+#ifndef CONSTANTS_H
+#define CONSTANTS_H
+
+#include <QString>
+
+class Constants {
+
+public:
+
+ static const char *VERSION;
+ static const char *APP_NAME;
+ static const char *ORG_NAME;
+ static const char *ORG_DOMAIN;
+ static const char *WEBSITE;
+ static const char *EMAIL;
+ static const QString USER_AGENT;
+
+};
+
+#endif
--- /dev/null
+#include "downloaditem.h"
+#include "networkaccess.h"
+#include "video.h"
+
+#include <QDesktopServices>
+
+namespace The {
+ NetworkAccess* http();
+}
+
+DownloadItem::DownloadItem(Video *video, QUrl url, QString filename, QObject *parent)
+ : QObject(parent)
+ , m_bytesReceived(0)
+ , m_startedSaving(false)
+ , m_finishedDownloading(false)
+ , m_url(url)
+ , m_file(filename)
+ , m_reply(0)
+ , video(video)
+ , m_status(Idle)
+{ }
+
+void DownloadItem::start() {
+ m_reply = The::http()->simpleGet(m_url);
+ init();
+}
+
+void DownloadItem::init() {
+ if (!m_reply)
+ return;
+
+ m_status = Starting;
+
+ m_startedSaving = false;
+ m_finishedDownloading = false;
+
+ // attach to the m_reply
+ m_url = m_reply->url();
+ connect(m_reply, SIGNAL(readyRead()), this, SLOT(downloadReadyRead()));
+ connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)),
+ this, SLOT(error(QNetworkReply::NetworkError)));
+ connect(m_reply, SIGNAL(downloadProgress(qint64, qint64)),
+ this, SLOT(downloadProgress(qint64, qint64)));
+ connect(m_reply, SIGNAL(metaDataChanged()),
+ this, SLOT(metaDataChanged()));
+ connect(m_reply, SIGNAL(finished()),
+ this, SLOT(requestFinished()));
+
+ // start timer for the download estimation
+ m_downloadTime.start();
+
+ if (m_reply->error() != QNetworkReply::NoError) {
+ error(m_reply->error());
+ requestFinished();
+ }
+}
+
+
+void DownloadItem::stop() {
+ if (m_reply)
+ m_reply->abort();
+ m_status = Idle;
+ emit statusChanged();
+}
+
+void DownloadItem::open() {
+ QFileInfo info(m_file);
+ QUrl url = QUrl::fromLocalFile(info.absoluteFilePath());
+ QDesktopServices::openUrl(url);
+}
+
+void DownloadItem::openFolder() {
+ QFileInfo info(m_file);
+ QUrl url = QUrl::fromLocalFile(info.absolutePath());
+ QDesktopServices::openUrl(url);
+}
+
+void DownloadItem::tryAgain() {
+ if (m_reply)
+ m_reply->abort();
+
+ if (m_file.exists())
+ m_file.remove();
+
+ m_reply = The::http()->simpleGet(m_url);
+ init();
+ emit statusChanged();
+}
+
+void DownloadItem::downloadReadyRead() {
+
+ if (!m_file.isOpen()) {
+ if (!m_file.open(QIODevice::WriteOnly)) {
+ qDebug() << QString("Error opening output file: %1").arg(m_file.errorString());
+ stop();
+ emit statusChanged();
+ return;
+ }
+ emit statusChanged();
+ }
+
+ m_status = Downloading;
+ if (-1 == m_file.write(m_reply->readAll())) {
+ /*
+ downloadInfoLabel->setText(tr("Error saving: %1")
+ .arg(m_output.errorString()));
+ stopButton->click();
+ */
+ } else {
+ m_startedSaving = true;
+ if (m_finishedDownloading)
+ requestFinished();
+ }
+}
+
+void DownloadItem::error(QNetworkReply::NetworkError) {
+
+#ifdef DOWNLOADMANAGER_DEBUG
+ qDebug() << "DownloadItem::" << __FUNCTION__ << m_reply->errorString() << m_url;
+#endif
+
+ m_errorMessage = m_reply->errorString();
+ m_reply = 0;
+ m_status = Failed;
+
+ emit finished();
+}
+
+QString DownloadItem::errorMessage() const {
+ return m_errorMessage;
+}
+
+void DownloadItem::metaDataChanged() {
+ QVariant locationHeader = m_reply->header(QNetworkRequest::LocationHeader);
+ if (locationHeader.isValid()) {
+ m_url = locationHeader.toUrl();
+ m_reply->deleteLater();
+ m_reply = The::http()->simpleGet(m_url);
+ init();
+ return;
+ }
+
+#ifdef DOWNLOADMANAGER_DEBUG
+ qDebug() << "DownloadItem::" << __FUNCTION__ << "not handled.";
+#endif
+}
+
+void DownloadItem::downloadProgress(qint64 bytesReceived, qint64 bytesTotal) {
+ QTime now = QTime::currentTime();
+ if (m_lastProgressTime.msecsTo(now) < 200)
+ return;
+
+ m_lastProgressTime = now;
+
+ m_bytesReceived = bytesReceived;
+ if (bytesTotal > 0) {
+ percent = bytesReceived * 100 / bytesTotal;
+ }
+
+ emit progress(percent);
+ // emit statusChanged();
+}
+
+qint64 DownloadItem::bytesTotal() const {
+ if (!m_reply) return 0;
+ return m_reply->header(QNetworkRequest::ContentLengthHeader).toULongLong();
+}
+
+qint64 DownloadItem::bytesReceived() const {
+ return m_bytesReceived;
+}
+
+double DownloadItem::remainingTime() const {
+ if (m_finishedDownloading)
+ return -1.0;
+
+ double timeRemaining = ((double)(bytesTotal() - bytesReceived())) / currentSpeed();
+
+ // When downloading the eta should never be 0
+ if (timeRemaining == 0)
+ timeRemaining = 1;
+
+ return timeRemaining;
+}
+
+double DownloadItem::currentSpeed() const {
+ if (m_finishedDownloading)
+ return -1.0;
+
+ return m_bytesReceived * 1000.0 / m_downloadTime.elapsed();
+}
+
+void DownloadItem::requestFinished() {
+ m_reply = 0;
+ m_finishedDownloading = true;
+ if (!m_startedSaving) {
+ return;
+ }
+ m_file.close();
+ m_status = Finished;
+ emit statusChanged();
+ emit finished();
+}
+
+QString DownloadItem::formattedFilesize(qint64 size) {
+ /*
+ if (size < 1024) return tr("%1 bytes").arg(size);
+ else if (size < 1024*1024) return tr("%1 KB").arg(size/1024);
+ else if (size < 1024*1024*1024) return tr("%1 MB").arg(size/1024/1024);
+ else return tr("%1 GB").arg(size/1024/1024/1024);
+ */
+ QString unit;
+ if (size < 1024) {
+ unit = tr("bytes");
+ } else if (size < 1024*1024) {
+ size /= 1024;
+ unit = tr("KB");
+ } else {
+ size /= 1024*1024;
+ unit = tr("MB");
+ }
+ return QString(QLatin1String("%1 %2")).arg(size).arg(unit);
+}
+
+QString DownloadItem::formattedSpeed(double speed) {
+ /*
+ static const int K = 1024;
+ if (speed < K) return tr("%1 bytes/s").arg(speed);
+ else if (speed < K*K) return tr("%1 KB/s").arg(speed/K);
+ else if (speed < K*K*K) return tr("%1 MB/s").arg(speed/K/K);
+ else return tr("%1 GB/s").arg(speed/K/K/K);
+ */
+ int speedInt = (int) speed;
+ QString unit;
+ if (speedInt < 1024) {
+ unit = tr("bytes/sec");
+ } else if (speedInt < 1024*1024) {
+ speedInt /= 1024;
+ unit = tr("KB/sec");
+ } else {
+ speedInt /= 1024*1024;
+ unit = tr("MB/sec");
+ }
+ return QString(QLatin1String("%1 %2")).arg(speedInt).arg(unit);
+}
+
+QString DownloadItem::formattedTime(double timeRemaining) {
+ QString timeRemainingString = tr("seconds");
+ if (timeRemaining > 60) {
+ timeRemaining = timeRemaining / 60;
+ timeRemainingString = tr("minutes");
+ }
+ timeRemaining = floor(timeRemaining);
+ return tr("%4 %5 remaining")
+ .arg(timeRemaining)
+ .arg(timeRemainingString);
+}
--- /dev/null
+#ifndef DOWNLOADITEM_H
+#define DOWNLOADITEM_H
+
+#include <QtCore>
+#include <QNetworkReply>
+
+class Video;
+
+enum DownloadItemStatus {
+ Idle = 0,
+ Starting,
+ Downloading,
+ Finished,
+ Failed
+};
+
+class DownloadItem : public QObject {
+
+ Q_OBJECT
+
+signals:
+ void statusChanged();
+ void progress(int percent);
+ void finished();
+
+public:
+ DownloadItem(Video *video, QUrl url, QString filename, QObject *parent = 0);
+ qint64 bytesTotal() const;
+ qint64 bytesReceived() const;
+ double remainingTime() const;
+ double currentSpeed() const;
+ int currentPercent() const { return percent; }
+ Video* getVideo() const { return video; }
+ DownloadItemStatus status() const { return m_status; }
+ static QString formattedFilesize(qint64 size);
+ static QString formattedSpeed(double speed);
+ static QString formattedTime(double time);
+ QString errorMessage() const;
+
+public slots:
+ void start();
+ void stop();
+ void tryAgain();
+ void open();
+ void openFolder();
+
+private slots:
+ void downloadReadyRead();
+ void error(QNetworkReply::NetworkError code);
+ void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
+ void metaDataChanged();
+ void requestFinished();
+
+private:
+ void init();
+
+ qint64 m_bytesReceived;
+ QTime m_downloadTime;
+ bool m_startedSaving;
+ bool m_finishedDownloading;
+ QTime m_lastProgressTime;
+ int percent;
+
+ QUrl m_url;
+
+ QFile m_file;
+ QNetworkReply *m_reply;
+ Video *video;
+
+ DownloadItemStatus m_status;
+ QString m_errorMessage;
+
+};
+
+// This is required in order to use QPointer<DownloadItem> as a QVariant
+// as used by the Model/View playlist
+typedef QPointer<DownloadItem> DownloadItemPointer;
+Q_DECLARE_METATYPE(DownloadItemPointer)
+
+#endif // DOWNLOADITEM_H
--- /dev/null
+#include "downloadlistview.h"
+#include "downloadmodel.h"
+#include "playlist/PrettyItemDelegate.h"
+#include <QtGui>
+
+DownloadListView::DownloadListView(QWidget *parent) : QListView(parent) {
+
+ // playIconHovered = false;
+ // setMouseTracking(true);
+
+}
+
+void DownloadListView::leaveEvent(QEvent * /* event */) {
+ DownloadModel *downloadModel = dynamic_cast<DownloadModel *>(model());
+ if (downloadModel) downloadModel->clearHover();
+}
+
+void DownloadListView::mouseMoveEvent(QMouseEvent *event) {
+ // qDebug() << "DownloadListView::mouseMoveEvent" << event->pos();
+
+ QListView::mouseMoveEvent(event);
+
+ if (isHoveringPlayIcon(event)) {
+ QMetaObject::invokeMethod(model(), "enterPlayIconHover", Qt::DirectConnection);
+ } else {
+ QMetaObject::invokeMethod(model(), "exitPlayIconHover", Qt::DirectConnection);
+ }
+
+}
+
+void DownloadListView::mousePressEvent(QMouseEvent *event) {
+ if (event->button() == Qt::LeftButton
+ && isHoveringPlayIcon(event)) {
+ QMetaObject::invokeMethod(model(), "enterPlayIconPressed", Qt::DirectConnection);
+ } else {
+ QListView::mousePressEvent(event);
+ }
+}
+
+void DownloadListView::mouseReleaseEvent(QMouseEvent *event) {
+ if (event->button() == Qt::LeftButton) {
+ QMetaObject::invokeMethod(model(), "exitPlayIconPressed", Qt::DirectConnection);
+ if (isHoveringPlayIcon(event))
+ emit downloadButtonPushed(indexAt(event->pos()));
+ } else {
+ QListView::mousePressEvent(event);
+ }
+}
+
+bool DownloadListView::isHoveringPlayIcon(QMouseEvent *event) {
+ const QModelIndex itemIndex = indexAt(event->pos());
+ const QRect itemRect = visualRect(itemIndex);
+ // qDebug() << " itemRect.x()" << itemRect.x();
+
+ PrettyItemDelegate *delegate = dynamic_cast<PrettyItemDelegate *>(itemDelegate());
+ if (!delegate) return false;
+
+ QRect buttonRect = delegate->downloadButtonRect(itemRect);
+
+ const int x = event->x() - itemRect.x() - buttonRect.x();
+ const int y = event->y() - itemRect.y() - buttonRect.y();
+ return x > 0 && x < buttonRect.width() && y > 0 && y < buttonRect.height();
+}
--- /dev/null
+#ifndef DOWNLOADLISTVIEW_H
+#define DOWNLOADLISTVIEW_H
+
+#include <QListView>
+#include <QModelIndex>
+
+class DownloadListView : public QListView {
+
+ Q_OBJECT
+
+public:
+ DownloadListView(QWidget *parent = 0);
+
+protected:
+ void leaveEvent(QEvent *event);
+ void mouseMoveEvent(QMouseEvent *event);
+ void mousePressEvent(QMouseEvent *event);
+ void mouseReleaseEvent(QMouseEvent *event);
+ bool isHoveringPlayIcon(QMouseEvent *event);
+
+signals:
+ void downloadButtonPushed(QModelIndex index);
+
+};
+
+#endif // DOWNLOADLISTVIEW_H
--- /dev/null
+#include "downloadmanager.h"
+#include "downloaditem.h"
+#include "downloadmodel.h"
+#include "video.h"
+#include "constants.h"
+
+static DownloadManager *downloadManagerInstance = 0;
+
+DownloadManager::DownloadManager(QObject *parent) :
+ QObject(parent),
+ downloadModel(new DownloadModel(this, this))
+{ }
+
+DownloadManager* DownloadManager::instance() {
+ if (!downloadManagerInstance) downloadManagerInstance = new DownloadManager();
+ return downloadManagerInstance;
+}
+
+void DownloadManager::clear() {
+ qDeleteAll(items);
+ items.clear();
+ updateStatusMessage();
+}
+
+int DownloadManager::activeItems() {
+ int num = 0;
+ foreach (DownloadItem *item, items) {
+ if (item->status() == Downloading || item->status() == Starting) num++;
+ }
+ return num;
+}
+
+DownloadItem* DownloadManager::itemForVideo(Video* video) {
+ foreach (DownloadItem *item, items) {
+ if (item->getVideo()->id() == video->id()) return item;
+ }
+ return 0;
+}
+
+void DownloadManager::addItem(Video *video) {
+ // qDebug() << __FUNCTION__ << video->title();
+
+#ifdef APP_DEMO
+ if (video->duration() >= 60*4) {
+ QMessageBox msgBox;
+ msgBox.setIconPixmap(QPixmap(":/images/app.png").scaled(64, 64, Qt::KeepAspectRatio, Qt::SmoothTransformation));
+ msgBox.setText(tr("This is just the demo version of %1.").arg(Constants::APP_NAME));
+ msgBox.setInformativeText(
+ tr("It can only download videos shorter than %1 minutes so you can test the download functionality.")
+ .arg(4));
+ msgBox.setModal(true);
+
+ QPushButton *quitButton = msgBox.addButton(tr("Continue"), QMessageBox::RejectRole);
+ QPushButton *buyButton = msgBox.addButton(tr("Get the full version"), QMessageBox::ActionRole);
+
+ msgBox.exec();
+
+ if (msgBox.clickedButton() == buyButton) {
+ QDesktopServices::openUrl(QString(Constants::WEBSITE) + "#download");
+ }
+
+ return;
+ }
+#endif
+
+
+ DownloadItem *item = itemForVideo(video);
+ if (item != 0) {
+ if (item->status() == Failed || item->status() == Idle) {
+ qDebug() << "Restarting download" << video->title();
+ item->tryAgain();
+ } else {
+ qDebug() << "Already downloading video" << video->title();
+ }
+ return;
+ }
+
+ connect(video, SIGNAL(gotStreamUrl(QUrl)), SLOT(gotStreamUrl(QUrl)));
+ // TODO handle signal errors
+ // connect(video, SIGNAL(errorStreamUrl(QString)), SLOT(handleError(QString)));
+ video->loadStreamUrl();
+
+ // see you in gotStreamUrl()
+}
+
+void DownloadManager::gotStreamUrl(QUrl url) {
+
+ Video *video = static_cast<Video*>(sender());
+ if (!video) {
+ qDebug() << "Cannot get video in" << __FUNCTION__;
+ return;
+ }
+
+ video->disconnect(this);
+
+ QString path = currentDownloadFolder();
+
+ // TODO ensure all chars are filename compatible
+ QString basename = video->title().simplified();
+ basename.replace('(', '[');
+ basename.replace(')', ']');
+ basename.replace('/', '-');
+ basename.replace('\\', '-');
+ QString filename = path + "/" + basename + ".mp4";
+
+ Video *videoCopy = video->clone();
+ DownloadItem *item = new DownloadItem(videoCopy, url, filename, this);
+
+ int row = items.count();
+ downloadModel->beginInsertRows(QModelIndex(), row, row);
+ items.append(item);
+ downloadModel->endInsertRows();
+
+ // connect(item, SIGNAL(statusChanged()), SLOT(updateStatusMessage()));
+ connect(item, SIGNAL(finished()), SLOT(itemFinished()));
+ item->start();
+
+ updateStatusMessage();
+}
+
+void DownloadManager::itemFinished() {
+ if (activeItems() == 0) emit finished();
+}
+
+void DownloadManager::updateStatusMessage() {
+ QString message = tr("%n Download(s)", "", items.size());
+ emit statusMessageChanged(message);
+}
+
+QString DownloadManager::defaultDownloadFolder() {
+ // download in the Movies system folder
+ QString path = QDesktopServices::storageLocation(QDesktopServices::MoviesLocation);
+ QDir moviesDir(path);
+ if (!moviesDir.exists()) {
+ // fallback to Desktop
+ path = QDesktopServices::storageLocation(QDesktopServices::DesktopLocation);
+ }
+ return path;
+}
+
+QString DownloadManager::currentDownloadFolder() {
+ QSettings settings;
+ QString path = settings.value("downloadFolder").toString();
+ if (path.isEmpty()) path = defaultDownloadFolder();
+ return path;
+}
--- /dev/null
+#ifndef DOWNLOADMANAGER_H
+#define DOWNLOADMANAGER_H
+
+#include <QtGui>
+
+class DownloadItem;
+class DownloadModel;
+class Video;
+
+class DownloadManager : public QObject {
+
+ Q_OBJECT
+
+public:
+ static DownloadManager* instance();
+ void clear();
+ void addItem(Video *video);
+ const QList<DownloadItem*> getItems() { return items; }
+ DownloadModel* getModel() { return downloadModel; }
+ DownloadItem* itemForVideo(Video *video);
+ int activeItems();
+ QString defaultDownloadFolder();
+ QString currentDownloadFolder();
+
+signals:
+ void finished();
+ void statusMessageChanged(QString status);
+
+private slots:
+ void itemFinished();
+ void updateStatusMessage();
+ void gotStreamUrl(QUrl url);
+
+private:
+ DownloadManager(QObject *parent = 0);
+
+ QList<DownloadItem*> items;
+ DownloadModel *downloadModel;
+
+};
+
+#endif // DOWNLOADMANAGER_H
--- /dev/null
+#include "downloadmodel.h"
+#include "downloadmanager.h"
+#include "downloaditem.h"
+#include "video.h"
+#include "ListModel.h"
+
+DownloadModel::DownloadModel(DownloadManager *downloadManager, QObject *parent) :
+ QAbstractListModel(parent),
+ downloadManager(downloadManager) {
+ hoveredRow = -1;
+ playIconHovered = false;
+ playIconPressed = false;
+}
+
+int DownloadModel::rowCount(const QModelIndex &/*parent*/) const {
+ return downloadManager->getItems().size();
+}
+
+QVariant DownloadModel::data(const QModelIndex &index, int role) const {
+
+ int row = index.row();
+ if (row < 0 || row >= rowCount()) return QVariant();
+
+ QList<DownloadItem*> items = downloadManager->getItems();
+ if (items.isEmpty()) return QVariant();
+
+ switch (role) {
+ case ItemTypeRole:
+ return ItemTypeVideo;
+ case VideoRole:
+ return QVariant::fromValue(QPointer<Video>(items.at(row)->getVideo()));
+ case DownloadItemRole:
+ return QVariant::fromValue(QPointer<DownloadItem>(items.at(row)));
+ case ActiveTrackRole:
+ return false;
+ case HoveredItemRole:
+ return hoveredRow == index.row();
+ case DownloadButtonHoveredRole:
+ return playIconHovered;
+ case DownloadButtonPressedRole:
+ return playIconPressed;
+ }
+
+ return QVariant();
+}
+
+void DownloadModel::sendReset() {
+ reset();
+}
+
+void DownloadModel::setHoveredRow(int row) {
+ int oldRow = hoveredRow;
+ hoveredRow = row;
+ emit dataChanged( createIndex( oldRow, 0 ), createIndex( oldRow, columnCount() - 1 ) );
+ emit dataChanged( createIndex( hoveredRow, 0 ), createIndex( hoveredRow, columnCount() - 1 ) );
+}
+
+void DownloadModel::clearHover() {
+ emit dataChanged( createIndex( hoveredRow, 0 ), createIndex( hoveredRow, columnCount() - 1 ) );
+ hoveredRow = -1;
+}
+
+void DownloadModel::enterPlayIconHover() {
+ if (playIconHovered) return;
+ playIconHovered = true;
+ updatePlayIcon();
+}
+
+void DownloadModel::exitPlayIconHover() {
+ if (!playIconHovered) return;
+ playIconHovered = false;
+ updatePlayIcon();
+ setHoveredRow(hoveredRow);
+}
+
+void DownloadModel::enterPlayIconPressed() {
+ if (playIconPressed) return;
+ playIconPressed = true;
+ updatePlayIcon();
+}
+
+void DownloadModel::exitPlayIconPressed() {
+ if (!playIconPressed) return;
+ playIconPressed = false;
+ updatePlayIcon();
+}
+
+void DownloadModel::updatePlayIcon() {
+ emit dataChanged( createIndex( hoveredRow, 0 ), createIndex( hoveredRow, columnCount() - 1 ) );
+}
--- /dev/null
+#ifndef DOWNLOADMODEL_H
+#define DOWNLOADMODEL_H
+
+#include <QAbstractListModel>
+
+class DownloadManager;
+
+class DownloadModel : public QAbstractListModel {
+
+ Q_OBJECT
+
+public:
+ DownloadModel(DownloadManager *downloadManager, QObject *parent);
+ int rowCount(const QModelIndex &parent = QModelIndex()) const;
+ QVariant data(const QModelIndex &index, int role) const;
+ friend class DownloadManager;
+ void setHoveredRow(int row);
+
+public slots:
+ void clearHover();
+ void enterPlayIconHover();
+ void exitPlayIconHover();
+ void enterPlayIconPressed();
+ void exitPlayIconPressed();
+ void sendReset();
+ void updatePlayIcon();
+
+private:
+ int columnCount() { return 1; }
+
+ DownloadManager *downloadManager;
+ int hoveredRow;
+ bool playIconHovered;
+ bool playIconPressed;
+
+};
+
+#endif // DOWNLOADMODEL_H
--- /dev/null
+#include "downloadsettings.h"
+#include "downloadmanager.h"
+
+DownloadSettings::DownloadSettings(QWidget *parent) : QWidget(parent) {
+
+ QBoxLayout *layout = new QHBoxLayout(this);
+ layout->setMargin(10);
+
+ message = new QLabel(this);
+ message->setOpenExternalLinks(true);
+ layout->addWidget(message);
+
+ changeFolderButton = new QPushButton(this);
+ changeFolderButton->setText(tr("Change location..."));
+ changeFolderButton->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
+ connect(changeFolderButton, SIGNAL(clicked()), SLOT(changeFolder()));
+ layout->addWidget(changeFolderButton);
+
+ updateMessage();
+}
+
+void DownloadSettings::paintEvent(QPaintEvent * /*event*/) {
+ QPainter painter(this);
+#ifdef APP_MAC
+ QBrush brush;
+ if (window()->isActiveWindow()) {
+ brush = QBrush(QColor(0xdd, 0xe4, 0xeb));
+ } else {
+ brush = palette().window();
+ }
+ painter.fillRect(0, 0, width(), height(), brush);
+#endif
+ painter.setPen(palette().color(QPalette::Mid));
+ painter.drawLine(0, 0, width(), 0);
+}
+
+void DownloadSettings::changeFolder() {
+ QString dir = QFileDialog::getExistingDirectory(this, tr("Choose the download location"),
+ QDesktopServices::storageLocation(QDesktopServices::HomeLocation),
+ QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+
+ if (!dir.isEmpty()) {
+ QSettings settings;
+ settings.setValue("downloadFolder", dir);
+ updateMessage();
+ QMainWindow* mainWindow = dynamic_cast<QMainWindow*>(window());
+ if (mainWindow) {
+ QString status;
+ status = tr("Download location changed.");
+ if (DownloadManager::instance()->activeItems() > 0)
+ status += " " + tr("Current downloads will still go in the previous location.");
+ mainWindow->statusBar()->showMessage(status);
+ }
+ }
+}
+
+void DownloadSettings::updateMessage() {
+ QString path = DownloadManager::instance()->currentDownloadFolder();
+ QString home = QDesktopServices::storageLocation(QDesktopServices::HomeLocation) + "/";
+ QString displayPath = path;
+ displayPath = displayPath.remove(home);
+ message->setText(
+ tr("Downloading to: %1")
+ .arg("<a href='file://%1' style='text-decoration:none; color:palette(text); font-weight:bold'>%2</a>")
+ .arg(path, displayPath));
+}
--- /dev/null
+#ifndef DOWNLOADSETTINGS_H
+#define DOWNLOADSETTINGS_H
+
+#include <QtGui>
+
+class DownloadSettings : public QWidget {
+
+ Q_OBJECT
+
+public:
+ DownloadSettings(QWidget *parent = 0);
+
+protected:
+ void paintEvent(QPaintEvent *event);
+
+private slots:
+ void changeFolder();
+
+private:
+ void updateMessage();
+
+ QLabel *message;
+ QPushButton *changeFolderButton;
+
+};
+
+#endif // DOWNLOADSETTINGS_H
--- /dev/null
+#include "downloadview.h"
+#include "downloadmodel.h"
+#include "downloadmanager.h"
+#include "downloadlistview.h"
+#include "downloaditem.h"
+#include "downloadsettings.h"
+#include "ListModel.h"
+#include "playlist/PrettyItemDelegate.h"
+#include "thlibrary/thblackbar.h"
+
+DownloadView::DownloadView(QWidget *parent) : QWidget(parent) {
+
+ QBoxLayout *layout = new QVBoxLayout(this);
+ layout->setMargin(0);
+ layout->setSpacing(0);
+
+ bar = new THBlackBar(this);
+ QAction *action = new QAction(tr("Downloads"), this);
+ bar->addAction(action);
+ layout->addWidget(bar);
+
+ listView = new DownloadListView(this);
+#ifdef APP_MAC
+ listView->setAlternatingRowColors(true);
+#endif
+ /*
+ QPalette p = listView->palette();
+ p.setColor(QPalette::Base, palette().color(QPalette::Window));
+ listView->setPalette(p);
+ */
+ PrettyItemDelegate *delegate = new PrettyItemDelegate(this, true);
+ listView->setItemDelegate(delegate);
+ listView->setSelectionMode(QAbstractItemView::NoSelection);
+
+ // cosmetics
+ listView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
+ listView->setFrameShape(QFrame::NoFrame);
+ listView->setAttribute(Qt::WA_MacShowFocusRect, false);
+ listView->setMinimumSize(320,240);
+ listView->setUniformItemSizes(true);
+
+ listModel = DownloadManager::instance()->getModel();
+ listView->setModel(listModel);
+ connect(listView, SIGNAL(downloadButtonPushed(QModelIndex)), SLOT(buttonPushed(QModelIndex)));
+ connect(listView, SIGNAL(entered(const QModelIndex &)), SLOT(itemEntered(const QModelIndex &)));
+
+ layout->addWidget(listView);
+
+ updateTimer = new QTimer(this);
+ updateTimer->setInterval(1000);
+ connect(updateTimer, SIGNAL(timeout()), listModel, SLOT(sendReset()));
+
+ downloadSettings = new DownloadSettings(this);
+ layout->addWidget(downloadSettings);
+}
+
+void DownloadView::appear() {
+ listView->setEnabled(true);
+ listModel->sendReset();
+ listView->setMouseTracking(true);
+ updateTimer->start();
+}
+
+void DownloadView::disappear() {
+ listView->setEnabled(false);
+ listView->setMouseTracking(false);
+}
+
+void DownloadView::itemEntered(const QModelIndex &index) {
+ listModel->setHoveredRow(index.row());
+}
+
+void DownloadView::buttonPushed(QModelIndex index) {
+ const DownloadItemPointer downloadItemPointer = index.data(DownloadItemRole).value<DownloadItemPointer>();
+ DownloadItem *downloadItem = downloadItemPointer.data();
+
+ switch (downloadItem->status()) {
+ case Downloading:
+ case Starting:
+ downloadItem->stop();
+ break;
+ case Idle:
+ case Failed:
+ downloadItem->tryAgain();
+ break;
+ case Finished:
+ downloadItem->openFolder();
+ }
+
+}
--- /dev/null
+#ifndef DOWNLOADVIEW_H
+#define DOWNLOADVIEW_H
+
+#include <QtGui>
+#include "View.h"
+
+class THBlackBar;
+class DownloadModel;
+class DownloadListView;
+class DownloadSettings;
+
+class DownloadView : public QWidget, public View {
+
+ Q_OBJECT
+
+public:
+ DownloadView(QWidget *parent);
+ void appear();
+ void disappear();
+ QMap<QString, QVariant> metadata() {
+ QMap<QString, QVariant> metadata;
+ metadata.insert("title", tr("Downloads"));
+ metadata.insert("description", "");
+ return metadata;
+ }
+
+public slots:
+ void itemEntered(const QModelIndex &index);
+ void buttonPushed(QModelIndex index);
+
+private:
+ THBlackBar *bar;
+ DownloadListView *listView;
+ DownloadModel *listModel;
+ QTimer *updateTimer;
+ DownloadSettings *downloadSettings;
+
+};
+
+#endif // DOWNLOADVIEW_H
+++ /dev/null
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the Graphics Dojo project on Qt Labs.
-**
-** This file may be used under the terms of the GNU General Public
-** License version 2.0 or 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of
-** this file. Please review the following information to ensure GNU
-** General Public Licensing requirements will be met:
-** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-****************************************************************************/
-
-#include "flickcharm.h"
-
-#include <QAbstractScrollArea>
-#include <QApplication>
-#include <QBasicTimer>
-#include <QEvent>
-#include <QHash>
-#include <QList>
-#include <QMouseEvent>
-#include <QScrollBar>
-
-#include <QDebug>
-
-struct FlickData {
- typedef enum { Steady, Pressed, ManualScroll, AutoScroll, Stop } State;
- State state;
- QWidget *widget;
- QPoint pressPos;
- QPoint offset;
- QPoint dragPos;
- QPoint speed;
- QList<QEvent*> ignored;
-};
-
-class FlickCharmPrivate
-{
-public:
- QHash<QWidget*, FlickData*> flickData;
- QBasicTimer ticker;
-};
-
-FlickCharm::FlickCharm(QObject *parent): QObject(parent)
-{
- d = new FlickCharmPrivate;
-}
-
-FlickCharm::~FlickCharm()
-{
- delete d;
-}
-
-void FlickCharm::activateOn(QWidget *widget)
-{
- QAbstractScrollArea *scrollArea = dynamic_cast<QAbstractScrollArea*>(widget);
- if (scrollArea) {
- scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-
- QWidget *viewport = scrollArea->viewport();
-
- viewport->installEventFilter(this);
- scrollArea->installEventFilter(this);
-
- d->flickData.remove(viewport);
- d->flickData[viewport] = new FlickData;
- d->flickData[viewport]->widget = widget;
- d->flickData[viewport]->state = FlickData::Steady;
-
- return;
- }
-
- qWarning() << "FlickCharm only works on QAbstractScrollArea (and derived classes)";
-}
-
-void FlickCharm::deactivateFrom(QWidget *widget)
-{
- QAbstractScrollArea *scrollArea = dynamic_cast<QAbstractScrollArea*>(widget);
- if (scrollArea) {
- QWidget *viewport = scrollArea->viewport();
-
- viewport->removeEventFilter(this);
- scrollArea->removeEventFilter(this);
-
- delete d->flickData[viewport];
- d->flickData.remove(viewport);
-
- return;
- }
-}
-
-static QPoint scrollOffset(QWidget *widget)
-{
- int x = 0, y = 0;
-
- QAbstractScrollArea *scrollArea = dynamic_cast<QAbstractScrollArea*>(widget);
- if (scrollArea) {
- x = scrollArea->horizontalScrollBar()->value();
- y = scrollArea->verticalScrollBar()->value();
- }
-
- return QPoint(x, y);
-}
-
-static void setScrollOffset(QWidget *widget, const QPoint &p)
-{
- QAbstractScrollArea *scrollArea = dynamic_cast<QAbstractScrollArea*>(widget);
- if (scrollArea) {
- scrollArea->horizontalScrollBar()->setValue(p.x());
- scrollArea->verticalScrollBar()->setValue(p.y());
- }
-}
-
-static QPoint deaccelerate(const QPoint &speed, int a = 1, int max = 64)
-{
- int x = qBound(-max, speed.x(), max);
- int y = qBound(-max, speed.y(), max);
- x = (x == 0) ? x : (x > 0) ? qMax(0, x - a) : qMin(0, x + a);
- y = (y == 0) ? y : (y > 0) ? qMax(0, y - a) : qMin(0, y + a);
- return QPoint(x, y);
-}
-
-bool FlickCharm::eventFilter(QObject *object, QEvent *event)
-{
-
- if (!object->isWidgetType())
- return false;
-
- QEvent::Type type = event->type();
- if (type != QEvent::MouseButtonPress &&
- type != QEvent::MouseButtonRelease &&
- type != QEvent::MouseMove)
- return false;
-
- QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event);
- if (!mouseEvent || mouseEvent->modifiers() != Qt::NoModifier)
- return false;
-
- QWidget *viewport = dynamic_cast<QWidget*>(object);
- FlickData *data = d->flickData.value(viewport);
- if (!viewport || !data || data->ignored.removeAll(event))
- return false;
-
- QWidget *scrollArea = dynamic_cast<QWidget*>(object);
-
- bool consumed = false;
- switch (data->state) {
-
- case FlickData::Steady:
- if (mouseEvent->type() == QEvent::MouseButtonPress)
- if (mouseEvent->buttons() == Qt::LeftButton) {
- consumed = true;
- data->state = FlickData::Pressed;
- data->pressPos = mouseEvent->pos();
- data->offset = scrollOffset(data->widget);
- }
- break;
-
- case FlickData::Pressed:
- if (mouseEvent->type() == QEvent::MouseButtonRelease) {
- consumed = true;
- data->state = FlickData::Steady;
-
- QMouseEvent *event1 = new QMouseEvent(QEvent::MouseButtonPress,
- data->pressPos, Qt::LeftButton,
- Qt::LeftButton, Qt::NoModifier);
- QMouseEvent *event2 = new QMouseEvent(*mouseEvent);
-
- data->ignored << event1;
- data->ignored << event2;
- QApplication::postEvent(object, event1);
- QApplication::postEvent(object, event2);
- }
- if (mouseEvent->type() == QEvent::MouseMove) {
-
- consumed = true;
- data->state = FlickData::ManualScroll;
- data->dragPos = QCursor::pos();
- if (!d->ticker.isActive())
- d->ticker.start(20, this);
-
- }
- break;
-
- case FlickData::ManualScroll:
- if (mouseEvent->type() == QEvent::MouseMove) {
- QPoint pos = scrollArea->mapFromGlobal(QCursor::pos());
- if (pos.x() > scrollArea->width() || pos.x() < 0) {
- pos.setX(1);
- QMouseEvent *event1 = new QMouseEvent(QEvent::MouseButtonPress,
- pos, Qt::LeftButton,
- Qt::LeftButton, Qt::NoModifier);
- QMouseEvent *event2 = new QMouseEvent(QEvent::MouseMove,
- pos, Qt::LeftButton,
- Qt::LeftButton, Qt::NoModifier);
-
- data->ignored << event1;
- data->ignored << event2;
- QApplication::postEvent(object, event1);
- QApplication::postEvent(object, event2);
- data->state = FlickData::Steady;
- consumed = true;
- } else {
- consumed = true;
- QPoint delta = mouseEvent->pos() - data->pressPos;
- setScrollOffset(data->widget, data->offset - delta);
- }
- }
- if (mouseEvent->type() == QEvent::MouseButtonRelease) {
- consumed = true;
- data->state = FlickData::AutoScroll;
- }
- break;
-
- case FlickData::AutoScroll:
- if (mouseEvent->type() == QEvent::MouseButtonPress) {
- consumed = true;
- data->state = FlickData::Stop;
- data->speed = QPoint(0, 0);
- data->pressPos = mouseEvent->pos();
- data->offset = scrollOffset(data->widget);
- }
- if (mouseEvent->type() == QEvent::MouseButtonRelease) {
- consumed = true;
- data->state = FlickData::Steady;
- data->speed = QPoint(0, 0);
- }
- break;
-
- case FlickData::Stop:
- if (mouseEvent->type() == QEvent::MouseButtonRelease) {
- consumed = true;
- data->state = FlickData::Steady;
- }
- if (mouseEvent->type() == QEvent::MouseMove) {
- consumed = true;
- data->state = FlickData::ManualScroll;
- data->dragPos = QCursor::pos();
- if (!d->ticker.isActive())
- d->ticker.start(20, this);
- }
- break;
-
- default:
- break;
- }
-
- return consumed;
-}
-
-void FlickCharm::timerEvent(QTimerEvent *event)
-{
- int count = 0;
- QHashIterator<QWidget*, FlickData*> item(d->flickData);
- while (item.hasNext()) {
- item.next();
- FlickData *data = item.value();
-
- const bool scrolling = data->state == FlickData::ManualScroll || data->state == FlickData::AutoScroll;
- scrollBarShow(data->widget, scrolling);
- // data->widget->setUpdatesEnabled(!scrolling);
-
- if (data->state == FlickData::ManualScroll) {
- count++;
- data->speed = QCursor::pos() - data->dragPos;
- data->dragPos = QCursor::pos();
- }
-
- if (data->state == FlickData::AutoScroll) {
- count++;
- data->speed = deaccelerate(data->speed);
- QPoint p = scrollOffset(data->widget);
- setScrollOffset(data->widget, p - data->speed);
- if (data->speed == QPoint(0, 0))
- data->state = FlickData::Steady;
- }
- }
-
- if (!count)
- d->ticker.stop();
-
- QObject::timerEvent(event);
-}
-
-void FlickCharm::showScrollBars(QWidget *widget) {
- QAbstractScrollArea *scrollArea = dynamic_cast<QAbstractScrollArea*>(widget);
- if (scrollArea) {
- // scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
- scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
- }
-}
-
-void FlickCharm::hideScrollBars(QWidget *widget) {
- QAbstractScrollArea *scrollArea = dynamic_cast<QAbstractScrollArea*>(widget);
- if (scrollArea) {
- scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- }
-}
-
-void FlickCharm::scrollBarShow(QWidget *widget, bool show) {
- static bool shown = false;
-
- if (show) {
- if (!shown) {
- showScrollBars(widget);
- shown = true;
- }
- } else {
- if (shown) {
- hideScrollBars(widget);
- shown = false;
- }
- }
-}
+++ /dev/null
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the Graphics Dojo project on Qt Labs.
-**
-** This file may be used under the terms of the GNU General Public
-** License version 2.0 or 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of
-** this file. Please review the following information to ensure GNU
-** General Public Licensing requirements will be met:
-** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-**
-** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-**
-****************************************************************************/
-
-#ifndef FLICKCHARM_H
-#define FLICKCHARM_H
-
-#include <QObject>
-
-class FlickCharmPrivate;
-class QWidget;
-
-class FlickCharm: public QObject
-{
- Q_OBJECT
-public:
- FlickCharm(QObject *parent = 0);
- ~FlickCharm();
- void activateOn(QWidget *widget);
- void deactivateFrom(QWidget *widget);
- bool eventFilter(QObject *object, QEvent *event);
-
-protected:
- void timerEvent(QTimerEvent *event);
-
-private:
- void scrollBarShow(QWidget *widget, bool show);
- void hideScrollBars(QWidget *widget);
- void showScrollBars(QWidget *widget);
- FlickCharmPrivate *d;
-};
-
-#endif // FLICKCHARM_H
--- /dev/null
+#include "fontutils.h"
+
+const QFont FontUtils::small() {
+ static QFont font;
+ static bool initialized = false;
+ if (!initialized) {
+ initialized = true;
+ font.setPointSize(font.pointSize()*.85);
+ }
+ return font;
+}
+
+const QFont FontUtils::smallBold() {
+ static QFont font;
+ static bool initialized = false;
+ if (!initialized) {
+ initialized = true;
+ font.setPointSize(font.pointSize()*.85);
+ font.setBold(true);
+ }
+ return font;
+}
+
+const QFont FontUtils::big() {
+ static QFont font;
+ static bool initialized = false;
+ if (!initialized) {
+ initialized = true;
+ font.setPointSize(font.pointSize()*1.5);
+ }
+ return font;
+}
+
+const QFont FontUtils::bigBold() {
+ static QFont font;
+ static bool initialized = false;
+ if (!initialized) {
+ initialized = true;
+ font.setPointSize(font.pointSize()*1.5);
+ font.setBold(true);
+ }
+ return font;
+}
--- /dev/null
+#ifndef FONTUTILS_H
+#define FONTUTILS_H
+
+#include <QFont>
+
+class FontUtils {
+
+public:
+ static const QFont small();
+ static const QFont smallBold();
+ static const QFont big();
+ static const QFont bigBold();
+
+};
+
+#endif // FONTUTILS_H
--- /dev/null
+#include "globalshortcutbackend.h"
+#include "globalshortcuts.h"
+
+GlobalShortcutBackend::GlobalShortcutBackend(GlobalShortcuts *parent)
+ : QObject(parent),
+ manager_(parent),
+ active_(false) { }
+
+bool GlobalShortcutBackend::Register() {
+ bool ret = DoRegister();
+ if (ret)
+ active_ = true;
+ return ret;
+}
+
+void GlobalShortcutBackend::Unregister() {
+ DoUnregister();
+ active_ = false;
+}
+
+void GlobalShortcutBackend::Reregister() {
+ Unregister();
+ Register();
+}
--- /dev/null
+#ifndef GLOBALSHORTCUTBACKEND_H
+#define GLOBALSHORTCUTBACKEND_H
+
+#include <QObject>
+
+class GlobalShortcuts;
+
+class GlobalShortcutBackend : public QObject {
+public:
+ GlobalShortcutBackend(GlobalShortcuts* parent = 0);
+ virtual ~GlobalShortcutBackend() {}
+
+ bool is_active() const { return active_; }
+
+ bool Register();
+ void Unregister();
+ void Reregister();
+
+protected:
+ virtual bool DoRegister() = 0;
+ virtual void DoUnregister() = 0;
+
+ GlobalShortcuts* manager_;
+ bool active_;
+};
+
+#endif // GLOBALSHORTCUTBACKEND_H
--- /dev/null
+#include "globalshortcuts.h"
+#include "globalshortcutbackend.h"
+
+static GlobalShortcuts *singleton = 0;
+
+GlobalShortcuts& GlobalShortcuts::instance() {
+ if (!singleton) singleton = new GlobalShortcuts();
+ return *singleton;
+}
+
+GlobalShortcuts::GlobalShortcuts(QObject *parent)
+ : QObject(parent),
+ backend(0) {
+
+ // Create actions
+ AddShortcut("play", tr("Play"), SIGNAL(Play()));
+ AddShortcut("pause", tr("Pause"), SIGNAL(Pause()));
+ AddShortcut("play_pause", tr("Play/Pause"), SIGNAL(PlayPause()), QKeySequence(Qt::Key_MediaPlay));
+ AddShortcut("stop", tr("Stop"), SIGNAL(Stop()), QKeySequence(Qt::Key_MediaStop));
+ AddShortcut("stop_after", tr("Stop playing after current track"), SIGNAL(StopAfter()));
+ AddShortcut("next_track", tr("Next track"), SIGNAL(Next()), QKeySequence(Qt::Key_MediaNext));
+ AddShortcut("prev_track", tr("Previous track"), SIGNAL(Previous()), QKeySequence(Qt::Key_MediaPrevious));
+ AddShortcut("inc_volume", tr("Increase volume"), SIGNAL(IncVolume()));
+ AddShortcut("dec_volume", tr("Decrease volume"), SIGNAL(DecVolume()));
+ AddShortcut("mute", tr("Mute"), SIGNAL(Mute()));
+ AddShortcut("seek_forward", tr("Seek forward"), SIGNAL(SeekForward()));
+ AddShortcut("seek_backward", tr("Seek backward"), SIGNAL(SeekBackward()));
+
+}
+
+void GlobalShortcuts::AddShortcut(const QString &id, const QString &name,
+ const char* signal,
+ const QKeySequence &default_key) {
+ Shortcut shortcut;
+ shortcut.action = new QAction(name, this);
+ shortcut.action->setShortcut(default_key);
+ shortcut.id = id;
+ shortcut.default_key = default_key;
+
+ connect(shortcut.action, SIGNAL(triggered()), this, signal);
+
+ shortcuts_[id] = shortcut;
+}
+
+void GlobalShortcuts::reload() {
+ if (backend) {
+ backend->Unregister();
+ backend->Register();
+ }
+}
--- /dev/null
+#ifndef GLOBALSHORTCUTS_H
+#define GLOBALSHORTCUTS_H
+
+#include <QtCore>
+#include <QAction>
+
+class GlobalShortcutBackend;
+
+class GlobalShortcuts : public QObject {
+
+ Q_OBJECT
+
+public:
+ static GlobalShortcuts& instance();
+
+ struct Shortcut {
+ QString id;
+ QKeySequence default_key;
+ QAction* action;
+ };
+
+ QMap<QString, Shortcut> shortcuts() const { return shortcuts_; }
+ void setBackend(GlobalShortcutBackend* backend) {
+ this->backend = backend;
+ reload();
+ }
+
+public slots:
+ void reload();
+
+signals:
+ void Play();
+ void Pause();
+ void PlayPause();
+ void Stop();
+ void StopAfter();
+ void Next();
+ void Previous();
+ void IncVolume();
+ void DecVolume();
+ void Mute();
+ void SeekForward();
+ void SeekBackward();
+
+private:
+ GlobalShortcuts(QObject* parent = 0);
+ void AddShortcut(const QString& id, const QString& name, const char* signal,
+ const QKeySequence& default_key = QKeySequence(0));
+
+private:
+ GlobalShortcutBackend* backend;
+
+ QMap<QString, Shortcut> shortcuts_;
+};
+
+#endif
--- /dev/null
+#include "gnomeglobalshortcutbackend.h"
+#include "globalshortcuts.h"
+
+#include <QAction>
+#include <QtDebug>
+#include <QtDBus>
+
+const char* GnomeGlobalShortcutBackend::kGsdService = "org.gnome.SettingsDaemon";
+const char* GnomeGlobalShortcutBackend::kGsdPath = "/org/gnome/SettingsDaemon/MediaKeys";
+const char* GnomeGlobalShortcutBackend::kGsdInterface = "org.gnome.SettingsDaemon.MediaKeys";
+
+GnomeGlobalShortcutBackend::GnomeGlobalShortcutBackend(GlobalShortcuts* parent)
+ : GlobalShortcutBackend(parent),
+ interface_(NULL) { }
+
+bool GnomeGlobalShortcutBackend::IsGsdAvailable() {
+ return QDBusConnection::sessionBus().interface()->isServiceRegistered(
+ GnomeGlobalShortcutBackend::kGsdService);
+}
+
+bool GnomeGlobalShortcutBackend::DoRegister() {
+ // qDebug() << __PRETTY_FUNCTION__;
+ // Check if the GSD service is available
+ if (!QDBusConnection::sessionBus().interface()->isServiceRegistered(kGsdService))
+ return false;
+
+ if (!interface_) {
+ interface_ = new QDBusInterface(
+ kGsdService, kGsdPath, kGsdInterface, QDBusConnection::sessionBus(), this);
+ }
+
+ connect(interface_, SIGNAL(MediaPlayerKeyPressed(QString,QString)),
+ this, SLOT(GnomeMediaKeyPressed(QString,QString)));
+
+ return true;
+}
+
+void GnomeGlobalShortcutBackend::DoUnregister() {
+ // Check if the GSD service is available
+ if (!QDBusConnection::sessionBus().interface()->isServiceRegistered(kGsdService))
+ return;
+ if (!interface_)
+ return;
+
+ disconnect(interface_, SIGNAL(MediaPlayerKeyPressed(QString,QString)),
+ this, SLOT(GnomeMediaKeyPressed(QString,QString)));
+}
+
+void GnomeGlobalShortcutBackend::GnomeMediaKeyPressed(const QString&, const QString& key) {
+ if (key == "Play") manager_->shortcuts()["play_pause"].action->trigger();
+ if (key == "Stop") manager_->shortcuts()["stop"].action->trigger();
+ if (key == "Next") manager_->shortcuts()["next_track"].action->trigger();
+ if (key == "Previous") manager_->shortcuts()["prev_track"].action->trigger();
+}
--- /dev/null
+#ifndef GNOMEGLOBALSHORTCUTBACKEND_H
+#define GNOMEGLOBALSHORTCUTBACKEND_H
+
+#include "globalshortcutbackend.h"
+
+class QDBusInterface;
+
+class GnomeGlobalShortcutBackend : public GlobalShortcutBackend {
+ Q_OBJECT
+
+public:
+ GnomeGlobalShortcutBackend(GlobalShortcuts* parent);
+ static bool IsGsdAvailable();
+ static const char* kGsdService;
+ static const char* kGsdPath;
+ static const char* kGsdInterface;
+
+protected:
+ bool DoRegister();
+ void DoUnregister();
+
+private slots:
+ void GnomeMediaKeyPressed(const QString& application, const QString& key);
+
+private:
+ QDBusInterface* interface_;
+};
+
+#endif // GNOMEGLOBALSHORTCUTBACKEND_H
popup->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
popup->installEventFilter(this);
popup->setMouseTracking(true);
+ popup->setWindowOpacity(.9);
connect(popup, SIGNAL(itemClicked(QListWidgetItem*)),
SLOT(doneCompletion()));
Q_GLOBAL_STATIC(QtIconLoaderImplementation, iconLoaderInstance)
#endif
-/*!
+ /*!
Returns the standard icon for the given icon /a name
as specified in the freedesktop icon spec
crossplatform code.
*/
-QIcon QtIconLoader::icon(const QString &name, const QIcon &fallback)
+ QIcon QtIconLoader::icon(const QString &name)
{
QIcon icon;
-#if QT_VERSION < 0x040600
-
#ifdef Q_WS_X11
+#if QT_VERSION < 0x040600
QString pngExtension(QLatin1String(".png"));
QList<int> iconSizes;
- iconSizes << 16 << 24 << 32 << 48 << 64;
+ iconSizes << 16 << 22 << 24 << 32 << 48;
Q_FOREACH (int size, iconSizes) {
- icon.addPixmap(iconLoaderInstance()->findIcon(size, name + pngExtension));
+ icon.addPixmap(iconLoaderInstance()->findIcon(size, name));
}
+#else
+ icon = QIcon::fromTheme(name);
#endif
-
#else
- icon = QIcon::fromTheme(name, fallback);
+ icon = QIcon(QString(":/images/%1.png").arg(name));
+ if (!icon.isNull()) {
+ icon.addPixmap(QString(":/images/%1_active.png").arg(name), QIcon::Active);
+ icon.addPixmap(QString(":/images/%1_selected.png").arg(name), QIcon::Selected);
+ }
#endif
- if (icon.isNull())
- icon = fallback;
- Q_UNUSED(name);
return icon;
}
dataDirs.prepend(QDir::homePath() + QLatin1String("/:"));
QStringList kdeDirs = QFile::decodeName(getenv("KDEDIRS")).split(QLatin1Char(':'));
Q_FOREACH (const QString dirName, kdeDirs)
- dataDirs.append(QLatin1Char(':') + dirName + QLatin1String("/share"));
+ dataDirs.append(QLatin1Char(':') + dirName + QLatin1String("/share"));
iconDirs = dataDirs.split(QLatin1Char(':'));
QFileInfo fileInfo(QLatin1String("/usr/share/icons/default.kde"));
QString contentDir = (iconDirs[i].startsWith(QDir::homePath())) ?
QLatin1String("/.icons/") : QLatin1String("/icons/");
QString fileName = iconDirs[i] + contentDir + themeName + QLatin1Char('/') + subDirs[j] + QLatin1Char('/') + iconName;
- QFile file(fileName);
- if (file.exists())
- pixmap.load(fileName);
+
+ QString svgExtension(QLatin1String(".svg"));
+ QString svgFilename = fileName + svgExtension;
+ QFile svgFile(svgFilename);
+ if (false && svgFile.exists()) {
+ // qDebug() << "Found svg";
+ pixmap.load(svgFilename);
+ } else {
+ QString pngExtension(QLatin1String(".png"));
+ QString pngFilename = fileName + pngExtension;
+ QFile pngFile(pngFilename);
+ if (pngFile.exists()) {
+ // qDebug() << "Found png";
+ pixmap.load(pngFilename);
+ }
+ }
+
if (!pixmap.isNull())
break;
}
class QtIconLoader
{
public:
- static QIcon icon(const QString &name, const QIcon &fallback = QIcon());
+ static QIcon icon(const QString &name);
};
#endif // QTICONLOADER_H
#include <QtGui>
#include <qtsingleapplication.h>
-#include "Constants.h"
+#include "constants.h"
#include "MainWindow.h"
+#ifdef APP_MAC
+// #include "local/mac/mac_startup.h"
+#endif
int main(int argc, char **argv) {
+#ifdef APP_MAC
+ // mac::MacMain();
+#endif
+
QtSingleApplication app(argc, argv);
if (app.sendMessage("Wake up!"))
return 0;
app.setApplicationName(Constants::APP_NAME);
app.setOrganizationName(Constants::ORG_NAME);
app.setOrganizationDomain(Constants::ORG_DOMAIN);
-#ifndef Q_WS_MAC
+#ifndef APP_MAC
app.setWheelScrollLines(1);
#endif
#else
QString dataDir = "";
#endif
- QString localeDir = dataDir + QDir::separator() + "locale";
- // if app was not "installed" use the app directory
+ QString localeDir = qApp->applicationDirPath() + QDir::separator() + "locale";
if (!QFile::exists(localeDir)) {
- localeDir = qApp->applicationDirPath() + QDir::separator() + "locale";
- // qDebug() << "Using locale dir" << localeDir << locale;
+ localeDir = dataDir + QDir::separator() + "locale";
}
+ // qDebug() << "Using locale dir" << localeDir << locale;
QTranslator translator;
translator.load(locale, localeDir);
app.installTranslator(&translator);
mainWin.setWindowTitle(Constants::APP_NAME);
// no window icon on Mac
-#ifndef Q_WS_MAC
+#ifndef APP_MAC
if (!QFile::exists(dataDir)) {
dataDir = qApp->applicationDirPath() + "/data";
}
#include "networkaccess.h"
-#include "Constants.h"
+#include "constants.h"
#include <QtGui>
namespace The {
NetworkAccess* http();
}
+const QString USER_AGENT = QString(Constants::APP_NAME)
+ + " " + Constants::VERSION
+ + " (" + Constants::WEBSITE + ")";
+
NetworkReply::NetworkReply(QNetworkReply *networkReply) : QObject(networkReply) {
this->networkReply = networkReply;
}
QNetworkAccessManager *manager = The::networkAccessManager();
QNetworkRequest request(url);
- request.setRawHeader("User-Agent", Constants::USER_AGENT.toUtf8());
+ request.setRawHeader("User-Agent", USER_AGENT.toUtf8());
request.setRawHeader("Connection", "Keep-Alive");
QNetworkReply *networkReply;
#include "PrettyItemDelegate.h"
#include "../ListModel.h"
+#include "../fontutils.h"
+#include "../downloaditem.h"
+#include "../iconloader/qticonloader.h"
#include <QFontMetricsF>
#include <QPainter>
const qreal PrettyItemDelegate::THUMB_WIDTH = 120.0;
const qreal PrettyItemDelegate::PADDING = 10.0;
-PrettyItemDelegate::PrettyItemDelegate( QObject* parent ) : QStyledItemDelegate( parent ) {
-
+PrettyItemDelegate::PrettyItemDelegate(QObject* parent, bool downloadInfo)
+ : QStyledItemDelegate(parent),
+ downloadInfo(downloadInfo) {
boldFont.setBold(true);
- smallerFont.setPointSize(smallerFont.pointSize()*.85);
- smallerBoldFont.setBold(true);
- smallerBoldFont.setPointSize(smallerBoldFont.pointSize()*.85);
- QFontInfo fontInfo(smallerFont);
- if (fontInfo.pixelSize() < 10) {
- smallerFont.setPixelSize(10);
- smallerBoldFont.setPixelSize(10);
- }
- createPlayIcon();
+ smallerBoldFont = FontUtils::smallBold();
+ smallerFont = FontUtils::small();
+
+ if (downloadInfo) {
+ progressBar = new QProgressBar(qApp->activeWindow());
+ QPalette palette = progressBar->palette();
+ palette.setColor(QPalette::Window, Qt::transparent);
+ progressBar->setPalette(palette);
+ progressBar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
+ progressBar->hide();
+ } else createPlayIcon();
}
void PrettyItemDelegate::createPlayIcon() {
painter->translate( option.rect.topLeft() );
- const QRectF line(0, 0, option.rect.width(), option.rect.height());
+ QRectF line(0, 0, option.rect.width(), option.rect.height());
+ if (downloadInfo) line.setWidth(line.width() / 2);
painter->setClipRect(line);
const bool isActive = index.data( ActiveTrackRole ).toBool();
}
if (isActive) painter->setFont(boldFont);
- const QFontMetricsF fm(painter->font());
- const QFontMetricsF boldMetrics(boldFont);
// text color
if (isSelected)
*/
// separator
+ painter->setClipping(false);
painter->setPen(option.palette.color(QPalette::Midlight));
- painter->drawLine(THUMB_WIDTH, THUMB_HEIGHT, line.width(), THUMB_HEIGHT);
+ painter->drawLine(THUMB_WIDTH, THUMB_HEIGHT, option.rect.width(), THUMB_HEIGHT);
if (!video->thumbnail().isNull())
painter->setPen(Qt::black);
painter->drawLine(0, THUMB_HEIGHT, THUMB_WIDTH-1, THUMB_HEIGHT);
painter->restore();
-}
-
-QPointF PrettyItemDelegate::centerImage( const QPixmap& pixmap, const QRectF& rect ) const {
- qreal pixmapRatio = ( qreal )pixmap.width() / ( qreal )pixmap.height();
-
- qreal moveByX = 0.0;
- qreal moveByY = 0.0;
+ if (downloadInfo) paintDownloadInfo(painter, option, index);
- if ( pixmapRatio >= 1 )
- moveByY = ( rect.height() - ( rect.width() / pixmapRatio ) ) / 2.0;
- else
- moveByX = ( rect.width() - ( rect.height() * pixmapRatio ) ) / 2.0;
-
- return QPointF( moveByX, moveByY );
}
void PrettyItemDelegate::paintActiveOverlay( QPainter *painter, qreal x, qreal y, qreal w, qreal h ) const {
painter->drawText(textBox, Qt::AlignCenter, time);
painter->restore();
}
+
+void PrettyItemDelegate::paintDownloadInfo( QPainter* painter,
+ const QStyleOptionViewItem& option,
+ const QModelIndex& index ) const {
+
+ // get the video metadata
+ const DownloadItemPointer downloadItemPointer = index.data(DownloadItemRole).value<DownloadItemPointer>();
+ const DownloadItem *downloadItem = downloadItemPointer.data();
+
+ painter->save();
+
+ const QRect line(0, 0, option.rect.width() / 2, option.rect.height());
+
+ painter->translate(option.rect.topLeft());
+ painter->translate(line.width(), 0);
+
+ QString message;
+ DownloadItemStatus status = downloadItem->status();
+
+ if (status == Downloading) {
+ QString downloaded = DownloadItem::formattedFilesize(downloadItem->bytesReceived());
+ QString total = DownloadItem::formattedFilesize(downloadItem->bytesTotal());
+ QString speed = DownloadItem::formattedSpeed(downloadItem->currentSpeed());
+ QString eta = DownloadItem::formattedTime(downloadItem->remainingTime());
+
+ message = tr("%1 of %2 (%3) — %4").arg(
+ downloaded,
+ total,
+ speed,
+ eta
+ );
+ } else if (status == Starting) {
+ message = tr("Preparing");
+ } else if (status == Failed) {
+ message = tr("Failed") + " — " + downloadItem->errorMessage();
+ } else if (status == Finished) {
+ message = tr("Completed");
+ } else if (status == Idle) {
+ message = tr("Stopped");
+ }
+
+ // progressBar->setPalette(option.palette);
+ if (status == Finished) {
+ progressBar->setValue(100);
+ progressBar->setEnabled(true);
+ } else if (status == Downloading) {
+ progressBar->setValue(downloadItem->currentPercent());
+ progressBar->setEnabled(true);
+ } else {
+ progressBar->setValue(0);
+ progressBar->setEnabled(false);
+ }
+
+ int progressBarWidth = line.width() - PADDING*4 - 16;
+ progressBar->setMaximumWidth(progressBarWidth);
+ progressBar->setMinimumWidth(progressBarWidth);
+ painter->save();
+ painter->translate(PADDING, PADDING);
+ progressBar->render(painter);
+ painter->restore();
+
+ bool downloadButtonHovered = false;
+ bool downloadButtonPressed = false;
+ const bool isHovered = index.data(HoveredItemRole).toBool();
+ if (isHovered) {
+ downloadButtonHovered = index.data(DownloadButtonHoveredRole).toBool();
+ downloadButtonPressed = index.data(DownloadButtonPressedRole).toBool();
+ }
+ QIcon::Mode iconMode;
+ if (downloadButtonPressed) iconMode = QIcon::Selected;
+ else if (downloadButtonHovered) iconMode = QIcon::Active;
+ else iconMode = QIcon::Normal;
+
+ if (status != Finished && status != Failed && status != Idle) {
+ if (downloadButtonHovered) message = tr("Stop downloading");
+ painter->save();
+ QIcon closeIcon = QtIconLoader::icon("window-close");
+ painter->drawPixmap(downloadButtonRect(line), closeIcon.pixmap(16, 16, iconMode));
+ painter->restore();
+ }
+
+ else if (status == Finished) {
+ if (downloadButtonHovered)
+#ifdef APP_MAC
+ message = tr("Show in %1").arg("Finder");
+#else
+ message = tr("Open parent folder");
+#endif
+ painter->save();
+ QIcon searchIcon = QtIconLoader::icon("system-search");
+ painter->drawPixmap(downloadButtonRect(line), searchIcon.pixmap(16, 16, iconMode));
+ painter->restore();
+ }
+
+ else if (status == Failed || status == Idle) {
+ if (downloadButtonHovered) message = tr("Restart downloading");
+ painter->save();
+ QIcon searchIcon = QtIconLoader::icon("view-refresh");
+ painter->drawPixmap(downloadButtonRect(line), searchIcon.pixmap(16, 16, iconMode));
+ painter->restore();
+ }
+
+ QRectF textBox = line.adjusted(PADDING, PADDING*2 + progressBar->sizeHint().height(), -2 * PADDING, -PADDING);
+ textBox = painter->boundingRect( textBox, Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap, message);
+ painter->drawText(textBox, Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap, message);
+
+ painter->restore();
+
+}
+
+QRect PrettyItemDelegate::downloadButtonRect(QRect line) const {
+ return QRect(
+ line.width() - PADDING*2 - 16,
+ PADDING + progressBar->sizeHint().height() / 2 - 8,
+ 16,
+ 16);
+}
#include <QStyledItemDelegate>
class QPainter;
+class QProgressBar;
class PrettyItemDelegate : public QStyledItemDelegate {
Q_OBJECT
public:
- PrettyItemDelegate( QObject* parent = 0 );
+ PrettyItemDelegate(QObject* parent, bool downloadInfo = false);
~PrettyItemDelegate();
QSize sizeHint( const QStyleOptionViewItem&, const QModelIndex& ) const;
void paint( QPainter*, const QStyleOptionViewItem&, const QModelIndex& ) const;
+ QRect downloadButtonRect(QRect line) const;
private:
void createPlayIcon();
void paintBody( QPainter*, const QStyleOptionViewItem&, const QModelIndex& ) const;
- QPointF centerImage( const QPixmap&, const QRectF& ) const;
+ void paintDownloadInfo( QPainter* painter,
+ const QStyleOptionViewItem& option,
+ const QModelIndex& index ) const;
// active track painting
void paintActiveOverlay( QPainter *painter, qreal x, qreal y, qreal w, qreal h ) const;
QFont boldFont;
QFont smallerFont;
QFont smallerBoldFont;
+
+ bool downloadInfo;
+ QProgressBar *progressBar;
};
#endif
#define PLAYLISTWIDGET_H
#include <QtGui>
-#include "thblackbar.h"
+#include "thlibrary/thblackbar.h"
class PlaylistWidget : public QWidget
{
#include "spacer.h"
-Spacer::Spacer(QWidget *parent, QWidget *child) : QWidget(parent) {
- QBoxLayout *layout = new QHBoxLayout();
- layout->addWidget(child);
- setLayout(layout);
+Spacer::Spacer(QWidget *parent) : QWidget(parent) { }
+
+QSize Spacer::sizeHint() const {
+ return QSize(10, 1);
}
#include <QtGui>
-class Spacer : public QWidget
-{
+class Spacer : public QWidget {
+
public:
- Spacer(QWidget *parent, QWidget *child);
+ Spacer(QWidget *parent = 0);
+
+protected:
+ QSize sizeHint() const;
};
#endif // SPACER_H
#include <QtGui>
#include "thblackbar.h"
+#include "../fontutils.h"
/* ============================================================================
* PRIVATE Class
* PROTECTED Methods
*/
void THBlackBar::paintEvent (QPaintEvent *event) {
- int height = event->rect().height();
- int width = event->rect().width();
+ int height = rect().height();
+ int width = rect().width();
// int mh = (height / 2);
// THPainter p(this);
}
int THBlackBar::calculateButtonWidth (void) const {
- QFont smallerBoldFont;
- smallerBoldFont.setBold(true);
- smallerBoldFont.setPointSize(smallerBoldFont.pointSize()*.85);
+ QFont smallerBoldFont = FontUtils::smallBold();
QFontMetrics fontMetrics(smallerBoldFont);
int tmpItemWidth, itemWidth = 0;
foreach (QAction *action, d->actionList) {
painter->fillRect(0, 0, width, mh, QBrush(gradient));
painter->fillRect(0, mh, width, mh, color);
+#ifdef APP_MAC
+ painter->drawRect(-1, -1, width+1, height);
+#else
painter->drawRect(0, 0, width, height);
-
- QFont smallerBoldFont;
- smallerBoldFont.setBold(true);
- smallerBoldFont.setPointSize(smallerBoldFont.pointSize()*.85);
+#endif
+ QFont smallerBoldFont = FontUtils::smallBold();
painter->setFont(smallerBoldFont);
painter->setPen(QPen(QColor(0xff, 0xff, 0xff), 1));
painter->drawText(0, 1, width, height, Qt::AlignCenter, action->text());
#include "updatechecker.h"
#include "networkaccess.h"
-#include "Constants.h"
+#include "constants.h"
namespace The {
NetworkAccess* http();
m_lineEdit->setFrame(true);
QSize size = m_lineEdit->sizeHint();
m_lineEdit->setFrame(false);
+ size = size + QSize(3, 3);
return size;
}
Video::Video() : m_duration(0),
m_viewCount(-1),
definitionCode(0),
-elIndex(0) { }
+elIndex(0),
+loadingStreamUrl(false)
+{ }
+
+Video* Video::clone() {
+ Video* cloneVideo = new Video();
+ cloneVideo->m_title = m_title;
+ cloneVideo->m_description = m_description;
+ cloneVideo->m_author = m_author;
+ cloneVideo->m_webpage = m_webpage;
+ cloneVideo->m_streamUrl = m_streamUrl;
+ cloneVideo->m_thumbnail = m_thumbnail;
+ cloneVideo->m_thumbnailUrls = m_thumbnailUrls;
+ cloneVideo->m_duration = m_duration;
+ cloneVideo->m_published = m_published;
+ cloneVideo->m_viewCount = m_viewCount;
+ cloneVideo->videoId = videoId;
+ cloneVideo->videoToken = videoToken;
+ cloneVideo->definitionCode = definitionCode;
+ return cloneVideo;
+}
void Video::preloadThumbnail() {
if (m_thumbnailUrls.isEmpty()) return;
return m_thumbnail;
}
-static const QStringList elTypes = QStringList() << "embedded" << "vevo" << "detailpage";
-
void Video::loadStreamUrl() {
+ if (loadingStreamUrl) {
+ qDebug() << "Already loading stream URL for" << this->title();
+ return;
+ }
+ loadingStreamUrl = true;
// https://develop.participatoryculture.org/trac/democracy/browser/trunk/tv/portable/flashscraper.py
bool match = re.exactMatch(m_webpage.toString());
if (!match || re.numCaptures() < 1) {
emit errorStreamUrl(QString("Cannot get video id for %1").arg(m_webpage.toString()));
+ loadingStreamUrl = false;
return;
}
videoId = re.cap(1);
}
void Video::getVideoInfo() {
+ static const QStringList elTypes = QStringList() << "&el=embedded" << "&el=vevo" << "&el=detailpage" << "";
if (elIndex > elTypes.size() - 1) {
// Don't panic! We have a plan B.
// get the youtube video webpage
+ qDebug() << "Scraping" << webpage().toString();
QObject *reply = The::http()->get(webpage().toString());
connect(reply, SIGNAL(data(QByteArray)), SLOT(scrapeWebPage(QByteArray)));
connect(reply, SIGNAL(error(QNetworkReply*)), SLOT(errorVideoInfo(QNetworkReply*)));
// Get Video Token
QUrl videoInfoUrl = QUrl(QString(
- "http://www.youtube.com/get_video_info?video_id=%1&el=%2&ps=default&eurl="
+ "http://www.youtube.com/get_video_info?video_id=%1%2&ps=default&eurl=&gl=US&hl=en"
).arg(videoId, elTypes.at(elIndex)));
QObject *reply = The::http()->get(videoInfoUrl);
void Video::gotVideoInfo(QByteArray data) {
QString videoInfo = QString::fromUtf8(data);
+ // get video token
QRegExp re = QRegExp("^.*&token=([^&]+).*$");
bool match = re.exactMatch(videoInfo);
-
// handle regexp failure
if (!match || re.numCaptures() < 1) {
// Don't panic! We're gonna try another magic "el" param
getVideoInfo();
return;
}
-
QString videoToken = re.cap(1);
- // FIXME proper decode
- videoToken = videoToken.replace("%3D", "=");
- // we'll need this in gotHeadHeaders()
+ while (videoToken.contains('%'))
+ videoToken = QByteArray::fromPercentEncoding(videoToken.toAscii());
+ // qDebug() << "videoToken" << videoToken;
this->videoToken = videoToken;
- // qDebug() << "token" << videoToken;
+ /*
+ // get fmt_url_map
+ re = QRegExp("^.*&fmt_url_map=([^&]+).*$");
+ match = re.exactMatch(videoInfo);
+ // handle regexp failure
+ if (!match || re.numCaptures() < 1) {
+ // Don't panic! We're gonna try another magic "el" param
+ elIndex++;
+ getVideoInfo();
+ return;
+ }
+ QString fmtUrlMap = re.cap(1);
+
+ while (fmtUrlMap.contains('%'))
+ fmtUrlMap = QByteArray::fromPercentEncoding(fmtUrlMap.toAscii());
+
+ qDebug() << "fmtUrlMap" << fmtUrlMap;
+ QStringList formatUrls = fmtUrlMap.split(",", QString::SkipEmptyParts);
+ foreach(QString formatUrl, formatUrls) {
+ int separator = formatUrl.indexOf("|");
+ if (separator == -1) continue;
+ int format = formatUrl.left(separator).toInt();
+ QString url = formatUrl.mid(separator + 1);
+ qDebug() << format << url;
+ }
+ */
QSettings settings;
QString definitionName = settings.value("definition").toString();
}
void Video::foundVideoUrl(QString videoToken, int definitionCode) {
+ // qDebug() << "foundVideoUrl" << videoToken << definitionCode;
QUrl videoUrl = QUrl(QString(
- "http://www.youtube.com/get_video?video_id=%1&t=%2&eurl=&el=embedded&ps=default&fmt=%3"
+ "http://www.youtube.com/get_video?video_id=%1&t=%2&eurl=&el=&ps=&asv=&fmt=%3"
).arg(videoId, videoToken, QString::number(definitionCode)));
m_streamUrl = videoUrl;
emit gotStreamUrl(videoUrl);
+ loadingStreamUrl = false;
}
void Video::errorVideoInfo(QNetworkReply *reply) {
emit errorStreamUrl(tr("Network error: %1 for %2").arg(reply->errorString(), reply->url().toString()));
+ loadingStreamUrl = false;
}
void Video::scrapeWebPage(QByteArray data) {
// on regexp failure, stop and report error
if (!match || re.numCaptures() < 1) {
emit errorStreamUrl("Error parsing video page");
+ loadingStreamUrl = false;
return;
}
this->definitionCode = definitionCode;
QUrl videoUrl = QUrl(QString(
- "http://www.youtube.com/get_video?video_id=%1&t=%2&eurl=&el=embedded&ps=default&fmt=%3"
+ "http://www.youtube.com/get_video?video_id=%1&t=%2&eurl=&el=&ps=&asv=&fmt=%3"
).arg(videoId, videoToken, QString::number(definitionCode)));
QObject *reply = The::http()->head(videoUrl);
public:
Video();
+ Video* clone();
const QString title() const { return m_title; }
void setTitle( QString title ) { m_title = title; }
void loadStreamUrl();
QUrl getStreamUrl() { return m_streamUrl; }
+ QString id() { return videoId; }
+
public slots:
void setThumbnail(QByteArray bytes);
// current index for the elTypes list
// needed to iterate on elTypes
int elIndex;
+
+ bool loadingStreamUrl;
};
// This is required in order to use QPointer<Video> as a QVariant
#include "youtubesearch.h"
#include "youtubestreamreader.h"
-#include "Constants.h"
+#include "constants.h"
#include "networkaccess.h"
namespace The {
// Useful to test with a local webserver
/*
- urlString = QString("http://localhost/oringo/video.xml?q=%1&max-results=%2&start-index=%3")
+ urlString = QString("http://localhost/~flavio/text.xml?q=%1&max-results=%2&start-index=%3")
.arg(searchParams->keywords(), QString::number(max), QString::number(skip));
- */
+ */
switch (searchParams->sortBy()) {
case SearchParams::SortByNewest: