diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8b39f8d..e822cac 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,106 +1,100 @@
-PROJECT(upload)
+project(upload)
set(VERSION_MAJOR 1)
set(VERSION_MINOR 9)
set(VERSION_PATCH 90)
# KDevplatform dependency version
set( KDEVPLATFORM_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" )
configure_file( "${upload_SOURCE_DIR}/version.h.cmake" "${upload_BINARY_DIR}/version.h" @ONLY )
cmake_minimum_required(VERSION 2.8.12)
find_package (ECM 0.0.9 REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${upload_SOURCE_DIR}/cmake/)
include(KDECompilerSettings NO_POLICY_SCOPE)
include(ECMAddTests)
include(KDEInstallDirs)
include(KDECMakeSettings)
include(FeatureSummary)
set(QT_MIN_VERSION "5.5.0")
find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED Core Widgets)
set(KF5_DEP_VERSION "5.15.0")
find_package(KF5 ${KF5_DEP_VERSION} REQUIRED COMPONENTS TextEditor I18n KCMUtils JobWidgets Service Parts KIO CoreAddons ItemModels)
find_package(KDevPlatform ${KDEVPLATFORM_VERSION} REQUIRED)
include_directories(${KDEVPLATFORM_INCLUDE_DIR})
include_directories(
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
)
add_subdirectory(tests)
#plugin
set(kdevupload_PART_SRCS
kdevuploadplugin.cpp
allprofilesmodel.cpp
profilesfiletree.cpp
uploaddialog.cpp
uploadjob.cpp
uploadprofiledlg.cpp
uploadprofileitem.cpp
uploadprofilemodel.cpp
uploadprojectmodel.cpp
)
set(kdevupload_UI
uploaddialog.ui
uploadprofiledlg.ui
)
-add_library(kdevupload_PART_SRCS ${kdevupload_UI})
-add_library(kdevupload MODULE ${kdevupload_PART_SRCS})
+add_library(kdevupload_PART_SRCS ${kdevupload_UI})
-configure_file(kdevupload.desktop.cmake ${CMAKE_CURRENT_BINARY_DIR}/kdevupload.desktop)
-kcoreaddons_desktop_to_json(kdevupload ${CMAKE_CURRENT_BINARY_DIR}/kdevupload.desktop)
+qt5_add_resources(kdevupload_PART_SRCS kdevupload.qrc)
+kdevplatform_add_plugin(kdevupload JSON kdevupload.json SOURCES ${kdevupload_PART_SRCS})
target_link_libraries(kdevupload
KDev::Interfaces
KDev::Project
KDev::Serialization
KF5::JobWidgets
KF5::KCMUtils
KF5::KIOCore
KF5::KIOFileWidgets
KF5::KIOWidgets
KF5::KIONTLM
KF5::CoreAddons
)
-install(TARGETS kdevupload DESTINATION ${PLUGIN_INSTALL_DIR}/kdevplatform/${KDEV_PLUGIN_VERSION})
-
-install(FILES kdevupload.rc DESTINATION ${DATA_INSTALL_DIR}/kdevupload)
-
-
#preferences-plugin
set(uploadpreferences_PART_SRCS
uploadpreferences.cpp
uploadprofilemodel.cpp
uploadprofileitem.cpp
uploadprofiledlg.cpp
)
-qt5_wrap_ui(uploadpreferences_PART_SRCS uploadpreferences.ui uploadprofiledlg.ui uploaddialog.ui)
+ki18n_wrap_ui(uploadpreferences_PART_SRCS uploadpreferences.ui uploadprofiledlg.ui uploaddialog.ui)
add_library(uploadpreferences_PART_SRCS uploadpreferences.ui uploadprofiledlg.ui uploaddialog.ui)
add_library(kcm_kdev_upload ${uploadpreferences_PART_SRCS})
target_link_libraries(kcm_kdev_upload
KDev::Interfaces
KDev::Util
KF5::I18n
KF5::KCMUtils
KF5::Service
KF5::Parts
KF5::KIOCore
KF5::KIOFileWidgets
KF5::KIOWidgets
KF5::KIONTLM
)
install(TARGETS kcm_kdev_upload DESTINATION ${PLUGIN_INSTALL_DIR})
install(FILES kcm_kdev_upload.desktop DESTINATION ${SERVICES_INSTALL_DIR})
diff --git a/kdevupload.json b/kdevupload.json
new file mode 100644
index 0000000..3bff80e
--- /dev/null
+++ b/kdevupload.json
@@ -0,0 +1,85 @@
+{
+ "GenericName": "Upload Plugin",
+ "GenericName[bs]": "Pošalji dodatak",
+ "GenericName[ca@valencia]": "Connector de pujada",
+ "GenericName[ca]": "Connector de pujada",
+ "GenericName[cs]": "Modul odesílání",
+ "GenericName[de]": "Hochladen-Modul",
+ "GenericName[es]": "Complemento de envío",
+ "GenericName[et]": "Üleslaadimise plugin",
+ "GenericName[fr]": "Module externe d'envoi",
+ "GenericName[ga]": "Breiseán Uasluchtaithe",
+ "GenericName[gl]": "Complemento de envío",
+ "GenericName[hu]": "Feltöltés bővítmény",
+ "GenericName[it]": "Invia estensione",
+ "GenericName[nl]": "Upload-plugin",
+ "GenericName[pl]": "Wtyczka wysyłania",
+ "GenericName[pt]": "'Plugin' de Envio",
+ "GenericName[pt_BR]": "Plugin de envio",
+ "GenericName[sk]": "Nahrať plugin",
+ "GenericName[sv]": "Insticksprogram för uppladdning",
+ "GenericName[tr]": "Yükleme Eklentisi",
+ "GenericName[uk]": "Додаток вивантаження",
+ "GenericName[x-test]": "xxUpload Pluginxx",
+ "KPlugin": {
+ "Description": "Upload project files to a remote server",
+ "Description[bs]": "Pošalji projektne datoteke na udaljeni server",
+ "Description[ca@valencia]": "Puja els fitxers de projecte a un servidor remot",
+ "Description[ca]": "Puja els fitxers de projecte a un servidor remot",
+ "Description[cs]": "Odeslat soubory projektu na vzdálený server",
+ "Description[de]": "Projektdateien auf einen entfernten Server hochladen",
+ "Description[es]": "Enviar archivos de proyectos a un servidor remoto",
+ "Description[et]": "Projektifailide üleslaadimine võrguserverisse",
+ "Description[fr]": "Envoie des fichiers de projets à un serveur distant",
+ "Description[ga]": "Uasluchtaigh comhaid tionscadail go cianfhreastalaí",
+ "Description[gl]": "Enviar ficheiros de proxecto a un servidor remoto.",
+ "Description[hu]": "Projektfájlok feltöltése egy távoli kiszolgálóra",
+ "Description[it]": "Invia i file del progetto a un server remoto",
+ "Description[nl]": "Projectbestanden naar een server op afstand uploaden",
+ "Description[pl]": "Wysyła pliki projektu na zdalny serwer",
+ "Description[pt]": "Enviar os ficheiros do projecto para um servidor remoto",
+ "Description[pt_BR]": "Enviar os arquivos do projeto para um servidor remoto",
+ "Description[sk]": "Nahrať súbory projektu na vzdialený server",
+ "Description[sv]": "Ladda upp projektfiler till en fjärrserver",
+ "Description[tr]": "Proje dosyalraını uzak bir sunucuya yükleyin",
+ "Description[uk]": "Вивантаження файлів проекту на віддалений сервер",
+ "Description[x-test]": "xxUpload project files to a remote serverxx",
+ "Icon": "go-up",
+ "Id": "KDevUpload",
+ "Name": "KDevUpload",
+ "Name[ast]": "KDevUpload",
+ "Name[bs]": "KDevUpload",
+ "Name[ca@valencia]": "KDevUpload",
+ "Name[ca]": "KDevUpload",
+ "Name[cs]": "KDevUpload",
+ "Name[de]": "KDevUpload",
+ "Name[es]": "KDevUpload",
+ "Name[et]": "KDevUpload",
+ "Name[fr]": "KDevUpload",
+ "Name[ga]": "KDevUpload",
+ "Name[gl]": "KDevUpload",
+ "Name[hu]": "KDevUpload",
+ "Name[it]": "KDevUpload",
+ "Name[nl]": "KDevUpload",
+ "Name[pl]": "KDevUpload",
+ "Name[pt]": "KDevUpload",
+ "Name[pt_BR]": "KDevUpload",
+ "Name[sk]": "KDevUpload",
+ "Name[sv]": "Kdevupload",
+ "Name[tr]": "KDevUpload",
+ "Name[uk]": "KDevUpload",
+ "Name[x-test]": "xxKDevUploadxx",
+ "ServiceTypes": [
+ "KDevelop/Plugin"
+ ]
+ },
+ "X-KDevelop-Args": "",
+ "X-KDevelop-Category": "Global",
+ "X-KDevelop-IRequired": "org.kdevelop.IOutputView",
+ "X-KDevelop-LoadMode": "AlwaysOn",
+ "X-KDevelop-Mode": "GUI",
+ "X-KDevelop-Plugin-BugsEmailAddress": "niko.sams@gmail.com",
+ "X-KDevelop-Plugin-Copyright": "(C) by Niko Sams",
+ "X-KDevelop-Plugin-Version": "1",
+ "X-KDevelop-Version": "27"
+}
diff --git a/kdevupload.qrc b/kdevupload.qrc
new file mode 100644
index 0000000..f83693d
--- /dev/null
+++ b/kdevupload.qrc
@@ -0,0 +1,6 @@
+
+
+
+ kdevupload.rc
+
+
diff --git a/kdevuploadplugin.cpp b/kdevuploadplugin.cpp
index fd45b11..c2e3b41 100644
--- a/kdevuploadplugin.cpp
+++ b/kdevuploadplugin.cpp
@@ -1,368 +1,368 @@
/***************************************************************************
* Copyright 2007 Niko Sams *
* *
* 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. *
* *
***************************************************************************/
#include "kdevuploadplugin.h"
#include
#include
#include
#include
#include
#include "kdevuploaddebug.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "uploaddialog.h"
#include "profilesfiletree.h"
#include "uploadjob.h"
#include "uploadprojectmodel.h"
#include "uploadprofilemodel.h"
#include "uploadprofileitem.h"
#include "allprofilesmodel.h"
#include
#include "version.h"
K_PLUGIN_FACTORY_WITH_JSON(UploadFactory, "kdevupload.json", registerPlugin(); )
Q_LOGGING_CATEGORY(KDEVUPLOAD, "kdev.upload");
class FilesTreeViewFactory: public KDevelop::IToolViewFactory{
public:
FilesTreeViewFactory(UploadPlugin* plugin, AllProfilesModel* model)
: m_plugin(plugin), m_allProfilesModel(model) {}
virtual QWidget* create(QWidget *parent = 0)
{
ProfilesFileTree* w = new ProfilesFileTree(m_plugin, parent);
w->setModel(m_allProfilesModel);
return w;
}
virtual QString id() const
{
return "org.quanta.UploadFactory";
}
virtual Qt::DockWidgetArea defaultPosition()
{
return Qt::RightDockWidgetArea;
}
private:
UploadPlugin* m_plugin;
AllProfilesModel* m_allProfilesModel;
};
UploadPlugin::UploadPlugin(QObject *parent, const QVariantList &)
-: KDevelop::IPlugin(QStringLiteral("uploadplugin"), parent), m_outputModel(0), m_filesTreeViewFactory(0)
+: KDevelop::IPlugin(QStringLiteral("kdevupload"), parent), m_outputModel(0), m_filesTreeViewFactory(0)
{
connect(core()->projectController(), SIGNAL(projectOpened(KDevelop::IProject*)),
this, SLOT(projectOpened(KDevelop::IProject*)));
connect(core()->projectController(), SIGNAL(projectClosed(KDevelop::IProject*)),
this, SLOT(projectClosed(KDevelop::IProject*)));
connect(core()->documentController(), SIGNAL(documentActivated(KDevelop::IDocument*)),
SLOT(documentActivated(KDevelop::IDocument*)));
connect(core()->documentController(), SIGNAL(documentClosed(KDevelop::IDocument*)),
SLOT(documentClosed(KDevelop::IDocument*)));
- setXMLFile("kdevupload.rc");
+ setXMLFile( QStringLiteral( "kdevupload.rc" ) );
m_allProfilesModel = new AllProfilesModel(this);
connect(m_allProfilesModel, SIGNAL(rowsInserted(QModelIndex, int, int)),
this, SLOT(profilesRowChanged()));
connect(m_allProfilesModel, SIGNAL(rowsRemoved(QModelIndex, int, int)),
this, SLOT(profilesRowChanged()));
connect(m_allProfilesModel, SIGNAL(modelReset()),
this, SLOT(profilesRowChanged()));
setupActions();
}
UploadPlugin::~UploadPlugin()
{
}
void UploadPlugin::setupActions()
{
m_signalMapper = new QSignalMapper(this);
connect(m_signalMapper, SIGNAL(mapped(QObject*)),
this, SLOT(projectUpload(QObject*)));
m_projectUploadActionMenu = new KActionMenu(i18n("&Upload Project"), this);
m_projectUploadActionMenu->setIcon(QIcon::fromTheme("go-up"));
m_projectUploadActionMenu->setToolTip(i18n("Upload project"));
m_projectUploadActionMenu->setVisible(false); //make it visible when there are upload profiles
actionCollection()->addAction("project_upload", m_projectUploadActionMenu);
m_quickUploadCurrentFile = actionCollection()->addAction("quick_upload_current_file");
m_quickUploadCurrentFile->setText( i18n("&Quick Upload Current File") );
m_quickUploadCurrentFile->setIcon(QIcon::fromTheme("go-up"));
m_projectUploadActionMenu->setEnabled(false);
connect(m_quickUploadCurrentFile, SIGNAL(triggered(bool)), SLOT(quickUploadCurrentFile()));
}
void UploadPlugin::projectOpened(KDevelop::IProject* project)
{
UploadProfileModel* model = new UploadProfileModel();
model->setProject(project);
m_projectProfileModels.insert(project, model);
m_allProfilesModel->addModel(model);
documentActivated(core()->documentController()->activeDocument());
}
void UploadPlugin::projectClosed(KDevelop::IProject* project)
{
QAction* action = m_projectUploadActions.value(project);
if (action) {
m_projectUploadActions.remove(project);
m_projectUploadActionMenu->removeAction(action);
delete action;
}
UploadProfileModel* model = m_projectProfileModels.value(project);
if (model) {
m_projectProfileModels.remove(project);
m_allProfilesModel->removeModel(model);
delete model;
}
}
void UploadPlugin::documentActivated(KDevelop::IDocument* doc)
{
if (!doc) {
m_quickUploadCurrentFile->setEnabled(false);
return;
}
KDevelop::IProject* project = core()->projectController()->findProjectForUrl(doc->url());
if (!project) {
m_quickUploadCurrentFile->setEnabled(false);
return;
}
QList files = project->filesForPath(KDevelop::IndexedString(doc->url()));
if (files.isEmpty()) {
m_quickUploadCurrentFile->setEnabled(false);
return;
}
UploadProfileModel* profileModel = m_projectProfileModels.value(project);
if (!profileModel || !profileModel->rowCount()) {
m_quickUploadCurrentFile->setEnabled(false);
return;
}
m_quickUploadCurrentFile->setEnabled(true);
}
void UploadPlugin::documentClosed(KDevelop::IDocument* )
{
m_quickUploadCurrentFile->setEnabled(false);
}
void UploadPlugin::projectUpload(QObject* p)
{
KDevelop::IProject* project = qobject_cast(p);
if (project) {
UploadDialog dialog(project, this, core()->uiController()->activeMainWindow());
UploadProfileModel* model = m_projectProfileModels.value(project);
dialog.setProfileModel(model);
dialog.exec();
}
}
void UploadPlugin::unload()
{
}
KDevelop::ContextMenuExtension UploadPlugin::contextMenuExtension(KDevelop::Context* context, QWidget* parent)
{
if (context->type() == KDevelop::Context::ProjectItemContext) {
KDevelop::ContextMenuExtension cmExtension;
KDevelop::ProjectItemContext *itemCtx = dynamic_cast(context);
if (itemCtx) {
m_ctxUrlList.clear();
Q_FOREACH (KDevelop::ProjectBaseItem* _item, itemCtx->items()) {
if (_item->folder() || _item->file()) {
m_ctxUrlList << _item;
}
}
if (!m_ctxUrlList.isEmpty()) {
KDevelop::IProject* project = m_ctxUrlList.at(0)->project();
UploadProfileModel* model = m_projectProfileModels.value(project);
if (model && model->rowCount()) {
QAction *action;
action = new QAction(i18n("Upload..."), parent);
action->setIcon(QIcon::fromTheme("go-up"));
connect(action, SIGNAL(triggered()), this, SLOT(upload()));
cmExtension.addAction(KDevelop::ContextMenuExtension::FileGroup, action);
action = new QAction(i18n("Quick Upload"), parent);
action->setIcon(QIcon::fromTheme("go-up"));
connect(action, SIGNAL(triggered()), this, SLOT(quickUpload()));
cmExtension.addAction(KDevelop::ContextMenuExtension::FileGroup, action);
return cmExtension;
}
}
}
}
return KDevelop::IPlugin::contextMenuExtension(context, parent);
}
void UploadPlugin::upload()
{
if (m_ctxUrlList.isEmpty()) return;
KDevelop::IProject* project = m_ctxUrlList.at(0)->project();
UploadDialog dialog(project, this, core()->uiController()->activeMainWindow());
UploadProfileModel* model = m_projectProfileModels.value(project);
dialog.setProfileModel(model);
dialog.setRootItem(m_ctxUrlList.at(0));
dialog.exec();
}
void UploadPlugin::quickUpload()
{
if (m_ctxUrlList.isEmpty()) return;
KDevelop::IProject* project = m_ctxUrlList.at(0)->project();
UploadProjectModel* model = new UploadProjectModel(project);
model->setSourceModel(project->projectItem()->model());
model->setRootItem(m_ctxUrlList.at(0));
UploadProfileModel* profileModel = m_projectProfileModels.value(project);
for (int i = 0; i < profileModel->rowCount(); i++) {
UploadProfileItem* item = profileModel->uploadItem(i);
if (item->isDefault()) {
KConfigGroup c = item->profileConfigGroup();
if (c.isValid()) {
model->setProfileConfigGroup(c);
}
break;
}
}
UploadJob* job = new UploadJob(project, model, core()->uiController()->activeMainWindow());
job->setQuickUpload(true);
job->setOutputModel(outputModel());
job->start();
}
void UploadPlugin::quickUploadCurrentFile()
{
KDevelop::IDocument* doc = core()->documentController()->activeDocument();
if (!doc) return;
KDevelop::IProject* project = KDevelop::ICore::self()->projectController()->findProjectForUrl(doc->url());
if (!project) return;
QList files = project->filesForPath(KDevelop::IndexedString(doc->url()));
if (files.isEmpty()) return;
UploadProjectModel* model = new UploadProjectModel(project);
model->setSourceModel(project->projectItem()->model());
model->setRootItem(files.first());
UploadProfileModel* profileModel = m_projectProfileModels.value(project);
for (int i = 0; i < profileModel->rowCount(); i++) {
UploadProfileItem* item = profileModel->uploadItem(i);
if (item->isDefault()) {
KConfigGroup c = item->profileConfigGroup();
if (c.isValid()) {
model->setProfileConfigGroup(c);
}
break;
}
}
UploadJob* job = new UploadJob(project, model, core()->uiController()->activeMainWindow());
job->setQuickUpload(true);
job->setOutputModel(outputModel());
job->start();
}
QStandardItemModel* UploadPlugin::outputModel()
{
if (m_outputModel) return m_outputModel;
IPlugin* plugin = core()->pluginController()->pluginForExtension( "org.kdevelop.IOutputView" );
Q_ASSERT(plugin);
if (plugin) {
KDevelop::IOutputView* view = plugin->extension();
int tvid = view->registerToolView(i18n("Upload"));
int id = view->registerOutputInToolView(tvid, i18n("Output"), KDevelop::IOutputView::AllowUserClose | KDevelop::IOutputView::AutoScroll);
m_outputModel = new QStandardItemModel(this);
view->setModel(id, m_outputModel);
view->setDelegate(id, new QItemDelegate(m_outputModel));
return m_outputModel;
}
return 0;
}
void UploadPlugin::profilesRowChanged()
{
if (m_allProfilesModel->rowCount()) {
if (!m_filesTreeViewFactory) {
m_filesTreeViewFactory = new FilesTreeViewFactory(this, m_allProfilesModel);
core()->uiController()->addToolView(i18n("Upload Profiles"), m_filesTreeViewFactory);
}
} else {
if (m_filesTreeViewFactory) {
core()->uiController()->removeToolView(m_filesTreeViewFactory);
m_filesTreeViewFactory = 0;
}
}
Q_FOREACH(UploadProfileModel* model, m_projectProfileModels) {
KDevelop::IProject* project = model->project();
if (model->rowCount()) {
if (!m_projectUploadActions.contains(project)) {
QAction* action = new QAction(project->name(), m_projectUploadActionMenu);
connect(action, SIGNAL(triggered()), m_signalMapper, SLOT(map()));
m_signalMapper->setMapping(action, project);
m_projectUploadActions.insert(project, action);
m_projectUploadActionMenu->addAction(action);
m_projectUploadActionMenu->setVisible(true);
}
} else {
if (m_projectUploadActions.contains(project)) {
QAction* action = m_projectUploadActions.value(project);
m_projectUploadActions.remove(project);
m_projectUploadActionMenu->removeAction(action);
m_signalMapper->removeMappings(action);
delete action;
}
}
}
if (m_projectUploadActions.isEmpty()) {
m_projectUploadActionMenu->setVisible(false);
}
}
#include "kdevuploadplugin.moc"
// kate: space-indent on; indent-width 4; tab-width 4; replace-tabs on