diff --git a/3rdparty/libprojectm/CMakeLists.txt b/3rdparty/libprojectm/CMakeLists.txt
index 06dc999ca..a81a38fc6 100644
--- a/3rdparty/libprojectm/CMakeLists.txt
+++ b/3rdparty/libprojectm/CMakeLists.txt
@@ -40,7 +40,7 @@ if (USE_NATIVE_GLEW)
SET(GLEW_LIBRARIES )
else(USE_NATIVE_GLEW)
SET(GLEW_SOURCES )
- find_library(GLEW_LIBRARIES NAMES glew GLEW glew32)
+ find_library(GLEW_LIBRARIES NAMES glew32.dll glew GLEW glew32)
find_path(GLEW_INCLUDE_DIRS GL/glew.h HINTS /sw/include)
include_directories(${GLEW_INCLUDE_DIRS})
endif(USE_NATIVE_GLEW)
diff --git a/3rdparty/qtsingleapplication/CMakeLists.txt b/3rdparty/qtsingleapplication/CMakeLists.txt
index e7639b3f6..e3336e603 100644
--- a/3rdparty/qtsingleapplication/CMakeLists.txt
+++ b/3rdparty/qtsingleapplication/CMakeLists.txt
@@ -1,4 +1,5 @@
cmake_minimum_required(VERSION 2.8.11)
+set(CMAKE_CXX_STANDARD 11)
set(SINGLEAPP-SOURCES
qtlocalpeer.cpp
diff --git a/3rdparty/qxt/CMakeLists.txt b/3rdparty/qxt/CMakeLists.txt
index 9f56983c3..8fd9220ae 100644
--- a/3rdparty/qxt/CMakeLists.txt
+++ b/3rdparty/qxt/CMakeLists.txt
@@ -1,4 +1,5 @@
cmake_minimum_required(VERSION 2.8.11)
+set(CMAKE_CXX_STANDARD 11)
set(QXT-SOURCES
qxtglobal.cpp
diff --git a/3rdparty/qxt/qxtglobalshortcut_mac.cpp b/3rdparty/qxt/qxtglobalshortcut_mac.cpp
index 58b9a9043..048711fcb 100644
--- a/3rdparty/qxt/qxtglobalshortcut_mac.cpp
+++ b/3rdparty/qxt/qxtglobalshortcut_mac.cpp
@@ -1,34 +1,34 @@
#include
-/****************************************************************************
-** Copyright (c) 2006 - 2011, the LibQxt project.
-** See the Qxt AUTHORS file for a list of authors and copyright holders.
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in the
-** documentation and/or other materials provided with the distribution.
-** * Neither the name of the LibQxt project nor the
-** names of its contributors may be used to endorse or promote products
-** derived from this software without specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
-** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-**
-**
-*****************************************************************************/
-
+/****************************************************************************
+** Copyright (c) 2006 - 2011, the LibQxt project.
+** See the Qxt AUTHORS file for a list of authors and copyright holders.
+** All rights reserved.
+**
+** Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in the
+** documentation and/or other materials provided with the distribution.
+** * Neither the name of the LibQxt project nor the
+** names of its contributors may be used to endorse or promote products
+** derived from this software without specific prior written permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+** DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY
+** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**
+**
+*****************************************************************************/
+
#include "qxtglobalshortcut_p.h"
#include
#include
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 41e4dbabc..82b310034 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,7 +42,10 @@ if(APPLE)
endif(APPLE)
set(OpenGL_GL_PREFERENCE LEGACY)
-find_package(OpenGL REQUIRED)
+find_package(OpenGL)
+if(OPENGL_FOUND)
+ set(HAVE_OPENGL ON)
+endif(OPENGL_FOUND)
find_package(Boost REQUIRED)
find_package(Gettext REQUIRED)
find_package(PkgConfig REQUIRED)
@@ -317,7 +320,7 @@ optional_component(MOODBAR ON "Moodbar support"
)
optional_component(SPARKLE ON "Sparkle integration"
- DEPENDS "Mac OS X" APPLE
+ DEPENDS "macOS" APPLE
DEPENDS "Sparkle" SPARKLE
)
@@ -329,7 +332,9 @@ optional_component(LIBPULSE ON "Pulse audio integration"
DEPENDS "libpulse" LIBPULSE_FOUND
)
-optional_component(VISUALISATIONS ON "Visualisations")
+optional_component(VISUALISATIONS ON "Visualisations"
+ DEPENDS "opengl" OPENGL_FOUND
+)
optional_component(TRANSLATIONS ON "Translations"
DEPENDS "gettext" GETTEXT_XGETTEXT_EXECUTABLE
@@ -341,6 +346,11 @@ if (APPLE AND USE_BUNDLE AND NOT USE_BUNDLE_DIR)
set(USE_BUNDLE_DIR "../PlugIns")
endif()
+option(USE_BUNDLE "Bundle macos/windows dependencies" ON)
+if (APPLE AND USE_BUNDLE AND NOT USE_BUNDLE_DIR)
+ set(USE_BUNDLE_DIR "../PlugIns")
+endif()
+
if(CRYPTOPP_FOUND)
set(HAVE_CRYPTOPP ON)
if(HAVE_SPOTIFY)
@@ -352,12 +362,12 @@ endif(CRYPTOPP_FOUND)
# and don't exist on my mingw toolchain
list(REMOVE_ITEM QT_LIBRARIES "-lGLU -lGL")
+option(USE_SYSTEM_PROJECTM "Don't set this option unless your system projectM library has been compiled with the Clementine patches in 3rdparty" OFF)
option(BUNDLE_PROJECTM_PRESETS "Install Clementine's own copies of libprojectm presets - disable this if you want to use a system package instead" ON)
-if(ENABLE_VISUALISATIONS)
+if(HAVE_VISUALISATIONS)
# When/if upstream accepts our patches then these options can be used to link
# to system installed projectM instead.
- option(USE_SYSTEM_PROJECTM "Don't set this option unless your system projectM library has been compiled with the Clementine patches in 3rdparty" OFF)
if(USE_SYSTEM_PROJECTM)
pkg_check_modules(LIBPROJECTM libprojectM)
else(USE_SYSTEM_PROJECTM)
@@ -365,7 +375,7 @@ if(ENABLE_VISUALISATIONS)
set(LIBPROJECTM_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libprojectm)
set(LIBPROJECTM_LIBRARIES projectM)
endif(USE_SYSTEM_PROJECTM)
-endif(ENABLE_VISUALISATIONS)
+endif(HAVE_VISUALISATIONS)
# Build our copy of QSqlLiteDriver.
diff --git a/dist/CMakeLists.txt b/dist/CMakeLists.txt
index d1872c64e..d97eea2b0 100644
--- a/dist/CMakeLists.txt
+++ b/dist/CMakeLists.txt
@@ -1,5 +1,4 @@
-execute_process(COMMAND date "+%a %b %d %Y"
- OUTPUT_VARIABLE RPM_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
+execute_process(COMMAND env LC_ALL="en_US.utf8" date "+%a %b %d %Y" OUTPUT_VARIABLE RPM_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/clementine.spec.in
${CMAKE_CURRENT_SOURCE_DIR}/clementine.spec @ONLY)
diff --git a/dist/windows/clementine.nsi.in b/dist/windows/clementine.nsi.in
index 7af6fe04a..d46eb43dd 100644
--- a/dist/windows/clementine.nsi.in
+++ b/dist/windows/clementine.nsi.in
@@ -274,7 +274,6 @@ Section "Clementine" Clementine
File "libcdio-16.dll"
File "libchromaprint.dll"
File "libeay32.dll"
- File "libechonest.dll"
File "libfaac.dll"
File "libfaad.dll"
File "libffi-6.dll"
@@ -320,8 +319,10 @@ Section "Clementine" Clementine
File "liborc-test-0.4-0.dll"
File "libp11-kit-0.dll"
File "libplist.dll"
+ File "libpsl-5.dll"
File "libprotobuf-9.dll"
File "libqjson.dll"
+ File "libsoup-2.4-1.dll"
File "libspeex-1.dll"
File "libspotify.dll"
File "libsqlite3-0.dll"
@@ -1087,7 +1088,6 @@ Section "Uninstall"
Delete "$INSTDIR\libcdio-16.dll"
Delete "$INSTDIR\libchromaprint.dll"
Delete "$INSTDIR\libeay32.dll"
- Delete "$INSTDIR\libechonest.dll"
Delete "$INSTDIR\libfaac.dll"
Delete "$INSTDIR\libfaad.dll"
Delete "$INSTDIR\libffi-6.dll"
@@ -1134,8 +1134,10 @@ Section "Uninstall"
Delete "$INSTDIR\liborc-test-0.4-0.dll"
Delete "$INSTDIR\libp11-kit-0.dll"
Delete "$INSTDIR\libplist.dll"
+ Delete "$INSTDIR\libpsl-5.dll"
Delete "$INSTDIR\libprotobuf-9.dll"
Delete "$INSTDIR\libqjson.dll"
+ Delete "$INSTDIR\libsoup-2-4-1.dll"
Delete "$INSTDIR\libspeex-1.dll"
Delete "$INSTDIR\libspotify.dll"
Delete "$INSTDIR\libstdc++-6.dll"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 34f65a33e..0eb14e28c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -22,7 +22,6 @@ include_directories(${CMAKE_BINARY_DIR})
include_directories(${GLIB_INCLUDE_DIRS})
include_directories(${LIBXML_INCLUDE_DIRS})
include_directories(${GOBJECT_INCLUDE_DIRS})
-include_directories(${LIBPROJECTM_INCLUDE_DIRS})
include_directories(${QTSINGLEAPPLICATION_INCLUDE_DIRS})
include_directories(${QTIOCOMPRESSOR_INCLUDE_DIRS})
include_directories(${QXT_INCLUDE_DIRS})
@@ -30,8 +29,11 @@ include_directories(${SHA2_INCLUDE_DIRS})
include_directories(${CHROMAPRINT_INCLUDE_DIRS})
include_directories(${MYGPOQT5_INCLUDE_DIRS})
-find_package(OpenGL REQUIRED)
-include_directories(${OPENGL_INCLUDE_DIR})
+if (HAVE_VISUALISATIONS)
+ find_package(OpenGL REQUIRED)
+ include_directories(${OPENGL_INCLUDE_DIR})
+ include_directories(${LIBPROJECTM_INCLUDE_DIRS})
+endif(HAVE_VISUALISATIONS)
if(HAVE_LIBLASTFM)
include_directories(${LASTFM5_INCLUDE_DIRS})
@@ -256,6 +258,7 @@ set(SOURCES
internet/podcasts/addpodcastbyurl.cpp
internet/podcasts/addpodcastdialog.cpp
internet/podcasts/addpodcastpage.cpp
+ internet/podcasts/episodeinfowidget.cpp
internet/podcasts/fixedopmlpage.cpp
internet/podcasts/gpoddersearchpage.cpp
internet/podcasts/gpoddersync.cpp
@@ -550,6 +553,7 @@ set(HEADERS
internet/podcasts/addpodcastbyurl.h
internet/podcasts/addpodcastdialog.h
internet/podcasts/addpodcastpage.h
+ internet/podcasts/episodeinfowidget.h
internet/podcasts/fixedopmlpage.h
internet/podcasts/gpoddersearchpage.h
internet/podcasts/gpoddersync.h
@@ -704,6 +708,7 @@ set(UI
internet/podcasts/addpodcastbyurl.ui
internet/podcasts/addpodcastdialog.ui
+ internet/podcasts/episodeinfowidget.ui
internet/podcasts/gpoddersearchpage.ui
internet/podcasts/itunessearchpage.ui
internet/podcasts/podcastinfodialog.ui
@@ -795,7 +800,7 @@ endif(HAVE_TRANSLATIONS)
option(USE_INSTALL_PREFIX "Look for data in CMAKE_INSTALL_PREFIX" ON)
# Visualisations
-optional_source(ENABLE_VISUALISATIONS
+optional_source(HAVE_VISUALISATIONS
SOURCES
visualisations/projectmpresetmodel.cpp
visualisations/projectmvisualisation.cpp
@@ -1262,9 +1267,9 @@ target_link_libraries(clementine_lib
Qocoa
)
-if(ENABLE_VISUALISATIONS)
+if(HAVE_VISUALISATIONS)
target_link_libraries(clementine_lib ${LIBPROJECTM_LIBRARIES})
-endif(ENABLE_VISUALISATIONS)
+endif(HAVE_VISUALISATIONS)
if(HAVE_LIBLASTFM)
target_link_libraries(clementine_lib ${LASTFM5_LIBRARIES})
diff --git a/src/analyzers/analyzerbase.h b/src/analyzers/analyzerbase.h
index d65e6c110..e66ed0c1f 100644
--- a/src/analyzers/analyzerbase.h
+++ b/src/analyzers/analyzerbase.h
@@ -26,6 +26,8 @@
#ifndef ANALYZERS_ANALYZERBASE_H_
#define ANALYZERS_ANALYZERBASE_H_
+#include "config.h"
+
#ifdef __FreeBSD__
#include
#endif
@@ -38,6 +40,7 @@
#include
#include
+#ifdef HAVE_OPENGL
#include
#ifdef Q_OS_MACX
#include
@@ -46,6 +49,7 @@
#include
#include
#endif
+#endif
class QEvent;
class QPaintEvent;
diff --git a/src/analyzers/rainbowanalyzer.cpp b/src/analyzers/rainbowanalyzer.cpp
index 82ba7a601..7cb0b44c2 100644
--- a/src/analyzers/rainbowanalyzer.cpp
+++ b/src/analyzers/rainbowanalyzer.cpp
@@ -25,8 +25,10 @@
#include
-#include
#include
+#include
+#include
+#include
#include "core/arraysize.h"
#include "core/logging.h"
diff --git a/src/analyzers/rainbowanalyzer.h b/src/analyzers/rainbowanalyzer.h
index ccb70b673..511ba33de 100644
--- a/src/analyzers/rainbowanalyzer.h
+++ b/src/analyzers/rainbowanalyzer.h
@@ -26,7 +26,9 @@
#include "analyzerbase.h"
-#include
+#include
+#include
+#include
namespace Rainbow {
class RainbowAnalyzer : public Analyzer::Base {
diff --git a/src/config.h.in b/src/config.h.in
index c21c2ec4b..20427754b 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -20,7 +20,7 @@
#define CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}"
#define CMAKE_EXECUTABLE_SUFFIX "${CMAKE_EXECUTABLE_SUFFIX}"
-#cmakedefine ENABLE_VISUALISATIONS
+#cmakedefine HAVE_VISUALISATIONS
#cmakedefine HAVE_AMAZON_CLOUD_DRIVE
#cmakedefine HAVE_AUDIOCD
#cmakedefine HAVE_BOX
@@ -45,6 +45,7 @@
#cmakedefine HAVE_SPOTIFY_DOWNLOADER
#cmakedefine HAVE_UDISKS2
#cmakedefine HAVE_WIIMOTEDEV
+#cmakedefine HAVE_OPENGL
#cmakedefine HAVE_TRANSLATIONS
#cmakedefine HAVE_SPOTIFY
#cmakedefine TAGLIB_HAS_OPUS
diff --git a/src/core/macglobalshortcutbackend.mm b/src/core/macglobalshortcutbackend.mm
index 631b0319a..a86a63761 100644
--- a/src/core/macglobalshortcutbackend.mm
+++ b/src/core/macglobalshortcutbackend.mm
@@ -24,6 +24,7 @@
#include
#include
#include
+#include
#include
#include
@@ -128,7 +129,14 @@ bool MacGlobalShortcutBackend::KeyPressed(const QKeySequence& sequence) {
}
bool MacGlobalShortcutBackend::IsAccessibilityEnabled() const {
- return AXAPIEnabled();
+ bool accessibilityEnabled;
+ try{
+ accessibilityEnabled = AXAPIEnabled();
+ }catch(...){
+ NSDictionary *options = @{(id)kAXTrustedCheckOptionPrompt: @YES};
+ accessibilityEnabled = AXIsProcessTrustedWithOptions((CFDictionaryRef)options);
+ }
+ return accessibilityEnabled;
}
void MacGlobalShortcutBackend::ShowAccessibilityDialog() {
diff --git a/src/core/utilities.cpp b/src/core/utilities.cpp
index 6ab137c94..2c6774fc3 100644
--- a/src/core/utilities.cpp
+++ b/src/core/utilities.cpp
@@ -89,7 +89,7 @@ QString PrettyTimeDelta(int seconds) {
return (seconds >= 0 ? "+" : "-") + PrettyTime(seconds);
}
-QString PrettyTime(int seconds) {
+QString PrettyTime(int seconds, bool always_show_hours) {
// last.fm sometimes gets the track length wrong, so you end up with
// negative times.
seconds = qAbs(seconds);
@@ -99,7 +99,7 @@ QString PrettyTime(int seconds) {
seconds %= 60;
QString ret;
- if (hours)
+ if (hours || always_show_hours)
ret.sprintf("%d:%02d:%02d", hours, minutes,
seconds); // NOLINT(runtime/printf)
else
@@ -108,8 +108,8 @@ QString PrettyTime(int seconds) {
return ret;
}
-QString PrettyTimeNanosec(qint64 nanoseconds) {
- return PrettyTime(nanoseconds / kNsecPerSec);
+QString PrettyTimeNanosec(qint64 nanoseconds, bool always_show_hours) {
+ return PrettyTime(nanoseconds / kNsecPerSec, always_show_hours);
}
QString WordyTime(quint64 seconds) {
diff --git a/src/core/utilities.h b/src/core/utilities.h
index 6d1a8972d..7345a1140 100644
--- a/src/core/utilities.h
+++ b/src/core/utilities.h
@@ -39,9 +39,9 @@ class QXmlStreamReader;
struct QMetaObject;
namespace Utilities {
-QString PrettyTime(int seconds);
+QString PrettyTime(int seconds, bool always_show_hours = false);
QString PrettyTimeDelta(int seconds);
-QString PrettyTimeNanosec(qint64 nanoseconds);
+QString PrettyTimeNanosec(qint64 nanoseconds, bool always_show_hours = false);
QString PrettySize(quint64 bytes);
QString PrettySize(const QSize& size);
QString WordyTime(quint64 seconds);
diff --git a/src/devices/gpoddevice.cpp b/src/devices/gpoddevice.cpp
index 2a0429243..cacfb14ec 100644
--- a/src/devices/gpoddevice.cpp
+++ b/src/devices/gpoddevice.cpp
@@ -47,7 +47,7 @@ void GPodDevice::Init() {
shared_from_this());
loader_->moveToThread(loader_thread_);
- connect(loader_, SIGNAL(Error(QString)), SIGNAL(Error(QString)));
+ connect(loader_, SIGNAL(Error(QString)), SLOT(LoaderError(QString)));
connect(loader_, SIGNAL(TaskStarted(int)), SIGNAL(TaskStarted(int)));
connect(loader_, SIGNAL(LoadFinished(Itdb_iTunesDB*)),
SLOT(LoadFinished(Itdb_iTunesDB*)));
@@ -223,6 +223,10 @@ void GPodDevice::FinishDelete(bool success) {
ConnectedDevice::FinishDelete(success);
}
+void GPodDevice::LoaderError(const QString& message) {
+ app_->AddError(message);
+}
+
bool GPodDevice::GetSupportedFiletypes(QList* ret) {
*ret << Song::Type_Mp4;
*ret << Song::Type_Mpeg;
diff --git a/src/devices/gpoddevice.h b/src/devices/gpoddevice.h
index b40333053..e2c6eb0e6 100644
--- a/src/devices/gpoddevice.h
+++ b/src/devices/gpoddevice.h
@@ -53,6 +53,7 @@ class GPodDevice : public ConnectedDevice, public virtual MusicStorage {
protected slots:
void LoadFinished(Itdb_iTunesDB* db);
+ void LoaderError(const QString& message);
protected:
Itdb_Track* AddTrackToITunesDb(const Song& metadata);
diff --git a/src/devices/mtpdevice.cpp b/src/devices/mtpdevice.cpp
index 252289fa9..cfd879ef2 100644
--- a/src/devices/mtpdevice.cpp
+++ b/src/devices/mtpdevice.cpp
@@ -54,7 +54,7 @@ void MtpDevice::Init() {
new MtpLoader(url_, app_->task_manager(), backend_, shared_from_this());
loader_->moveToThread(loader_thread_);
- connect(loader_, SIGNAL(Error(QString)), SIGNAL(Error(QString)));
+ connect(loader_, SIGNAL(Error(QString)), SLOT(LoaderError(QString)));
connect(loader_, SIGNAL(TaskStarted(int)), SIGNAL(TaskStarted(int)));
connect(loader_, SIGNAL(LoadFinished()), SLOT(LoadFinished()));
connect(loader_thread_, SIGNAL(started()), loader_, SLOT(LoadDatabase()));
@@ -69,6 +69,8 @@ void MtpDevice::LoadFinished() {
db_busy_.unlock();
}
+void MtpDevice::LoaderError(const QString& message) { app_->AddError(message); }
+
bool MtpDevice::StartCopy(QList* supported_types) {
// Ensure only one "organise files" can be active at any one time
db_busy_.lock();
diff --git a/src/devices/mtpdevice.h b/src/devices/mtpdevice.h
index c3577cfc4..1a9ab1efe 100644
--- a/src/devices/mtpdevice.h
+++ b/src/devices/mtpdevice.h
@@ -60,6 +60,7 @@ class MtpDevice : public ConnectedDevice {
private slots:
void LoadFinished();
+ void LoaderError(const QString& message);
private:
bool GetSupportedFiletypes(QList* ret,
diff --git a/src/internet/podcasts/episodeinfowidget.cpp b/src/internet/podcasts/episodeinfowidget.cpp
new file mode 100644
index 000000000..7cf8bde12
--- /dev/null
+++ b/src/internet/podcasts/episodeinfowidget.cpp
@@ -0,0 +1,40 @@
+/* This file is part of Clementine.
+ Copyright 2018, Jim Broadus
+
+ Clementine is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Clementine is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Clementine. If not, see .
+*/
+
+#include "core/utilities.h"
+#include "episodeinfowidget.h"
+#include "ui_episodeinfowidget.h"
+
+#include
+
+EpisodeInfoWidget::EpisodeInfoWidget(QWidget* parent)
+ : QWidget(parent), ui_(new Ui_EpisodeInfoWidget), app_(nullptr) {
+ ui_->setupUi(this);
+}
+
+EpisodeInfoWidget::~EpisodeInfoWidget() { delete ui_; }
+
+void EpisodeInfoWidget::SetApplication(Application* app) { app_ = app; }
+
+void EpisodeInfoWidget::SetEpisode(const PodcastEpisode& episode) {
+ episode_ = episode;
+ ui_->title->setText(episode.title());
+ ui_->description->setText(episode.description());
+ ui_->author->setText(episode.author());
+ ui_->date->setText(episode.publication_date().toString("d MMMM yyyy"));
+ ui_->duration->setText(Utilities::PrettyTime(episode.duration_secs(), true));
+}
diff --git a/src/internet/podcasts/episodeinfowidget.h b/src/internet/podcasts/episodeinfowidget.h
new file mode 100644
index 000000000..b228ad4ec
--- /dev/null
+++ b/src/internet/podcasts/episodeinfowidget.h
@@ -0,0 +1,46 @@
+/* This file is part of Clementine.
+ Copyright 2018, Jim Broadus
+
+ Clementine is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Clementine is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Clementine. If not, see .
+*/
+
+#ifndef INTERNET_PODCASTS_EPISODEINFOWIDGET_H_
+#define INTERNET_PODCASTS_EPISODEINFOWIDGET_H_
+
+#include "podcastepisode.h"
+
+#include
+
+class Application;
+class Ui_EpisodeInfoWidget;
+
+class EpisodeInfoWidget : public QWidget {
+ Q_OBJECT
+
+ public:
+ explicit EpisodeInfoWidget(QWidget* parent = nullptr);
+ ~EpisodeInfoWidget();
+
+ void SetApplication(Application* app);
+
+ void SetEpisode(const PodcastEpisode& episode);
+
+ private:
+ Ui_EpisodeInfoWidget* ui_;
+
+ Application* app_;
+ PodcastEpisode episode_;
+};
+
+#endif // INTERNET_PODCASTS_EPISODEINFOWIDGET_H_
diff --git a/src/internet/podcasts/episodeinfowidget.ui b/src/internet/podcasts/episodeinfowidget.ui
new file mode 100644
index 000000000..e4945a45a
--- /dev/null
+++ b/src/internet/podcasts/episodeinfowidget.ui
@@ -0,0 +1,137 @@
+
+
+ EpisodeInfoWidget
+
+
+
+ 0
+ 0
+ 398
+ 551
+
+
+
+ Form
+
+
+ #title {
+ font-weight: bold;
+}
+
+#description {
+ font-size: smaller;
+}
+
+QLineEdit {
+ background: transparent;
+}
+
+
+
+ QLayout::SetMinAndMaxSize
+
+ -
+
+
+ true
+
+
+ Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse
+
+
+
+ -
+
+
+ true
+
+
+ Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse
+
+
+
+ -
+
+
+ QLayout::SetMinAndMaxSize
+
+
-
+
+
+ Author
+
+
+ true
+
+
+
+ -
+
+
+ false
+
+
+ true
+
+
+
+ -
+
+
+ false
+
+
+ true
+
+
+
+ -
+
+
+ Date
+
+
+ true
+
+
+
+ -
+
+
+ Duration
+
+
+ true
+
+
+
+ -
+
+
+ false
+
+
+ true
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
diff --git a/src/internet/podcasts/podcastinfodialog.cpp b/src/internet/podcasts/podcastinfodialog.cpp
index 33db8cde9..ae398a6b6 100644
--- a/src/internet/podcasts/podcastinfodialog.cpp
+++ b/src/internet/podcasts/podcastinfodialog.cpp
@@ -24,7 +24,8 @@ PodcastInfoDialog::PodcastInfoDialog(Application* app, QWidget* parent)
app_(app),
ui_(new Ui_PodcastInfoDialog) {
ui_->setupUi(this);
- ui_->details->SetApplication(app);
+ ui_->podcast_details->SetApplication(app);
+ ui_->episode_details->SetApplication(app);
}
PodcastInfoDialog::~PodcastInfoDialog() {
@@ -32,8 +33,19 @@ PodcastInfoDialog::~PodcastInfoDialog() {
}
void PodcastInfoDialog::ShowPodcast(const Podcast& podcast) {
- show();
+ ui_->episode_info_scroll_area->hide();
ui_->podcast_url->setText(podcast.url().toString());
ui_->podcast_url->setReadOnly(true);
- ui_->details->SetPodcast(podcast);
+ ui_->podcast_details->SetPodcast(podcast);
+ show();
+}
+
+void PodcastInfoDialog::ShowEpisode(const PodcastEpisode& episode,
+ const Podcast& podcast) {
+ ui_->episode_info_scroll_area->show();
+ ui_->podcast_url->setText(episode.url().toString());
+ ui_->podcast_url->setReadOnly(true);
+ ui_->podcast_details->SetPodcast(podcast);
+ ui_->episode_details->SetEpisode(episode);
+ show();
}
diff --git a/src/internet/podcasts/podcastinfodialog.h b/src/internet/podcasts/podcastinfodialog.h
index 3643d8007..93540175a 100644
--- a/src/internet/podcasts/podcastinfodialog.h
+++ b/src/internet/podcasts/podcastinfodialog.h
@@ -22,6 +22,7 @@
class Application;
class Podcast;
+class PodcastEpisode;
class Ui_PodcastInfoDialog;
class PodcastInfoDialog : public QDialog {
@@ -32,6 +33,7 @@ class PodcastInfoDialog : public QDialog {
~PodcastInfoDialog();
void ShowPodcast(const Podcast& podcast);
+ void ShowEpisode(const PodcastEpisode& episode, const Podcast& podcast);
private:
Application* app_;
diff --git a/src/internet/podcasts/podcastinfodialog.ui b/src/internet/podcasts/podcastinfodialog.ui
index e0cbb0970..573dddff6 100644
--- a/src/internet/podcasts/podcastinfodialog.ui
+++ b/src/internet/podcasts/podcastinfodialog.ui
@@ -7,7 +7,7 @@
0
0
493
- 395
+ 415
@@ -18,7 +18,36 @@
-
-
+
+
+ true
+
+
+
+ 250
+ 100
+
+
+
+ Qt::ScrollBarAlwaysOff
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 473
+ 163
+
+
+
+
+
+ -
+
250
@@ -37,13 +66,13 @@
true
-
+
0
0
473
- 313
+ 162
@@ -68,6 +97,12 @@
internet/podcasts/podcastinfowidget.h
1
+
+ EpisodeInfoWidget
+ QWidget
+ internet/podcasts/episodeinfowidget.h
+ 1
+
diff --git a/src/internet/podcasts/podcastinfowidget.cpp b/src/internet/podcasts/podcastinfowidget.cpp
index d14fbbaa0..d1c365854 100644
--- a/src/internet/podcasts/podcastinfowidget.cpp
+++ b/src/internet/podcasts/podcastinfowidget.cpp
@@ -47,7 +47,7 @@ PodcastInfoWidget::PodcastInfoWidget(QWidget* parent)
}
}
-PodcastInfoWidget::~PodcastInfoWidget() {}
+PodcastInfoWidget::~PodcastInfoWidget() { delete ui_; }
void PodcastInfoWidget::SetApplication(Application* app) {
app_ = app;
diff --git a/src/internet/podcasts/podcastservice.cpp b/src/internet/podcasts/podcastservice.cpp
index 6b196aaab..2258038a8 100644
--- a/src/internet/podcasts/podcastservice.cpp
+++ b/src/internet/podcasts/podcastservice.cpp
@@ -528,8 +528,15 @@ void PodcastService::ShowContextMenu(const QPoint& global_pos) {
}
if (selected_podcasts_.count() == 1) {
- info_selected_action_->setEnabled(true);
+ if (selected_episodes_.count() == 1) {
+ info_selected_action_->setText(tr("Episode information"));
+ info_selected_action_->setEnabled(true);
+ } else {
+ info_selected_action_->setText(tr("Podcast information"));
+ info_selected_action_->setEnabled(true);
+ }
} else {
+ info_selected_action_->setText(tr("Podcast information"));
info_selected_action_->setEnabled(false);
}
@@ -699,10 +706,19 @@ void PodcastService::DownloadSelectedEpisode() {
}
void PodcastService::PodcastInfo() {
- if (selected_podcasts_.count() > 0) {
- const Podcast podcast =
- selected_podcasts_[0].data(Role_Podcast).value();
- podcast_info_dialog_.reset(new PodcastInfoDialog(app_));
+ if (selected_podcasts_.isEmpty()) {
+ // Should never happen.
+ return;
+ }
+ const Podcast podcast =
+ selected_podcasts_[0].data(Role_Podcast).value();
+ podcast_info_dialog_.reset(new PodcastInfoDialog(app_));
+
+ if (selected_episodes_.count() == 1) {
+ const PodcastEpisode episode =
+ selected_episodes_[0].data(Role_Episode).value();
+ podcast_info_dialog_->ShowEpisode(episode, podcast);
+ } else {
podcast_info_dialog_->ShowPodcast(podcast);
}
}
diff --git a/src/library/libraryquery.cpp b/src/library/libraryquery.cpp
index 9158b9f0d..d27440ece 100644
--- a/src/library/libraryquery.cpp
+++ b/src/library/libraryquery.cpp
@@ -80,7 +80,7 @@ LibraryQuery::LibraryQuery(const QueryOptions& options)
if (Song::kFtsColumns.contains(
"fts" + columntoken,
Qt::CaseInsensitive)) { // Is it a FTS column?
- query += "fts" + columntoken + subtoken + "* ";
+ query += "fts" + columntoken + ":" + subtoken + "* ";
} else if (Song::kColumns.contains(columntoken, Qt::CaseInsensitive)) {
// We need to extract the operator and the value from the subtoken
QRegExp operatorRe("^(" + kNumericCompOperators.join("|") + ")(.*)");
diff --git a/src/translations/af.po b/src/translations/af.po
index 5f9651f82..3781a1cd1 100644
--- a/src/translations/af.po
+++ b/src/translations/af.po
@@ -12,7 +12,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Clementine Music Player\n"
-"PO-Revision-Date: 2018-10-20 12:14+0000\n"
+"PO-Revision-Date: 2018-11-17 13:46+0000\n"
"Last-Translator: hatstand \n"
"Language-Team: Afrikaans (http://www.transifex.com/davidsansome/clementine/language/af/)\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -539,7 +539,7 @@ msgstr "Voeg nuwe gids by..."
msgid "Add podcast"
msgstr "Voeg potgooi by"
-#: internet/podcasts/podcastservice.cpp:418 ../bin/src/ui_mainwindow.h:722
+#: internet/podcasts/podcastservice.cpp:419 ../bin/src/ui_mainwindow.h:722
msgid "Add podcast..."
msgstr "Voeg potgooi by..."
@@ -884,7 +884,7 @@ msgstr "Oudio uitset"
msgid "Authentication failed"
msgstr "Aanteken onsuksesvol"
-#: ../bin/src/ui_podcastinfowidget.h:191
+#: ../bin/src/ui_episodeinfowidget.h:132 ../bin/src/ui_podcastinfowidget.h:191
msgid "Author"
msgstr "Outeur"
@@ -1064,7 +1064,7 @@ msgstr "Seinlys ondersteuning"
msgid "Cancel"
msgstr "Kanselleer"
-#: internet/podcasts/podcastservice.cpp:441
+#: internet/podcasts/podcastservice.cpp:447
msgid "Cancel download"
msgstr "Kanselleer aflaai"
@@ -1359,7 +1359,7 @@ msgid "Configure library..."
msgstr "Stel my versameling op..."
#: internet/podcasts/addpodcastdialog.cpp:77
-#: internet/podcasts/podcastservice.cpp:455
+#: internet/podcasts/podcastservice.cpp:461
msgid "Configure podcasts..."
msgstr "Stel potgooie op..."
@@ -1425,7 +1425,7 @@ msgstr "Omskep verlieslose lêers"
msgid "Copy to clipboard"
msgstr "Kopiëer na knipbord"
-#: library/libraryview.cpp:419 internet/podcasts/podcastservice.cpp:438
+#: library/libraryview.cpp:419 internet/podcasts/podcastservice.cpp:444
#: ui/mainwindow.cpp:721 widgets/fileviewlist.cpp:44
msgid "Copy to device..."
msgstr "Kopiëer na die toestel..."
@@ -1581,6 +1581,10 @@ msgid ""
"recover your database"
msgstr ""
+#: ../bin/src/ui_episodeinfowidget.h:133
+msgid "Date"
+msgstr ""
+
#: playlist/playlist.cpp:1432 ../bin/src/ui_edittagdialog.h:715
msgid "Date created"
msgstr "Datum geskep"
@@ -1631,7 +1635,7 @@ msgstr "Wagperiode tussen visualisasies"
msgid "Delete"
msgstr "Skrap"
-#: internet/podcasts/podcastservice.cpp:435
+#: internet/podcasts/podcastservice.cpp:441
msgid "Delete downloaded data"
msgstr "Vee afgelaaide data uit"
@@ -1848,7 +1852,7 @@ msgstr "As jy 'n liedjie in die snitlys tweemaal klik sal..."
msgid "Double clicking a song will..."
msgstr "Dubbelkliek op 'n liedjie sal..."
-#: internet/podcasts/podcastservice.cpp:531
+#: internet/podcasts/podcastservice.cpp:550
#, c-format, qt-plural-format
msgctxt ""
msgid "Download %n episodes"
@@ -1870,8 +1874,8 @@ msgstr "Laai lidmaatskap af"
msgid "Download new episodes automatically"
msgstr "Laai nuwe episodes outomaties af"
-#: internet/podcasts/podcastservice.cpp:293
-#: internet/podcasts/podcastservice.cpp:332
+#: internet/podcasts/podcastservice.cpp:294
+#: internet/podcasts/podcastservice.cpp:333
msgid "Download queued"
msgstr "Aflaai tou"
@@ -1891,7 +1895,7 @@ msgstr "Laai hierdie album af"
msgid "Download this album..."
msgstr "Laai hierdie album af..."
-#: internet/podcasts/podcastservice.cpp:533
+#: internet/podcasts/podcastservice.cpp:552
msgid "Download this episode"
msgstr "Laai hierdie episode af"
@@ -1899,8 +1903,8 @@ msgstr "Laai hierdie episode af"
msgid "Download..."
msgstr "Laai af..."
-#: internet/podcasts/podcastservice.cpp:301
-#: internet/podcasts/podcastservice.cpp:341
+#: internet/podcasts/podcastservice.cpp:302
+#: internet/podcasts/podcastservice.cpp:342
#, qt-format
msgid "Downloading (%1%)..."
msgstr "Besig met aflaai (%1%)..."
@@ -1937,7 +1941,7 @@ msgstr "Dropbox"
msgid "Dubstep"
msgstr "Dubstep"
-#: ../bin/src/ui_ripcddialog.h:308
+#: ../bin/src/ui_episodeinfowidget.h:134 ../bin/src/ui_ripcddialog.h:308
msgid "Duration"
msgstr "Tydsduur"
@@ -2075,6 +2079,10 @@ msgstr "Voer hierdie IP-adres in die programetjie in om met Clementine te verbin
msgid "Entire collection"
msgstr "Hele versameling"
+#: internet/podcasts/podcastservice.cpp:532
+msgid "Episode information"
+msgstr ""
+
#: ../bin/src/ui_equalizer.h:162 ../bin/src/ui_mainwindow.h:705
msgid "Equalizer"
msgstr "Grafiese effenaar"
@@ -2395,9 +2403,10 @@ msgstr "Deur van 'n toestel te vergeet sal dit uit hierdie lys verwyder word. Cl
#: ../bin/src/ui_libraryviewcontainer.h:58
#: ../bin/src/ui_playlistcontainer.h:134
#: ../bin/src/ui_playlistlistcontainer.h:126
-#: ../bin/src/ui_podcastinfowidget.h:190 ../bin/src/ui_querysearchpage.h:108
-#: ../bin/src/ui_querysortpage.h:136 ../bin/src/ui_searchpreview.h:103
-#: ../bin/src/ui_searchtermwidget.h:276 ../bin/src/ui_wizardfinishpage.h:82
+#: ../bin/src/ui_episodeinfowidget.h:131 ../bin/src/ui_podcastinfowidget.h:190
+#: ../bin/src/ui_querysearchpage.h:108 ../bin/src/ui_querysortpage.h:136
+#: ../bin/src/ui_searchpreview.h:103 ../bin/src/ui_searchtermwidget.h:276
+#: ../bin/src/ui_wizardfinishpage.h:82
#: ../bin/src/ui_songkickconcertwidget.h:99
#: ../bin/src/ui_transcoderoptionsaac.h:127
#: ../bin/src/ui_transcoderoptionsflac.h:79
@@ -2629,7 +2638,7 @@ msgstr "Ek het nie 'n Magnatune rekening nie"
msgid "Icon"
msgstr "Ikoon"
-#: widgets/fancytabwidget.cpp:441
+#: widgets/fancytabwidget.cpp:442
msgid "Icons on top"
msgstr "Ikone bo"
@@ -2884,7 +2893,7 @@ msgstr "Groot album omslag (besonderhede benede)"
msgid "Large album cover (no details)"
msgstr "Groot album omslag (geen besonderhede)"
-#: widgets/fancytabwidget.cpp:437
+#: widgets/fancytabwidget.cpp:438
msgid "Large sidebar"
msgstr "Groot kantlyn-kieslys"
@@ -3159,11 +3168,11 @@ msgstr "Handmatig"
msgid "Manufacturer"
msgstr "Vervaardiger"
-#: internet/podcasts/podcastservice.cpp:450 ../bin/src/ui_organisedialog.h:259
+#: internet/podcasts/podcastservice.cpp:456 ../bin/src/ui_organisedialog.h:259
msgid "Mark as listened"
msgstr "Merk as geluister"
-#: internet/podcasts/podcastservice.cpp:449
+#: internet/podcasts/podcastservice.cpp:455
msgid "Mark as new"
msgstr "Merk as nuut"
@@ -3712,7 +3721,7 @@ msgstr "Kunstenaar"
msgid "Pixel"
msgstr "Pixel"
-#: widgets/fancytabwidget.cpp:439
+#: widgets/fancytabwidget.cpp:440
msgid "Plain sidebar"
msgstr "Gewone sykieslys"
@@ -3796,7 +3805,17 @@ msgstr ""
msgid "Plugin status:"
msgstr "Uitbreiding toestand:"
-#: internet/podcasts/podcastservice.cpp:132
+#: ../bin/src/ui_podcastinfodialog.h:93
+msgid "Podcast Information"
+msgstr ""
+
+#: internet/podcasts/podcastservice.cpp:437
+#: internet/podcasts/podcastservice.cpp:535
+#: internet/podcasts/podcastservice.cpp:539
+msgid "Podcast information"
+msgstr ""
+
+#: internet/podcasts/podcastservice.cpp:133
#: ../bin/src/ui_podcastsettingspage.h:250
msgid "Podcasts"
msgstr "Potgooie"
@@ -4711,7 +4730,7 @@ msgstr "Spring snit"
msgid "Small album cover"
msgstr "Klein omslag"
-#: widgets/fancytabwidget.cpp:438
+#: widgets/fancytabwidget.cpp:439
msgid "Small sidebar"
msgstr "Klein kantbalk"
@@ -4965,7 +4984,7 @@ msgstr "Gegradeerde Spotify snitte word gesinkroniseer"
msgid "System colors"
msgstr "Standaard kleure"
-#: widgets/fancytabwidget.cpp:440
+#: widgets/fancytabwidget.cpp:441
msgid "Tabs on top"
msgstr "Oortjies bo"
@@ -5313,7 +5332,7 @@ msgid "Unskip track"
msgstr "Moet nie snit spring nie"
#: internet/podcasts/addpodcastdialog.cpp:70
-#: internet/podcasts/podcastservice.cpp:444
+#: internet/podcasts/podcastservice.cpp:450
msgid "Unsubscribe"
msgstr "Teken uit"
@@ -5321,7 +5340,7 @@ msgstr "Teken uit"
msgid "Upcoming Concerts"
msgstr "Komende opvoerings"
-#: internet/podcasts/podcastservice.cpp:420
+#: internet/podcasts/podcastservice.cpp:421
msgid "Update all podcasts"
msgstr "Dateer alle potgooie op"
@@ -5333,7 +5352,7 @@ msgstr "Gaan versameling na vir veranderinge"
msgid "Update the library when Clementine starts"
msgstr "Gaan die versameling vir veranderings na elke keer as Clementine oopgemaak word"
-#: internet/podcasts/podcastservice.cpp:429
+#: internet/podcasts/podcastservice.cpp:430
msgid "Update this podcast"
msgstr "Dateer hierdie potgooi op"
diff --git a/src/translations/ar.po b/src/translations/ar.po
index 8056b9b08..a8ddf8f7e 100644
--- a/src/translations/ar.po
+++ b/src/translations/ar.po
@@ -16,7 +16,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Clementine Music Player\n"
-"PO-Revision-Date: 2018-10-20 12:14+0000\n"
+"PO-Revision-Date: 2018-11-17 13:46+0000\n"
"Last-Translator: hatstand \n"
"Language-Team: Arabic (http://www.transifex.com/davidsansome/clementine/language/ar/)\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -543,7 +543,7 @@ msgstr "أضف مجلد جديد..."
msgid "Add podcast"
msgstr "إضافة بودكاست"
-#: internet/podcasts/podcastservice.cpp:418 ../bin/src/ui_mainwindow.h:722
+#: internet/podcasts/podcastservice.cpp:419 ../bin/src/ui_mainwindow.h:722
msgid "Add podcast..."
msgstr "إضافة بودكاست..."
@@ -888,7 +888,7 @@ msgstr "مخرج الصوت"
msgid "Authentication failed"
msgstr "فشلت عملية التحقق"
-#: ../bin/src/ui_podcastinfowidget.h:191
+#: ../bin/src/ui_episodeinfowidget.h:132 ../bin/src/ui_podcastinfowidget.h:191
msgid "Author"
msgstr "المؤلف"
@@ -1068,7 +1068,7 @@ msgstr "دعم CUE"
msgid "Cancel"
msgstr "إلغاء"
-#: internet/podcasts/podcastservice.cpp:441
+#: internet/podcasts/podcastservice.cpp:447
msgid "Cancel download"
msgstr "إلغاء التحميل"
@@ -1363,7 +1363,7 @@ msgid "Configure library..."
msgstr "إعدادات المكتبة"
#: internet/podcasts/addpodcastdialog.cpp:77
-#: internet/podcasts/podcastservice.cpp:455
+#: internet/podcasts/podcastservice.cpp:461
msgid "Configure podcasts..."
msgstr "إعدادات بودكاست..."
@@ -1429,7 +1429,7 @@ msgstr ""
msgid "Copy to clipboard"
msgstr "نسخ إلى المكتبة..."
-#: library/libraryview.cpp:419 internet/podcasts/podcastservice.cpp:438
+#: library/libraryview.cpp:419 internet/podcasts/podcastservice.cpp:444
#: ui/mainwindow.cpp:721 widgets/fileviewlist.cpp:44
msgid "Copy to device..."
msgstr "نسخ إلى جهاز..."
@@ -1585,6 +1585,10 @@ msgid ""
"recover your database"
msgstr ""
+#: ../bin/src/ui_episodeinfowidget.h:133
+msgid "Date"
+msgstr ""
+
#: playlist/playlist.cpp:1432 ../bin/src/ui_edittagdialog.h:715
msgid "Date created"
msgstr "تاريخ الإنشاء"
@@ -1635,7 +1639,7 @@ msgstr "المدة بين التأثيرات المرئية"
msgid "Delete"
msgstr "احذف"
-#: internet/podcasts/podcastservice.cpp:435
+#: internet/podcasts/podcastservice.cpp:441
msgid "Delete downloaded data"
msgstr "حذف البيانات المحملة"
@@ -1852,7 +1856,7 @@ msgstr ""
msgid "Double clicking a song will..."
msgstr "النقر مرتين على مقطع سـ..."
-#: internet/podcasts/podcastservice.cpp:531
+#: internet/podcasts/podcastservice.cpp:550
#, c-format, qt-plural-format
msgctxt ""
msgid "Download %n episodes"
@@ -1874,8 +1878,8 @@ msgstr "عضوية التحميل"
msgid "Download new episodes automatically"
msgstr "حمل الحلقات الجديدة تلقائيا"
-#: internet/podcasts/podcastservice.cpp:293
-#: internet/podcasts/podcastservice.cpp:332
+#: internet/podcasts/podcastservice.cpp:294
+#: internet/podcasts/podcastservice.cpp:333
msgid "Download queued"
msgstr "حمل مقاطع لائحة الانتظار"
@@ -1895,7 +1899,7 @@ msgstr "حمل هذا الألبوم"
msgid "Download this album..."
msgstr "حمل هذا الألبوم..."
-#: internet/podcasts/podcastservice.cpp:533
+#: internet/podcasts/podcastservice.cpp:552
msgid "Download this episode"
msgstr "حمل هذه الحلقة"
@@ -1903,8 +1907,8 @@ msgstr "حمل هذه الحلقة"
msgid "Download..."
msgstr "حمل..."
-#: internet/podcasts/podcastservice.cpp:301
-#: internet/podcasts/podcastservice.cpp:341
+#: internet/podcasts/podcastservice.cpp:302
+#: internet/podcasts/podcastservice.cpp:342
#, qt-format
msgid "Downloading (%1%)..."
msgstr "تحميل (%1%)..."
@@ -1941,7 +1945,7 @@ msgstr "Dropbox"
msgid "Dubstep"
msgstr "Dubstep"
-#: ../bin/src/ui_ripcddialog.h:308
+#: ../bin/src/ui_episodeinfowidget.h:134 ../bin/src/ui_ripcddialog.h:308
msgid "Duration"
msgstr "المدة"
@@ -2079,6 +2083,10 @@ msgstr "أدخل عنوان الايبي - IP - في التطبيق للاتصا
msgid "Entire collection"
msgstr "كامل المجموعة"
+#: internet/podcasts/podcastservice.cpp:532
+msgid "Episode information"
+msgstr ""
+
#: ../bin/src/ui_equalizer.h:162 ../bin/src/ui_mainwindow.h:705
msgid "Equalizer"
msgstr "معدل الصوت"
@@ -2399,9 +2407,10 @@ msgstr "نسيان جهاز سيحذفه من القائمة. لهذا، سيت
#: ../bin/src/ui_libraryviewcontainer.h:58
#: ../bin/src/ui_playlistcontainer.h:134
#: ../bin/src/ui_playlistlistcontainer.h:126
-#: ../bin/src/ui_podcastinfowidget.h:190 ../bin/src/ui_querysearchpage.h:108
-#: ../bin/src/ui_querysortpage.h:136 ../bin/src/ui_searchpreview.h:103
-#: ../bin/src/ui_searchtermwidget.h:276 ../bin/src/ui_wizardfinishpage.h:82
+#: ../bin/src/ui_episodeinfowidget.h:131 ../bin/src/ui_podcastinfowidget.h:190
+#: ../bin/src/ui_querysearchpage.h:108 ../bin/src/ui_querysortpage.h:136
+#: ../bin/src/ui_searchpreview.h:103 ../bin/src/ui_searchtermwidget.h:276
+#: ../bin/src/ui_wizardfinishpage.h:82
#: ../bin/src/ui_songkickconcertwidget.h:99
#: ../bin/src/ui_transcoderoptionsaac.h:127
#: ../bin/src/ui_transcoderoptionsflac.h:79
@@ -2633,7 +2642,7 @@ msgstr "ليس لدي حساب Magnatune"
msgid "Icon"
msgstr "أيقونة"
-#: widgets/fancytabwidget.cpp:441
+#: widgets/fancytabwidget.cpp:442
msgid "Icons on top"
msgstr "الأيقونة في الأعلى"
@@ -2888,7 +2897,7 @@ msgstr "غلاف ألبوم كبير (التفاصيل في الأسفل)"
msgid "Large album cover (no details)"
msgstr ""
-#: widgets/fancytabwidget.cpp:437
+#: widgets/fancytabwidget.cpp:438
msgid "Large sidebar"
msgstr "عارضة جانبية عريضة"
@@ -3163,11 +3172,11 @@ msgstr "يدويا"
msgid "Manufacturer"
msgstr "المصنع"
-#: internet/podcasts/podcastservice.cpp:450 ../bin/src/ui_organisedialog.h:259
+#: internet/podcasts/podcastservice.cpp:456 ../bin/src/ui_organisedialog.h:259
msgid "Mark as listened"
msgstr "علم كمستمع إليه"
-#: internet/podcasts/podcastservice.cpp:449
+#: internet/podcasts/podcastservice.cpp:455
msgid "Mark as new"
msgstr "علم كجديد"
@@ -3716,7 +3725,7 @@ msgstr "المؤدي"
msgid "Pixel"
msgstr "بكسل"
-#: widgets/fancytabwidget.cpp:439
+#: widgets/fancytabwidget.cpp:440
msgid "Plain sidebar"
msgstr "شريط جانبي عريض"
@@ -3800,7 +3809,17 @@ msgstr ""
msgid "Plugin status:"
msgstr "حالة الملحق:"
-#: internet/podcasts/podcastservice.cpp:132
+#: ../bin/src/ui_podcastinfodialog.h:93
+msgid "Podcast Information"
+msgstr ""
+
+#: internet/podcasts/podcastservice.cpp:437
+#: internet/podcasts/podcastservice.cpp:535
+#: internet/podcasts/podcastservice.cpp:539
+msgid "Podcast information"
+msgstr ""
+
+#: internet/podcasts/podcastservice.cpp:133
#: ../bin/src/ui_podcastsettingspage.h:250
msgid "Podcasts"
msgstr "بودكاست"
@@ -4715,7 +4734,7 @@ msgstr "تجاوز المسار"
msgid "Small album cover"
msgstr "غلاف ألبوم صغير"
-#: widgets/fancytabwidget.cpp:438
+#: widgets/fancytabwidget.cpp:439
msgid "Small sidebar"
msgstr "عارضة جانبية صغيرة"
@@ -4969,7 +4988,7 @@ msgstr "مزامنة مقاطع Spotify المميزة"
msgid "System colors"
msgstr "ألوان النظام"
-#: widgets/fancytabwidget.cpp:440
+#: widgets/fancytabwidget.cpp:441
msgid "Tabs on top"
msgstr "الألسنة فوق"
@@ -5317,7 +5336,7 @@ msgid "Unskip track"
msgstr "إلغاء تجاوز المسار"
#: internet/podcasts/addpodcastdialog.cpp:70
-#: internet/podcasts/podcastservice.cpp:444
+#: internet/podcasts/podcastservice.cpp:450
msgid "Unsubscribe"
msgstr "ألغ الاشتراك"
@@ -5325,7 +5344,7 @@ msgstr "ألغ الاشتراك"
msgid "Upcoming Concerts"
msgstr "الحفلات القادمة"
-#: internet/podcasts/podcastservice.cpp:420
+#: internet/podcasts/podcastservice.cpp:421
msgid "Update all podcasts"
msgstr "حدّث جميع البودكاست"
@@ -5337,7 +5356,7 @@ msgstr "حدّث المجلدات التي تغيرت في المكتبة"
msgid "Update the library when Clementine starts"
msgstr "حدّث المكتبة عند بدء كلمنتاين"
-#: internet/podcasts/podcastservice.cpp:429
+#: internet/podcasts/podcastservice.cpp:430
msgid "Update this podcast"
msgstr "حدّث هذا البودكاست"
diff --git a/src/translations/be.po b/src/translations/be.po
index 31752dc47..fce18fd42 100644
--- a/src/translations/be.po
+++ b/src/translations/be.po
@@ -11,7 +11,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Clementine Music Player\n"
-"PO-Revision-Date: 2018-10-20 12:14+0000\n"
+"PO-Revision-Date: 2018-11-17 13:46+0000\n"
"Last-Translator: hatstand \n"
"Language-Team: Belarusian (http://www.transifex.com/davidsansome/clementine/language/be/)\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -538,7 +538,7 @@ msgstr "Дадаць новы каталёг..."
msgid "Add podcast"
msgstr "Дадаць подкаст"
-#: internet/podcasts/podcastservice.cpp:418 ../bin/src/ui_mainwindow.h:722
+#: internet/podcasts/podcastservice.cpp:419 ../bin/src/ui_mainwindow.h:722
msgid "Add podcast..."
msgstr "Дадаць подкаст..."
@@ -883,7 +883,7 @@ msgstr ""
msgid "Authentication failed"
msgstr "Памылка аўтэнтыфікацыі"
-#: ../bin/src/ui_podcastinfowidget.h:191
+#: ../bin/src/ui_episodeinfowidget.h:132 ../bin/src/ui_podcastinfowidget.h:191
msgid "Author"
msgstr "Аутар"
@@ -1063,7 +1063,7 @@ msgstr "Падтрымка CUE"
msgid "Cancel"
msgstr "Адмена"
-#: internet/podcasts/podcastservice.cpp:441
+#: internet/podcasts/podcastservice.cpp:447
msgid "Cancel download"
msgstr ""
@@ -1358,7 +1358,7 @@ msgid "Configure library..."
msgstr "Наладзіць калекцыю..."
#: internet/podcasts/addpodcastdialog.cpp:77
-#: internet/podcasts/podcastservice.cpp:455
+#: internet/podcasts/podcastservice.cpp:461
msgid "Configure podcasts..."
msgstr "Наладзіць подкасты..."
@@ -1424,7 +1424,7 @@ msgstr ""
msgid "Copy to clipboard"
msgstr "Скапіяваць у буфэр"
-#: library/libraryview.cpp:419 internet/podcasts/podcastservice.cpp:438
+#: library/libraryview.cpp:419 internet/podcasts/podcastservice.cpp:444
#: ui/mainwindow.cpp:721 widgets/fileviewlist.cpp:44
msgid "Copy to device..."
msgstr "Капіяваць на прыладу..."
@@ -1580,6 +1580,10 @@ msgid ""
"recover your database"
msgstr ""
+#: ../bin/src/ui_episodeinfowidget.h:133
+msgid "Date"
+msgstr ""
+
#: playlist/playlist.cpp:1432 ../bin/src/ui_edittagdialog.h:715
msgid "Date created"
msgstr "Дата стварэньня"
@@ -1630,7 +1634,7 @@ msgstr "Затрымка паміж візуалізацыямі"
msgid "Delete"
msgstr "Выдаліць"
-#: internet/podcasts/podcastservice.cpp:435
+#: internet/podcasts/podcastservice.cpp:441
msgid "Delete downloaded data"
msgstr "Выдаліць спампаваныя дадзеныя"
@@ -1847,7 +1851,7 @@ msgstr ""
msgid "Double clicking a song will..."
msgstr "Двайны клік на песьні"
-#: internet/podcasts/podcastservice.cpp:531
+#: internet/podcasts/podcastservice.cpp:550
#, c-format, qt-plural-format
msgctxt ""
msgid "Download %n episodes"
@@ -1869,8 +1873,8 @@ msgstr "\"Download\" падпіска"
msgid "Download new episodes automatically"
msgstr "Пампаваць новыя выпускі аўтаматычна"
-#: internet/podcasts/podcastservice.cpp:293
-#: internet/podcasts/podcastservice.cpp:332
+#: internet/podcasts/podcastservice.cpp:294
+#: internet/podcasts/podcastservice.cpp:333
msgid "Download queued"
msgstr "Запампоўка даданая ў чаргу"
@@ -1890,7 +1894,7 @@ msgstr "Загрузіць гэты альбом"
msgid "Download this album..."
msgstr "Спампаваць гэты альбом..."
-#: internet/podcasts/podcastservice.cpp:533
+#: internet/podcasts/podcastservice.cpp:552
msgid "Download this episode"
msgstr "Спампаваць гэтую сэрыю"
@@ -1898,8 +1902,8 @@ msgstr "Спампаваць гэтую сэрыю"
msgid "Download..."
msgstr "Спампаваць..."
-#: internet/podcasts/podcastservice.cpp:301
-#: internet/podcasts/podcastservice.cpp:341
+#: internet/podcasts/podcastservice.cpp:302
+#: internet/podcasts/podcastservice.cpp:342
#, qt-format
msgid "Downloading (%1%)..."
msgstr "Пампаваньне (%1%)..."
@@ -1936,7 +1940,7 @@ msgstr "Dropbox"
msgid "Dubstep"
msgstr ""
-#: ../bin/src/ui_ripcddialog.h:308
+#: ../bin/src/ui_episodeinfowidget.h:134 ../bin/src/ui_ripcddialog.h:308
msgid "Duration"
msgstr ""
@@ -2074,6 +2078,10 @@ msgstr "Уведзьце гэты IP у Прыкладаньні для падл
msgid "Entire collection"
msgstr "Уся калекцыя"
+#: internet/podcasts/podcastservice.cpp:532
+msgid "Episode information"
+msgstr ""
+
#: ../bin/src/ui_equalizer.h:162 ../bin/src/ui_mainwindow.h:705
msgid "Equalizer"
msgstr "Эквалайзэр"
@@ -2394,9 +2402,10 @@ msgstr "Калі выбраць \"Забыць прыладу\", то яна б
#: ../bin/src/ui_libraryviewcontainer.h:58
#: ../bin/src/ui_playlistcontainer.h:134
#: ../bin/src/ui_playlistlistcontainer.h:126
-#: ../bin/src/ui_podcastinfowidget.h:190 ../bin/src/ui_querysearchpage.h:108
-#: ../bin/src/ui_querysortpage.h:136 ../bin/src/ui_searchpreview.h:103
-#: ../bin/src/ui_searchtermwidget.h:276 ../bin/src/ui_wizardfinishpage.h:82
+#: ../bin/src/ui_episodeinfowidget.h:131 ../bin/src/ui_podcastinfowidget.h:190
+#: ../bin/src/ui_querysearchpage.h:108 ../bin/src/ui_querysortpage.h:136
+#: ../bin/src/ui_searchpreview.h:103 ../bin/src/ui_searchtermwidget.h:276
+#: ../bin/src/ui_wizardfinishpage.h:82
#: ../bin/src/ui_songkickconcertwidget.h:99
#: ../bin/src/ui_transcoderoptionsaac.h:127
#: ../bin/src/ui_transcoderoptionsflac.h:79
@@ -2628,7 +2637,7 @@ msgstr "У мяне няма акаўнту Magnatune"
msgid "Icon"
msgstr "Іконка"
-#: widgets/fancytabwidget.cpp:441
+#: widgets/fancytabwidget.cpp:442
msgid "Icons on top"
msgstr "Іконкі ўверсе"
@@ -2883,7 +2892,7 @@ msgstr ""
msgid "Large album cover (no details)"
msgstr ""
-#: widgets/fancytabwidget.cpp:437
+#: widgets/fancytabwidget.cpp:438
msgid "Large sidebar"
msgstr "Шырокая бакавая панэль"
@@ -3158,11 +3167,11 @@ msgstr "Самастойна"
msgid "Manufacturer"
msgstr "Вытворца"
-#: internet/podcasts/podcastservice.cpp:450 ../bin/src/ui_organisedialog.h:259
+#: internet/podcasts/podcastservice.cpp:456 ../bin/src/ui_organisedialog.h:259
msgid "Mark as listened"
msgstr "Пазначыць як праслуханае"
-#: internet/podcasts/podcastservice.cpp:449
+#: internet/podcasts/podcastservice.cpp:455
msgid "Mark as new"
msgstr "Пазначыць як новае"
@@ -3711,7 +3720,7 @@ msgstr ""
msgid "Pixel"
msgstr ""
-#: widgets/fancytabwidget.cpp:439
+#: widgets/fancytabwidget.cpp:440
msgid "Plain sidebar"
msgstr "Нармальная бакавая панэль"
@@ -3795,7 +3804,17 @@ msgstr ""
msgid "Plugin status:"
msgstr "Статус плагіну:"
-#: internet/podcasts/podcastservice.cpp:132
+#: ../bin/src/ui_podcastinfodialog.h:93
+msgid "Podcast Information"
+msgstr ""
+
+#: internet/podcasts/podcastservice.cpp:437
+#: internet/podcasts/podcastservice.cpp:535
+#: internet/podcasts/podcastservice.cpp:539
+msgid "Podcast information"
+msgstr ""
+
+#: internet/podcasts/podcastservice.cpp:133
#: ../bin/src/ui_podcastsettingspage.h:250
msgid "Podcasts"
msgstr "Подкасты"
@@ -4710,7 +4729,7 @@ msgstr ""
msgid "Small album cover"
msgstr "Маленькая вокладка альбому"
-#: widgets/fancytabwidget.cpp:438
+#: widgets/fancytabwidget.cpp:439
msgid "Small sidebar"
msgstr "Вузкая бакавая панэль"
@@ -4964,7 +4983,7 @@ msgstr "Сынхранізацыя рэйтынгавых трэкаў Spotify"
msgid "System colors"
msgstr "Сыстэмныя колеры"
-#: widgets/fancytabwidget.cpp:440
+#: widgets/fancytabwidget.cpp:441
msgid "Tabs on top"
msgstr "Укладкі ўверсе"
@@ -5312,7 +5331,7 @@ msgid "Unskip track"
msgstr ""
#: internet/podcasts/addpodcastdialog.cpp:70
-#: internet/podcasts/podcastservice.cpp:444
+#: internet/podcasts/podcastservice.cpp:450
msgid "Unsubscribe"
msgstr "Адпісацца"
@@ -5320,7 +5339,7 @@ msgstr "Адпісацца"
msgid "Upcoming Concerts"
msgstr "Канцэрты, якія маюць адбыцца"
-#: internet/podcasts/podcastservice.cpp:420
+#: internet/podcasts/podcastservice.cpp:421
msgid "Update all podcasts"
msgstr "Абнавіць усе подкасты"
@@ -5332,7 +5351,7 @@ msgstr "Абнавіць зьмененыя тэчкі бібліятэкі"
msgid "Update the library when Clementine starts"
msgstr "Абнаўляць бібліятэку пры старце Clementine"
-#: internet/podcasts/podcastservice.cpp:429
+#: internet/podcasts/podcastservice.cpp:430
msgid "Update this podcast"
msgstr "Абнавіць гэты подкаст"
diff --git a/src/translations/bg.po b/src/translations/bg.po
index 808cb48c9..a68ea9792 100644
--- a/src/translations/bg.po
+++ b/src/translations/bg.po
@@ -8,14 +8,14 @@
# FIRST AUTHOR , 2010
# Ivailo Monev , 2014
# Kiril Kirilov , 2013
-# mijiturka, 2014-2015
+# mijiturka, 2014-2015,2018
# svetlisashkov , 2012
# mandarinki , 2011
# Valentin Laskov , 2012
msgid ""
msgstr ""
"Project-Id-Version: Clementine Music Player\n"
-"PO-Revision-Date: 2018-10-20 12:14+0000\n"
+"PO-Revision-Date: 2018-11-17 13:46+0000\n"
"Last-Translator: hatstand \n"
"Language-Team: Bulgarian (http://www.transifex.com/davidsansome/clementine/language/bg/)\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -80,7 +80,7 @@ msgstr "%1 албума"
#: widgets/equalizerslider.cpp:43
#, qt-format
msgid "%1 dB"
-msgstr ""
+msgstr "%1 dB"
#: core/utilities.cpp:122
#, qt-format
@@ -299,7 +299,7 @@ msgstr "128k MP3"
#: ../bin/src/ui_playbacksettingspage.h:378
msgid "192,000Hz"
-msgstr ""
+msgstr "192,000Hz"
#: ../bin/src/ui_appearancesettingspage.h:317
msgid "40%"
@@ -307,11 +307,11 @@ msgstr "40%"
#: ../bin/src/ui_playbacksettingspage.h:375
msgid "44,100Hz"
-msgstr ""
+msgstr "44,100Hz"
#: ../bin/src/ui_playbacksettingspage.h:376
msgid "48,000Hz"
-msgstr ""
+msgstr "48,000Hz"
#: library/library.cpp:64
msgid "50 random tracks"
@@ -319,7 +319,7 @@ msgstr "50 случайни песни"
#: ../bin/src/ui_playbacksettingspage.h:377
msgid "96,000Hz"
-msgstr ""
+msgstr "96,000Hz"
#: ../bin/src/ui_digitallyimportedsettingspage.h:164
msgid "Upgrade to Premium now"
@@ -349,7 +349,7 @@ msgid ""
"played in the last 180 minutes.
Available fields: %1.