]> git.sur5r.net Git - minitube/commitdiff
Imported Upstream version 1.2 upstream/1.2
authorJakob Haufe <sur5r@sur5r.net>
Mon, 6 Aug 2012 20:31:36 +0000 (22:31 +0200)
committerJakob Haufe <sur5r@sur5r.net>
Mon, 6 Aug 2012 20:31:36 +0000 (22:31 +0200)
99 files changed:
.gitignore
CHANGES
INSTALL
Info.plist [deleted file]
TODO
data/128x128/minitube.png
data/22x22/minitube.png [new file with mode: 0644]
data/512x512/minitube.png [new file with mode: 0644]
images/media-playback-pause.png [deleted file]
images/media-playback-start.png [deleted file]
images/media-playback-stop.png [deleted file]
images/media-skip-forward.png [deleted file]
images/view-fullscreen.png [deleted file]
locale/ar.ts
locale/bg_BG.ts
locale/cs_CZ.ts
locale/de_DE.ts
locale/el_GR.ts
locale/empty.ts [new file with mode: 0644]
locale/en_US.ts [new file with mode: 0644]
locale/es.ts
locale/es_AR.ts
locale/es_ES.ts
locale/fi_FI.ts
locale/fr_FR.ts
locale/gl.ts
locale/he_IL.ts
locale/hr_HR.ts
locale/hu_HU.ts
locale/it_IT.ts
locale/ja_JP.ts
locale/lat.ts
locale/locale.pri
locale/nb_NO.ts
locale/nl_NL.ts
locale/pl_PL.ts
locale/pt_BR.ts
locale/pt_PT.ts
locale/ro_RO.ts
locale/ru_RU.ts
locale/tr_TR.ts
locale/uk.ts
locale/zh_CN.ts [new file with mode: 0644]
minitube.icns [deleted file]
minitube.ico [deleted file]
minitube.pro
minitube.rc [deleted file]
resources.qrc
src/AboutView.cpp
src/AboutView.h
src/Constants.h [deleted file]
src/ListModel.cpp
src/ListModel.h
src/MainWindow.cpp
src/MainWindow.h
src/MediaView.cpp
src/MediaView.h
src/SearchView.cpp
src/SearchView.h
src/constants.cpp [new file with mode: 0644]
src/constants.h [new file with mode: 0755]
src/downloaditem.cpp [new file with mode: 0644]
src/downloaditem.h [new file with mode: 0644]
src/downloadlistview.cpp [new file with mode: 0644]
src/downloadlistview.h [new file with mode: 0644]
src/downloadmanager.cpp [new file with mode: 0644]
src/downloadmanager.h [new file with mode: 0644]
src/downloadmodel.cpp [new file with mode: 0644]
src/downloadmodel.h [new file with mode: 0644]
src/downloadsettings.cpp [new file with mode: 0644]
src/downloadsettings.h [new file with mode: 0644]
src/downloadview.cpp [new file with mode: 0644]
src/downloadview.h [new file with mode: 0644]
src/flickcharm.cpp [deleted file]
src/flickcharm.h [deleted file]
src/fontutils.cpp [new file with mode: 0644]
src/fontutils.h [new file with mode: 0644]
src/globalshortcutbackend.cpp [new file with mode: 0644]
src/globalshortcutbackend.h [new file with mode: 0644]
src/globalshortcuts.cpp [new file with mode: 0644]
src/globalshortcuts.h [new file with mode: 0644]
src/gnomeglobalshortcutbackend.cpp [new file with mode: 0644]
src/gnomeglobalshortcutbackend.h [new file with mode: 0644]
src/googlesuggest.cpp
src/iconloader/qticonloader.cpp
src/iconloader/qticonloader.h
src/main.cpp
src/networkaccess.cpp
src/playlist/PrettyItemDelegate.cpp
src/playlist/PrettyItemDelegate.h
src/playlistwidget.h
src/spacer.cpp
src/spacer.h
src/thlibrary/thblackbar.cpp
src/updatechecker.cpp
src/urllineedit.cpp
src/video.cpp
src/video.h
src/youtubesearch.cpp

index a2f66918fc19c454a3b7f8f73b33073abc65ca90..9e6d76e88112f228da3d48431ee9c06a0e6a86e7 100644 (file)
@@ -5,3 +5,6 @@ minitube.pro.user
 .DS_Store
 .cproject
 .project
+local/
+*.swp
+
diff --git a/CHANGES b/CHANGES
index 77d1e712b095b3dd65ef8719fa178931d4ad2c5b..eac32b806dbf35043ac1c6c7a51a04ac509a1700 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,16 @@
-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
diff --git a/INSTALL b/INSTALL
index a6db61fee694cae6ee50eb7d054a8c35c88551d1..ac6f8d6d7a2570b91c438c3669b4313f97aa58c5 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1,38 +1,33 @@
 # 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
diff --git a/Info.plist b/Info.plist
deleted file mode 100644 (file)
index 27b03c3..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?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>
diff --git a/TODO b/TODO
index 69d5ab554c7223004f22c55e7194a6db11c28d3b..62c8c002bbea41e101253102024e36b36e15acc9 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,17 +1,7 @@
 # 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.
@@ -26,7 +16,8 @@
 
 - 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/
 
@@ -34,6 +25,7 @@
 - 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
index 18961b30f6d31a9a8de828dd0018cba2cf85a499..d46188e0fb18bbb46dceff16d7b341f02d7d338c 100644 (file)
Binary files a/data/128x128/minitube.png and b/data/128x128/minitube.png differ
diff --git a/data/22x22/minitube.png b/data/22x22/minitube.png
new file mode 100644 (file)
index 0000000..bcb2a97
Binary files /dev/null and b/data/22x22/minitube.png differ
diff --git a/data/512x512/minitube.png b/data/512x512/minitube.png
new file mode 100644 (file)
index 0000000..1d1d0ed
Binary files /dev/null and b/data/512x512/minitube.png differ
diff --git a/images/media-playback-pause.png b/images/media-playback-pause.png
deleted file mode 100644 (file)
index 2faccc2..0000000
Binary files a/images/media-playback-pause.png and /dev/null differ
diff --git a/images/media-playback-start.png b/images/media-playback-start.png
deleted file mode 100644 (file)
index c933f11..0000000
Binary files a/images/media-playback-start.png and /dev/null differ
diff --git a/images/media-playback-stop.png b/images/media-playback-stop.png
deleted file mode 100644 (file)
index e4fb4bd..0000000
Binary files a/images/media-playback-stop.png and /dev/null differ
diff --git a/images/media-skip-forward.png b/images/media-skip-forward.png
deleted file mode 100644 (file)
index 704ca17..0000000
Binary files a/images/media-skip-forward.png and /dev/null differ
diff --git a/images/view-fullscreen.png b/images/view-fullscreen.png
deleted file mode 100644 (file)
index c859ce4..0000000
Binary files a/images/view-fullscreen.png and /dev/null differ
index d97b57ec0635af84acac7922391435051065df6d..4db584de1bba309d5ba0b82ecc9f51fe8e3465ed 100644 (file)
         <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>&amp;Downloads</source>
+        <translation>&amp;التحميلات</translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation>عرض تفاصيل عن تحميلات الفيديو</translation>
+    </message>
+    <message>
+        <source>&amp;Download</source>
+        <translation>&amp;التحميلات</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&apos;re watching &quot;%1&quot;</source>
         <translation>انت تشاهد &quot;%1&quot;</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>
index f507621b86e7f1753e607129a03e4be63cabf4b0..40f04d6dc4d26004ff2486d0f3406d68f3855d7b 100644 (file)
@@ -1,4 +1,6 @@
-<!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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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&apos;re watching &quot;%1&quot;</source>
         <translation>Вие гледате &quot;%1&quot;</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>
index 5e20b53dc842b50487dd95d4ec6fa8be48ed1227..65ee01ea39efdff107247378866f00b43e2fff82 100644 (file)
@@ -5,12 +5,12 @@
 <context>
     <name>AboutView</name>
     <message>
-        <location filename="../src/AboutView.cpp" line="20"/>
+        <location filename="../src/AboutView.cpp" line="21"/>
         <source>There&apos;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 &lt;a href=&apos;%1&apos;&gt;přispějte přes PayPal&lt;/a&gt; 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 &lt;a href=&apos;%1&apos;&gt;donate&lt;/a&gt; to support the continued development of %2.</source>
         <translation>Prosím &lt;a href=&apos;%1&apos;&gt;přispějte&lt;/a&gt; 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 &lt;a href=&apos;%1&apos;&gt;GNU General Public License&lt;/a&gt;</source>
         <translation>Vydáno pod &lt;a href=&apos;%1&apos;&gt;licencí GNU General Public License&lt;/a&gt;</translation>
     </message>
     <message>
-        <location filename="../src/AboutView.cpp" line="69"/>
+        <location filename="../src/AboutView.cpp" line="77"/>
         <source>&amp;Close</source>
         <translation>&amp;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>&amp;Stop</source>
         <translation>&amp;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&amp;kip</source>
         <translation>Př&amp;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>&amp;Pause</source>
         <translation>&amp;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>&amp;Full Screen</source>
         <translation>&amp;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>&amp;Compact mode</source>
         <translation>&amp;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 &amp;YouTube page</source>
         <translation>Otevřít stránku &amp;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 &amp;link</source>
         <translation>Zkopírovat &amp;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 &amp;URL</source>
         <translation>Zkopírovat adresu &amp;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>&amp;Remove</source>
         <translation>&amp;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 &amp;Up</source>
         <translation>&amp;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 &amp;Down</source>
         <translation>&amp;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>&amp;Clear recent keywords</source>
         <translation>&amp;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>&amp;Quit</source>
         <translation>&amp;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>&amp;Website</source>
         <translation>&amp;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 &amp;donation</source>
         <translation>&amp;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>&amp;Downloads</source>
+        <translation>&amp;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>&amp;Download</source>
+        <translation>&amp;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>&amp;Donate via PayPal</source>
         <translation type="obsolete">&amp;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>&amp;About</source>
         <translation>&amp;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>&amp;Application</source>
         <translation>&amp;Aplikace</translation>
     </message>
     <message>
-        <location filename="../src/MainWindow.cpp" line="272"/>
+        <location filename="../src/MainWindow.cpp" line="333"/>
         <source>&amp;Playlist</source>
         <translation>&amp;Playlist</translation>
     </message>
     <message>
-        <location filename="../src/MainWindow.cpp" line="279"/>
+        <location filename="../src/MainWindow.cpp" line="340"/>
         <source>&amp;Video</source>
         <translation>&amp;Video</translation>
     </message>
     <message>
-        <location filename="../src/MainWindow.cpp" line="292"/>
+        <location filename="../src/MainWindow.cpp" line="359"/>
         <source>&amp;Help</source>
         <translation>&amp;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>&amp;Play</source>
         <translation>&amp;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 &amp;Full Screen</source>
         <translation>Vypnout &amp;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&apos;re watching &quot;%1&quot;</source>
         <translation>Sledujete &quot;%1&quot;</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 &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;,</source>
         <translation>Vítejte v &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;</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 &lt;a href=&apos;%2&apos;&gt;update to version %3&lt;/a&gt;</source>
         <translation>Nová verze aplikace %1 je dostupná. Prosím &lt;a href=&apos;%2&apos;&gt;aktualizujte na verzi %3&lt;/a&gt;</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>
index 121483d8560825aa58d75cfe701fb2973687bda6..d491dd7693d6a724f601f0ecca63c1ce89859748 100644 (file)
@@ -5,69 +5,57 @@
 <context>
     <name>AboutView</name>
     <message>
-        <location filename="../src/AboutView.cpp" line="20"/>
+        <location filename="../src/AboutView.cpp" line="21"/>
         <source>There&apos;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 &quot;Technology Preview&quot; release, do not expect it to be perfect.</source>
-        <translation type="obsolete">Dies ist eine &quot;Technology Vorschau&quot;, 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 &lt;a href=&apos;%1&apos;&gt;donate via PayPal&lt;/a&gt; to support the continued development of %2.</source>
-        <translation type="obsolete">Bitte &lt;a href=&apos;%1&apos;&gt;spende via PayPal&lt;/a&gt; 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 &lt;a href=&apos;%1&apos;&gt;donate&lt;/a&gt; to support the continued development of %2.</source>
-        <translation>Bitte &lt;a href=&apos;%1&apos;&gt;Spenden&lt;/a&gt; um die ständige Entwicklung von %2 zu unterstützen.</translation>
+        <translation>Bitte &lt;a href=&apos;%1&apos;&gt;spenden&lt;/a&gt; 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 &lt;a href=&apos;%1&apos;&gt;GNU General Public License&lt;/a&gt;</source>
         <translation>Veröffentlicht unter der &lt;a href=&apos;%1&apos;&gt;GNU General Public License&lt;/a&gt;</translation>
     </message>
     <message>
-        <location filename="../src/AboutView.cpp" line="69"/>
+        <location filename="../src/AboutView.cpp" line="77"/>
         <source>&amp;Close</source>
         <translation>S&amp;chließen</translation>
     </message>
@@ -79,7 +67,7 @@
     <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>&amp;Back</source>
-        <translation type="obsolete">&amp;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>&amp;Stop</source>
-        <translation>&amp;Halt</translation>
+        <translation>An&amp;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&amp;kip</source>
         <translation>Ü&amp;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>&amp;Pause</source>
         <translation>&amp;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>&amp;Full Screen</source>
         <translation>&amp;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>&amp;Compact View</source>
-        <translation type="obsolete">&amp;Kompakt Ansicht</translation>
-    </message>
-    <message>
-        <source>Go compact view</source>
-        <translation type="obsolete">Kompakt Ansicht aktivieren</translation>
-    </message>
-    <message>
-        <source>&amp;YouTube</source>
-        <translation type="obsolete">&amp;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>&amp;Compact mode</source>
         <translation>&amp;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>&amp;Download</source>
-        <translation type="obsolete">&amp;Herunterladen</translation>
+        <translation>&amp;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 &amp;YouTube page</source>
         <translation>Öffne die &amp;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 &amp;link</source>
         <translation>YouTube &amp;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 &amp;URL</source>
         <translation>Video &amp;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>&amp;Remove</source>
         <translation>Entfe&amp;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 &amp;Up</source>
         <translation>Bewege &amp;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 &amp;Down</source>
         <translation>Bewege hin&amp;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>&amp;Clear recent keywords</source>
         <translation>Kürzlich genutzte S&amp;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>&amp;Quit</source>
         <translation>&amp;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>&amp;Website</source>
         <translation>&amp;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 &amp;donation</source>
-        <translation>Eine Spen&amp;den machen</translation>
+        <translation>Eine Spen&amp;de machen</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="274"/>
+        <location filename="../src/MainWindow.cpp" line="932"/>
+        <source>&amp;Downloads</source>
+        <translation>&amp;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>&amp;Donate via PayPal</source>
-        <translation type="obsolete">Spen&amp;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>&amp;About</source>
         <translation>&amp;Ü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>&amp;Search</source>
-        <translation type="obsolete">&amp;Suche</translation>
+        <translation>Stummschaltung deaktiviert</translation>
     </message>
     <message>
-        <location filename="../src/MainWindow.cpp" line="264"/>
+        <location filename="../src/MainWindow.cpp" line="325"/>
         <source>&amp;Application</source>
         <translation>&amp;Anwendung</translation>
     </message>
     <message>
-        <location filename="../src/MainWindow.cpp" line="272"/>
+        <location filename="../src/MainWindow.cpp" line="333"/>
         <source>&amp;Playlist</source>
         <translation>&amp;Abspielliste</translation>
     </message>
     <message>
-        <location filename="../src/MainWindow.cpp" line="279"/>
+        <location filename="../src/MainWindow.cpp" line="340"/>
         <source>&amp;Video</source>
         <translation>&amp;Video</translation>
     </message>
     <message>
-        <location filename="../src/MainWindow.cpp" line="292"/>
+        <location filename="../src/MainWindow.cpp" line="359"/>
         <source>&amp;Help</source>
         <translation>&amp;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>&amp;Play</source>
         <translation>&amp;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 &amp;Full Screen</source>
         <translation>Vollbildmodus &amp;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&apos;re watching &quot;%1&quot;</source>
-        <translation>Du betrachtest &quot;%1&quot;</translation>
+        <translation>Sie betrachten &quot;%1&quot;</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 &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;,</source>
         <translation>Willkommen bei &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;,</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 &lt;a href=&apos;%2&apos;&gt;update to version %3&lt;/a&gt;</source>
-        <translation>Eine neue Version von %1 ist verfügbar. Bitte &lt;a href=&apos;%2&apos;&gt;auf Version %3 aktuallisieren&lt;/a&gt;</translation>
+        <translation>Eine neue Version von %1 ist verfügbar. Bitte &lt;a href=&apos;%2&apos;&gt;auf Version %3 aktualisieren&lt;/a&gt;</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>&amp;Close</source>
-        <translation type="obsolete">S&amp;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>
index 6e630b279dbce118e0b942a5048776002069b854..a4dd34acd500b7d71e5cb2eb3f8f1068ad001a66 100644 (file)
         <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>&amp;Downloads</source>
+        <translation>&amp;Λήψεις</translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation>Εμφάνιση λεπτομερειών για τις λήψεις βίντεο</translation>
+    </message>
+    <message>
+        <source>&amp;Download</source>
+        <translation>&amp;Λήψη</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>
diff --git a/locale/empty.ts b/locale/empty.ts
new file mode 100644 (file)
index 0000000..3bdeda8
--- /dev/null
@@ -0,0 +1,780 @@
+<?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&apos;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 &lt;a href=&apos;%1&apos;&gt;donate&lt;/a&gt; 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 &lt;a href=&apos;%1&apos;&gt;GNU General Public License&lt;/a&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/AboutView.cpp" line="77"/>
+        <source>&amp;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>&amp;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&amp;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>&amp;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>&amp;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>&amp;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 &amp;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 &amp;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 &amp;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>&amp;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 &amp;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 &amp;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>&amp;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>&amp;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>&amp;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 &amp;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>&amp;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>&amp;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>&amp;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>&amp;Application</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/MainWindow.cpp" line="333"/>
+        <source>&amp;Playlist</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/MainWindow.cpp" line="340"/>
+        <source>&amp;Video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="src/MainWindow.cpp" line="359"/>
+        <source>&amp;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>&amp;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 &amp;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&apos;re watching &quot;%1&quot;</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 &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;,</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 &lt;a href=&apos;%2&apos;&gt;update to version %3&lt;/a&gt;</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>
diff --git a/locale/en_US.ts b/locale/en_US.ts
new file mode 100644 (file)
index 0000000..c7098f9
--- /dev/null
@@ -0,0 +1,15 @@
+<?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>
index 9441085405f52611017990e817dd4abf8f9a15bb..7928752b0aa3aab1e13bca39bf3ce9c482221486 100644 (file)
@@ -1,4 +1,6 @@
-<!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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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>
index fb8955f2d092eff66c990f9ee7010f1f8722cd5e..70225ffc57eeb328fd9553bcc96c0c742f54b6e6 100644 (file)
         <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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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>
index f0626ea4cda6ba4fd1264d308c2e12f3ce24d282..ab98befdd6870991eca0e972b0d060c0a852d59f 100644 (file)
         <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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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>
index 787cf9dc488dacefb40373535324f9a83e3df4a9..061d14dcbfbc96b35290834afb454f749bbf2264 100644 (file)
@@ -6,11 +6,11 @@
     <name>AboutView</name>
     <message>
         <source>There&apos;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 &lt;a href=&apos;%1&apos;&gt;donate&lt;/a&gt; to support the continued development of %2.</source>
-        <translation>Olisi mukaavaa jos tukisit %2 kehitystä tekemällä &lt;a href=&apos;%1&apos;&gt;lahjoituksen&lt;/a&gt;.</translation>
+        <translation>Voit tukea  %2n kehityksen jatkumista tekemällä &lt;a href=&apos;%1&apos;&gt;lahjoituksen&lt;/a&gt;.</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>
@@ -34,7 +34,7 @@
     </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>
@@ -42,7 +42,7 @@
     </message>
     <message>
         <source>Released under the &lt;a href=&apos;%1&apos;&gt;GNU General Public License&lt;/a&gt;</source>
-        <translation>Julkaistu &lt;a href=&apos;%1&apos;&gt;GNU General Public License&lt;/a&gt; lisenssin alla</translation>
+        <translation>Julkaistu &lt;a href=&apos;%1&apos;&gt;GNU General Public License&lt;/a&gt; -lisenssillä</translation>
     </message>
     <message>
         <source>&amp;Close</source>
@@ -54,7 +54,7 @@
     </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&amp;kip</source>
     </message>
     <message>
         <source>&amp;Pause</source>
-        <translation>&amp;Stoppaa</translation>
+        <translation>&amp;Keskeytä</translation>
     </message>
     <message>
         <source>Pause playback</source>
-        <translation>Pysäytä toistaminen</translation>
+        <translation>Keskeytä toisto</translation>
     </message>
     <message>
         <source>&amp;Full Screen</source>
     </message>
     <message>
         <source>Go full screen</source>
-        <translation>Vaihda kokoruutu tilaan</translation>
+        <translation>Siirry kokoruututilaan</translation>
     </message>
     <message>
         <source>&amp;Compact mode</source>
     </message>
     <message>
         <source>Open the &amp;YouTube page</source>
-        <translation>Avaa &amp;Youtube sivusto</translation>
+        <translation>Avaa &amp;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 &amp;link</source>
-        <translation>Kopio YouTube &amp;linkki</translation>
+        <translation>Kopio YouTube -&amp;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 &amp;URL</source>
-        <translation>Kopio videovirran osoite (&amp;URL)</translation>
+        <translation>Kopioi videovirran osoite (&amp;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>&amp;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 &amp;Up</source>
-        <translation>Siirrä &amp;Ylös päin</translation>
+        <translation>Siirrä &amp;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 &amp;Down</source>
-        <translation>Sirrä &amp;Alas päin</translation>
+        <translation>Sirrä &amp;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>&amp;Clear recent keywords</source>
-        <translation>&amp;Poista viimeisimmät haut</translation>
+        <translation>&amp;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>&amp;Quit</source>
-        <translation>&amp;Poistu</translation>
+        <translation>&amp;Lopeta</translation>
     </message>
     <message>
         <source>Ctrl+Q</source>
     </message>
     <message>
         <source>Bye</source>
-        <translation>Heippa</translation>
+        <translation>Näkemiin</translation>
     </message>
     <message>
         <source>&amp;Website</source>
-        <translation>&amp;Nettisivu</translation>
+        <translation>&amp;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>&amp;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>&amp;Application</source>
-        <translation>&amp;Ohjelma</translation>
+        <translation>&amp;Sovellus</translation>
     </message>
     <message>
         <source>&amp;Playlist</source>
-        <translation>&amp;Soittolista</translation>
+        <translation>&amp;Toistolista</translation>
     </message>
     <message>
         <source>&amp;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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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&apos;re watching &quot;%1&quot;</source>
         <translation>Nyt pyörii &quot;%1&quot;</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 &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;,</source>
-        <translation>&lt;a href=&apos;%1&apos;&gt;%2en&lt;/a&gt;</translation>
+        <translation>Tervetuloa &lt;a href=&apos;%1&apos;&gt;%2en&lt;/a&gt;</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: &quot;%1&quot; &quot;%2&quot;lle</translation>
+        <translation>Verkkovirhe: &quot;%1&quot; &quot;%2&quot;lle</translation>
     </message>
 </context>
 </TS>
index 6ca78defa24088ad31802233a5014c274c8eb85d..042f13a36249d388f4a55a8ce967ff56759fc4d7 100644 (file)
@@ -1,4 +1,6 @@
-<!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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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>
index 27319cf9fbc8aa7e3753c3ab7040102ca1e4f9fa..b4ec53a30ea6ce61d9013b510eabed6e250139cc 100644 (file)
@@ -1,4 +1,6 @@
-<!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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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>
index 34746482df7409983b706033589436e6d34a1077..63bc5de856538ecc5b003081033e720f2cea63c8 100644 (file)
@@ -14,7 +14,7 @@
     </message>
     <message>
         <source>This is a &quot;Technology Preview&quot; release, do not expect it to be perfect.</source>
-        <translation>הפצה זו הנה &quot;הצגה טכנולוגית מקדימה&quot;, אל תצפו ממנה להיות מושלמת.</translation>
+        <translation type="obsolete">הפצה זו הנה &quot;הצגה טכנולוגית מקדימה&quot;, אל תצפו ממנה להיות מושלמת.</translation>
     </message>
     <message>
         <source>Report bugs and send in your ideas to %1</source>
@@ -26,7 +26,7 @@
     </message>
     <message>
         <source>Please &lt;a href=&apos;%1&apos;&gt;donate via PayPal&lt;/a&gt; to support the continued development of %2.</source>
-        <translation>אנא &lt;a href=&apos;%1&apos;&gt;תרמו באמצעות PayPal&lt;/a&gt; כדי לתמוך בהמשך הפיתוח של %2.</translation>
+        <translation type="obsolete">אנא &lt;a href=&apos;%1&apos;&gt;תרמו באמצעות PayPal&lt;/a&gt; כדי לתמוך בהמשך הפיתוח של %2.</translation>
     </message>
     <message>
         <source>Icon designed by %1.</source>
@@ -42,7 +42,7 @@
     </message>
     <message>
         <source>Released under the </source>
-        <translation>שוחרר תחת תנאי</translation>
+        <translation type="obsolete">שוחרר תחת תנאי</translation>
     </message>
     <message>
         <source></source>
@@ -70,7 +70,7 @@
     </message>
     <message>
         <source>Windows version built by %1</source>
-        <translation>הגרסה ל־Windows נבנתה על ידי %1</translation>
+        <translation type="obsolete">הגרסה ל־Windows נבנתה על ידי %1</translation>
     </message>
     <message>
         <source>Please &lt;a href=&apos;%1&apos;&gt;donate&lt;/a&gt; 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>&amp;Stop</source>
     </message>
     <message>
         <source>&amp;YouTube</source>
-        <translation>&amp;YouTube</translation>
+        <translation type="obsolete">&amp;YouTube</translation>
     </message>
     <message>
         <source>Open the YouTube video page</source>
-        <translation>פתיחת עמוד הווידאו ב־YouTube</translation>
+        <translation type="obsolete">פתיחת עמוד הווידאו ב־YouTube</translation>
     </message>
     <message>
         <source>&amp;Remove</source>
     </message>
     <message>
         <source>&amp;Donate via PayPal</source>
-        <translation>&amp;תרומה באמצעות PayPal</translation>
+        <translation type="obsolete">&amp;תרומה באמצעות PayPal</translation>
     </message>
     <message>
         <source>Please support the continued development of %1</source>
     </message>
     <message>
         <source>&amp;Search</source>
-        <translation>&amp;חיפוש</translation>
+        <translation type="obsolete">&amp;חיפוש</translation>
     </message>
     <message>
         <source>&amp;Application</source>
     </message>
     <message>
         <source>&amp;Back</source>
-        <translation>&amp;חזרה</translation>
+        <translation type="obsolete">&amp;חזרה</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>&amp;Clear recent keywords</source>
         <source>Maximum video definition set to %1</source>
         <translation>איכות הנגינה המירבית מוגדרת ל־%1</translation>
     </message>
+    <message>
+        <source>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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>
index a53d5d22af8bba52fe27f9c87e779c8df5d2489c..0c7ebd26bdb6dcd6ca3011105c0d2623e13f7dd2 100644 (file)
@@ -1,32 +1,28 @@
 <?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&apos;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 &quot;Technology Preview&quot; release, do not expect it to be perfect.</source>
-        <translation type="obsolete">Ovo je &quot;Technology Preview&quot;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 &lt;a href=&apos;%1&apos;&gt;donate&lt;/a&gt; to support the continued development of %2.</source>
+        <translation>Molimo Vas da &lt;a href=&apos;%1&apos;&gt;donirate pomoću PayPala&lt;/a&gt; kako biste osigurali kontinuirani razvoj %2 programa. </translation>
     </message>
     <message>
-        <source>Please &lt;a href=&apos;%1&apos;&gt;donate via PayPal&lt;/a&gt; to support the continued development of %2.</source>
-        <translation type="obsolete">Molimo &lt;a href=&apos;%1 &apos;&gt;donirajte preko PayPal-a&lt;/a&gt; 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 &lt;a href=&apos;%1&apos;&gt;GNU General Public License&lt;/a&gt;</source>
-        <translation>Objavljeno je pod &lt;a href=&apos;%1&apos;&gt;GNU General Public License&lt;/a&gt;</translation>
+        <translation>Program je objavljen pod &lt;a href=&apos;%1&apos;&gt;GNU General Public Licencom&lt;/a&gt;</translation>
     </message>
     <message>
         <source>&amp;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 &lt;a href=&apos;%1&apos;&gt;donate&lt;/a&gt; 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>&amp;Back</source>
-        <translation type="obsolete">&amp;Natrag</translation>
-    </message>
-    <message>
-        <source>Go to the previous view</source>
-        <translation type="obsolete">Idi na prethodni prikaz</translation>
-    </message>
     <message>
         <source>&amp;Stop</source>
-        <translation>&amp;Stani</translation>
+        <translation>&amp;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&amp;kip</source>
-        <translation>Preskoči</translation>
+        <translation>P&amp;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>&amp;Pause</source>
     </message>
     <message>
         <source>Pause playback</source>
-        <translation>Pauziraj playback</translation>
+        <translation>Pauziraj izvođenje videa</translation>
     </message>
     <message>
         <source>&amp;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>&amp;Compact mode</source>
-        <translation>&amp;Kompaktan način</translation>
+        <translation>&amp;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 &amp;YouTube page</source>
+        <translation>&amp;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 &amp;link</source>
+        <translation>Kopiraj &amp;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>&amp;YouTube</source>
-        <translation type="obsolete">&amp;YouTube</translation>
+        <source>Copy the video stream &amp;URL</source>
+        <translation>Kopiraj web &amp;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>&amp;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 &amp;Up</source>
-        <translation>Premjesti gore</translation>
+        <translation>Premjesti &amp;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 &amp;Down</source>
-        <translation>Premjesti &amp;Dolje</translation>
+        <translation>Premjesti &amp;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>&amp;Clear recent keywords</source>
+        <translation>&amp;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>&amp;Quit</source>
-        <translation>&amp;Odustani</translation>
+        <translation>&amp;Zatvori program</translation>
     </message>
     <message>
         <source>Ctrl+Q</source>
     </message>
     <message>
         <source>Bye</source>
-        <translation>Pozdrav</translation>
+        <translation>Doviđenja</translation>
     </message>
     <message>
         <source>&amp;Website</source>
         <translation>%1 na internetu</translation>
     </message>
     <message>
-        <source>&amp;Donate via PayPal</source>
-        <translation type="obsolete">&amp;Donirajte preko PayPal-a</translation>
+        <source>Make a &amp;donation</source>
+        <translation>Napravi &amp;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>&amp;About</source>
-        <translation>&amp;O</translation>
+        <translation>&amp;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>&amp;Application</source>
+        <translation>&amp;Program</translation>
+    </message>
     <message>
         <source>&amp;Playlist</source>
-        <translation>&amp;Playlista</translation>
+        <translation>&amp;Lista izvođenja</translation>
     </message>
     <message>
         <source>&amp;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>&amp;Play</source>
-        <translation>&amp;Pusti</translation>
+        <translation>&amp;Pokreni</translation>
     </message>
     <message>
         <source>Resume playback</source>
-        <translation>Nastavi playback</translation>
+        <translation>Nastavi izvođenje</translation>
     </message>
     <message>
         <source>Exit &amp;Full Screen</source>
-        <translation>Izlaz&amp;Cijeli ekran</translation>
+        <translation>&amp;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>&amp;Clear recent keywords</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&amp;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>&amp;Downloads</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Open the &amp;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>&amp;Download</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Copy the YouTube &amp;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 &amp;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 &amp;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&apos;re watching &quot;%1&quot;</source>
         <translation>Gledate &quot;%1&quot;</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 &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;,</source>
-        <translation>Dobro došli &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;</translation>
+        <translation>Dobrodošli na &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;,</translation>
     </message>
     <message>
         <source>Enter a keyword to start watching videos.</source>
     </message>
     <message>
         <source>A new version of %1 is available. Please &lt;a href=&apos;%2&apos;&gt;update to version %3&lt;/a&gt;</source>
-        <translation>Nova verzija %1 je dostupna. Molimo &lt;a href=&apos;%2&apos;&gt;nadogradite verziju %3&lt;/a&gt;</translation>
+        <translation>Nova verzija %1 je dostupna. Molimo &lt;a href=&apos;%2&apos;&gt;nadogradite na verziju %3&lt;/a&gt;</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>
index 8c3075189c73481b6d22a07900ca2092f475afeb..df570c63b0e38663d2976affb4ddfb8b8d01b984 100644 (file)
         <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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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>
index c886bebb0488c061ede489e6d2e4467bde80f2c1..1b802d6278723b5fdbf78451a850bb5695e42408 100644 (file)
@@ -34,7 +34,7 @@
     </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>
@@ -58,7 +58,7 @@
     </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>&amp;Compact mode</source>
-        <translation>Modalità compatta</translation>
+        <translation>Modalità &amp;compatta</translation>
     </message>
     <message>
         <source>Hide the playlist and the toolbar</source>
     </message>
     <message>
         <source>Clear the search history. Cannot be undone.</source>
-        <translation>&amp;Cancella le ultime ricerche. L&apos;azione non potrà essere annullata.</translation>
+        <translation>Cancella le ultime ricerche. L&apos;azione non potrà essere annullata.</translation>
     </message>
     <message>
         <source>Your privacy is now safe</source>
     </message>
     <message>
         <source>Make a &amp;donation</source>
-        <translation>Fai una donazione</translation>
+        <translation>Fai una &amp;donazione</translation>
     </message>
     <message>
         <source>Maximum video definition set to %1</source>
         <translation>La definizione video massima è impostata a %1</translation>
     </message>
+    <message>
+        <source>&amp;Downloads</source>
+        <translation>&amp;Download</translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation>Mostra informazioni sui download</translation>
+    </message>
+    <message>
+        <source>&amp;Download</source>
+        <translation>&amp;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&apos;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>
index 7ae44c72aab5768ac58c4f1f5339ddfd1ed249f5..ea2aeef8108cc36403a33c69031fa861049bbb38 100644 (file)
         <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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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>
index 4c466431d77a95708497a6b8891c21829a3b1989..4fb799c0e00713cb7adeaac0cd45aea2b00a77cd 100644 (file)
@@ -14,7 +14,7 @@
     </message>
     <message>
         <source>This is a &quot;Technology Preview&quot; 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>
@@ -26,7 +26,7 @@
     </message>
     <message>
         <source>Please &lt;a href=&apos;%1&apos;&gt;donate via PayPal&lt;/a&gt; to support the continued development of %2.</source>
-        <translation>Lūdzu, &lt;a href=&apos;%1&apos;&gt;ziedojiet ar PayPal&lt;/a&gt;, lai atbalstītu %2 turpmāku izstrādi.</translation>
+        <translation type="obsolete">Lūdzu, &lt;a href=&apos;%1&apos;&gt;ziedojiet ar PayPal&lt;/a&gt;, lai atbalstītu %2 turpmāku izstrādi.</translation>
     </message>
     <message>
         <source>Icon designed by %1.</source>
@@ -42,7 +42,7 @@
     </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>
@@ -66,7 +66,7 @@
     </message>
     <message>
         <source>Please &lt;a href=&apos;%1&apos;&gt;donate&lt;/a&gt; to support the continued development of %2.</source>
-       <translation>Lūdzu, &lt;a href=&apos;%1&apos;&gt;ziedojiet&lt;/a&gt;, lai atbalstītu %2 turpmāku izstrādi.</translation>
+        <translation>Lūdzu, &lt;a href=&apos;%1&apos;&gt;ziedojiet&lt;/a&gt;, 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>&amp;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>&amp;Stop</source>
     </message>
     <message>
         <source>&amp;YouTube</source>
-       <translation>&amp;YouTube</translation>
+        <translation type="obsolete">&amp;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>&amp;Remove</source>
     </message>
     <message>
         <source>&amp;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>&amp;Clear recent keywords</source>
     </message>
     <message>
         <source>Open the &amp;YouTube page</source>
-       <translation>Atvērt &amp;YouTube vietni</translation>
+        <translation>Atvērt &amp;YouTube vietni</translation>
     </message>
     <message>
         <source>Go to the YouTube video page and pause playback</source>
     </message>
     <message>
         <source>Copy the video stream &amp;URL</source>
-       <translation>Nokopēt video plūsmas &amp;URL</translation>
+        <translation>Nokopēt video plūsmas &amp;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 &amp;donation</source>
         <source>Maximum video definition set to %1</source>
         <translation>Klipa maksimālā izšķirtspēja ir %1</translation>
     </message>
+    <message>
+        <source>&amp;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>&amp;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>
index 72c6f7c23fd450e5b744042d147d6263881e5dca..77a2f1379a8db2f7d41cd32888aa1a51db4d08ae 100644 (file)
@@ -4,6 +4,7 @@ INCLUDEPATH += $$PWD
 DEPENDPATH += $$PWD
 
 TRANSLATIONS += \
+    en_US.ts \
     it_IT.ts \
     pt_BR.ts \
     ru_RU.ts \
@@ -27,7 +28,8 @@ TRANSLATIONS += \
     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
index d7b7293d5efbe18ed84f23d1b218a4ae6eb087cd..a45220c3daca7d972b40de53aef1382e4336b37a 100644 (file)
         <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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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>
index 206ca0cd7973f85b25250db356f088943f70934d..35ba018e7bb188b835f8df7f321a2e19a50b4d05 100644 (file)
         <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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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&apos;re watching &quot;%1&quot;</source>
         <translation>U kijkt naar &quot;%1&quot;</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>
index f73d312d80d9693ba93fa077fef56779a29db5f0..bcde0ea80fc52cec11498c5c2318be52ee49da21 100644 (file)
         <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>&amp;Downloads</source>
+        <translation>&amp;Pobrane pliku</translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation>Pokaż szczegóły pobranych filmów</translation>
+    </message>
+    <message>
+        <source>&amp;Download</source>
+        <translation>&amp;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>&amp;Saved recent keywords</source>
index 5db5d34d315f8f4e0e0872d44c25da7edff013a2..bc1237e37cbdb9ed430498c9bf908f528a67f741 100644 (file)
         <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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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>
index 1b7f7badaeca14edb24bb5b8a908ef608e7b138b..774262387a8468c83f139c95639ae1dbf3df520b 100644 (file)
         <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>&amp;Downloads</source>
+        <translation>&amp;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>&amp;Download</source>
+        <translation>&amp;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&apos;re watching &quot;%1&quot;</source>
         <translation>Está a assistir a &quot;%1&quot;</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>
index d8f2ed3ceb140bca4f7a6c049ab02f938dc6007f..3ede0d8b2cdfc94b242300f6e5423337640b5255 100644 (file)
         <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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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>
index bf0f394a32e0bb41b45c640d6b5cf258f64bb600..3fba0190d808280a415877239123e1473fcec5e1 100644 (file)
         <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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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>
index 1564f7e638d963fa24dc33746c38c1a43082f52c..f2567595594b2bd6b84112ed55b9ca4de0418c19 100644 (file)
         <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>&amp;Download</source>
-        <translation type="obsolete">&amp;Herunterladen</translation>
+        <translation type="unfinished">&amp;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>&amp;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>
index 4ba4b57ed77a95ed467a7f57e4c26467d0ef13f5..f64ff8ec1c379d3d7928b27fbbdcda203bfda2c1 100644 (file)
@@ -6,7 +6,7 @@
     <name>AboutView</name>
     <message>
         <source>There&apos;s life outside the browser!</source>
-        <translation>Ð\97а Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð±Ñ\80аÑ\83зеÑ\80а також є життя!</translation>
+        <translation>Ð\97а Ð¼ÐµÐ¶Ð°Ð¼Ð¸ Ð²ÐµÐ±-пеÑ\80еглÑ\8fдаÑ\87а також є життя!</translation>
     </message>
     <message>
         <source>Version %1</source>
@@ -22,7 +22,7 @@
     </message>
     <message>
         <source>%1 is Free Software but its development takes precious time.</source>
-        <translation>%1 є Вільним Програмним Забезпеченням але на його розробку було затрачено коштовний час.</translation>
+        <translation>%1 — вільне програмне забезпечення, але на його розробку було затрачено коштовний час.</translation>
     </message>
     <message>
         <source>Please &lt;a href=&apos;%1&apos;&gt;donate via PayPal&lt;/a&gt; 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 &lt;a href=&apos;%1&apos;&gt;GNU General Public License&lt;/a&gt;</source>
-        <translation>Ð\92ипÑ\83Ñ\89ено Ð¿Ñ\96д  &lt;a href=&apos;%1&apos;&gt;Загальною громадською ліцензією GNU&lt;/a&gt;</translation>
+        <translation>Ð\92ипÑ\83Ñ\89ено Ð·Ð° &lt;a href=&apos;%1&apos;&gt;Загальною громадською ліцензією GNU&lt;/a&gt;</translation>
     </message>
     <message>
         <source>&amp;Close</source>
-        <translation>Пове&amp;рнутися</translation>
+        <translation>&amp;Закрити</translation>
     </message>
     <message>
         <source>About</source>
@@ -50,7 +50,7 @@
     </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>&amp;Remove</source>
-        <translation>&amp;Ð\92идалити</translation>
+        <translation>&amp;Ð\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 &amp;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>&amp;Website</source>
-        <translation>Домашн&amp;я сторінка програми</translation>
+        <translation>&amp;Сайт</translation>
     </message>
     <message>
         <source>Minitube on the Web</source>
     </message>
     <message>
         <source>&amp;Playlist</source>
-        <translation>Перелік &amp;композицій</translation>
+        <translation>&amp;Список</translation>
     </message>
     <message>
         <source>&amp;Video</source>
     </message>
     <message>
         <source>&amp;Help</source>
-        <translation>&amp;Ð\94опомога</translation>
+        <translation>&amp;Ð\94овÑ\96дка</translation>
     </message>
     <message>
         <source>Opening %1</source>
-        <translation>Відкриваю %1</translation>
+        <translation>Відкриття %1</translation>
     </message>
     <message>
         <source>&amp;Play</source>
-        <translation>Ð\92Ñ\96дÑ\82воÑ\80Ñ\8eв&amp;ати</translation>
+        <translation>Ð\93Ñ\80&amp;ати</translation>
     </message>
     <message>
         <source>Resume playback</source>
-        <translation>Ð\9fÑ\80одовжити відтворення</translation>
+        <translation>Ð\92Ñ\96дновити відтворення</translation>
     </message>
     <message>
         <source>Exit &amp;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>&amp;Clear recent keywords</source>
-        <translation>Очистити недавн&amp;і терміни пошуку</translation>
+        <translation>Очистити недавн&amp;ій пошук</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>&amp;Downloads</source>
+        <translation>&amp;Завантаження</translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation>Показати деталі про завантажувані відео</translation>
+    </message>
+    <message>
+        <source>&amp;Download</source>
+        <translation>&amp;Завантажити</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 &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;,</source>
-        <translation>Ð\92Ñ\96Ñ\82аÑ\94мо Ð² &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;,</translation>
+        <translation>Ð\9bаÑ\81каво Ð¿Ñ\80оÑ\81имо Ð´Ð¾ &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;,</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 &lt;a href=&apos;%2&apos;&gt;update to version %3&lt;/a&gt;</source>
-        <translation>Ð\9dаÑ\8fвна Ð½Ð¾Ð²Ð° Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8f %1. Ð\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка &lt;a href=&apos;%2&apos;&gt; Ð¾Ð±новіть програму до версії %3&lt;/a&gt;</translation>
+        <translation>Ð\92ипÑ\83Ñ\89ено Ð½Ð¾Ð²Ñ\83 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8e %1. Ð\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, &lt;a href=&apos;%2&apos;&gt; Ð¾новіть програму до версії %3&lt;/a&gt;</translation>
     </message>
     <message>
         <source>Make yourself comfortable</source>
-        <translation>Влаштовуйтеся зручніше</translation>
+        <translation>Влаштовуйтеся якнайзручніше</translation>
     </message>
 </context>
 <context>
diff --git a/locale/zh_CN.ts b/locale/zh_CN.ts
new file mode 100644 (file)
index 0000000..6b29757
--- /dev/null
@@ -0,0 +1,631 @@
+<?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&apos;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 &lt;a href=&apos;%1&apos;&gt;donate&lt;/a&gt; to support the continued development of %2.</source>
+        <translation>欢迎您的慷慨&lt;a href=&apos;%1&apos;&gt;捐赠&lt;/a&gt;支持我们继续开发%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 &lt;a href=&apos;%1&apos;&gt;GNU General Public License&lt;/a&gt;</source>
+        <translation>本软件遵循&lt;a href=&apos;%1&apos;&gt;GNU通用公共许可证&lt;/a&gt;予以发布</translation>
+    </message>
+    <message>
+        <source>&amp;Close</source>
+        <translation>关闭(&amp;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>&amp;Stop</source>
+        <translation>停止(&amp;S)</translation>
+    </message>
+    <message>
+        <source>Stop playback and go back to the search view</source>
+        <translation>停止回放并返回搜索视图</translation>
+    </message>
+    <message>
+        <source>S&amp;kip</source>
+        <translation>跳过(&amp;k)</translation>
+    </message>
+    <message>
+        <source>Skip to the next video</source>
+        <translation>跳至下一视频</translation>
+    </message>
+    <message>
+        <source>&amp;Pause</source>
+        <translation>暂停(&amp;P)</translation>
+    </message>
+    <message>
+        <source>Pause playback</source>
+        <translation>暂停回放</translation>
+    </message>
+    <message>
+        <source>&amp;Full Screen</source>
+        <translation>全屏(&amp;F)</translation>
+    </message>
+    <message>
+        <source>Go full screen</source>
+        <translation>全屏播放</translation>
+    </message>
+    <message>
+        <source>&amp;Compact mode</source>
+        <translation>简洁模式(&amp;C)</translation>
+    </message>
+    <message>
+        <source>Hide the playlist and the toolbar</source>
+        <translation>隐藏播放列表和工具栏</translation>
+    </message>
+    <message>
+        <source>Open the &amp;YouTube page</source>
+        <translation>打开YouTube页面(&amp;Y)</translation>
+    </message>
+    <message>
+        <source>Go to the YouTube video page and pause playback</source>
+        <translation>打开YouTube视频页面并暂停回放</translation>
+    </message>
+    <message>
+        <source>Copy the YouTube &amp;link</source>
+        <translation>复制YouTube链接(&amp;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 &amp;URL</source>
+        <translation>复制视频流的URL链接(&amp;U)</translation>
+    </message>
+    <message>
+        <source>Copy the current video stream URL to the clipboard</source>
+        <translation>复制当前视频流的URL到剪贴板中</translation>
+    </message>
+    <message>
+        <source>&amp;Remove</source>
+        <translation>移除(&amp;R)</translation>
+    </message>
+    <message>
+        <source>Remove the selected videos from the playlist</source>
+        <translation>从播放列表中移除选定的视频</translation>
+    </message>
+    <message>
+        <source>Move &amp;Up</source>
+        <translation>上移(&amp;U)</translation>
+    </message>
+    <message>
+        <source>Move up the selected videos in the playlist</source>
+        <translation>在播放列表中向上移动选定的视频</translation>
+    </message>
+    <message>
+        <source>Move &amp;Down</source>
+        <translation>下移(&amp;D)</translation>
+    </message>
+    <message>
+        <source>Move down the selected videos in the playlist</source>
+        <translation>在播放列表中向下移动选定的视频</translation>
+    </message>
+    <message>
+        <source>&amp;Clear recent keywords</source>
+        <translation>清除最近使用的关键字词(&amp;C)</translation>
+    </message>
+    <message>
+        <source>Clear the search history. Cannot be undone.</source>
+        <translation>清除搜索历史。注意:清除的历史不可恢复。</translation>
+    </message>
+    <message>
+        <source>&amp;Quit</source>
+        <translation>退出(&amp;Q)</translation>
+    </message>
+    <message>
+        <source>Ctrl+Q</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>Bye</source>
+        <translation>再会</translation>
+    </message>
+    <message>
+        <source>&amp;Website</source>
+        <translation>网站(&amp;W)</translation>
+    </message>
+    <message>
+        <source>%1 on the Web</source>
+        <translation>%1在网站上</translation>
+    </message>
+    <message>
+        <source>Make a &amp;donation</source>
+        <translation>敬请捐赠(&amp;d)</translation>
+    </message>
+    <message>
+        <source>Please support the continued development of %1</source>
+        <translation>请您支持 %1 的可持续发展。</translation>
+    </message>
+    <message>
+        <source>&amp;About</source>
+        <translation>关于(&amp;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>&amp;Application</source>
+        <translation>应用程序(&amp;A)</translation>
+    </message>
+    <message>
+        <source>&amp;Playlist</source>
+        <translation>播放列表(&amp;P)</translation>
+    </message>
+    <message>
+        <source>&amp;Video</source>
+        <translation>视频(&amp;V)</translation>
+    </message>
+    <message>
+        <source>&amp;Help</source>
+        <translation>帮助(&amp;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>&amp;Play</source>
+        <translation>播放(&amp;P)</translation>
+    </message>
+    <message>
+        <source>Resume playback</source>
+        <translation>继续回放</translation>
+    </message>
+    <message>
+        <source>Exit &amp;Full Screen</source>
+        <translation>退出全屏(&amp;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>&amp;Downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Show details about video downloads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&amp;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&apos;re watching &quot;%1&quot;</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 &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;,</source>
+        <translation>欢迎访问&lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;,</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 &lt;a href=&apos;%2&apos;&gt;update to version %3&lt;/a&gt;</source>
+        <translation>%1已有新版本。请&lt;a href=&apos;%2&apos;&gt;更新到版本%3&lt;/a&gt;</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>
diff --git a/minitube.icns b/minitube.icns
deleted file mode 100644 (file)
index 0053278..0000000
Binary files a/minitube.icns and /dev/null differ
diff --git a/minitube.ico b/minitube.ico
deleted file mode 100644 (file)
index 9a3acbe..0000000
Binary files a/minitube.ico and /dev/null differ
index 09f3649fcbd319e4158f2848e44084fd519de98f..bea0df2365237761eda4c7fa457da58a6a127116 100755 (executable)
@@ -1,19 +1,16 @@
-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 \
@@ -25,7 +22,7 @@ HEADERS += src/MainWindow.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 \
@@ -41,8 +38,17 @@ HEADERS += src/MainWindow.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 \
@@ -68,8 +74,18 @@ SOURCES += src/main.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/
@@ -84,13 +100,10 @@ include(locale/locale.pri)
 # 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
@@ -103,11 +116,13 @@ unix {
         desktop \
         iconsvg \
         icon16 \
+        icon22 \
         icon32 \
         icon48 \
         icon64 \
         icon128 \
-        icon256
+        icon256 \
+        icon512
     translations.path = $$PKGDATADIR
     translations.files += $$DESTDIR/locale
     desktop.path = $$DATADIR/applications
@@ -116,6 +131,8 @@ unix {
     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
@@ -126,5 +143,9 @@ unix {
     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)
diff --git a/minitube.rc b/minitube.rc
deleted file mode 100644 (file)
index 2c1795b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-IDI_ICON1               ICON    DISCARDABLE     "minitube.ico"
-
index 639421ad2d63d57aca4b09cff97160b7632035d4..53d1d4dc5197f2765e27ca8784b533d7145e6be2 100755 (executable)
@@ -1,10 +1,5 @@
 <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>
index e9357ea577e8a1f5f09443d2c8ee5a6f447301de..961c867594b0e4db3e3e0294f93b754e35765c75 100644 (file)
@@ -1,10 +1,11 @@
 #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);
@@ -16,15 +17,15 @@ AboutView::AboutView(QWidget *parent) : QWidget(parent) {
     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>"
 
@@ -45,7 +46,7 @@ AboutView::AboutView(QWidget *parent) : QWidget(parent) {
                                                       "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), "
@@ -57,13 +58,15 @@ AboutView::AboutView(QWidget *parent) : QWidget(parent) {
                                                       "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>&copy; 2009-2010 " + Constants::ORG_NAME + "</p>";
+#endif
+                   "<p>&copy; 2009-2010 " + Constants::ORG_NAME + "</p>"
+                   "</body></html>";;
     QLabel *infoLabel = new QLabel(info, this);
     infoLabel->setOpenExternalLinks(true);
     infoLabel->setWordWrap(true);
index ba5fb7f87cf24265f6c1f778d4002216a210fc02..d4117338244ba72d11cc9479de09108d3d2df80d 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <QtGui>
 #include "View.h"
-#include "Constants.h"
+#include "constants.h"
 
 class AboutView : public QWidget, public View {
 
diff --git a/src/Constants.h b/src/Constants.h
deleted file mode 100755 (executable)
index 8ba79e8..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#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
index e7592ecbf096e3e17369554b3a5af7ba7bdfa7dc..761e5a4bff6c200c8ed49dba0bfdff35751b4408 100755 (executable)
@@ -78,29 +78,7 @@ QVariant ListModel::data(const QModelIndex &index, int role) const {
     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();
@@ -112,8 +90,6 @@ void ListModel::setActiveRow( int row) {
         m_activeRow = row;
         m_activeVideo = videoAt(row);
         
-        // setStateOfRow( row, Item::Played );
-        
         int oldactiverow = m_activeRow;
         
         if ( rowExists( oldactiverow ) )
@@ -268,6 +244,7 @@ void ListModel::removeIndexes(QModelIndexList &indexes) {
     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) {
@@ -377,20 +354,21 @@ QModelIndex ListModel::indexForVideo(Video* video) {
 }
 
 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());
 
@@ -401,7 +379,6 @@ void ListModel::move(QModelIndexList &indexes, bool up) {
         videos.insert(row, video);
         endInsertRows();
 
-        counter++;
     }
 
     emit needSelectionFor(movedVideos);
index c4c078f41451afadc1d862c9a1c0a843426e59ea..c84b6053a7ffd40de127b9b042c4809f8372a4ae 100755 (executable)
@@ -8,7 +8,11 @@
 enum DataRoles {
     ItemTypeRole = Qt::UserRole,
     VideoRole,
-    ActiveTrackRole
+    ActiveTrackRole,
+    DownloadItemRole,
+    HoveredItemRole,
+    DownloadButtonHoveredRole,
+    DownloadButtonPressedRole
 };
 
 enum ItemTypes {
index 31398c4abdbd379bd91faa0c6b8c93be94270390..c87c398be0d84b2e8d7c7be7362441f510d65d32 100755 (executable)
@@ -1,19 +1,30 @@
 #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);
@@ -24,7 +35,6 @@ MainWindow::MainWindow() :
     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&)));
 
@@ -43,20 +53,32 @@ MainWindow::MainWindow() :
     // 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() {
@@ -77,30 +99,34 @@ void MainWindow::createActions() {
 
     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()));
 
@@ -170,7 +196,7 @@ void MainWindow::createActions() {
     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);
@@ -211,13 +237,17 @@ void MainWindow::createActions() {
     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);
@@ -230,6 +260,37 @@ void MainWindow::createActions() {
     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()) {
 
@@ -264,7 +325,7 @@ void MainWindow::createMenus() {
     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);
@@ -282,12 +343,18 @@ void MainWindow::createMenus() {
     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);
@@ -297,24 +364,18 @@ void MainWindow::createMenus() {
 
 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
 
@@ -322,30 +383,50 @@ void MainWindow::createToolBars() {
     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);
 }
@@ -356,14 +437,11 @@ void MainWindow::createStatusBar() {
     // 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);
 
@@ -373,17 +451,24 @@ void MainWindow::createStatusBar() {
 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();
@@ -426,16 +511,21 @@ void MainWindow::showWidget ( QWidget* widget ) {
     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);
@@ -480,19 +570,28 @@ void MainWindow::quit() {
 }
 
 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();
@@ -522,23 +621,26 @@ void MainWindow::stateChanged(Phonon::State newState, Phonon::State /* oldState
 
          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:
@@ -547,6 +649,7 @@ void MainWindow::stateChanged(Phonon::State newState, Phonon::State /* oldState
         pauseAct->setEnabled(false);
         currentTime->clear();
         totalTime->clear();
+        // stopAct->setEnabled(true);
         break;
 
          default:
@@ -561,8 +664,6 @@ void MainWindow::stop() {
 
 void MainWindow::fullscreen() {
 
-    setUpdatesEnabled(false);
-
     // No compact view action when in full screen
     compactViewAct->setVisible(m_fullscreen);
     compactViewAct->setChecked(false);
@@ -576,17 +677,17 @@ void MainWindow::fullscreen() {
 
     // 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()) {
@@ -599,20 +700,33 @@ void MainWindow::fullscreen() {
 #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"));
@@ -622,44 +736,44 @@ void MainWindow::fullscreen() {
         // 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() {
@@ -707,7 +821,7 @@ void MainWindow::totalTimeChanged(qint64 time) {
         totalTime->clear();
         return;
     }
-    totalTime->setText("/ " + formatTime(time));
+    totalTime->setText(formatTime(time));
 }
 
 QString MainWindow::formatTime(qint64 time) {
@@ -748,10 +862,13 @@ void MainWindow::volumeChanged(qreal newVolume) {
 }
 
 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) {
@@ -779,13 +896,7 @@ void MainWindow::toggleDefinitionMode() {
 
 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) {
@@ -799,3 +910,40 @@ void MainWindow::clearRecentKeywords() {
     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();
+}
index 1eb025102b174e359ce5c560b1a3c50b5e2a1f21..e90dbf83ce16e737c9586e2abc1723b68f0efe9e 100755 (executable)
@@ -12,6 +12,7 @@
 #include "SearchView.h"
 #include "MediaView.h"
 #include "AboutView.h"
+#include "downloadview.h"
 
 class MainWindow : public QMainWindow {
 
@@ -56,6 +57,11 @@ private slots:
     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();
@@ -76,6 +82,7 @@ private:
     SearchView *searchView;
     MediaView *mediaView;
     QWidget *aboutView;
+    QWidget *downloadView;
 
     // actions
     QAction *addGadgetAct;
@@ -95,7 +102,6 @@ private:
     QAction *webPageAct;
     QAction *copyPageAct;
     QAction *copyLinkAct;
-    QAction *downloadAct;
     QAction *volumeUpAct;
     QAction *volumeDownAct;
     QAction *volumeMuteAct;
index 8735f8aaae1ee59ca8f7c952c5bb0224551b0b2f..739c595a048b4bafd7449409c2d1fa57f550f6cf 100644 (file)
@@ -3,7 +3,8 @@
 #include "networkaccess.h"
 #include "videowidget.h"
 #include "minisplitter.h"
-#include "flickcharm.h"
+#include "constants.h"
+#include "downloadmanager.h"
 
 namespace The {
     QMap<QString, QAction*>* globalActions();
@@ -81,7 +82,7 @@ MediaView::MediaView(QWidget *parent) : QWidget(parent) {
     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
@@ -113,13 +114,12 @@ MediaView::MediaView(QWidget *parent) : QWidget(parent) {
     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
 
 }
 
@@ -144,6 +144,10 @@ void MediaView::setMediaObject(Phonon::MediaObject *mediaObject) {
 void MediaView::search(SearchParams *searchParams) {
     reallyStopped = false;
 
+#ifdef APP_DEMO
+    demoTimer->stop();
+#endif
+
     videoAreaWidget->clear();
     workaroundTimer->stop();
     errorTimer->stop();
@@ -194,7 +198,7 @@ void MediaView::stateChanged(Phonon::State newState, Phonon::State /*oldState*/)
         // 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();
@@ -269,6 +273,8 @@ void MediaView::activeRowChanged(int row) {
     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...
 
 }
@@ -276,7 +282,15 @@ void MediaView::activeRowChanged(int row) {
 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();
 
@@ -289,6 +303,11 @@ void MediaView::gotStreamUrl(QUrl streamUrl) {
         QModelIndex index = listModel->index(row, 0, QModelIndex());
         listView->scrollTo(index, QAbstractItemView::EnsureVisible);
     }
+
+#ifdef APP_DEMO
+    demoTimer->start();
+#endif
+
 }
 
 void MediaView::itemActivated(const QModelIndex &index) {
@@ -298,8 +317,8 @@ 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() {
@@ -375,14 +394,26 @@ void MediaView::selectionChanged(const QItemSelection & /*selected*/, const QIte
 
 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) {
@@ -423,3 +454,49 @@ void MediaView::saveSplitterState() {
     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();
+}
index 26775b624ac73e241196636a81bed50e12225666..7a19d68d58aa897eb716a07bf9cab62a8c01f1b4 100644 (file)
@@ -7,22 +7,27 @@
 #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;
@@ -49,6 +54,8 @@ public slots:
     void moveDownSelected();
     void setPlaylistVisible(bool visible=true);
     void saveSplitterState();
+    void downloadVideo();
+    void fullscreen();
 
 private slots:
     // list/model
@@ -68,6 +75,9 @@ private slots:
     void searchMostViewed();
     // timer
     void timerPlay();
+#ifdef APP_DEMO
+    void demoMessage();
+#endif
 
 private:
 
@@ -100,6 +110,10 @@ private:
     QTimer *workaroundTimer;
     Video *skippedVideo;
 
+#ifdef APP_DEMO
+    QTimer *demoTimer;
+#endif
+
 };
 
 #endif // __MEDIAVIEW_H__
index 191b1bdaabe80579218a2dc2665a4fc7ebb59510..d1907f0d68215f2d4f876273f6b664f0586b304e 100644 (file)
@@ -1,5 +1,6 @@
 #include "SearchView.h"
-#include "Constants.h"
+#include "constants.h"
+#include "fontutils.h"
 
 namespace The {
     QMap<QString, QAction*>* globalActions();
@@ -10,12 +11,14 @@ static const int PADDING = 30;
 
 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);
@@ -27,6 +30,7 @@ SearchView::SearchView(QWidget *parent) : QWidget(parent) {
     mainLayout->addWidget(message);
 
     mainLayout->addStretch();
+    mainLayout->addSpacing(PADDING);
 
     QBoxLayout *hLayout = new QHBoxLayout();
     hLayout->setAlignment(Qt::AlignCenter);
@@ -42,21 +46,22 @@ SearchView::SearchView(QWidget *parent) : QWidget(parent) {
     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);
@@ -81,16 +86,23 @@ SearchView::SearchView(QWidget *parent) : QWidget(parent) {
 
     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);
 
@@ -98,6 +110,7 @@ SearchView::SearchView(QWidget *parent) : QWidget(parent) {
 
     layout->addLayout(otherLayout);
 
+    mainLayout->addSpacing(PADDING);
     mainLayout->addStretch();
 
     setLayout(mainLayout);
@@ -184,6 +197,7 @@ void SearchView::checkForUpdate() {
 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"),
@@ -191,9 +205,24 @@ void SearchView::gotNewVersion(QString version) {
             );
     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
+}
index 6ad912d0321e1d41d02f70a7028861a915c7911d..c32db4b5bb2adbb662785750110febab0b51327b 100644 (file)
@@ -37,6 +37,9 @@ public slots:
 signals:
     void search(QString query);
 
+protected:
+    void paintEvent(QPaintEvent *);
+
 private slots:
     void watch();
     void textChanged(const QString &text);
diff --git a/src/constants.cpp b/src/constants.cpp
new file mode 100644 (file)
index 0000000..cabca3a
--- /dev/null
@@ -0,0 +1,11 @@
+#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";
diff --git a/src/constants.h b/src/constants.h
new file mode 100755 (executable)
index 0000000..f26a313
--- /dev/null
@@ -0,0 +1,20 @@
+#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
diff --git a/src/downloaditem.cpp b/src/downloaditem.cpp
new file mode 100644 (file)
index 0000000..ab92fc3
--- /dev/null
@@ -0,0 +1,257 @@
+#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);
+}
diff --git a/src/downloaditem.h b/src/downloaditem.h
new file mode 100644 (file)
index 0000000..1d6b1f1
--- /dev/null
@@ -0,0 +1,80 @@
+#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
diff --git a/src/downloadlistview.cpp b/src/downloadlistview.cpp
new file mode 100644 (file)
index 0000000..3a87956
--- /dev/null
@@ -0,0 +1,63 @@
+#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();
+}
diff --git a/src/downloadlistview.h b/src/downloadlistview.h
new file mode 100644 (file)
index 0000000..2aae0ff
--- /dev/null
@@ -0,0 +1,26 @@
+#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
diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp
new file mode 100644 (file)
index 0000000..36ede9b
--- /dev/null
@@ -0,0 +1,146 @@
+#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;
+}
diff --git a/src/downloadmanager.h b/src/downloadmanager.h
new file mode 100644 (file)
index 0000000..15baa7f
--- /dev/null
@@ -0,0 +1,42 @@
+#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
diff --git a/src/downloadmodel.cpp b/src/downloadmodel.cpp
new file mode 100644 (file)
index 0000000..d68db0e
--- /dev/null
@@ -0,0 +1,90 @@
+#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 ) );
+}
diff --git a/src/downloadmodel.h b/src/downloadmodel.h
new file mode 100644 (file)
index 0000000..26a43de
--- /dev/null
@@ -0,0 +1,38 @@
+#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
diff --git a/src/downloadsettings.cpp b/src/downloadsettings.cpp
new file mode 100644 (file)
index 0000000..557a4e1
--- /dev/null
@@ -0,0 +1,66 @@
+#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));
+}
diff --git a/src/downloadsettings.h b/src/downloadsettings.h
new file mode 100644 (file)
index 0000000..6a60102
--- /dev/null
@@ -0,0 +1,27 @@
+#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
diff --git a/src/downloadview.cpp b/src/downloadview.cpp
new file mode 100644 (file)
index 0000000..9ab12a9
--- /dev/null
@@ -0,0 +1,90 @@
+#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();
+    }
+
+}
diff --git a/src/downloadview.h b/src/downloadview.h
new file mode 100644 (file)
index 0000000..10f5589
--- /dev/null
@@ -0,0 +1,40 @@
+#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
diff --git a/src/flickcharm.cpp b/src/flickcharm.cpp
deleted file mode 100644 (file)
index 1f5175b..0000000
+++ /dev/null
@@ -1,327 +0,0 @@
-/****************************************************************************
-**
-** 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;
-        }
-    }
-}
diff --git a/src/flickcharm.h b/src/flickcharm.h
deleted file mode 100644 (file)
index 2a1bfea..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/****************************************************************************
-**
-** 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
diff --git a/src/fontutils.cpp b/src/fontutils.cpp
new file mode 100644 (file)
index 0000000..05384b8
--- /dev/null
@@ -0,0 +1,43 @@
+#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;
+}
diff --git a/src/fontutils.h b/src/fontutils.h
new file mode 100644 (file)
index 0000000..5fe99db
--- /dev/null
@@ -0,0 +1,16 @@
+#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
diff --git a/src/globalshortcutbackend.cpp b/src/globalshortcutbackend.cpp
new file mode 100644 (file)
index 0000000..8646b7a
--- /dev/null
@@ -0,0 +1,24 @@
+#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();
+}
diff --git a/src/globalshortcutbackend.h b/src/globalshortcutbackend.h
new file mode 100644 (file)
index 0000000..e6844bb
--- /dev/null
@@ -0,0 +1,27 @@
+#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
diff --git a/src/globalshortcuts.cpp b/src/globalshortcuts.cpp
new file mode 100644 (file)
index 0000000..39eda6d
--- /dev/null
@@ -0,0 +1,50 @@
+#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();
+    }
+}
diff --git a/src/globalshortcuts.h b/src/globalshortcuts.h
new file mode 100644 (file)
index 0000000..62cd935
--- /dev/null
@@ -0,0 +1,56 @@
+#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
diff --git a/src/gnomeglobalshortcutbackend.cpp b/src/gnomeglobalshortcutbackend.cpp
new file mode 100644 (file)
index 0000000..6fc3594
--- /dev/null
@@ -0,0 +1,54 @@
+#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();
+}
diff --git a/src/gnomeglobalshortcutbackend.h b/src/gnomeglobalshortcutbackend.h
new file mode 100644 (file)
index 0000000..bf6dd89
--- /dev/null
@@ -0,0 +1,29 @@
+#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
index 0002ed08e547ae904ee373d6cb1ccc943e77e279..656c6512876a84e808b9ddd4e4eda09d9b85023b 100644 (file)
@@ -16,6 +16,7 @@ GSuggestCompletion::GSuggestCompletion(QWidget *parent, QLineEdit *editor):
     popup->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
     popup->installEventFilter(this);
     popup->setMouseTracking(true);
+    popup->setWindowOpacity(.9);
 
     connect(popup, SIGNAL(itemClicked(QListWidgetItem*)),
             SLOT(doneCompletion()));
index 551e1acb75d715b0b170631906ac687122d20654..6e15c107aa7df50730df41f4752f3e22efdd35c4 100644 (file)
@@ -88,7 +88,7 @@ private:
 Q_GLOBAL_STATIC(QtIconLoaderImplementation, iconLoaderInstance)
 #endif
 
-/*!
+        /*!
 
     Returns the standard icon for the given icon /a name
     as specified in the freedesktop icon spec
@@ -99,28 +99,29 @@ Q_GLOBAL_STATIC(QtIconLoaderImplementation, iconLoaderInstance)
     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;
 }
 
@@ -233,7 +234,7 @@ void QtIconLoaderImplementation::lookupIconTheme() const
     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"));
@@ -313,9 +314,23 @@ QPixmap QtIconLoaderImplementation::findIconHelper(int size, const QString &them
                 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;
             }
index 89fc1b2ba4b4c71d90859f36721e37f748b6b58f..a40da0f9a0e018018d48529a1e5a3e178ed8289c 100644 (file)
@@ -50,7 +50,7 @@
 class QtIconLoader
 {
 public:
-    static QIcon icon(const QString &name, const QIcon &fallback = QIcon());
+    static QIcon icon(const QString &name);
 };
 
 #endif // QTICONLOADER_H
index a0b87be0faa379fa5b6684170e2aa2fc919e0920..ddb24a867cc8f74e20888f0d7cd445e00fa50249 100755 (executable)
@@ -1,10 +1,17 @@
 #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;
@@ -12,7 +19,7 @@ int main(int argc, char **argv) {
     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
 
@@ -30,12 +37,11 @@ int main(int argc, char **argv) {
 #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);
@@ -45,7 +51,7 @@ int main(int argc, char **argv) {
     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";
     }
index 47d09df54ea9fafe7aa127021d7d26f7b0793b6c..378cb1a80fd51e9573e27b2e778ef6dc46141d1e 100644 (file)
@@ -1,11 +1,15 @@
 #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;
 }
@@ -55,7 +59,7 @@ QNetworkReply* NetworkAccess::simpleGet(QUrl url, int operation) {
     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;
index 9463b669ae77fa2d49dea4777866de9c486177ec..4f64c9907c3fd29c872ae0563e804cd92b443703 100644 (file)
@@ -1,5 +1,8 @@
 #include "PrettyItemDelegate.h"
 #include "../ListModel.h"
+#include "../fontutils.h"
+#include "../downloaditem.h"
+#include "../iconloader/qticonloader.h"
 
 #include <QFontMetricsF>
 #include <QPainter>
@@ -8,18 +11,21 @@ const qreal PrettyItemDelegate::THUMB_HEIGHT = 90.0;
 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() {
@@ -67,7 +73,8 @@ void PrettyItemDelegate::paintBody( QPainter* painter,
     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();
@@ -102,8 +109,6 @@ void PrettyItemDelegate::paintBody( QPainter* painter,
     }
 
     if (isActive) painter->setFont(boldFont);
-    const QFontMetricsF fm(painter->font());
-    const QFontMetricsF boldMetrics(boldFont);
 
     // text color
     if (isSelected)
@@ -164,28 +169,17 @@ void PrettyItemDelegate::paintBody( QPainter* painter,
     */
 
     // 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 {
@@ -244,3 +238,120 @@ void PrettyItemDelegate::drawTime(QPainter *painter, QString time, QRectF line)
     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);
+}
index 6fc547b894f8a230428dec88929ed506b2f416c8..42605587a1920ff347ec234698c2a7321c72af1d 100644 (file)
@@ -5,22 +5,26 @@
 #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;
@@ -37,6 +41,9 @@ private:
     QFont boldFont;
     QFont smallerFont;
     QFont smallerBoldFont;
+
+    bool downloadInfo;
+    QProgressBar *progressBar;
 };
 
 #endif
index 8d2bb29028719b736b034451adc6a52733a3962e..71cb6874b4748257a5436a8a1195dddb349234ad 100644 (file)
@@ -2,7 +2,7 @@
 #define PLAYLISTWIDGET_H
 
 #include <QtGui>
-#include "thblackbar.h"
+#include "thlibrary/thblackbar.h"
 
 class PlaylistWidget : public QWidget
 {
index d71367ab418d752aca67a8e10e9828591b4fee67..95594fc82966f21386006c0f1e6bbed594c39c1f 100644 (file)
@@ -1,7 +1,7 @@
 #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);
 }
index 668001f38d5afadb878ae6ec9133b214b76b97cc..3d1f44fed4600005592e85d97bbb0ee7acc242f1 100644 (file)
@@ -3,10 +3,13 @@
 
 #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
index 0043fc57c54db995ab4910d62d21915382feae3d..4101be04650a7705d50b1547cfd48a466ca442b8 100644 (file)
@@ -4,6 +4,7 @@
 #include <QtGui>
 
 #include "thblackbar.h"
+#include "../fontutils.h"
 
 /* ============================================================================
  *  PRIVATE Class
@@ -66,8 +67,8 @@ QSize THBlackBar::minimumSizeHint (void) const {
  *  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);
@@ -176,9 +177,7 @@ QAction *THBlackBar::hoveredAction (const QPoint& pos) const {
 }
 
 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) {
@@ -245,11 +244,12 @@ void THBlackBar::drawButton (     QPainter *painter,
 
     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());
index 35c4639dc2b937ea34f22fbde156117337ebda8d..f8d381d2ecca99d7ecdfcaa182281a1e20bd0a81 100644 (file)
@@ -1,6 +1,6 @@
 #include "updatechecker.h"
 #include "networkaccess.h"
-#include "Constants.h"
+#include "constants.h"
 
 namespace The {
     NetworkAccess* http();
index d91ddd5cde9d93ef4b8ab866fbcc2d3f855e9129..60fdf5436c3ceb73a2a4d65228dde53c85d3d182 100644 (file)
@@ -153,6 +153,7 @@ QSize ExLineEdit::sizeHint() const
     m_lineEdit->setFrame(true);
     QSize size = m_lineEdit->sizeHint();
     m_lineEdit->setFrame(false);
+    size = size + QSize(3, 3);
     return size;
 }
 
index 635c95c07cb85d5119ba06047acf45b22f1b2303..35e837109f7fd927321dfe56d4666ab75b38de94 100644 (file)
@@ -10,7 +10,27 @@ namespace The {
 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;
@@ -27,9 +47,12 @@ const QImage Video::thumbnail() const {
     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
 
@@ -40,6 +63,7 @@ void Video::loadStreamUrl() {
     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);
@@ -49,10 +73,12 @@ void Video::loadStreamUrl() {
 }
 
 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*)));
@@ -62,7 +88,7 @@ void  Video::getVideoInfo() {
 
     // 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);
@@ -76,9 +102,9 @@ void  Video::getVideoInfo() {
 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
@@ -86,14 +112,38 @@ void  Video::gotVideoInfo(QByteArray data) {
         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();
@@ -108,17 +158,20 @@ void  Video::gotVideoInfo(QByteArray data) {
 }
 
 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) {
@@ -130,6 +183,7 @@ 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;
     }
 
@@ -201,7 +255,7 @@ void Video::findVideoUrl(int definitionCode) {
     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);
index 2702d7ae3f814e1e7635a4cdfbf1fbd3e2bf21be..68a17f542f0ef08420524983df0adbe445e7b163 100644 (file)
@@ -10,6 +10,7 @@ class Video : public QObject {
 
 public:
     Video();
+    Video* clone();
 
     const QString title() const { return m_title; }
     void setTitle( QString title ) { m_title = title; }
@@ -45,6 +46,8 @@ public:
     void loadStreamUrl();
     QUrl getStreamUrl() { return m_streamUrl; }
 
+    QString id() { return videoId; }
+
 public slots:
     void setThumbnail(QByteArray bytes);
 
@@ -85,6 +88,8 @@ private:
     // 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
index 664240b4fc62e11b705f111c303b467e3ffbe695..6bb66cb33a36eafa147a743e20a83256f95a94c1 100644 (file)
@@ -1,6 +1,6 @@
 #include "youtubesearch.h"
 #include "youtubestreamreader.h"
-#include "Constants.h"
+#include "constants.h"
 #include "networkaccess.h"
 
 namespace The {
@@ -18,9 +18,9 @@ void YouTubeSearch::search(SearchParams *searchParams, int max, int skip) {
 
     // 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: