diff --git a/data/data.qrc b/data/data.qrc
index 84cb9fbbc..067db8f40 100644
--- a/data/data.qrc
+++ b/data/data.qrc
@@ -294,5 +294,6 @@
schema/jamendo.sql
schema/schema-23.sql
schema/schema-24.sql
+ pythonstartup.py
diff --git a/data/pythonstartup.py b/data/pythonstartup.py
new file mode 100644
index 000000000..7a9abfd4b
--- /dev/null
+++ b/data/pythonstartup.py
@@ -0,0 +1,20 @@
+import clementine
+import sys
+
+class __ClementineLogger__:
+ def __init__(self, error):
+ self._error = error
+ self._buffer = ''
+
+ def write(self, data):
+ self._buffer = self._buffer + data
+ i = self._buffer.find('\n')
+ while i != -1:
+ line = self._buffer[0:i]
+ self._buffer = self._buffer[i+1:]
+ i = self._buffer.find('\n')
+
+ clementine.pythonengine.AddLogLine(line, self._error)
+
+sys.stdout = __ClementineLogger__(False)
+sys.stderr = __ClementineLogger__(True)
diff --git a/src/scripting/languageengine.cpp b/src/scripting/languageengine.cpp
index 6e9177e36..740f3b5a9 100644
--- a/src/scripting/languageengine.cpp
+++ b/src/scripting/languageengine.cpp
@@ -16,3 +16,8 @@
*/
#include "languageengine.h"
+
+LanguageEngine::LanguageEngine(ScriptManager* manager)
+ : manager_(manager)
+{
+}
diff --git a/src/scripting/languageengine.h b/src/scripting/languageengine.h
index 8fb50758d..1b9c9c779 100644
--- a/src/scripting/languageengine.h
+++ b/src/scripting/languageengine.h
@@ -24,14 +24,19 @@ class Script;
class LanguageEngine {
public:
+ LanguageEngine(ScriptManager* manager);
virtual ~LanguageEngine() {}
+ ScriptManager* manager() const { return manager_; }
+
virtual ScriptManager::Language language() const = 0;
virtual QString name() const = 0;
- virtual void Init(const ScriptManager::GlobalData& data) = 0;
+ virtual Script* CreateScript(const QString& path, const QString& script_file,
+ const QString& id) = 0;
- virtual Script* CreateScript(const QString& path, const QString& script_file) = 0;
+private:
+ ScriptManager* manager_;
};
#endif // LANGUAGEENGINE_H
diff --git a/src/scripting/python/clementine.sip b/src/scripting/python/clementine.sip
index 91b782839..7ef5f6fd8 100644
--- a/src/scripting/python/clementine.sip
+++ b/src/scripting/python/clementine.sip
@@ -6,5 +6,6 @@
%Include engine_fwd.sip
%Include player.sip
%Include playlistitem.sip
+%Include pythonengine.sip
%Include scriptinterface.sip
%Include song.sip
diff --git a/src/scripting/python/pythonengine.cpp b/src/scripting/python/pythonengine.cpp
index 4d12442bf..ef34a0b68 100644
--- a/src/scripting/python/pythonengine.cpp
+++ b/src/scripting/python/pythonengine.cpp
@@ -16,38 +16,97 @@
*/
#include
+#include
#include "pythonengine.h"
#include "pythonscript.h"
+#include "sipAPIclementine.h"
+
+#include
extern "C" {
void initclementine();
}
-PythonEngine::PythonEngine()
- : initialised_(false)
+PythonEngine::PythonEngine(ScriptManager* manager)
+ : LanguageEngine(manager),
+ initialised_(false)
{
}
-void PythonEngine::Init(const ScriptManager::GlobalData& data) {
- data_ = data;
+const sipAPIDef* PythonEngine::GetSIPApi() {
+#if defined(SIP_USE_PYCAPSULE)
+ return (const sipAPIDef *)PyCapsule_Import("sip._C_API", 0);
+#else
+ PyObject *sip_module;
+ PyObject *sip_module_dict;
+ PyObject *c_api;
+
+ /* Import the SIP module. */
+ sip_module = PyImport_ImportModule("sip");
+
+ if (sip_module == NULL)
+ return NULL;
+
+ /* Get the module's dictionary. */
+ sip_module_dict = PyModule_GetDict(sip_module);
+
+ /* Get the "_C_API" attribute. */
+ c_api = PyDict_GetItemString(sip_module_dict, "_C_API");
+
+ if (c_api == NULL)
+ return NULL;
+
+ /* Sanity check that it is the right type. */
+ if (!PyCObject_Check(c_api))
+ return NULL;
+
+ /* Get the actual pointer from the object. */
+ return (const sipAPIDef *)PyCObject_AsVoidPtr(c_api);
+#endif
}
-Script* PythonEngine::CreateScript(const QString& path, const QString& script_file) {
+Script* PythonEngine::CreateScript(const QString& path,
+ const QString& script_file,
+ const QString& id) {
// Initialise Python if it hasn't been done yet
if (!initialised_) {
+ AddLogLine("Initialising python...", false);
+
// Add the Clementine builtin module
PyImport_AppendInittab(const_cast("clementine"), initclementine);
+ // Initialise python
Py_SetProgramName(const_cast("clementine"));
PyEval_InitThreads();
Py_InitializeEx(0);
+
+ // Get the clementine module so we can put stuff in it
+ clementine_module_ = PyImport_ImportModule("clementine");
+ sip_api_ = GetSIPApi();
+
+ // Add objects to the module
+ AddObject(manager()->data().player_, sipType_Player, "player");
+ AddObject(this, sipType_PythonEngine, "pythonengine");
+
+ // Run the startup script - this redirects sys.stdout and sys.stderr to our
+ // log handler.
+ QFile python_startup(":pythonstartup.py");
+ python_startup.open(QIODevice::ReadOnly);
+ QByteArray python_startup_script = python_startup.readAll();
+
+ if (PyRun_SimpleString(python_startup_script.constData()) != 0) {
+ AddLogLine("Could not execute startup code", true);
+ Py_Finalize();
+ return NULL;
+ }
+
PyEval_ReleaseLock();
initialised_ = true;
}
- Script* ret = new PythonScript(this, path, script_file);
+ Script* ret = new PythonScript(this, path, script_file, id);
if (ret->Init()) {
return ret;
}
@@ -55,3 +114,13 @@ Script* PythonEngine::CreateScript(const QString& path, const QString& script_fi
delete ret;
return NULL;
}
+
+void PythonEngine::AddObject(void* object, const _sipTypeDef* type,
+ const char * name) const {
+ PyObject* python_object = sip_api_->api_convert_from_type(object, type, NULL);
+ PyModule_AddObject(clementine_module_, name, python_object);
+}
+
+void PythonEngine::AddLogLine(const QString& message, bool error) {
+ manager()->AddLogLine("Python", message, error);
+}
diff --git a/src/scripting/python/pythonengine.h b/src/scripting/python/pythonengine.h
index 2281be1cf..b9e594bb0 100644
--- a/src/scripting/python/pythonengine.h
+++ b/src/scripting/python/pythonengine.h
@@ -20,22 +20,33 @@
#include "scripting/languageengine.h"
+struct _object; // PyObject
+struct _sipAPIDef;
+struct _sipTypeDef;
+
class PythonEngine : public LanguageEngine {
public:
- PythonEngine();
+ PythonEngine(ScriptManager* manager);
ScriptManager::Language language() const { return ScriptManager::Language_Python; }
QString name() const { return "python"; }
- const ScriptManager::GlobalData& data() const { return data_; }
+ Script* CreateScript(const QString& path, const QString& script_file,
+ const QString& id);
- void Init(const ScriptManager::GlobalData& data);
- Script* CreateScript(const QString& path, const QString& script_file);
+ const _sipAPIDef* sip_api() const { return sip_api_; }
+
+ void AddLogLine(const QString& message, bool error = false);
private:
- ScriptManager::GlobalData data_;
+ static const _sipAPIDef* GetSIPApi();
+ void AddObject(void* object, const _sipTypeDef* type, const char* name) const;
+private:
bool initialised_;
+
+ _object* clementine_module_;
+ const _sipAPIDef* sip_api_;
};
#endif // PYTHONENGINE_H
diff --git a/src/scripting/python/pythonengine.sip b/src/scripting/python/pythonengine.sip
new file mode 100644
index 000000000..d01affb75
--- /dev/null
+++ b/src/scripting/python/pythonengine.sip
@@ -0,0 +1,12 @@
+class PythonEngine {
+
+%TypeHeaderCode
+#include "scripting/python/pythonengine.h"
+%End
+
+public:
+ void AddLogLine(const QString& message, bool error = false);
+
+private:
+ PythonEngine();
+};
diff --git a/src/scripting/python/pythonscript.cpp b/src/scripting/python/pythonscript.cpp
index 74f044d26..f1e167fbd 100644
--- a/src/scripting/python/pythonscript.cpp
+++ b/src/scripting/python/pythonscript.cpp
@@ -26,97 +26,64 @@
#include
-static const sipAPIDef* GetSIPApi() {
-#if defined(SIP_USE_PYCAPSULE)
- return (const sipAPIDef *)PyCapsule_Import("sip._C_API", 0);
-#else
- PyObject *sip_module;
- PyObject *sip_module_dict;
- PyObject *c_api;
-
- /* Import the SIP module. */
- sip_module = PyImport_ImportModule("sip");
-
- if (sip_module == NULL)
- return NULL;
-
- /* Get the module's dictionary. */
- sip_module_dict = PyModule_GetDict(sip_module);
-
- /* Get the "_C_API" attribute. */
- c_api = PyDict_GetItemString(sip_module_dict, "_C_API");
-
- if (c_api == NULL)
- return NULL;
-
- /* Sanity check that it is the right type. */
- if (!PyCObject_Check(c_api))
- return NULL;
-
- /* Get the actual pointer from the object. */
- return (const sipAPIDef *)PyCObject_AsVoidPtr(c_api);
-#endif
-}
-
-
-PythonScript::PythonScript(PythonEngine* engine,
- const QString& path, const QString& script_file)
- : Script(path, script_file),
- engine_(engine),
- interpreter_(NULL),
- clementine_module_(NULL),
- sip_api_(NULL)
+PythonScript::PythonScript(PythonEngine* engine, const QString& path,
+ const QString& script_file, const QString& id)
+ : Script(engine, path, script_file, id),
+ engine_(engine)
{
}
bool PythonScript::Init() {
+ engine_->AddLogLine("Loading script file \"" + script_file() + "\"", false);
+
// Open the file
QFile file(script_file());
if (!file.open(QIODevice::ReadOnly)) {
- qWarning() << "Error opening file:" << script_file();
+ engine_->AddLogLine("Could not open file", true);
return false;
}
- // Create a python interpreter
PyEval_AcquireLock();
- interpreter_ = Py_NewInterpreter();
- // Get the clementine module so we can put stuff in it
- clementine_module_ = PyImport_ImportModule("clementine");
- sip_api_ = GetSIPApi();
+ // Create a module for this script
+ // TODO: allowed characters?
+ PyObject* module = PyImport_AddModule(id().toAscii().constData());
+ PyObject* dict = PyModule_GetDict(module);
- AddObject(engine_->data().player_, sipType_Player, "player");
- AddObject(interface(), sipType_ScriptInterface, "script");
+ // Add __builtins__
+ PyObject* builtin_mod = PyImport_ImportModule("__builtin__");
+ PyModule_AddObject(module, "__builtins__", builtin_mod);
+ Py_DECREF(builtin_mod);
- PyEval_ReleaseLock();
+ // Set __file__
+ PyModule_AddStringConstant(module, "__file__", script_file().toLocal8Bit().constData());
+
+ // Set script
+ PyObject* script = engine_->sip_api()->api_convert_from_type(
+ interface(), sipType_ScriptInterface, NULL);
+ PyModule_AddObject(module, "script", script);
// Get a file stream from the file handle
FILE* stream = fdopen(file.handle(), "r");
- if (PyRun_SimpleFile(stream, script_file().toLocal8Bit().constData()) != 0) {
- PyEval_AcquireLock();
- Py_EndInterpreter(interpreter_);
+ // Run the script
+ PyObject* result = PyRun_File(
+ stream, script_file().toLocal8Bit().constData(), Py_file_input, dict, dict);
+ if (result == NULL) {
+ engine_->AddLogLine("Could not execute file", true);
+ PyErr_Print();
PyEval_ReleaseLock();
-
- interpreter_ = NULL;
return false;
}
+ Py_DECREF(result);
+ PyEval_ReleaseLock();
return true;
}
-void PythonScript::AddObject(void* object, const _sipTypeDef* type,
- const char * name) const {
- PyObject* python_object = sip_api_->api_convert_from_type(object, type, NULL);
- PyModule_AddObject(clementine_module_, name, python_object);
-}
+
bool PythonScript::Unload() {
- PyEval_AcquireLock();
- PyThreadState_Swap(interpreter_);
- Py_EndInterpreter(interpreter_);
- PyEval_ReleaseLock();
-
- interpreter_ = NULL;
+ // TODO: Actually do some cleanup
return true;
}
diff --git a/src/scripting/python/pythonscript.h b/src/scripting/python/pythonscript.h
index b8f2b22f0..e9eb2abae 100644
--- a/src/scripting/python/pythonscript.h
+++ b/src/scripting/python/pythonscript.h
@@ -20,30 +20,18 @@
#include "scripting/script.h"
-struct _object; // PyObject
-struct _sipAPIDef;
-struct _sipTypeDef;
-struct _ts; // PyThreadState
-
class PythonEngine;
class PythonScript : public Script {
public:
- PythonScript(PythonEngine* engine,
- const QString& path, const QString& script_file);
+ PythonScript(PythonEngine* engine, const QString& path,
+ const QString& script_file, const QString& id);
bool Init();
bool Unload();
-private:
- void AddObject(void* object, const _sipTypeDef* type, const char* name) const;
-
private:
PythonEngine* engine_;
-
- _ts* interpreter_;
- _object* clementine_module_;
- const _sipAPIDef* sip_api_;
};
#endif // PYTHONSCRIPT_H
diff --git a/src/scripting/script.cpp b/src/scripting/script.cpp
index 58d264b84..73c286f5a 100644
--- a/src/scripting/script.cpp
+++ b/src/scripting/script.cpp
@@ -18,10 +18,13 @@
#include "script.h"
#include "scriptinterface.h"
-Script::Script(const QString& path, const QString& script_file)
- : interface_(new ScriptInterface),
+Script::Script(LanguageEngine* language, const QString& path,
+ const QString& script_file, const QString& id)
+ : interface_(new ScriptInterface(this)),
+ language_(language),
path_(path),
- script_file_(script_file)
+ script_file_(script_file),
+ id_(id)
{
}
diff --git a/src/scripting/script.h b/src/scripting/script.h
index bdb622603..c4edb6153 100644
--- a/src/scripting/script.h
+++ b/src/scripting/script.h
@@ -22,16 +22,19 @@
#include
+class LanguageEngine;
class ScriptInterface;
class Script {
public:
- Script(const QString& path, const QString& script_file);
+ Script(LanguageEngine* language, const QString& path,
+ const QString& script_file, const QString& id);
virtual ~Script();
+ LanguageEngine* language() const { return language_; }
const QString& path() const { return path_; }
const QString& script_file() const { return script_file_; }
-
+ const QString& id() const { return id_; }
ScriptInterface* interface() const { return interface_.get(); }
virtual bool Init() = 0;
@@ -43,8 +46,10 @@ protected:
private:
Q_DISABLE_COPY(Script);
+ LanguageEngine* language_;
QString path_;
QString script_file_;
+ QString id_;
};
#endif // SCRIPT_H
diff --git a/src/scripting/scriptdialog.cpp b/src/scripting/scriptdialog.cpp
index bf71c76d8..bc7ba5aef 100644
--- a/src/scripting/scriptdialog.cpp
+++ b/src/scripting/scriptdialog.cpp
@@ -112,8 +112,13 @@ void ScriptDialog::SetManager(ScriptManager* manager) {
connect(manager, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
SLOT(DataChanged(QModelIndex,QModelIndex)));
+ connect(manager, SIGNAL(LogLineAdded(QString)), SLOT(LogLineAdded(QString)));
connect(ui_->list->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
SLOT(CurrentChanged(QModelIndex)));
+
+ foreach (const QString& html, manager->log_lines()) {
+ LogLineAdded(html);
+ }
}
void ScriptDialog::CurrentChanged(const QModelIndex& index) {
@@ -151,3 +156,7 @@ void ScriptDialog::Settings() {
void ScriptDialog::Details() {
}
+
+void ScriptDialog::LogLineAdded(const QString& html) {
+ ui_->console->append(html);
+}
diff --git a/src/scripting/scriptdialog.h b/src/scripting/scriptdialog.h
index b99d4d75f..5eb5f9189 100644
--- a/src/scripting/scriptdialog.h
+++ b/src/scripting/scriptdialog.h
@@ -59,6 +59,7 @@ public:
private slots:
void DataChanged(const QModelIndex& top_left, const QModelIndex& bottom_right);
void CurrentChanged(const QModelIndex& index);
+ void LogLineAdded(const QString& html);
void Enable();
void Disable();
diff --git a/src/scripting/scriptdialog.ui b/src/scripting/scriptdialog.ui
index a545f9192..65d91dfc4 100644
--- a/src/scripting/scriptdialog.ui
+++ b/src/scripting/scriptdialog.ui
@@ -6,8 +6,8 @@
0
0
- 645
- 388
+ 718
+ 447
@@ -15,68 +15,100 @@
-
-
-
-
-
-
- -
-
+
+
+ 2
+
+
+
+ My scripts
+
+
-
-
-
- false
-
-
- Enable
-
-
+
-
-
-
- false
-
-
- Disable
-
-
-
- -
-
-
- false
-
-
- Settings...
-
-
-
- -
-
-
- false
-
-
- Details...
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
+
+
-
+
+
+ false
+
+
+ Enable
+
+
+
+ -
+
+
+ false
+
+
+ Disable
+
+
+
+ -
+
+
+ false
+
+
+ Settings...
+
+
+
+ -
+
+
+ false
+
+
+ Details...
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
-
-
+
+
+
+ Get new scripts
+
+
+
+
+ Script console
+
+
+ -
+
+
+ true
+
+
+ Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse
+
+
+
+
+
+
-
diff --git a/src/scripting/scriptinterface.cpp b/src/scripting/scriptinterface.cpp
index fa3acd7fc..7abe49cf1 100644
--- a/src/scripting/scriptinterface.cpp
+++ b/src/scripting/scriptinterface.cpp
@@ -15,13 +15,20 @@
along with Clementine. If not, see .
*/
+#include "languageengine.h"
+#include "script.h"
#include "scriptinterface.h"
-ScriptInterface::ScriptInterface(QObject* parent)
- : QObject(parent)
+ScriptInterface::ScriptInterface(Script* script, QObject* parent)
+ : QObject(parent),
+ script_(script)
{
}
void ScriptInterface::ShowSettingsDialog() {
emit SettingsDialogRequested();
}
+
+void ScriptInterface::AddLogLine(const QString& message, bool error) {
+ script_->language()->manager()->AddLogLine(script_->id(), message, error);
+}
diff --git a/src/scripting/scriptinterface.h b/src/scripting/scriptinterface.h
index ce096ec85..86fe7342c 100644
--- a/src/scripting/scriptinterface.h
+++ b/src/scripting/scriptinterface.h
@@ -20,20 +20,30 @@
#include
+#include
+
+class Script;
+
// An instance of this class is made available to each script
class ScriptInterface : public QObject {
Q_OBJECT
public:
- ScriptInterface(QObject* parent = 0);
+ ScriptInterface(Script* script, QObject* parent = 0);
public slots:
// Callable by C++
void ShowSettingsDialog();
+ // Callable by the script
+ void AddLogLine(const QString& message, bool error = false);
+
signals:
// Scripts should connect to this and show a settings dialog
void SettingsDialogRequested();
+
+private:
+ Script* script_;
};
#endif // SCRIPTINTERFACE_H
diff --git a/src/scripting/scriptmanager.cpp b/src/scripting/scriptmanager.cpp
index 02b1be703..2a885f770 100644
--- a/src/scripting/scriptmanager.cpp
+++ b/src/scripting/scriptmanager.cpp
@@ -28,6 +28,7 @@
#include
#include
+#include
#include
const char* ScriptManager::kSettingsGroup = "Scripts";
@@ -35,11 +36,10 @@ const char* ScriptManager::kIniFileName = "script.ini";
const char* ScriptManager::kIniSettingsGroup = "Script";
ScriptManager::ScriptManager(QObject* parent)
- : QAbstractListModel(parent),
- player_(NULL)
+ : QAbstractListModel(parent)
{
#ifdef HAVE_SCRIPTING_PYTHON
- engines_ << new PythonEngine;
+ engines_ << new PythonEngine(this);
#endif
search_paths_ << Utilities::GetConfigPath(Utilities::Path_Scripts);
@@ -57,9 +57,7 @@ ScriptManager::~ScriptManager() {
}
void ScriptManager::Init(const GlobalData& data) {
- foreach (LanguageEngine* engine, engines_) {
- engine->Init(data);
- }
+ data_ = data;
// Load settings
LoadSettings();
@@ -158,7 +156,7 @@ ScriptManager::ScriptInfo ScriptManager::LoadScriptInfo(const QString& path) {
if (enabled_scripts_.contains(id)) {
// Load the script if it's enabled
- ret.loaded_ = engine->CreateScript(path, ret.script_file_);
+ ret.loaded_ = engine->CreateScript(path, ret.script_file_, ret.id_);
if (!ret.loaded_) {
// Failed to load? Disable it so we don't try again
enabled_scripts_.remove(id);
@@ -227,7 +225,7 @@ void ScriptManager::Enable(const QModelIndex& index) {
}
// Load the script
- info->loaded_ = engine->CreateScript(info->path_, info->script_file_);
+ info->loaded_ = engine->CreateScript(info->path_, info->script_file_, info->id_);
// If it loaded correctly then automatically load it in the future
if (info->loaded_) {
@@ -266,3 +264,20 @@ void ScriptManager::ShowSettingsDialog(const QModelIndex& index) {
info->loaded_->interface()->ShowSettingsDialog();
}
+
+void ScriptManager::AddLogLine(const QString& who, const QString& message, bool error) {
+ foreach (const QString& line, message.split("\n", QString::SkipEmptyParts)) {
+ QString plain = "[" + who + "] " + line;
+ QString html = "[" + Qt::escape(who) + "] " + Qt::escape(line);
+ html.replace(' ', " ");
+
+ if (error) {
+ html = "" + html + "";
+ }
+
+ log_lines_ << html;
+ emit LogLineAdded(html);
+
+ qDebug() << plain.toLocal8Bit().constData();
+ }
+}
diff --git a/src/scripting/scriptmanager.h b/src/scripting/scriptmanager.h
index db0a080a0..3a390a4c4 100644
--- a/src/scripting/scriptmanager.h
+++ b/src/scripting/scriptmanager.h
@@ -62,15 +62,24 @@ public:
static const char* kIniSettingsGroup;
void Init(const GlobalData& data);
+ const GlobalData& data() const { return data_; }
void Enable(const QModelIndex& index);
void Disable(const QModelIndex& index);
void ShowSettingsDialog(const QModelIndex& index);
+ QStringList log_lines() const { return log_lines_; }
+
// QAbstractListModel
int rowCount(const QModelIndex& parent = QModelIndex()) const;
QVariant data(const QModelIndex& index, int role) const;
+public slots:
+ void AddLogLine(const QString& who, const QString& message, bool error);
+
+signals:
+ void LogLineAdded(const QString& html);
+
private:
struct ScriptInfo {
ScriptInfo() : language_(Language_Unknown), loaded_(NULL) {}
@@ -101,14 +110,21 @@ private:
LanguageEngine* EngineForLanguage(Language language) const;
private:
+ // Language engines
QList engines_;
+ // All scripts we know about
QStringList search_paths_;
QList info_;
+ // Names of scripts that get loaded automatically
QSet enabled_scripts_;
- Player* player_;
+ // HTML log messages
+ QStringList log_lines_;
+
+ // Things available to scripts
+ GlobalData data_;
};
#endif // SCRIPTMANAGER_H
diff --git a/src/translations/ar.po b/src/translations/ar.po
index 1bdd2fcdf..1f1e39e62 100644
--- a/src/translations/ar.po
+++ b/src/translations/ar.po
@@ -1034,6 +1034,9 @@ msgstr ""
msgid "Genre"
msgstr "النوع"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1436,6 +1439,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr ""
@@ -1897,6 +1903,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/be.po b/src/translations/be.po
index f807e3c34..719834447 100644
--- a/src/translations/be.po
+++ b/src/translations/be.po
@@ -1048,6 +1048,9 @@ msgstr ""
msgid "Genre"
msgstr ""
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1450,6 +1453,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr ""
@@ -1911,6 +1917,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/bg.po b/src/translations/bg.po
index 2bf76c322..d6539928b 100644
--- a/src/translations/bg.po
+++ b/src/translations/bg.po
@@ -1036,6 +1036,9 @@ msgstr "Общи настройки"
msgid "Genre"
msgstr "Жанр"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1440,6 +1443,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Име"
@@ -1901,6 +1907,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/br.po b/src/translations/br.po
index 316bd2abf..bc2394ec8 100644
--- a/src/translations/br.po
+++ b/src/translations/br.po
@@ -1034,6 +1034,9 @@ msgstr ""
msgid "Genre"
msgstr ""
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1436,6 +1439,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr ""
@@ -1897,6 +1903,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/ca.po b/src/translations/ca.po
index 695c67851..925ac61b5 100644
--- a/src/translations/ca.po
+++ b/src/translations/ca.po
@@ -1065,6 +1065,9 @@ msgstr "Arranjaments generals"
msgid "Genre"
msgstr "Gènere"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Obtenint canals"
@@ -1472,6 +1475,9 @@ msgstr "La meva emissora de ràdio"
msgid "My Recommendations"
msgstr "Les meves recomanacions"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Nom"
@@ -1935,6 +1941,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/cs.po b/src/translations/cs.po
index 44564276a..468b7aeef 100644
--- a/src/translations/cs.po
+++ b/src/translations/cs.po
@@ -1061,6 +1061,9 @@ msgstr "Obecná nastavení"
msgid "Genre"
msgstr "Žánr"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Získávají se kanály"
@@ -1473,6 +1476,9 @@ msgstr "Moje rozhlasová stanice"
msgid "My Recommendations"
msgstr "Má doporučení"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Název"
@@ -1936,6 +1942,9 @@ msgstr "Výsledek"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Se skladbami, které poslouchám, dělat to, čemu se říká \"scrobble\""
diff --git a/src/translations/cy.po b/src/translations/cy.po
index 9905ba741..e4b46b675 100644
--- a/src/translations/cy.po
+++ b/src/translations/cy.po
@@ -1034,6 +1034,9 @@ msgstr ""
msgid "Genre"
msgstr ""
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1436,6 +1439,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr ""
@@ -1897,6 +1903,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/da.po b/src/translations/da.po
index c9cd78849..95aa4a2ee 100644
--- a/src/translations/da.po
+++ b/src/translations/da.po
@@ -1037,6 +1037,9 @@ msgstr "Generelle indstillinger"
msgid "Genre"
msgstr "Genre"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Henter kanaler"
@@ -1441,6 +1444,9 @@ msgstr "Min radiostation"
msgid "My Recommendations"
msgstr "Mine anbefalinger"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Navn"
@@ -1902,6 +1908,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Scrobble-spor som jeg lytter til"
diff --git a/src/translations/de.po b/src/translations/de.po
index 45ad65d1e..a18a91dc7 100644
--- a/src/translations/de.po
+++ b/src/translations/de.po
@@ -1064,6 +1064,9 @@ msgstr "Allgemeine Einstellungen"
msgid "Genre"
msgstr "Genre"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Lade Channels"
@@ -1476,6 +1479,9 @@ msgstr "Meine Radiostation"
msgid "My Recommendations"
msgstr "Meine Empfehlungen"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Name"
@@ -1939,6 +1945,9 @@ msgstr "Bewertung"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Stücke die ich höre \"scrobbeln\""
diff --git a/src/translations/el.po b/src/translations/el.po
index fd36b0b7e..272a54a87 100644
--- a/src/translations/el.po
+++ b/src/translations/el.po
@@ -1071,6 +1071,9 @@ msgstr "Γενικές ρυθμίσεις"
msgid "Genre"
msgstr "Είδος"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Λήψη καναλιών"
@@ -1481,6 +1484,9 @@ msgstr "Οι Σταθμοί μου"
msgid "My Recommendations"
msgstr "Οι Προτάσεις μου"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Όνομα"
@@ -1946,6 +1952,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Κάνε \"srobble\" τα κομμάτια που ακούω"
diff --git a/src/translations/en.po b/src/translations/en.po
index 8b494045b..2f2385451 100644
--- a/src/translations/en.po
+++ b/src/translations/en.po
@@ -1023,6 +1023,9 @@ msgstr ""
msgid "Genre"
msgstr ""
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1425,6 +1428,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr ""
@@ -1886,6 +1892,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/en_CA.po b/src/translations/en_CA.po
index e32490426..8537b64a6 100644
--- a/src/translations/en_CA.po
+++ b/src/translations/en_CA.po
@@ -1037,6 +1037,9 @@ msgstr "General settings"
msgid "Genre"
msgstr "Genre"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Getting channels"
@@ -1440,6 +1443,9 @@ msgstr "My Radio Station"
msgid "My Recommendations"
msgstr "My Recommendations"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Name"
@@ -1902,6 +1908,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Scrobble tracks that I listen to"
diff --git a/src/translations/en_GB.po b/src/translations/en_GB.po
index 79b634b05..614bbd520 100644
--- a/src/translations/en_GB.po
+++ b/src/translations/en_GB.po
@@ -1035,6 +1035,9 @@ msgstr "General settings"
msgid "Genre"
msgstr "Genre"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Getting channels"
@@ -1438,6 +1441,9 @@ msgstr "My Radio Station"
msgid "My Recommendations"
msgstr "My Recommendations"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Name"
@@ -1899,6 +1905,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Scrobble tracks that I listen to"
diff --git a/src/translations/eo.po b/src/translations/eo.po
index cbcf89f8c..6a52fd8d1 100644
--- a/src/translations/eo.po
+++ b/src/translations/eo.po
@@ -1034,6 +1034,9 @@ msgstr ""
msgid "Genre"
msgstr ""
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1436,6 +1439,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr ""
@@ -1897,6 +1903,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/es.po b/src/translations/es.po
index e81c9c5c2..1ad9433d6 100644
--- a/src/translations/es.po
+++ b/src/translations/es.po
@@ -1069,6 +1069,9 @@ msgstr "Preferencias generales"
msgid "Genre"
msgstr "Género"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Obteniendo canales"
@@ -1482,6 +1485,9 @@ msgstr "Mi Estación de Radio"
msgid "My Recommendations"
msgstr "Mis Recomendaciones"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Nombre"
@@ -1947,6 +1953,9 @@ msgstr "Puntuación"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Enviar las pistas que reproduzco"
diff --git a/src/translations/et.po b/src/translations/et.po
index 08e996ddd..75971fa5e 100644
--- a/src/translations/et.po
+++ b/src/translations/et.po
@@ -1035,6 +1035,9 @@ msgstr "Üldised seadistused"
msgid "Genre"
msgstr "Žanr"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1438,6 +1441,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Nimi"
@@ -1899,6 +1905,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/eu.po b/src/translations/eu.po
index 373104e1c..c511aa298 100644
--- a/src/translations/eu.po
+++ b/src/translations/eu.po
@@ -1034,6 +1034,9 @@ msgstr ""
msgid "Genre"
msgstr ""
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1436,6 +1439,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr ""
@@ -1897,6 +1903,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/fi.po b/src/translations/fi.po
index f52694cfe..ce77cc5c8 100644
--- a/src/translations/fi.po
+++ b/src/translations/fi.po
@@ -1034,6 +1034,9 @@ msgstr "Yleiset asetukset"
msgid "Genre"
msgstr "Tyylilaji"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1438,6 +1441,9 @@ msgstr "Oma radioasemani"
msgid "My Recommendations"
msgstr "Omat suositukseni"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Nimi"
@@ -1899,6 +1905,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/fr.po b/src/translations/fr.po
index 57c7d699a..fdd0bc927 100644
--- a/src/translations/fr.po
+++ b/src/translations/fr.po
@@ -1073,6 +1073,9 @@ msgstr "Configuration générale"
msgid "Genre"
msgstr "Genre"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Récupération des canaux"
@@ -1487,6 +1490,9 @@ msgstr "Ma station de radio"
msgid "My Recommendations"
msgstr "Mes suggestions"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Nom"
@@ -1952,6 +1958,9 @@ msgstr "Score"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Envoyer les titres des pistes que j'écoute (scrobble)"
diff --git a/src/translations/gl.po b/src/translations/gl.po
index 300592340..38730defe 100644
--- a/src/translations/gl.po
+++ b/src/translations/gl.po
@@ -1038,6 +1038,9 @@ msgstr ""
msgid "Genre"
msgstr "Xénero"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Obter canais"
@@ -1442,6 +1445,9 @@ msgstr "A Miña Emisora"
msgid "My Recommendations"
msgstr "As miñas recomendazóns"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Nome"
@@ -1903,6 +1909,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/he.po b/src/translations/he.po
index b9150f589..37ca42cc0 100644
--- a/src/translations/he.po
+++ b/src/translations/he.po
@@ -1038,6 +1038,9 @@ msgstr "הגדרות כלליות"
msgid "Genre"
msgstr "סגנון"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "מקבל ערוצים"
@@ -1443,6 +1446,9 @@ msgstr "תחנת הרדיו שלי"
msgid "My Recommendations"
msgstr "ההמלצות שלי"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "שם"
@@ -1905,6 +1911,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/hi.po b/src/translations/hi.po
index a719ded99..b7853b020 100644
--- a/src/translations/hi.po
+++ b/src/translations/hi.po
@@ -1034,6 +1034,9 @@ msgstr ""
msgid "Genre"
msgstr ""
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1436,6 +1439,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr ""
@@ -1897,6 +1903,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/hr.po b/src/translations/hr.po
index 34ca4edc8..7c06b7380 100644
--- a/src/translations/hr.po
+++ b/src/translations/hr.po
@@ -1040,6 +1040,9 @@ msgstr ""
msgid "Genre"
msgstr ""
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1442,6 +1445,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr ""
@@ -1903,6 +1909,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/hu.po b/src/translations/hu.po
index 0b1a981f6..3d5262a8f 100644
--- a/src/translations/hu.po
+++ b/src/translations/hu.po
@@ -1062,6 +1062,9 @@ msgstr "Általános beállítások"
msgid "Genre"
msgstr "Műfaj"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Csatornák betöltése"
@@ -1472,6 +1475,9 @@ msgstr "A rádióadóm"
msgid "My Recommendations"
msgstr "Ajánlásaim"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Név"
@@ -1935,6 +1941,9 @@ msgstr "Pontszám"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Az általam hallgatott számok Scrobble funkcióval történő figyelése"
diff --git a/src/translations/it.po b/src/translations/it.po
index 40cf923ca..5febda59c 100644
--- a/src/translations/it.po
+++ b/src/translations/it.po
@@ -1066,6 +1066,9 @@ msgstr "Impostazioni generali"
msgid "Genre"
msgstr "Genere"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Recupero dei canali"
@@ -1479,6 +1482,9 @@ msgstr "La mia stazione radio"
msgid "My Recommendations"
msgstr "I miei consigli"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Nome"
@@ -1943,6 +1949,9 @@ msgstr "Punteggio"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Scrobbling delle tracce ascoltate"
diff --git a/src/translations/ja.po b/src/translations/ja.po
index ca17d65a2..e9005cb72 100644
--- a/src/translations/ja.po
+++ b/src/translations/ja.po
@@ -1055,6 +1055,9 @@ msgstr "全般設定"
msgid "Genre"
msgstr "ジャンル"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "チャンネルの取得中"
@@ -1462,6 +1465,9 @@ msgstr "ラジオ局"
msgid "My Recommendations"
msgstr "おすすめ"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "名前"
@@ -1925,6 +1931,9 @@ msgstr "スコア"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "聴取するトラックを Scrobble する"
diff --git a/src/translations/kk.po b/src/translations/kk.po
index d5eafc047..40a202df0 100644
--- a/src/translations/kk.po
+++ b/src/translations/kk.po
@@ -1034,6 +1034,9 @@ msgstr ""
msgid "Genre"
msgstr "Жанры"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1438,6 +1441,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Аты"
@@ -1899,6 +1905,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/lt.po b/src/translations/lt.po
index 33a616758..5a0c9caac 100644
--- a/src/translations/lt.po
+++ b/src/translations/lt.po
@@ -1034,6 +1034,9 @@ msgstr ""
msgid "Genre"
msgstr ""
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1436,6 +1439,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr ""
@@ -1897,6 +1903,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/nb.po b/src/translations/nb.po
index f2e2168aa..2e27cbabd 100644
--- a/src/translations/nb.po
+++ b/src/translations/nb.po
@@ -1046,6 +1046,9 @@ msgstr "Generelle innstillinger"
msgid "Genre"
msgstr "Sjanger"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Henter kanaler"
@@ -1450,6 +1453,9 @@ msgstr "Min radiostasjon"
msgid "My Recommendations"
msgstr "Mine anbefalinger"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Navn"
@@ -1911,6 +1917,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Fortell last.fm om sangene jeg har lyttet til"
diff --git a/src/translations/nl.po b/src/translations/nl.po
index 1c25f18b5..787abd0de 100644
--- a/src/translations/nl.po
+++ b/src/translations/nl.po
@@ -1057,6 +1057,9 @@ msgstr "Algemene instellingen"
msgid "Genre"
msgstr "Genre"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Kanalen ophalen"
@@ -1465,6 +1468,9 @@ msgstr "Mijn radiostation"
msgid "My Recommendations"
msgstr "Mijn aanbevelingen"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Naam"
@@ -1930,6 +1936,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Scrobble de tracks waar ik naar luister"
diff --git a/src/translations/oc.po b/src/translations/oc.po
index af25b8227..30c5b8110 100644
--- a/src/translations/oc.po
+++ b/src/translations/oc.po
@@ -1034,6 +1034,9 @@ msgstr "Paramètres generals"
msgid "Genre"
msgstr "Genre"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1436,6 +1439,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Nom"
@@ -1897,6 +1903,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/pl.po b/src/translations/pl.po
index c028d3527..929245911 100644
--- a/src/translations/pl.po
+++ b/src/translations/pl.po
@@ -1059,6 +1059,9 @@ msgstr "Podstawowe ustawienia"
msgid "Genre"
msgstr "Gatunek"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Pobieranie kanałów"
@@ -1466,6 +1469,9 @@ msgstr "Moje stacje radiowe"
msgid "My Recommendations"
msgstr "Moje rekomendacje"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Nazwa"
@@ -1930,6 +1936,9 @@ msgstr "Wynik"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Wysyłaj informacje o utworach których słucham"
diff --git a/src/translations/pt.po b/src/translations/pt.po
index 6f8be4fb1..68565947b 100644
--- a/src/translations/pt.po
+++ b/src/translations/pt.po
@@ -1066,6 +1066,9 @@ msgstr "Definições gerais"
msgid "Genre"
msgstr "Género"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Obtendo canais"
@@ -1476,6 +1479,9 @@ msgstr "A minha estação de rádio"
msgid "My Recommendations"
msgstr "As minhas recomendações"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Nome"
@@ -1940,6 +1946,9 @@ msgstr "Pontuação"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Enviar as faixas que eu oiço"
diff --git a/src/translations/pt_BR.po b/src/translations/pt_BR.po
index 8293c97e1..853592878 100644
--- a/src/translations/pt_BR.po
+++ b/src/translations/pt_BR.po
@@ -1059,6 +1059,9 @@ msgstr "Configurações gerais"
msgid "Genre"
msgstr "Gênero"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Adquirindo canais"
@@ -1471,6 +1474,9 @@ msgstr "Minha Estação de Rádio"
msgid "My Recommendations"
msgstr "Minhas Recomendações"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Nome"
@@ -1936,6 +1942,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Adicionar ao meu perfil os dados das músicas que eu ouvir"
diff --git a/src/translations/ro.po b/src/translations/ro.po
index 8a6eaad98..01aeed0f3 100644
--- a/src/translations/ro.po
+++ b/src/translations/ro.po
@@ -1034,6 +1034,9 @@ msgstr "Setări generale"
msgid "Genre"
msgstr "Gen"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Se preiau canalele"
@@ -1437,6 +1440,9 @@ msgstr "Postul meu de radio"
msgid "My Recommendations"
msgstr "Recomandările mele"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Nume"
@@ -1898,6 +1904,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/ru.po b/src/translations/ru.po
index d13fd54fa..190a3c273 100644
--- a/src/translations/ru.po
+++ b/src/translations/ru.po
@@ -1057,6 +1057,9 @@ msgstr "Общие настройки"
msgid "Genre"
msgstr "Жанр"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Получение каналов"
@@ -1467,6 +1470,9 @@ msgstr "Моя радиостанция"
msgid "My Recommendations"
msgstr "Мои рекомендации"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Имя"
@@ -1930,6 +1936,9 @@ msgstr "Счет"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Скробблить треки, которые я слушаю"
diff --git a/src/translations/sk.po b/src/translations/sk.po
index 160878fde..73fed9c9d 100644
--- a/src/translations/sk.po
+++ b/src/translations/sk.po
@@ -1056,6 +1056,9 @@ msgstr "Všeobecné nastavenia"
msgid "Genre"
msgstr "Žáner"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Preberanie kanálov"
@@ -1464,6 +1467,9 @@ msgstr "Moje rádio stanice"
msgid "My Recommendations"
msgstr "Moje odporúčania"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Názov"
@@ -1926,6 +1932,9 @@ msgstr "Skóre"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Skrobblovať skladby, ktoré počúvam"
diff --git a/src/translations/sl.po b/src/translations/sl.po
index 465325ecb..b30551627 100644
--- a/src/translations/sl.po
+++ b/src/translations/sl.po
@@ -1058,6 +1058,9 @@ msgstr "Splošne nastavitve"
msgid "Genre"
msgstr "Zvrst"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Pridobivanje kanalov"
@@ -1466,6 +1469,9 @@ msgstr "Moja radijska postaja"
msgid "My Recommendations"
msgstr "Moja priporočila"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Ime"
@@ -1929,6 +1935,9 @@ msgstr "Rezultat"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Pošlji podatke o predvajanih skladbah"
diff --git a/src/translations/sr.po b/src/translations/sr.po
index ce8ff427c..aef179c9e 100644
--- a/src/translations/sr.po
+++ b/src/translations/sr.po
@@ -1037,6 +1037,9 @@ msgstr "Опште поставке"
msgid "Genre"
msgstr "Жанр"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Добављање канала"
@@ -1441,6 +1444,9 @@ msgstr "Моја радио станица"
msgid "My Recommendations"
msgstr "Моје препоруке"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Име"
@@ -1902,6 +1908,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/sv.po b/src/translations/sv.po
index b2e19a0f9..bec1e4c94 100644
--- a/src/translations/sv.po
+++ b/src/translations/sv.po
@@ -1062,6 +1062,9 @@ msgstr "Allmänna inställningar"
msgid "Genre"
msgstr "Genre"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Hämtar kanaler"
@@ -1470,6 +1473,9 @@ msgstr "Min radiostation"
msgid "My Recommendations"
msgstr "Mina rekommendationer"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Namn"
@@ -1931,6 +1937,9 @@ msgstr "Poäng"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Skrobbla låtar som jag lyssnar på"
diff --git a/src/translations/tr.po b/src/translations/tr.po
index 8f97f9332..3d38b8f13 100644
--- a/src/translations/tr.po
+++ b/src/translations/tr.po
@@ -1055,6 +1055,9 @@ msgstr "Genel ayarlar"
msgid "Genre"
msgstr "Tür"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Kanallar alınıyor"
@@ -1466,6 +1469,9 @@ msgstr "Radyom"
msgid "My Recommendations"
msgstr "Önerdiklerim"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "İsim"
@@ -1929,6 +1935,9 @@ msgstr "Puan"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Dinlediğim parçaları skropla"
diff --git a/src/translations/translations.pot b/src/translations/translations.pot
index b99bde1be..a1cb790c6 100644
--- a/src/translations/translations.pot
+++ b/src/translations/translations.pot
@@ -1024,6 +1024,9 @@ msgstr ""
msgid "Genre"
msgstr ""
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1426,6 +1429,9 @@ msgstr ""
msgid "My Recommendations"
msgstr ""
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr ""
@@ -1887,6 +1893,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/uk.po b/src/translations/uk.po
index 1b3bc9181..3493c6ae9 100644
--- a/src/translations/uk.po
+++ b/src/translations/uk.po
@@ -1058,6 +1058,9 @@ msgstr "Загальні налаштування"
msgid "Genre"
msgstr "Жанр"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr "Отримання каналів"
@@ -1468,6 +1471,9 @@ msgstr "Моя радіостанція"
msgid "My Recommendations"
msgstr "Мої рекомендації"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "Назва"
@@ -1931,6 +1937,9 @@ msgstr "Рахунок"
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr "Скробблити доріжки, які я слухаю"
diff --git a/src/translations/zh_CN.po b/src/translations/zh_CN.po
index bca09e346..90c2d5095 100644
--- a/src/translations/zh_CN.po
+++ b/src/translations/zh_CN.po
@@ -1036,6 +1036,9 @@ msgstr "常规设置"
msgid "Genre"
msgstr "流派"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1440,6 +1443,9 @@ msgstr "我的电台"
msgid "My Recommendations"
msgstr "我的推荐"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr ""
@@ -1901,6 +1907,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""
diff --git a/src/translations/zh_TW.po b/src/translations/zh_TW.po
index d2b9f5c6c..fa9b7ad26 100644
--- a/src/translations/zh_TW.po
+++ b/src/translations/zh_TW.po
@@ -1038,6 +1038,9 @@ msgstr "一般設定"
msgid "Genre"
msgstr "風格"
+msgid "Get new scripts"
+msgstr ""
+
msgid "Getting channels"
msgstr ""
@@ -1441,6 +1444,9 @@ msgstr "我的廣播站"
msgid "My Recommendations"
msgstr "我推薦的電台"
+msgid "My scripts"
+msgstr ""
+
msgid "Name"
msgstr "名稱"
@@ -1902,6 +1908,9 @@ msgstr ""
msgid "Script Manager"
msgstr ""
+msgid "Script console"
+msgstr ""
+
msgid "Scrobble tracks that I listen to"
msgstr ""