Skip to content

Commit

Permalink
Merge pull request #39 from pcgomes/replace_Qtscript_with_QtQml
Browse files Browse the repository at this point in the history
Replace qtscript with qt qml
  • Loading branch information
pcgomes committed Sep 13, 2020
2 parents 8ee1993 + fe8b9d2 commit 853adf5
Show file tree
Hide file tree
Showing 52 changed files with 6,121 additions and 74 deletions.
5 changes: 4 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,17 @@ include(FindPkgConfig)
include(CMakePushCheckState)
include(GenerateExportHeader)

find_package(Qt5 ${QT_REQUIRED_VERSION} REQUIRED COMPONENTS Core DBus Gui QuickWidgets Qml Script ScriptTools Sql Svg Test Widgets Xml)
find_package(Qt5 ${QT_REQUIRED_VERSION} REQUIRED COMPONENTS Core DBus Gui QuickWidgets Qml Sql Svg Test Widgets Xml )

find_package(Qt5QuickControls2 ${QT_REQUIRED_VERSION})
set_package_properties(Qt5QuickControls2 PROPERTIES TYPE RUNTIME PURPOSE "Needed by the player's context area")

find_package(Qt5WebEngine ${QT_REQUIRED_VERSION})
set_package_properties(Qt5WebEngine PROPERTIES TYPE OPTIONAL PURPOSE "Needed by the wikipedia applet")

find_package(Qt5UiTools ${QT_REQUIRED_VERSION})
set_package_properties(Qt5UiTools PROPERTIES TYPE OPTIONAL PURPOSE "Needed by the scripting engine")

find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
Archive
Attica
Expand Down
30 changes: 28 additions & 2 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,7 @@ set(scriptengine_SRCS
scripting/scriptengine/AmarokEqualizerScript.cpp
scripting/scriptengine/AmarokInfoScript.cpp
scripting/scriptengine/AmarokKNotifyScript.cpp
scripting/scriptengine/AmarokLyricsScript.cpp
scripting/scriptengine/AmarokNetworkScript.cpp
scripting/scriptengine/AmarokOSDScript.cpp
scripting/scriptengine/AmarokPlaylistManagerScript.cpp
Expand All @@ -464,6 +465,26 @@ set(scriptengine_SRCS
scripting/scriptengine/exporters/ScriptableBiasExporter.cpp
)

set(qtbindings_SRCS
scripting/scriptengine/qtbindings/CoreByteArray.cpp
scripting/scriptengine/qtbindings/CoreCoreApplication.cpp
scripting/scriptengine/qtbindings/CoreDir.cpp
scripting/scriptengine/qtbindings/CoreFile.cpp
scripting/scriptengine/qtbindings/CoreFileInfo.cpp
scripting/scriptengine/qtbindings/CoreIODevice.cpp
scripting/scriptengine/qtbindings/CoreLocale.cpp
scripting/scriptengine/qtbindings/CoreResource.cpp
scripting/scriptengine/qtbindings/CoreTextCodec.cpp
scripting/scriptengine/qtbindings/CoreTextStream.cpp
scripting/scriptengine/qtbindings/CoreTranslator.cpp
scripting/scriptengine/qtbindings/CoreUrl.cpp
scripting/scriptengine/qtbindings/GuiCheckBox.cpp
scripting/scriptengine/qtbindings/GuiDialogButtonBox.cpp
scripting/scriptengine/qtbindings/GuiLabel.cpp
scripting/scriptengine/qtbindings/SqlSqlQuery.cpp
scripting/scriptengine/qtbindings/UiToolsUiLoader.cpp
)

set(scriptconsole_SRCS
scripting/scriptconsole/CompletionModel.cpp
scripting/scriptconsole/ScriptConsole.cpp
Expand Down Expand Up @@ -605,6 +626,7 @@ set(amaroklib_LIB_SRCS
${libplaylistbrowser_SRCS}
${libplaylistmanager_SRCS}
${dbus_SRCS}
${qtbindings_SRCS}
${scriptengine_SRCS}
${scriptconsole_SRCS}
${libstatusbar_SRCS}
Expand Down Expand Up @@ -764,7 +786,7 @@ if( LIBOFA_FOUND AND AVCODEC_FOUND AND AVFORMAT_FOUND AND AVUTIL_FOUND )
musicbrainz/MusicDNSAudioDecoder.cpp
musicbrainz/MusicDNSFinder.cpp
musicbrainz/MusicDNSXmlParser.cpp
)
)
endif()

qt5_add_dbus_adaptor(
Expand Down Expand Up @@ -823,7 +845,6 @@ target_link_libraries(amaroklib
KF5::ThreadWeaver
KF5::WidgetsAddons
KF5::WindowSystem
${QT_QTSCRIPTTOOLS_LIBRARY}
Qt5::Gui
Qt5::Qml
Qt5::Quick
Expand All @@ -844,6 +865,11 @@ if( Qt5WebEngine_FOUND )
add_definitions( -DWITH_QT_WEBENGINE )
endif()

if( Qt5UiTools_FOUND )
target_link_libraries( amaroklib Qt5::UiTools )
add_definitions( -DWITH_QT_UITOOLS )
endif()

include_directories(${TAGLIB_INCLUDES})
add_definitions(${TAGLIB_CFLAGS})
target_link_libraries(amaroklib ${TAGLIB_LIBRARIES})
Expand Down
27 changes: 5 additions & 22 deletions src/configdialog/dialogs/ScriptsConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -249,15 +249,16 @@ ScriptsConfig::slotUninstallScript()
return;

ScriptItem *item = ScriptManager::instance()->m_scripts.value( m_selector->currentItem() );
/*
int response = KMessageBox::warningContinueCancel( this, i18n( "You are advised to only uninstall manually "
"installed scripts using this button." ) );
if( response == KMessageBox::Cancel )
return;
*/

QRegExp regex( "(.*apps/amarok/scripts/.+/).*script.spec" );
regex.indexIn( item->info().entryPath() );
qDebug() << "About to remove folder " << regex.cap( 1 );
removeDir( regex.cap( 1 ) );
QFileInfo specFile( item->specPath() );
qDebug() << "About to remove folder " << specFile.path();
QDir( specFile.path() ).removeRecursively();
m_timer->start();
}

Expand Down Expand Up @@ -288,21 +289,3 @@ ScriptsConfig::findSpecFile( const KArchiveDirectory *dir ) const
}
return nullptr;
}

void
ScriptsConfig::removeDir( const QString &dirPath ) const
{
QDir dir( dirPath );
if( dir.exists( dirPath ) )
{
foreach( const QFileInfo &info, dir.entryInfoList( QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files ) )
{
if( info.isDir() )
removeDir( info.absoluteFilePath() );
else
QFile::remove( info.absoluteFilePath() );
}
dir.rmdir( dirPath );
}
}

1 change: 0 additions & 1 deletion src/configdialog/dialogs/ScriptsConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ private Q_SLOTS:

private:
const KArchiveFile *findSpecFile( const KArchiveDirectory *dir ) const;
void removeDir( const QString &dirPath ) const;

bool m_configChanged;
ScriptSelector *m_selector;
Expand Down
131 changes: 131 additions & 0 deletions src/scripting/scriptengine/AmarokLyricsScript.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
/****************************************************************************************
* Copyright (c) 2008 Leo Franchi <lfranchi@kde.org> *
* Copyright (c) 2008 Peter ZHOU <peterzhoulei@gmail.com> *
* *
* 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, see <http://www.gnu.org/licenses/>. *
****************************************************************************************/

#define DEBUG_PREFIX "AmarokLyricsScript"

#include "AmarokLyricsScript.h"

#include "EngineController.h"
#include "scripting/scriptmanager/ScriptManager.h"
#include "lyrics/LyricsManager.h"
#include "core/meta/Meta.h"
#include "core/support/Amarok.h"
#include "core/support/Debug.h"

#include <QApplication>
#include <QByteArray>
#include <QJSEngine>
#include <QTextCodec>

using namespace AmarokScript;


AmarokLyricsScript::AmarokLyricsScript( QJSEngine *engine )
: QObject( engine )
{
QJSValue scriptObject = engine->newQObject( this );
engine->globalObject().property( "Amarok" ).setProperty( "Lyrics", scriptObject );
connect( ScriptManager::instance(), &ScriptManager::fetchLyrics,
this, &AmarokLyricsScript::fetchLyrics );
}

void
AmarokLyricsScript::showLyrics( const QString &lyrics ) const
{
DEBUG_BLOCK
Meta::TrackPtr track = The::engineController()->currentTrack();
if( !track )
return;
LyricsManager::instance()->lyricsResult( lyrics.toUtf8(), track ) ;
}

void
AmarokLyricsScript::showLyricsHtml( const QString &lyrics ) const
{
showLyrics( lyrics );
/*
DEBUG_BLOCK
Meta::TrackPtr track = The::engineController()->currentTrack();
if( !track )
return;
LyricsManager::instance()->lyricsResultHtml( lyrics, false );
*/
}

void
AmarokLyricsScript::showLyricsError( const QString &error ) const
{
/*
DEBUG_BLOCK
LyricsManager::instance()->lyricsError( error );
*/
Q_UNUSED( error );
}


void
AmarokLyricsScript::showLyricsNotFound( const QString &msg ) const
{
/*
DEBUG_BLOCK
LyricsManager::instance()->lyricsNotFound( msg );
*/
Q_UNUSED( msg );
}


QString
AmarokLyricsScript::escape( const QString &str )
{
return str.toHtmlEscaped();
}

void
AmarokLyricsScript::setLyricsForTrack( const QString &trackUrl, const QString &lyrics ) const
{
/* TODO - convert method invocation below
LyricsManager::instance()->setLyricsForTrack( trackUrl, lyrics );
*/
}

QString
AmarokLyricsScript::toUtf8( const QByteArray &lyrics, const QString &encoding )
{
QTextCodec* codec = QTextCodec::codecForName( encoding.toUtf8() );
if( !codec )
return QString();
return codec->toUnicode( lyrics );
}

QString
AmarokLyricsScript::QStringtoUtf8( const QString &lyrics, const QString &encoding )
{
QTextCodec* codec = QTextCodec::codecForName( encoding.toUtf8() );
if( !codec )
return QString();
return codec->toUnicode( lyrics.toLatin1() );
}

QByteArray
AmarokLyricsScript::fromUtf8( const QString &str, const QString &encoding )
{
QTextCodec* codec = QTextCodec::codecForName( encoding.toUtf8() );
if( !codec )
return QByteArray();

return codec->fromUnicode( str );
}
56 changes: 56 additions & 0 deletions src/scripting/scriptengine/AmarokLyricsScript.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/****************************************************************************************
* Copyright (c) 2008 Leo Franchi <lfranchi@kde.org> *
* Copyright (c) 2008 Peter ZHOU <peterzhoulei@gmail.com> *
* *
* 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, see <http://www.gnu.org/licenses/>. *
****************************************************************************************/

#ifndef AMAROK_LYRICS_SCRIPT_H
#define AMAROK_LYRICS_SCRIPT_H

#include "core/meta/forward_declarations.h"

#include <QObject>

class QJSEngine;
class QByteArray;

namespace AmarokScript
{
// SCRIPTDOX Amarok.Lyrics
class AmarokLyricsScript : public QObject
{
Q_OBJECT

public:
explicit AmarokLyricsScript( QJSEngine* scriptEngine );

Q_INVOKABLE void showLyrics( const QString& lyrics ) const;

Q_INVOKABLE void showLyricsHtml( const QString& lyrics ) const;
Q_INVOKABLE void showLyricsError( const QString& error ) const;
Q_INVOKABLE void showLyricsNotFound( const QString& msg ) const;

Q_INVOKABLE QString escape( const QString& str );

Q_INVOKABLE void setLyricsForTrack( const QString& trackUrl , const QString& lyrics ) const;
Q_INVOKABLE QString toUtf8( const QByteArray& lyrics, const QString& encoding = "UTF-8" );
Q_INVOKABLE QString QStringtoUtf8( const QString& lyrics, const QString& encoding = "UTF-8" );
Q_INVOKABLE QByteArray fromUtf8( const QString& str, const QString& encoding );

Q_SIGNALS:
void fetchLyrics( const QString& artist, const QString& title, const QString&, Meta::TrackPtr );
};
}

#endif
29 changes: 8 additions & 21 deletions src/scripting/scriptengine/AmarokWindowScript.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,45 +86,32 @@ AmarokWindowScript::AmarokWindowScript( AmarokScriptEngine* scriptEngine )
}

void
AmarokWindowScript::addToolsMenu( const QString &name )
AmarokWindowScript::addToolsMenu( QMenu *menu )
{
if( m_customMenus.contains( name ) )
return;

QMenu *menu = new QMenu( name );
m_customMenus.insert( name, menu );
m_toolsMenu->addMenu( menu );
QJSValue scriptMenu = m_scriptEngine->newQObject( menu );
m_scriptEngine->globalObject().property( QStringLiteral("Amarok") ).property( QStringLiteral("Window") ).setProperty( name, scriptMenu );
m_toolsMenu.data()->addMenu( menu );
}

void
AmarokWindowScript::addSettingsMenu( const QString &name )
AmarokWindowScript::addSettingsMenu( QMenu *menu )
{
if( m_customMenus.contains( name ) )
return;
m_settingsMenu.data()->addMenu( menu );

QMenu *menu = new QMenu( name );
m_customMenus.insert( name, menu );
m_settingsMenu->addMenu( menu );
QJSValue scriptMenu = m_scriptEngine->newQObject( menu );
m_scriptEngine->globalObject().property( QStringLiteral("Amarok") ).property( QStringLiteral("Window") ).setProperty( name, scriptMenu );
}

bool
AmarokWindowScript::addToolsAction( const QString &id, const QString &actionName, const QString &icon )
AmarokWindowScript::addToolsMenu( const QString &id, const QString &menuTitle, const QString &icon )
{
return addMenuAction( m_toolsMenu, id, actionName, QStringLiteral("ToolsMenu"), icon );
return addMenuAction( m_toolsMenu, id, menuTitle, QStringLiteral("ToolsMenu"), icon );
}

void
AmarokWindowScript::addToolsSeparator()
{
m_toolsMenu->addSeparator();
m_toolsMenu.data()->addSeparator();
}

bool
AmarokWindowScript::addSettingsAction( const QString &id, const QString &actionName, const QString &icon )
AmarokWindowScript::addSettingsMenu( const QString &id, const QString &actionName, const QString &icon )
{
return addMenuAction( m_settingsMenu, id, actionName, QStringLiteral("SettingsMenu"), icon );
}
Expand Down

0 comments on commit 853adf5

Please sign in to comment.