File indexing completed on 2024-04-21 04:35:58

0001 /***************************************************************************
0002 *   Copyright 2007 Niko Sams <niko.sams@gmail.com>                        *
0003 *                                                                         *
0004 *   This program is free software; you can redistribute it and/or modify  *
0005 *   it under the terms of the GNU General Public License as published by  *
0006 *   the Free Software Foundation; either version 2 of the License, or     *
0007 *   (at your option) any later version.                                   *
0008 *                                                                         *
0009 ***************************************************************************/
0010 #include "uploadprofilemodel.h"
0011 
0012 #include <QUrl>
0013 
0014 #include <KConfigGroup>
0015 #include <ksettings/dispatcher.h>
0016 
0017 #include <interfaces/iproject.h>
0018 
0019 #include "uploadprofileitem.h"
0020 
0021 UploadProfileModel::UploadProfileModel(QObject* parent)
0022     : QStandardItemModel(parent)
0023 {
0024     KSettings::Dispatcher::registerComponent(QStringLiteral("kdevupload"), this, "revert");
0025 }
0026 
0027 bool UploadProfileModel::removeRow(int row, const QModelIndex & parent)
0028 {
0029     UploadProfileItem* i = uploadItem(row);
0030     if (i && !i->profileNr().isEmpty()) {
0031         m_deltedProfileNrs << i->profileNr();
0032     }
0033     return QStandardItemModel::removeRow(row, parent);
0034 }
0035 
0036 UploadProfileItem* UploadProfileModel::uploadItem(int row, int column) const
0037 {
0038     QStandardItem* i = item(row, column);
0039     if (i) {
0040         return dynamic_cast<UploadProfileItem*>(i);
0041     }
0042     return nullptr;
0043 }
0044 UploadProfileItem* UploadProfileModel::uploadItem(const QModelIndex& index) const
0045 {
0046     QStandardItem* i = itemFromIndex(index);
0047     if (i) {
0048         return dynamic_cast<UploadProfileItem*>(i);
0049     }
0050     return nullptr;
0051 }
0052 void UploadProfileModel::setProject(KDevelop::IProject* project)
0053 {
0054     m_project = project;
0055     revert();
0056 }
0057 KDevelop::IProject* UploadProfileModel::project()
0058 {
0059     return m_project;
0060 }
0061 
0062 void UploadProfileModel::revert()
0063 {
0064     KConfigGroup group = m_project->projectConfiguration()->group("Upload");
0065     QString defProfile = group.readEntry("default", QString());
0066     int row = 0;
0067     Q_FOREACH (QString g, group.groupList()) {
0068         if (g.startsWith("Profile")) {
0069             QUrl url = group.group(g).readEntry("url", QUrl());
0070             QUrl localUrl = group.group(g).readEntry("localUrl", QUrl());
0071             QString name = group.group(g).readEntry("name", QString());
0072             UploadProfileItem* i = uploadItem(row);
0073             if (!i) {
0074                 i = new UploadProfileItem();
0075                 insertRow(row, i);
0076             }
0077             i->setText(name);
0078             i->setUrl(url);
0079             i->setLocalUrl(localUrl);
0080             i->setProfileNr(g.mid(7)); //group-name
0081             i->setDefault(i->profileNr() == defProfile);
0082             ++row;
0083         }
0084     }
0085     for (int i = row; i < rowCount(); ++i) {
0086         qDeleteAll(takeRow(i));
0087     }
0088 }
0089 
0090 bool UploadProfileModel::submit()
0091 {
0092     KConfigGroup group = m_project->projectConfiguration()->group("Upload");
0093     Q_FOREACH (QString i, m_deltedProfileNrs) {
0094         group.group("Profile" + i).deleteGroup();
0095     }
0096 
0097     int maxProfileNr = 0;
0098     for (int i = 0; i < rowCount(); i++) {
0099         UploadProfileItem* item = uploadItem(i);
0100         if (item) {
0101             maxProfileNr = qMax(item->profileNr().toInt(), maxProfileNr);
0102         }
0103     }
0104     QString defaultProfileNr;
0105     for (int i = 0; i < rowCount(); i++) {
0106         UploadProfileItem* item = uploadItem(i);
0107         if (item) {
0108             if (item->profileNr().isEmpty()) {
0109                 item->setProfileNr(QString::number(++maxProfileNr));
0110             }
0111             KConfigGroup profileGroup = group.group("Profile" + item->profileNr());
0112             profileGroup.writeEntry("url", item->url().toString());
0113             profileGroup.writeEntry("localUrl", item->localUrl().toString());
0114             profileGroup.writeEntry("name", item->text());
0115             if (item->isDefault()) {
0116                 defaultProfileNr = item->profileNr();
0117             }
0118         }
0119     }
0120     group.writeEntry("default", defaultProfileNr);
0121     return true;
0122 }
0123 
0124 
0125 // kate: space-indent on; indent-width 4; tab-width 4; replace-tabs on