aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2018-09-23 20:45:55 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2018-09-23 20:45:55 +0000
commit822e613ba535aedfe1220b5b9689c55b68050057 (patch)
treeee4b87c74b08400d93a5e8d967a64faa838fa46f
parentcbf576255826458224eb9788ac88e72ba6f77b20 (diff)
downloadqmmp-822e613ba535aedfe1220b5b9689c55b68050057.tar.gz
qmmp-822e613ba535aedfe1220b5b9689c55b68050057.tar.bz2
qmmp-822e613ba535aedfe1220b5b9689c55b68050057.zip
added history plugin
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8360 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--CMakeLists.txt2
-rw-r--r--qmmp.pri1
-rw-r--r--src/plugins/General/CMakeLists.txt5
-rw-r--r--src/plugins/General/history/CMakeLists.txt37
-rw-r--r--src/plugins/General/history/dateinputdialog.cpp44
-rw-r--r--src/plugins/General/history/dateinputdialog.h46
-rw-r--r--src/plugins/General/history/dateinputdialog.ui76
-rw-r--r--src/plugins/General/history/history.cpp163
-rw-r--r--src/plugins/General/history/history.h60
-rw-r--r--src/plugins/General/history/history.pro33
-rw-r--r--src/plugins/General/history/historyfactory.cpp60
-rw-r--r--src/plugins/General/history/historyfactory.h44
-rw-r--r--src/plugins/General/history/historysettingsdialog.cpp56
-rw-r--r--src/plugins/General/history/historysettingsdialog.h48
-rw-r--r--src/plugins/General/history/historysettingsdialog.ui107
-rw-r--r--src/plugins/General/history/historywindow.cpp416
-rw-r--r--src/plugins/General/history/historywindow.h62
-rw-r--r--src/plugins/General/history/historywindow.ui279
-rw-r--r--src/plugins/General/history/progressbaritemdelegate.cpp71
-rw-r--r--src/plugins/General/history/progressbaritemdelegate.h45
-rw-r--r--src/plugins/General/history/translations/history_plugin_bg.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_cs.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_de.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_el.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_en.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_es.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_fi.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_fr.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_gl_ES.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_he.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_hu.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_id.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_it.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_ja.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_kk.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_lt.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_nl.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_pl_PL.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_pt.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_pt_BR.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_ru.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_sk.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_sr_BA.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_sr_RS.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_tr.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_uk_UA.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_zh_CN.ts174
-rw-r--r--src/plugins/General/history/translations/history_plugin_zh_TW.ts174
-rw-r--r--src/plugins/General/history/translations/translations.qrc32
49 files changed, 6559 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b9996cc29..5a2a7100e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -57,6 +57,7 @@ find_package(Qt5Network 5.4.0 REQUIRED)
find_package(Qt5X11Extras 5.4.0)
find_package(Qt5DBus 5.4.0)
find_package(Qt5Multimedia 5.4.0)
+find_package(Qt5Sql 5.4.0)
ADD_DEFINITIONS(-DQMMP_WS_X11)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
@@ -225,6 +226,7 @@ PRINT_SUMMARY ("ReplayGain Scanner ................" USE_RGSCAN TAGLIB_FOUND)
PRINT_SUMMARY ("Stream browser ...................." USE_SB 1)
PRINT_SUMMARY ("Track change ......................" USE_TRACKCHANGE 1)
PRINT_SUMMARY ("Copy/Paste ........................" USE_COPYPASTE 1)
+PRINT_SUMMARY ("History plugin ...................." USE_HISTORY Qt5Sql_FOUND)
MESSAGE("")
MESSAGE("File Dialogs:")
diff --git a/qmmp.pri b/qmmp.pri
index aaf2e6d48..c8c64d0fa 100644
--- a/qmmp.pri
+++ b/qmmp.pri
@@ -80,6 +80,7 @@ CONFIG += HAL_PLUGIN
CONFIG += SID_PLUGIN
CONFIG += QTMULTIMEDIA_PLUGIN
CONFIG += SHOUT_PLUGIN
+CONFIG += HISTORY_PLUGIN
#additional features
diff --git a/src/plugins/General/CMakeLists.txt b/src/plugins/General/CMakeLists.txt
index 80acaf8b2..180020bbb 100644
--- a/src/plugins/General/CMakeLists.txt
+++ b/src/plugins/General/CMakeLists.txt
@@ -15,6 +15,7 @@ SET(USE_RGSCAN TRUE CACHE BOOL "enable/disable replaygain scanner plugin")
SET(USE_SB TRUE CACHE BOOL "enable/disable stream browser plugin")
SET(USE_TRACKCHANGE TRUE CACHE BOOL "enable/disable track change plugin")
SET(USE_COPYPASTE TRUE CACHE BOOL "enable/disable copy/paste change plugin")
+SET(USE_HISTORY TRUE CACHE BOOL "enable/disable history plugin")
IF(USE_MPRIS AND Qt5DBus_FOUND)
add_subdirectory(mpris)
@@ -83,3 +84,7 @@ ENDIF(USE_COPYPASTE)
IF(USE_GNOMEHOTKEY AND Qt5DBus_FOUND)
add_subdirectory(gnomehotkey)
ENDIF(USE_GNOMEHOTKEY AND Qt5DBus_FOUND)
+
+IF(USE_HISTORY AND Qt5Sql_FOUND)
+add_subdirectory(history)
+ENDIF(USE_HISTORY AND Qt5Sql_FOUND)
diff --git a/src/plugins/General/history/CMakeLists.txt b/src/plugins/General/history/CMakeLists.txt
new file mode 100644
index 000000000..a38b65afc
--- /dev/null
+++ b/src/plugins/General/history/CMakeLists.txt
@@ -0,0 +1,37 @@
+project(libhistory)
+
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+# libqmmpui & libqmmp
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../)
+link_directories(${CMAKE_CURRENT_BINARY_DIR}/../../../qmmpui)
+link_directories(${CMAKE_CURRENT_BINARY_DIR}/../../../qmmp)
+
+SET(libhistory_SRCS
+ dateinputdialog.cpp
+ history.cpp
+ historyfactory.cpp
+ historysettingsdialog.cpp
+ historywindow.cpp
+ progressbaritemdelegate.cpp
+)
+
+SET(libhistory_RCCS translations/translations.qrc)
+
+QT5_ADD_RESOURCES(libhistory_RCC_SRCS ${libhistory_RCCS})
+
+# user interface
+SET(libhistory_UIS
+ historysettingsdialog.ui
+ dateinputdialog.ui
+ historywindow.ui
+)
+
+QT5_WRAP_UI(libhistory_UIS_H ${libhistory_UIS})
+# Don't forget to include output directory, otherwise
+# the UI file won't be wrapped!
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+ADD_LIBRARY(history MODULE ${libhistory_SRCS} ${libhistory_UIS_H} ${libhistory_RCC_SRCS})
+target_link_libraries(history Qt5::Widgets Qt5::Sql libqmmpui libqmmp)
+install(TARGETS history DESTINATION ${PLUGIN_DIR}/General)
diff --git a/src/plugins/General/history/dateinputdialog.cpp b/src/plugins/General/history/dateinputdialog.cpp
new file mode 100644
index 000000000..81d23133f
--- /dev/null
+++ b/src/plugins/General/history/dateinputdialog.cpp
@@ -0,0 +1,44 @@
+/***************************************************************************
+ * Copyright (C) 2017 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * 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 *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include "dateinputdialog.h"
+#include "ui_dateinputdialog.h"
+
+DateInputDialog::DateInputDialog(QWidget *parent) :
+ QDialog(parent),
+ m_ui(new Ui::DateInputDialog)
+{
+ m_ui->setupUi(this);
+}
+
+DateInputDialog::~DateInputDialog()
+{
+ delete m_ui;
+}
+
+QDate DateInputDialog::selectedDate() const
+{
+ return m_ui->calendarWidget->selectedDate();
+}
+
+void DateInputDialog::setSelectedDate(const QDate &date)
+{
+ m_ui->calendarWidget->setSelectedDate(date);
+}
diff --git a/src/plugins/General/history/dateinputdialog.h b/src/plugins/General/history/dateinputdialog.h
new file mode 100644
index 000000000..2259de255
--- /dev/null
+++ b/src/plugins/General/history/dateinputdialog.h
@@ -0,0 +1,46 @@
+/***************************************************************************
+ * Copyright (C) 2017 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * 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 *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef DATEINPUTDIALOG_H
+#define DATEINPUTDIALOG_H
+
+#include <QDialog>
+#include <QDate>
+
+namespace Ui {
+class DateInputDialog;
+}
+
+class DateInputDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit DateInputDialog(QWidget *parent = 0);
+ ~DateInputDialog();
+
+ QDate selectedDate() const;
+ void setSelectedDate(const QDate &date);
+
+private:
+ Ui::DateInputDialog *m_ui;
+};
+
+#endif // DATEINPUTDIALOG_H
diff --git a/src/plugins/General/history/dateinputdialog.ui b/src/plugins/General/history/dateinputdialog.ui
new file mode 100644
index 000000000..504d24d39
--- /dev/null
+++ b/src/plugins/General/history/dateinputdialog.ui
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>DateInputDialog</class>
+ <widget class="QDialog" name="DateInputDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>474</width>
+ <height>233</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Select Date</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="leftMargin">
+ <number>6</number>
+ </property>
+ <property name="rightMargin">
+ <number>6</number>
+ </property>
+ <property name="bottomMargin">
+ <number>6</number>
+ </property>
+ <item>
+ <widget class="QCalendarWidget" name="calendarWidget"/>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>DateInputDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>DateInputDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/General/history/history.cpp b/src/plugins/General/history/history.cpp
new file mode 100644
index 000000000..25b4bf8fe
--- /dev/null
+++ b/src/plugins/General/history/history.cpp
@@ -0,0 +1,163 @@
+/***************************************************************************
+ * Copyright (C) 2017-2018 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * 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 *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <QSqlDatabase>
+#include <QSqlQuery>
+#include <QSqlError>
+#include <QVariant>
+#include <QAction>
+#include <QApplication>
+#include <qmmpui/uihelper.h>
+#include <qmmp/soundcore.h>
+#include "historywindow.h"
+#include "history.h"
+
+History::History(QObject *parent) : QObject(parent)
+{
+ m_core = SoundCore::instance();
+ m_previousState = Qmmp::Stopped;
+ m_elapsed = 0;
+ connect(m_core, SIGNAL(trackInfoChanged()), SLOT(onTrackInfoChanged()));
+ connect(m_core, SIGNAL(stateChanged(Qmmp::State)), SLOT(onStateChanged(Qmmp::State)));
+
+ QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", CONNECTION_NAME);
+ if(db.isValid() && !db.isOpen())
+ {
+ db.setDatabaseName(Qmmp::configDir() + "/" + "history.sqlite");
+ db.open();
+ if(createTables())
+ {
+ QSqlQuery query(db);
+ query.exec("PRAGMA journal_mode = WAL");
+ query.exec("PRAGMA synchronous = NORMAL");
+ qDebug("History: database initialization finished");
+ }
+ else
+ {
+ db.close();
+ qWarning("History: plugin is disabled");
+ }
+ }
+
+ QAction *action = new QAction(tr("History"), this);
+ action->setIcon(QIcon::fromTheme("text-x-generic"));
+ UiHelper::instance()->addAction(action, UiHelper::TOOLS_MENU);
+ connect(action, SIGNAL(triggered()), SLOT(showHistoryWindow()));
+}
+
+History::~History()
+{
+ if(QSqlDatabase::contains(CONNECTION_NAME))
+ {
+ QSqlDatabase::database(CONNECTION_NAME).close();
+ QSqlDatabase::removeDatabase(CONNECTION_NAME);
+ }
+}
+
+void History::onTrackInfoChanged()
+{
+ if(m_elapsed + m_time.elapsed() > 20000)
+ saveTrack();
+
+ m_trackInfo = m_core->trackInfo();
+ m_time.restart();
+ m_elapsed = 0;
+}
+
+void History::onStateChanged(Qmmp::State state)
+{
+ if(state == Qmmp::Playing && m_previousState == Qmmp::Stopped)
+ {
+ m_time.restart();
+ }
+ else if(state == Qmmp::Paused)
+ {
+ m_elapsed += m_time.elapsed();
+ }
+ else if(state == Qmmp::Stopped)
+ {
+ if(m_previousState == Qmmp::Playing)
+ m_elapsed += m_time.elapsed();
+
+ if(m_elapsed > 20000)
+ saveTrack();
+ m_elapsed = 0;
+ }
+
+ m_previousState = state;
+}
+
+void History::showHistoryWindow()
+{
+ if(!m_historyWindow)
+ m_historyWindow = new HistoryWindow(QSqlDatabase::database(CONNECTION_NAME), qApp->activeWindow());
+ m_historyWindow->show();
+ m_historyWindow->activateWindow();
+}
+
+bool History::createTables()
+{
+ QSqlDatabase db = QSqlDatabase::database(CONNECTION_NAME);
+ if(!db.isOpen())
+ return false;
+
+ QSqlQuery query(db);
+ bool ok = query.exec("CREATE TABLE IF NOT EXISTS track_history(ID INTEGER PRIMARY KEY AUTOINCREMENT,"
+ "Timestamp TIMESTAMP NOT NULL,"
+ "Title TEXT, Artist TEXT, AlbumArtist TEXT, Album TEXT, Comment TEXT, Genre TEXT, Composer TEXT,"
+ "Year INTEGER, Track INTEGER, DiscNumer INTEGER, Duration INTEGER, URL BLOB)");
+
+ if(!ok)
+ qWarning("History: unable to create table, error: %s", qPrintable(query.lastError().text()));
+
+ return ok;
+}
+
+void History::saveTrack()
+{
+ QSqlDatabase db = QSqlDatabase::database(CONNECTION_NAME);
+ if(!db.isOpen() || m_trackInfo.isEmpty())
+ return;
+
+ QSqlQuery query(db);
+ query.prepare("INSERT INTO track_history VALUES(NULL, CURRENT_TIMESTAMP, :title, :artist, :albumartist, :album, :comment,"
+ ":genre, :composer, :year, :track, :discnumber, :duration, :url);");
+ query.bindValue(":title", m_trackInfo.value(Qmmp::TITLE));
+ query.bindValue(":artist", m_trackInfo.value(Qmmp::ARTIST));
+ query.bindValue(":albumartist", m_trackInfo.value(Qmmp::ALBUMARTIST));
+ query.bindValue(":album", m_trackInfo.value(Qmmp::ALBUM));
+ query.bindValue(":comment", m_trackInfo.value(Qmmp::COMMENT));
+ query.bindValue(":genre", m_trackInfo.value(Qmmp::GENRE));
+ query.bindValue(":composer", m_trackInfo.value(Qmmp::COMPOSER));
+ query.bindValue(":year", m_trackInfo.value(Qmmp::YEAR));
+ query.bindValue(":track", m_trackInfo.value(Qmmp::TRACK));
+ query.bindValue(":discnumber", m_trackInfo.value(Qmmp::DISCNUMBER));
+ query.bindValue(":duration", m_trackInfo.duration());
+ query.bindValue(":url", m_trackInfo.path());
+ bool ok = query.exec();
+
+ if(!ok)
+ qWarning("History: unable to save track, error: %s", qPrintable(query.lastError().text()));
+ else
+ qDebug("History: track '%s' has been added to history",
+ qPrintable(m_trackInfo.value(Qmmp::ARTIST) + " - " + m_trackInfo.value(Qmmp::TITLE)));
+
+ m_trackInfo.clear();
+}
diff --git a/src/plugins/General/history/history.h b/src/plugins/General/history/history.h
new file mode 100644
index 000000000..07d65be0c
--- /dev/null
+++ b/src/plugins/General/history/history.h
@@ -0,0 +1,60 @@
+/***************************************************************************
+ * Copyright (C) 2017-2018 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * 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 *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef HISTORY_H
+#define HISTORY_H
+
+#include <QObject>
+#include <QTime>
+#include <QPointer>
+#include <qmmp/trackinfo.h>
+#include <qmmp/qmmp.h>
+
+#define CONNECTION_NAME "qmmp_history"
+
+class SoundCore;
+class HistoryWindow;
+
+class History : public QObject
+{
+ Q_OBJECT
+public:
+ explicit History(QObject *parent = 0);
+ ~History();
+
+private slots:
+ void onTrackInfoChanged();
+ void onStateChanged(Qmmp::State state);
+ void showHistoryWindow();
+
+private:
+ bool createTables();
+ void saveTrack();
+
+ SoundCore *m_core;
+ TrackInfo m_trackInfo;
+ QTime m_time;
+ Qmmp::State m_previousState;
+ quint64 m_elapsed;
+ QPointer<HistoryWindow> m_historyWindow;
+
+};
+
+#endif // HISTORY_H
diff --git a/src/plugins/General/history/history.pro b/src/plugins/General/history/history.pro
new file mode 100644
index 000000000..1de764ee4
--- /dev/null
+++ b/src/plugins/General/history/history.pro
@@ -0,0 +1,33 @@
+include(../../plugins.pri)
+
+TARGET = $$PLUGINS_PREFIX/General/history
+
+QT += sql
+
+HEADERS += historyfactory.h \
+ history.h \
+ historywindow.h \
+ dateinputdialog.h \
+ historysettingsdialog.h \
+ progressbaritemdelegate.h
+
+SOURCES += historyfactory.cpp \
+ history.cpp \
+ historywindow.cpp \
+ dateinputdialog.cpp \
+ historysettingsdialog.cpp \
+ progressbaritemdelegate.cpp
+
+FORMS += \
+ historywindow.ui \
+ dateinputdialog.ui \
+ historysettingsdialog.ui
+
+RESOURCES = translations/translations.qrc
+
+LIBS += $$QMMPUI_LIB
+
+unix {
+ target.path = $$PLUGIN_DIR/General
+ INSTALLS += target
+}
diff --git a/src/plugins/General/history/historyfactory.cpp b/src/plugins/General/history/historyfactory.cpp
new file mode 100644
index 000000000..ddd572de1
--- /dev/null
+++ b/src/plugins/General/history/historyfactory.cpp
@@ -0,0 +1,60 @@
+/***************************************************************************
+ * Copyright (C) 2017 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * 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 *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <QMessageBox>
+#include <QtPlugin>
+#include <qmmp/qmmp.h>
+#include "history.h"
+#include "historysettingsdialog.h"
+#include "historyfactory.h"
+
+GeneralProperties HistoryFactory::properties() const
+{
+ GeneralProperties properties;
+ properties.name = tr("Listening History Plugin");
+ properties.shortName = "history";
+ properties.hasAbout = true;
+ properties.hasSettings = true;
+ properties.visibilityControl = false;
+ return properties;
+}
+
+QObject *HistoryFactory::create(QObject *parent)
+{
+ return new History(parent);
+}
+
+QDialog *HistoryFactory::createConfigDialog(QWidget *parent)
+{
+ return new HistorySettingsDialog(parent) ;
+}
+
+void HistoryFactory::showAbout(QWidget *parent)
+{
+ QMessageBox::about (parent, tr("About Listening History Plugin"),
+ tr("Qmmp Listening History Plugin")+"\n"+
+ tr("This plugin collects information about listened tracks")+"\n"+
+ tr("Written by: Ilya Kotov <forkotov02@ya.ru>"));
+}
+
+QString HistoryFactory::translation() const
+{
+ return QString(":/history_plugin_");
+}
diff --git a/src/plugins/General/history/historyfactory.h b/src/plugins/General/history/historyfactory.h
new file mode 100644
index 000000000..5a5e9ed77
--- /dev/null
+++ b/src/plugins/General/history/historyfactory.h
@@ -0,0 +1,44 @@
+/***************************************************************************
+ * Copyright (C) 2017 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * 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 *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#ifndef HISTORYFACTORY_H
+#define HISTORYFACTORY_H
+
+#include <QObject>
+#include <QDialog>
+#include <qmmpui/general.h>
+#include <qmmpui/generalfactory.h>
+
+/**
+ @author Ilya Kotov <forkotov02@ya.ru>
+*/
+class HistoryFactory : public QObject, public GeneralFactory
+{
+Q_OBJECT
+Q_PLUGIN_METADATA(IID "org.qmmp.qmmp.GeneralFactoryInterface.1.0")
+Q_INTERFACES(GeneralFactory)
+public:
+ GeneralProperties properties() const;
+ QObject *create(QObject *parent);
+ QDialog *createConfigDialog(QWidget *parent);
+ void showAbout(QWidget *parent);
+ QString translation() const;
+};
+
+#endif // HISTORYFACTORY_H
diff --git a/src/plugins/General/history/historysettingsdialog.cpp b/src/plugins/General/history/historysettingsdialog.cpp
new file mode 100644
index 000000000..3a4956c7d
--- /dev/null
+++ b/src/plugins/General/history/historysettingsdialog.cpp
@@ -0,0 +1,56 @@
+/***************************************************************************
+ * Copyright (C) 2017 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * 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 *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <QSettings>
+#include <qmmp/qmmp.h>
+#include <qmmpui/metadataformattermenu.h>
+#include "historysettingsdialog.h"
+#include "ui_historysettingsdialog.h"
+
+HistorySettingsDialog::HistorySettingsDialog(QWidget *parent) :
+ QDialog(parent),
+ m_ui(new Ui::HistorySettingsDialog)
+{
+ m_ui->setupUi(this);
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ m_ui->titleLineEdit->setText(settings.value("History/title_format", "%if(%p,%p - %t,%t)").toString());
+
+ MetaDataFormatterMenu *menu = new MetaDataFormatterMenu(MetaDataFormatterMenu::TITLE_MENU, this);
+ m_ui->titleButton->setMenu(menu);
+ m_ui->titleButton->setPopupMode(QToolButton::InstantPopup);
+ connect(menu, SIGNAL(patternSelected(QString)), SLOT(addTitleString(QString)));
+}
+
+HistorySettingsDialog::~HistorySettingsDialog()
+{
+ delete m_ui;
+}
+
+void HistorySettingsDialog::accept()
+{
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.setValue("History/title_format", m_ui->titleLineEdit->text());
+ QDialog::accept();
+}
+
+void HistorySettingsDialog::addTitleString(const QString &str)
+{
+ m_ui->titleLineEdit->insert(str);
+}
diff --git a/src/plugins/General/history/historysettingsdialog.h b/src/plugins/General/history/historysettingsdialog.h
new file mode 100644
index 000000000..b21e03cd7
--- /dev/null
+++ b/src/plugins/General/history/historysettingsdialog.h
@@ -0,0 +1,48 @@
+/***************************************************************************
+ * Copyright (C) 2017 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * 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 *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef HISTORYSETTINGSDIALOG_H
+#define HISTORYSETTINGSDIALOG_H
+
+#include <QDialog>
+
+namespace Ui {
+class HistorySettingsDialog;
+}
+
+class HistorySettingsDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit HistorySettingsDialog(QWidget *parent = 0);
+ ~HistorySettingsDialog();
+
+public slots:
+ void accept();
+
+private slots:
+ void addTitleString(const QString &str);
+
+private:
+ Ui::HistorySettingsDialog *m_ui;
+};
+
+#endif // HISTORYSETTINGSDIALOG_H
diff --git a/src/plugins/General/history/historysettingsdialog.ui b/src/plugins/General/history/historysettingsdialog.ui
new file mode 100644
index 000000000..2c48b8d5e
--- /dev/null
+++ b/src/plugins/General/history/historysettingsdialog.ui
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>HistorySettingsDialog</class>
+ <widget class="QDialog" name="HistorySettingsDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>402</width>
+ <height>89</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Listening History Plugin Settings</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="leftMargin">
+ <number>6</number>
+ </property>
+ <property name="rightMargin">
+ <number>6</number>
+ </property>
+ <property name="bottomMargin">
+ <number>6</number>
+ </property>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Title format:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="titleLineEdit"/>
+ </item>
+ <item>
+ <widget class="QToolButton" name="titleButton">
+ <property name="text">
+ <string notr="true">...</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>HistorySettingsDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>HistorySettingsDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/General/history/historywindow.cpp b/src/plugins/General/history/historywindow.cpp
new file mode 100644
index 000000000..e586da74d
--- /dev/null
+++ b/src/plugins/General/history/historywindow.cpp
@@ -0,0 +1,416 @@
+/***************************************************************************
+ * Copyright (C) 2017 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * 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 *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <QStringList>
+#include <QSqlQuery>
+#include <QSqlError>
+#include <QDateTime>
+#include <QSettings>
+#include <QProgressBar>
+#include <QTreeWidgetItem>
+#include <qmmp/qmmp.h>
+#include "historywindow.h"
+#include "dateinputdialog.h"
+#include "progressbaritemdelegate.h"
+#include "ui_historywindow.h"
+
+HistoryWindow::HistoryWindow(QSqlDatabase db, QWidget *parent) :
+ QWidget(parent),
+ m_ui(new Ui::HistoryWindow)
+{
+ m_ui->setupUi(this);
+ setWindowFlags(Qt::Window);
+ setAttribute(Qt::WA_DeleteOnClose);
+ setAttribute(Qt::WA_QuitOnClose, false);
+ m_db = db;
+ readSettings();
+
+ QDateTime t = QDateTime::currentDateTime();
+ t.setTime(QTime(23, 59, 0 ,0));
+ m_ui->toDateEdit->setDateTime(t);
+ t.setTime(QTime(0, 0, 0, 0));
+ t = t.addDays(-7);
+ m_ui->fromDateEdit->setDateTime(t);
+ m_ui->distributionTreeWidget->setItemDelegate(new ProgressBarItemDelegate(this));
+ m_ui->topArtistsTreeWidget->setItemDelegate(new ProgressBarItemDelegate(this));
+ m_ui->topSongsTreeWidget->setItemDelegate(new ProgressBarItemDelegate(this));
+ m_ui->topGenresTreeWidget->setItemDelegate(new ProgressBarItemDelegate(this));
+
+ on_executeButton_clicked();
+}
+
+HistoryWindow::~HistoryWindow()
+{
+ delete m_ui;
+}
+
+void HistoryWindow::loadHistory()
+{
+ m_ui->historyTreeWidget->clear();
+
+ if(!m_db.isOpen())
+ return;
+
+ QSqlQuery query(m_db);
+
+ query.prepare("SELECT Timestamp,Title,Artist,AlbumArtist,Album,Comment,Genre,Composer,Track,Year,Duration,URL "
+ "FROM track_history WHERE Timestamp BETWEEN :from and :to");
+ query.bindValue(":from", m_ui->fromDateEdit->dateTime().toUTC().toString("yyyy-MM-dd hh:mm:ss"));
+ query.bindValue(":to", m_ui->toDateEdit->dateTime().toUTC().toString("yyyy-MM-dd hh:mm:ss"));
+
+ if(!query.exec())
+ {
+ qWarning("HistoryWindow: query error: %s", qPrintable(query.lastError().text()));
+ return;
+ }
+
+ QColor bgColor = palette().color(QPalette::Highlight);
+ QColor textColor = palette().color(QPalette::HighlightedText);
+
+ while (query.next())
+ {
+ TrackInfo info;
+ info.setValue(Qmmp::TITLE, query.value(1).toString());
+ info.setValue(Qmmp::ARTIST, query.value(2).toString());
+ info.setValue(Qmmp::ALBUMARTIST, query.value(3).toString());
+ info.setValue(Qmmp::ALBUM, query.value(4).toString());
+ info.setValue(Qmmp::COMMENT, query.value(5).toString());
+ info.setValue(Qmmp::GENRE, query.value(6).toString());
+ info.setValue(Qmmp::COMPOSER, query.value(7).toString());
+ info.setValue(Qmmp::TRACK, query.value(8).toString());
+ info.setValue(Qmmp::YEAR, query.value(9).toString());
+ info.setDuration(query.value(10).toInt());
+ info.setPath(query.value(11).toString());
+
+ QDateTime dateTime = QDateTime::fromString(query.value(0).toString(), "yyyy-MM-dd hh:mm:ss");
+ dateTime.setTimeSpec(Qt::UTC);
+ QString dateStr = dateTime.toLocalTime().toString(tr("dd MMMM yyyy"));
+ QString timeStr = dateTime.toLocalTime().toString(tr("hh:mm:ss"));
+ int topLevelCount = m_ui->historyTreeWidget->topLevelItemCount();
+
+ if(!topLevelCount)
+ {
+ m_ui->historyTreeWidget->addTopLevelItem(new QTreeWidgetItem());
+ m_ui->historyTreeWidget->topLevelItem(topLevelCount++)->setText(0, dateStr);
+ m_ui->historyTreeWidget->topLevelItem(topLevelCount - 1)->setFirstColumnSpanned(true);
+ m_ui->historyTreeWidget->topLevelItem(topLevelCount - 1)->setTextAlignment(0, Qt::AlignCenter);
+ m_ui->historyTreeWidget->topLevelItem(topLevelCount - 1)->setBackgroundColor(0, bgColor);
+ m_ui->historyTreeWidget->topLevelItem(topLevelCount - 1)->setTextColor(0, textColor);
+ }
+ else if(m_ui->historyTreeWidget->topLevelItem(topLevelCount - 1)->text(0) != dateStr)
+ {
+ m_ui->historyTreeWidget->addTopLevelItem(new QTreeWidgetItem());
+ m_ui->historyTreeWidget->topLevelItem(topLevelCount++)->setText(0, dateStr);
+ m_ui->historyTreeWidget->topLevelItem(topLevelCount - 1)->setFirstColumnSpanned(true);
+ m_ui->historyTreeWidget->topLevelItem(topLevelCount - 1)->setTextAlignment(0, Qt::AlignCenter);
+ m_ui->historyTreeWidget->topLevelItem(topLevelCount - 1)->setBackgroundColor(0, bgColor);
+ m_ui->historyTreeWidget->topLevelItem(topLevelCount - 1)->setTextColor(0, textColor);
+ }
+
+ QTreeWidgetItem *topLevelItem = m_ui->historyTreeWidget->topLevelItem(topLevelCount - 1);
+ QTreeWidgetItem *item = new QTreeWidgetItem();
+ item->setText(0, timeStr);
+ item->setText(1, m_formatter.format(info));
+ topLevelItem->addChild(item);
+ }
+
+ m_ui->historyTreeWidget->expandAll();
+}
+
+void HistoryWindow::loadDistribution()
+{
+ m_ui->distributionTreeWidget->clear();
+
+ if(!m_db.isOpen())
+ return;
+
+ QSqlQuery query(m_db);
+
+ query.prepare("SELECT max(c) FROM( SELECT count(*) as c FROM track_history WHERE Timestamp BETWEEN :from and :to "
+ "GROUP BY date(Timestamp, 'localtime'))");
+ query.bindValue(":from", m_ui->fromDateEdit->dateTime().toUTC().toString("yyyy-MM-dd hh:mm:ss"));
+ query.bindValue(":to", m_ui->toDateEdit->dateTime().toUTC().toString("yyyy-MM-dd hh:mm:ss"));
+ if(!query.exec())
+ {
+ qWarning("HistoryWindow: query error: %s", qPrintable(query.lastError().text()));
+ return;
+ }
+ if(!query.next())
+ {
+ qWarning("HistoryWindow: empty result");
+ return;
+ }
+ int maxCount = query.value(0).toInt();
+ query.finish();
+
+ query.prepare("SELECT count(*), date(Timestamp, 'localtime') FROM track_history WHERE Timestamp BETWEEN :from and :to "
+ "GROUP BY date(Timestamp, 'localtime')");
+ query.bindValue(":from", m_ui->fromDateEdit->dateTime().toUTC().toString("yyyy-MM-dd hh:mm:ss"));
+ query.bindValue(":to", m_ui->toDateEdit->dateTime().toUTC().toString("yyyy-MM-dd hh:mm:ss"));
+ if(!query.exec())
+ {
+ qWarning("HistoryWindow: query error: %s", qPrintable(query.lastError().text()));
+ return;
+ }
+
+ QColor bgColor = palette().color(QPalette::Highlight);
+ QColor textColor = palette().color(QPalette::HighlightedText);
+
+ while (query.next())
+ {
+ QDate date = QDate::fromString(query.value(1).toString(), "yyyy-MM-dd");
+ QString monthStr = date.toString(tr("MM-yyyy"));
+ QString dayStr = date.toString(tr("dd MMMM"));
+ int topLevelCount = m_ui->distributionTreeWidget->topLevelItemCount();
+
+ if(!topLevelCount)
+ {
+ m_ui->distributionTreeWidget->addTopLevelItem(new QTreeWidgetItem());
+ m_ui->distributionTreeWidget->topLevelItem(topLevelCount++)->setText(0, monthStr);
+ m_ui->distributionTreeWidget->topLevelItem(topLevelCount - 1)->setFirstColumnSpanned(true);
+ m_ui->distributionTreeWidget->topLevelItem(topLevelCount - 1)->setTextAlignment(0, Qt::AlignCenter);
+ m_ui->distributionTreeWidget->topLevelItem(topLevelCount - 1)->setBackgroundColor(0, bgColor);
+ m_ui->distributionTreeWidget->topLevelItem(topLevelCount - 1)->setTextColor(0, textColor);
+ }
+ else if(m_ui->distributionTreeWidget->topLevelItem(topLevelCount - 1)->text(0) != monthStr)
+ {
+ m_ui->distributionTreeWidget->addTopLevelItem(new QTreeWidgetItem());
+ m_ui->distributionTreeWidget->topLevelItem(topLevelCount++)->setText(0, monthStr);
+ m_ui->distributionTreeWidget->topLevelItem(topLevelCount - 1)->setFirstColumnSpanned(true);
+ m_ui->distributionTreeWidget->topLevelItem(topLevelCount - 1)->setTextAlignment(0, Qt::AlignCenter);
+ m_ui->distributionTreeWidget->topLevelItem(topLevelCount - 1)->setBackgroundColor(0, bgColor);
+ m_ui->distributionTreeWidget->topLevelItem(topLevelCount - 1)->setTextColor(0, textColor);
+ }
+
+ QTreeWidgetItem *topLevelItem = m_ui->distributionTreeWidget->topLevelItem(topLevelCount - 1);
+ QTreeWidgetItem *item = new QTreeWidgetItem();
+ item->setText(0, dayStr);
+ topLevelItem->addChild(item);
+ item->setData(1, ProgressBarRole, true);
+ item->setData(1, ProgressBarMaxRole, maxCount);
+ item->setData(1, ProgressBarValueRole, query.value(0).toInt());
+ }
+
+ m_ui->distributionTreeWidget->expandAll();
+}
+
+void HistoryWindow::loadTopSongs()
+{
+ m_ui->topSongsTreeWidget->clear();
+
+ if(!m_db.isOpen())
+ return;
+
+ QSqlQuery query(m_db);
+
+ query.prepare("SELECT count(*) as c,Timestamp,Title,Artist,AlbumArtist,Album,Comment,Genre,Composer,Track,Year,Duration,URL "
+ "FROM track_history WHERE Timestamp BETWEEN :from and :to "
+ "GROUP BY Artist,Title ORDER BY c DESC LIMIT 100");
+ query.bindValue(":from", m_ui->fromDateEdit->dateTime().toUTC().toString("yyyy-MM-dd hh:mm:ss"));
+ query.bindValue(":to", m_ui->toDateEdit->dateTime().toUTC().toString("yyyy-MM-dd hh:mm:ss"));
+
+ if(!query.exec())
+ {
+ qWarning("HistoryWindow: query error: %s", qPrintable(query.lastError().text()));
+ return;
+ }
+
+ int maxCount = 0;
+
+ while (query.next())
+ {
+ TrackInfo info;
+ info.setValue(Qmmp::TITLE, query.value(2).toString());
+ info.setValue(Qmmp::ARTIST, query.value(3).toString());
+ info.setValue(Qmmp::ALBUMARTIST, query.value(4).toString());
+ info.setValue(Qmmp::ALBUM, query.value(5).toString());
+ info.setValue(Qmmp::COMMENT, query.value(6).toString());
+ info.setValue(Qmmp::GENRE, query.value(7).toString());
+ info.setValue(Qmmp::COMPOSER, query.value(8).toString());
+ info.setValue(Qmmp::TRACK, query.value(9).toString());
+ info.setValue(Qmmp::YEAR, query.value(10).toString());
+ info.setDuration(query.value(11).toInt());
+ info.setPath(query.value(12).toString());
+
+ QTreeWidgetItem *item = new QTreeWidgetItem();
+ item->setText(0, m_formatter.format(info));
+
+ m_ui->topSongsTreeWidget->addTopLevelItem(item);
+
+ if(!maxCount)
+ maxCount = query.value(0).toInt();
+
+ item->setData(1, ProgressBarRole, true);
+ item->setData(1, ProgressBarMaxRole, maxCount);
+ item->setData(1, ProgressBarValueRole, query.value(0).toInt());
+ }
+}
+
+void HistoryWindow::loadTopArtists()
+{
+ m_ui->topArtistsTreeWidget->clear();
+
+ if(!m_db.isOpen())
+ return;
+
+ QSqlQuery query(m_db);
+
+ query.prepare("SELECT count(*) as c,Artist "
+ "FROM track_history WHERE (Timestamp BETWEEN :from and :to) AND Artist NOT NULL "
+ "GROUP BY Artist ORDER BY c DESC LIMIT 100");
+ query.bindValue(":from", m_ui->fromDateEdit->dateTime().toUTC().toString("yyyy-MM-dd hh:mm:ss"));
+ query.bindValue(":to", m_ui->toDateEdit->dateTime().toUTC().toString("yyyy-MM-dd hh:mm:ss"));
+
+ if(!query.exec())
+ {
+ qWarning("HistoryWindow: query error: %s", qPrintable(query.lastError().text()));
+ return;
+ }
+
+ int maxCount = 0;
+
+ while (query.next())
+ {
+ QTreeWidgetItem *item = new QTreeWidgetItem();
+ item->setText(0, query.value(1).toString());
+
+ m_ui->topArtistsTreeWidget->addTopLevelItem(item);
+
+ if(!maxCount)
+ maxCount = query.value(0).toInt();
+
+ item->setData(1, ProgressBarRole, true);
+ item->setData(1, ProgressBarMaxRole, maxCount);
+ item->setData(1, ProgressBarValueRole, query.value(0).toInt());
+ }
+}
+
+void HistoryWindow::loadTopGenres()
+{
+ m_ui->topGenresTreeWidget->clear();
+
+ if(!m_db.isOpen())
+ return;
+
+ QSqlQuery query(m_db);
+
+ query.prepare("SELECT count(*) as c,Genre "
+ "FROM track_history WHERE (Timestamp BETWEEN :from and :to) AND Genre NOT NULL "
+ "GROUP BY Genre ORDER BY c DESC LIMIT 100");
+ query.bindValue(":from", m_ui->fromDateEdit->dateTime().toUTC().toString("yyyy-MM-dd hh:mm:ss"));
+ query.bindValue(":to", m_ui->toDateEdit->dateTime().toUTC().toString("yyyy-MM-dd hh:mm:ss"));
+
+ if(!query.exec())
+ {
+ qWarning("HistoryWindow: query error: %s", qPrintable(query.lastError().text()));
+ return;
+ }
+
+ int maxCount = 0;
+
+ while (query.next())
+ {
+ QTreeWidgetItem *item = new QTreeWidgetItem();
+ item->setText(0, query.value(1).toString());
+
+ m_ui->topGenresTreeWidget->addTopLevelItem(item);
+
+ if(!maxCount)
+ maxCount = query.value(0).toInt();
+
+ item->setData(1, ProgressBarRole, true);
+ item->setData(1, ProgressBarMaxRole, maxCount);
+ item->setData(1, ProgressBarValueRole, query.value(0).toInt());
+ }
+}
+
+void HistoryWindow::readSettings()
+{
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.beginGroup("History");
+ restoreGeometry(settings.value("geometry").toByteArray());
+ m_ui->historyTreeWidget->header()->restoreState(settings.value("history_state").toByteArray());
+ m_ui->distributionTreeWidget->header()->restoreState(settings.value("distribution_state").toByteArray());
+ m_ui->topSongsTreeWidget->header()->restoreState(settings.value("top_songs_state").toByteArray());
+ m_ui->topArtistsTreeWidget->header()->restoreState(settings.value("top_artists_state").toByteArray());
+ m_ui->topGenresTreeWidget->header()->restoreState(settings.value("top_genres_state").toByteArray());
+ m_formatter.setPattern(settings.value("title_format", "%if(%p,%p - %t,%t)").toString());
+ settings.endGroup();
+}
+
+void HistoryWindow::closeEvent(QCloseEvent *)
+{
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.beginGroup("History");
+ settings.setValue("geometry", saveGeometry());
+ settings.setValue("history_state", m_ui->historyTreeWidget->header()->saveState());
+ settings.setValue("distribution_state", m_ui->distributionTreeWidget->header()->saveState());
+ settings.setValue("top_songs_state", m_ui->topSongsTreeWidget->header()->saveState());
+ settings.setValue("top_artists_state", m_ui->topArtistsTreeWidget->header()->saveState());
+ settings.setValue("top_genres_state", m_ui->topGenresTreeWidget->header()->saveState());
+ settings.endGroup();
+}
+
+void HistoryWindow::on_executeButton_clicked()
+{
+ loadHistory();
+ loadDistribution();
+ loadTopSongs();
+ loadTopArtists();
+ loadTopGenres();
+}
+
+void HistoryWindow::on_lastWeekButton_clicked()
+{
+ QDateTime t = QDateTime::currentDateTime();
+ t.setTime(QTime(23, 59, 0 ,0));
+ m_ui->toDateEdit->setDateTime(t);
+ t.setTime(QTime(0, 0, 0, 0));
+ t = t.addDays(-t.date().dayOfWeek() + 1);
+ m_ui->fromDateEdit->setDateTime(t);
+ on_executeButton_clicked();
+}
+
+void HistoryWindow::on_lastMonthButton_clicked()
+{
+ QDateTime t = QDateTime::currentDateTime();
+ t.setTime(QTime(23, 59, 0 ,0));
+ m_ui->toDateEdit->setDateTime(t);
+ t.setTime(QTime(0, 0, 0, 0));
+ t.setDate(QDate(t.date().year(), t.date().month(), 1)); ;
+ m_ui->fromDateEdit->setDateTime(t);
+ on_executeButton_clicked();
+}
+
+void HistoryWindow::on_fromButton_clicked()
+{
+ DateInputDialog d(this);
+ d.setSelectedDate(m_ui->fromDateEdit->date());
+ if(d.exec() == QDialog::Accepted)
+ m_ui->fromDateEdit->setDate(d.selectedDate());
+}
+
+void HistoryWindow::on_toButton_clicked()
+{
+ DateInputDialog d(this);
+ d.setSelectedDate(m_ui->toDateEdit->date());
+ if(d.exec() == QDialog::Accepted)
+ m_ui->toDateEdit->setDate(d.selectedDate());
+}
diff --git a/src/plugins/General/history/historywindow.h b/src/plugins/General/history/historywindow.h
new file mode 100644
index 000000000..754cbef8e
--- /dev/null
+++ b/src/plugins/General/history/historywindow.h
@@ -0,0 +1,62 @@
+/***************************************************************************
+ * Copyright (C) 2017 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * 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 *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef HISTORYWINDOW_H
+#define HISTORYWINDOW_H
+
+#include <QWidget>
+#include <QSqlDatabase>
+#include <QListWidgetItem>
+#include <QMap>
+#include <qmmpui/metadataformatter.h>
+
+namespace Ui {
+class HistoryWindow;
+}
+
+class HistoryWindow : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit HistoryWindow(QSqlDatabase db, QWidget *parent = 0);
+ ~HistoryWindow();
+
+private slots:
+ void on_executeButton_clicked();
+ void on_lastWeekButton_clicked();
+ void on_lastMonthButton_clicked();
+ void on_fromButton_clicked();
+ void on_toButton_clicked();
+
+private:
+ void loadHistory();
+ void loadDistribution();
+ void loadTopSongs();
+ void loadTopArtists();
+ void loadTopGenres();
+ void readSettings();
+ void closeEvent(QCloseEvent *);
+
+ Ui::HistoryWindow *m_ui;
+ QSqlDatabase m_db;
+ MetaDataFormatter m_formatter;
+};
+
+#endif // HISTORYWINDOW_H
diff --git a/src/plugins/General/history/historywindow.ui b/src/plugins/General/history/historywindow.ui
new file mode 100644
index 000000000..91e50ea36
--- /dev/null
+++ b/src/plugins/General/history/historywindow.ui
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>HistoryWindow</class>
+ <widget class="QWidget" name="HistoryWindow">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>773</width>
+ <height>569</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>History</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <property name="leftMargin">
+ <number>6</number>
+ </property>
+ <property name="rightMargin">
+ <number>6</number>
+ </property>
+ <property name="bottomMargin">
+ <number>6</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Time Range</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>From:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDateEdit" name="fromDateEdit"/>
+ </item>
+ <item>
+ <widget class="QToolButton" name="fromButton">
+ <property name="text">
+ <string notr="true">...</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>To:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDateEdit" name="toDateEdit"/>
+ </item>
+ <item>
+ <widget class="QToolButton" name="toButton">
+ <property name="text">
+ <string notr="true">...</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="lastWeekButton">
+ <property name="text">
+ <string>Last week</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="lastMonthButton">
+ <property name="text">
+ <string>Last month</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="executeButton">
+ <property name="text">
+ <string>Execute</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>234</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="0" colspan="2">
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="tab">
+ <attribute name="title">
+ <string>History</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QTreeWidget" name="historyTreeWidget">
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="showDropIndicator" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
+ <property name="uniformRowHeights">
+ <bool>true</bool>
+ </property>
+ <column>
+ <property name="text">
+ <string>Time</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Song</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_2">
+ <attribute name="title">
+ <string>Distribution</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QTreeWidget" name="distributionTreeWidget">
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
+ <column>
+ <property name="text">
+ <string>Day</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Play counts</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_3">
+ <attribute name="title">
+ <string>Top Songs</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QTreeWidget" name="topSongsTreeWidget">
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
+ <column>
+ <property name="text">
+ <string>Song</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Play counts</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_4">
+ <attribute name="title">
+ <string>Top Artists</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <item>
+ <widget class="QTreeWidget" name="topArtistsTreeWidget">
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
+ <column>
+ <property name="text">
+ <string>Artist</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Play counts</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_5">
+ <attribute name="title">
+ <string>Top Genres</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_5">
+ <item>
+ <widget class="QTreeWidget" name="topGenresTreeWidget">
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
+ <column>
+ <property name="text">
+ <string>Genre</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Play counts</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ <item row="2" column="0" colspan="2">
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Close</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>HistoryWindow</receiver>
+ <slot>close()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>691</x>
+ <y>496</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>750</x>
+ <y>516</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/General/history/progressbaritemdelegate.cpp b/src/plugins/General/history/progressbaritemdelegate.cpp
new file mode 100644
index 000000000..51841bcd9
--- /dev/null
+++ b/src/plugins/General/history/progressbaritemdelegate.cpp
@@ -0,0 +1,71 @@
+/***************************************************************************
+ * Copyright (C) 2017 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * 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 *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <QApplication>
+#include <QMouseEvent>
+#include "progressbaritemdelegate.h"
+
+ProgressBarItemDelegate::ProgressBarItemDelegate(QObject *parent) : QStyledItemDelegate(parent)
+{
+}
+
+void ProgressBarItemDelegate::paint(QPainter *painter,
+ const QStyleOptionViewItem &option,
+ const QModelIndex &index) const
+{
+ if (hasProgressBar(index))
+ {
+ QStyleOptionViewItem opt = option;
+
+ initStyleOption(&opt, index);
+
+ QStyleOptionProgressBar progressBarOption;
+ progressBarOption.rect = option.rect;
+ progressBarOption.invertedAppearance = false;
+ progressBarOption.bottomToTop = false;
+ progressBarOption.text = index.data(ProgressBarValueRole).toString();
+ progressBarOption.minimum = 0;
+ progressBarOption.maximum = index.data(ProgressBarMaxRole).toInt();
+ progressBarOption.progress = index.data(ProgressBarValueRole).toInt();
+ progressBarOption.textVisible = true;
+ progressBarOption.palette = opt.palette;
+ qApp->style()->drawControl(QStyle::CE_ProgressBar, &progressBarOption, painter);
+ }
+ else
+ {
+ QStyledItemDelegate::paint(painter, option, index);
+ }
+}
+
+QSize ProgressBarItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+ QSize size = QStyledItemDelegate::sizeHint(option, index);
+ if (hasProgressBar(index))
+ {
+ int buttonHeight = qApp->style()->pixelMetric(QStyle::PM_ExclusiveIndicatorHeight, &option);
+ size.setHeight(qMax(size.height(), buttonHeight));
+ }
+ return size;
+}
+
+bool ProgressBarItemDelegate::hasProgressBar(const QModelIndex &index) const
+{
+ return index.data(ProgressBarRole).toBool();
+}
diff --git a/src/plugins/General/history/progressbaritemdelegate.h b/src/plugins/General/history/progressbaritemdelegate.h
new file mode 100644
index 000000000..9e8cf8e50
--- /dev/null
+++ b/src/plugins/General/history/progressbaritemdelegate.h
@@ -0,0 +1,45 @@
+/***************************************************************************
+ * Copyright (C) 2017 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * 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 *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef PROGRESSBARITEMDELEGATE_H
+#define PROGRESSBARITEMDELEGATE_H
+
+#include <QStyledItemDelegate>
+#include <QSize>
+
+#define ProgressBarRole (Qt::UserRole + 1)
+#define ProgressBarValueRole (Qt::UserRole + 2)
+#define ProgressBarMaxRole (Qt::UserRole + 3)
+
+/*!
+ * @author Ilya Kotov <forkotov02@ya.ru>
+ */
+class ProgressBarItemDelegate : public QStyledItemDelegate
+{
+ Q_OBJECT
+public:
+ explicit ProgressBarItemDelegate(QObject *parent = 0);
+
+ void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ bool hasProgressBar(const QModelIndex &index) const;
+};
+
+#endif // PROGRESSBARITEMDELEGATE_H
diff --git a/src/plugins/General/history/translations/history_plugin_bg.ts b/src/plugins/General/history/translations/history_plugin_bg.ts
new file mode 100644
index 000000000..51dd59b77
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_bg.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="bg_BG">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_cs.ts b/src/plugins/General/history/translations/history_plugin_cs.ts
new file mode 100644
index 000000000..fd475d6e0
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_cs.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="cs">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation>Formát titulku:</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>Umělec</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>Žánr</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_de.ts b/src/plugins/General/history/translations/history_plugin_de.ts
new file mode 100644
index 000000000..7d5a78c27
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_de.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="de">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation>Datum auswählen</translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation>Chronik</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation>Geschrieben von: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation>Titelformat:</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation>Chronik</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation>Zeitspanne</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation>Von:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation>Bis:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation>Letzte Woche</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation>Letzter Monat</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation>Ausführen</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation>Zeit</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation>Song</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation>Distribution</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation>Tag</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>Interpret</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>Genre</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation>tt MMMM jjjj</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation>hh:mm:ss</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation>MM-jjjj</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation>tt MMMM</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_el.ts b/src/plugins/General/history/translations/history_plugin_el.ts
new file mode 100644
index 000000000..d026207fe
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_el.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="el">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation>Επιλογή ημερομηνίας</translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation>Ιστορικό</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation>Πρόσθετο ιστορικού ακρόασης</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation>Περί του πρόσθετου ιστορικού ακρόασης</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation>Qmmp πρόσθετο ιστορικού ακρόασης</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation>Αυτό το πρόσθετο συλλέγει πληροφορίες σχετικά με τα εκτελεσμένα κομμάτια</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation>Γράφτηκε από τον: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation>Ρυθμίσεις πρόσθετου ιστορικού ακρόασης</translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation>Μορφή τίτλου:</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation>Ιστορικό</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation>Χρονικό διάστημα</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation>Από:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation>Προς:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation>Περασμένη εβδομάδα</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation>Προηγούμενος μήνας</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation>Εκτέλεση</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation>Ώρα</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation>Τραγούδι</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation>Διανομή</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation>Ημέρα</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation>Πλήθος εκτελέσεων</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation>Κορυφαία τραγούδια</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation>Κορυφαίοι καλλιτέχνες</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>Καλλιτέχνης</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation>Κορυφαία είδη</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>Είδος</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation>dd MMMM yyyy</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation>hh:mm:ss</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation>MM-yyyy</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation>dd MMMM</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_en.ts b/src/plugins/General/history/translations/history_plugin_en.ts
new file mode 100644
index 000000000..57eb45767
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_en.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en_US">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_es.ts b/src/plugins/General/history/translations/history_plugin_es.ts
new file mode 100644
index 000000000..91b315a1e
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_es.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="es">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation>Fecha selecionada</translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation>Historial</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation>Módulo de Historia de Escucha</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation>Acerca del Módulo de Historia de Escucha</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation>Módulo de Historia de Escucha de Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation>Este módulo colecta información acerca de las pistas escuchadas</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation>Escrito por: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation>Configuración del Módulo de Historia de Escucha</translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation>Formato del título: </translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation>Historial</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation>Rango de Tiempo</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation>De:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation>Hasta:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation>Semana pasada</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation>Mes pasado</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation>Ejecutar</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation>Tiempo</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation>Canción</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation>Distribución</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation>Día</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation>Conteo de reproducciones</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation>Canciones más escuchadas</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation>Intérpretes más escuchados</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>Intérprete</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation>Géneros más escuchados</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>Género</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation>dd MMMM yyyy</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation>hh:mm:ss</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation>MM-aaaa</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation>dd MMMM</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_fi.ts b/src/plugins/General/history/translations/history_plugin_fi.ts
new file mode 100644
index 000000000..007eb6f66
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_fi.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fi">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation>Valitse päivä</translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation>Historia</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation>Kuunteluhistorialiitännäinen</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation>Tämä liitännäinen kerää tietoja kuunnelluista kappaleista</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation>Toteuttanut: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation>Kuunteluhistorialiitännäisen asetukset</translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation>Historia</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation>Aikajana</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation>Alkaa:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation>Päättyy:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation>Viime viikko</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation>Viime kuukausi</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation>Päivä</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation>Toistokerrat</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation>Suosituimmat kappaleet</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation>Suosituimmat artistit</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>Artisti</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation>Suosituimmat tyylilajit</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>Tyylilaji</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation>hh:mm:ss</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_fr.ts b/src/plugins/General/history/translations/history_plugin_fr.ts
new file mode 100644
index 000000000..58e363f81
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_fr.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation>Sélectionner une date</translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation>Historique</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation>Greffon d&apos;Historique d&apos;écoute</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation>À propos du greffon Historique d&apos;écoute</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation>Greffon d&apos;Historique d&apos;écoute Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation>Ce greffon collecte des données concernant les pistes écoutées</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation>Écrit par : Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation>Paramètres du greffon d&apos;Historique d&apos;écoute</translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation>Format du titre:</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation>Historique</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation>Intervalle de temps</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation>Provient:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation>Vers:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation>Le mois dernier</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation>Exécuter </translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation>Temps</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation>Musique</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation>DIstribution</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation>Jour</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation>Nombre d&apos;écoutes</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation>Musique les plus écoutées</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation>Artistes les plus écoutés</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>Artiste</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation>Genres les plus écoutés</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>Genre</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation>jj MMMM aaaa</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation>hh:mm:ss</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation>MM-aaaa</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation>jj MMMM</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_gl_ES.ts b/src/plugins/General/history/translations/history_plugin_gl_ES.ts
new file mode 100644
index 000000000..f98a99160
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_gl_ES.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="gl_ES">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation>Data seleccionada</translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation>Historial</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation>Plugin Listening History</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation>Acerca do plugin Listening History</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation>Plugin Qmmp Listening History</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation>Este plugin recopila información sobre as cancións escoitadas</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation>Configuracións do plugin Listening History</translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation>Formato de título:</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation>Historial</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation>Rango de tempo</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation>Dende:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation>Ata:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation>Última semán</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation>Último mes</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation>Executar</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation>Tempo</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation>Canción</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation>Distribución</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation>Día</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation>Contador de reproduccións</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation>Cancións populares</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation>Artistas populares</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>Artista</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation>Xéneros populares</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>Xénero</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation>dd MMMM yyyy</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation>hh:mm:ss</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation>MM-yyyy</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation>dd MMMM</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_he.ts b/src/plugins/General/history/translations/history_plugin_he.ts
new file mode 100644
index 000000000..62c2e9b4c
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_he.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="he">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation>בחר תאריך</translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation>היסטוריה</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation>פורמט כותרת:</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation>היסטוריה</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>אמן</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>ז׳אנר</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_hu.ts b/src/plugins/General/history/translations/history_plugin_hu.ts
new file mode 100644
index 000000000..dd8c65c17
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_hu.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hu_HU">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_id.ts b/src/plugins/General/history/translations/history_plugin_id.ts
new file mode 100644
index 000000000..aabac4df6
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_id.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="id_ID">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_it.ts b/src/plugins/General/history/translations/history_plugin_it.ts
new file mode 100644
index 000000000..ec26c6d20
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_it.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="it_IT">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_ja.ts b/src/plugins/General/history/translations/history_plugin_ja.ts
new file mode 100644
index 000000000..255b02aa2
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_ja.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ja_JP">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation>日時選択</translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation>履歴</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation>視聴履歴プラグイン</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation>視聴履歴プラグインについて</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation>QMMP 視聴履歴プラグイン</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation>このプラグインは視聴したトラックの情報を収集します</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation>制作: Илья Котов (Ilya Kotov) &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation>視聴プラグインの設定</translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation>表題の書式:</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation>履歴</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation>期間</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation>自:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation>至:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation>先週</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation>先月</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation>抽出</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation>時刻</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation>演目</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation>普及</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation>日付</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation>配信回数</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation>上位の演目</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation>上位のアーティスト</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>アーティスト</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation>上位のジャンル</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>ジャンル</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation>yyyy年MM月dd日</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation>hh:mm:ss</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation>yyyy年MM月</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation>MM月dd日</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_kk.ts b/src/plugins/General/history/translations/history_plugin_kk.ts
new file mode 100644
index 000000000..4741908e5
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_kk.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="kk_KZ">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_lt.ts b/src/plugins/General/history/translations/history_plugin_lt.ts
new file mode 100644
index 000000000..54ceb119a
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_lt.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="lt_LT">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_nl.ts b/src/plugins/General/history/translations/history_plugin_nl.ts
new file mode 100644
index 000000000..29f2c251b
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_nl.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="nl_NL">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_pl_PL.ts b/src/plugins/General/history/translations/history_plugin_pl_PL.ts
new file mode 100644
index 000000000..3505f834f
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_pl_PL.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation>Format tytułu:</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>Artysta</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>Gatunek</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_pt.ts b/src/plugins/General/history/translations/history_plugin_pt.ts
new file mode 100644
index 000000000..92531495a
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_pt.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pt">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation>Selecionar data</translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation>Histórico</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation>Suplemento Listening History</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation>Sobre o suplemento Listening History</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation>Suplemento Listening History</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation>Este suplemento recolhe informações sobre as faixas reproduzidas</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation>Desenvolvido por: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation>Definições</translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation>Formato do título:</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation>Histórico</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation>Intervalo de tempo</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation>Desde:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation>Até:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation>Última semana</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation>Último mês</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation>Executar</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation>Tempo</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation>Faixa</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation>Distribuição</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation>Dia</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation>Reproduções</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation>Faixas mais ouvidas</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation>Artistas mais ouvidos</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>Artista</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation>Géneros mais ouvidos</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>Género</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation>dd MMMM yyyy</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation>hh:mm:ss</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation>MM-yyyy</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation>dd MMMM</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_pt_BR.ts b/src/plugins/General/history/translations/history_plugin_pt_BR.ts
new file mode 100644
index 000000000..e60fdf9cf
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_pt_BR.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pt_BR">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation>Formato dos títulos:</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>Artista</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>Gênero</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_ru.ts b/src/plugins/General/history/translations/history_plugin_ru.ts
new file mode 100644
index 000000000..6ddadf2c5
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_ru.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation>Выберите дату</translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation>Журнал</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation>Модуль журнала</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation>О модуле журнала прослушиваний</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation>Модуль журнала прослушиваний для Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation>Данный модуль собирает информацию о прослушенных треках</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation>Разработчик: Илья Котов &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation>Настройки модуля журнала</translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation>Формат названия:</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation>Журнал</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation>Диапазон времени</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation>От:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation>До:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation>Последняя неделя</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation>Последний месяц</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation>Выполнить</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation>Время</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation>Композиция</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation>Распределение</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation>День</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation>Число проигрываний</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation>Лучшие композиции</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation>Лучшие исполнители</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>Исполнитель</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation>Лучшие жанры</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>Жанр</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation>dd MMMM yyyy</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation>hh:mm:ss</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation>MM-yyyy</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation>dd MMMM</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_sk.ts b/src/plugins/General/history/translations/history_plugin_sk.ts
new file mode 100644
index 000000000..a47a71991
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_sk.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="sk_SK">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_sr_BA.ts b/src/plugins/General/history/translations/history_plugin_sr_BA.ts
new file mode 100644
index 000000000..89e89940c
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_sr_BA.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="sr_BA">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_sr_RS.ts b/src/plugins/General/history/translations/history_plugin_sr_RS.ts
new file mode 100644
index 000000000..2af239747
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_sr_RS.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="sr_RS">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_tr.ts b/src/plugins/General/history/translations/history_plugin_tr.ts
new file mode 100644
index 000000000..4f6771fc5
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_tr.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="tr_TR">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_uk_UA.ts b/src/plugins/General/history/translations/history_plugin_uk_UA.ts
new file mode 100644
index 000000000..8432dca54
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_uk_UA.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="uk">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation>Виберіть дату</translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation>Журнал</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation>Модуль журнала</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation>Про модуль журнала прослуховування</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation>Модуль журнала прослуховування для Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation>Цей модуль збирає інформацію про прослухані треки</translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation>Розробник: Ілля Котов &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation>Налаштування модуля журнала</translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation>Формат назви:</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation>Журнал</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation>Проміжок часу</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation>Від:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation>До:</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation>Крайній тиждень</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation>Крайній місяць</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation>Виконати</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation>Час</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation>Композиція</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation>Видавництво</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation>День</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation>Число відтворень</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation>Кращі композиції</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation>Кращі виконавці</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>Виконавець</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation>Кращі жанри</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>Жанр</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_zh_CN.ts b/src/plugins/General/history/translations/history_plugin_zh_CN.ts
new file mode 100644
index 000000000..aff71d714
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_zh_CN.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="zh_CN">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation>标题格式:</translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation>艺术家</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation>风格</translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/history_plugin_zh_TW.ts b/src/plugins/General/history/translations/history_plugin_zh_TW.ts
new file mode 100644
index 000000000..e208105d3
--- /dev/null
+++ b/src/plugins/General/history/translations/history_plugin_zh_TW.ts
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="zh_TW">
+<context>
+ <name>DateInputDialog</name>
+ <message>
+ <location filename="../dateinputdialog.ui" line="14"/>
+ <source>Select Date</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>History</name>
+ <message>
+ <location filename="../history.cpp" line="59"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryFactory</name>
+ <message>
+ <location filename="../historyfactory.cpp" line="31"/>
+ <source>Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="51"/>
+ <source>About Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="52"/>
+ <source>Qmmp Listening History Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="53"/>
+ <source>This plugin collects information about listened tracks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historyfactory.cpp" line="54"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistorySettingsDialog</name>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="14"/>
+ <source>Listening History Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historysettingsdialog.ui" line="31"/>
+ <source>Title format:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>HistoryWindow</name>
+ <message>
+ <location filename="../historywindow.ui" line="14"/>
+ <location filename="../historywindow.ui" line="110"/>
+ <source>History</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="29"/>
+ <source>Time Range</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="35"/>
+ <source>From:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="52"/>
+ <source>To:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="69"/>
+ <source>Last week</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="76"/>
+ <source>Last month</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="83"/>
+ <source>Execute</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="129"/>
+ <source>Time</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="134"/>
+ <location filename="../historywindow.ui" line="183"/>
+ <source>Song</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="143"/>
+ <source>Distribution</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="156"/>
+ <source>Day</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="161"/>
+ <location filename="../historywindow.ui" line="188"/>
+ <location filename="../historywindow.ui" line="215"/>
+ <location filename="../historywindow.ui" line="242"/>
+ <source>Play counts</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="170"/>
+ <source>Top Songs</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="197"/>
+ <source>Top Artists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="210"/>
+ <source>Artist</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="224"/>
+ <source>Top Genres</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.ui" line="237"/>
+ <source>Genre</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="104"/>
+ <source>dd MMMM yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="105"/>
+ <source>hh:mm:ss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="179"/>
+ <source>MM-yyyy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../historywindow.cpp" line="180"/>
+ <source>dd MMMM</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/General/history/translations/translations.qrc b/src/plugins/General/history/translations/translations.qrc
new file mode 100644
index 000000000..4dc7ffdb9
--- /dev/null
+++ b/src/plugins/General/history/translations/translations.qrc
@@ -0,0 +1,32 @@
+<!DOCTYPE RCC>
+<RCC version="1.0">
+ <qresource>
+ <file>history_plugin_ru.qm</file>
+ <file>history_plugin_uk_UA.qm</file>
+ <file>history_plugin_zh_CN.qm</file>
+ <file>history_plugin_zh_TW.qm</file>
+ <file>history_plugin_tr.qm</file>
+ <file>history_plugin_cs.qm</file>
+ <file>history_plugin_pt_BR.qm</file>
+ <file>history_plugin_pt.qm</file>
+ <file>history_plugin_de.qm</file>
+ <file>history_plugin_pl_PL.qm</file>
+ <file>history_plugin_fr.qm</file>
+ <file>history_plugin_it.qm</file>
+ <file>history_plugin_kk.qm</file>
+ <file>history_plugin_lt.qm</file>
+ <file>history_plugin_hu.qm</file>
+ <file>history_plugin_nl.qm</file>
+ <file>history_plugin_ja.qm</file>
+ <file>history_plugin_sk.qm</file>
+ <file>history_plugin_es.qm</file>
+ <file>history_plugin_he.qm</file>
+ <file>history_plugin_gl_ES.qm</file>
+ <file>history_plugin_sr_BA.qm</file>
+ <file>history_plugin_sr_RS.qm</file>
+ <file>history_plugin_bg.qm</file>
+ <file>history_plugin_el.qm</file>
+ <file>history_plugin_id.qm</file>
+ <file>history_plugin_fi.qm</file>
+ </qresource>
+</RCC>