Changeset 2dffed3


Ignore:
Timestamp:
08/22/12 00:11:58 (10 years ago)
Author:
Philipp Spitzer <philipp@…>
Branches:
master, qt5
Children:
7680536
Parents:
ca20842
Message:

On the way to fix #45.

Location:
src
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • src/gui/conferenceeditor.cpp

    rca20842 r2dffed3  
    104104    UrlInputDialog url_input(this);
    105105    switch (url_input.exec()) {
    106     case UrlInputDialog::HaveUrl: emit haveConferenceUrl(url_input.url()); break;
    107     case UrlInputDialog::HaveFile: emit haveConferenceFile(url_input.url()); break;
     106    case UrlInputDialog::HaveUrl: emit haveConferenceUrl(url_input.url(), 0); break;
     107    case UrlInputDialog::HaveFile: emit haveConferenceFile(url_input.url(), 0); break;
    108108    case UrlInputDialog::Cancel: return;
    109109    }
     
    144144void ConferenceEditor::refreshClicked()
    145145{
    146     if (selected_id < 0) return;
     146    if (selected_id <= 0) return;
    147147    const Conference& selectedConf = Conference::getById(selected_id);
    148148    QString url = selectedConf.url();
     
    158158    // fetch
    159159    importStarted(); // just to show the progress bar
    160     emit haveConferenceUrl(url);
     160    emit haveConferenceUrl(url, selected_id);
    161161}
    162162
  • src/gui/conferenceeditor.h

    rca20842 r2dffed3  
    4848    void noneConferenceSelected();
    4949
    50     void haveConferenceUrl(const QString& url);
    51     void haveConferenceFile(const QString& path);
     50    void haveConferenceUrl(const QString& url, int conferenceId);
     51    void haveConferenceFile(const QString& path, int conferenceId);
    5252    void removeConferenceRequested(int id);
    5353    void changeUrlRequested(int, const QString&);
  • src/gui/mainwindow.cpp

    rca20842 r2dffed3  
    148148    Conference active = Conference::getById(confId);
    149149    if (active.url().isEmpty()) return;
    150     importFromNetwork(active.url());
     150    importFromNetwork(active.url(), confId);
    151151    setEnabled(false);
    152152}
     
    318318    ConferenceEditor dialog(conferenceModel, this);
    319319
    320     connect(&dialog, SIGNAL(haveConferenceUrl(const QString&)), SLOT(importFromNetwork(const QString&)));
    321     connect(&dialog, SIGNAL(haveConferenceFile(const QString&)), SLOT(importFromFile(const QString&)));
     320    connect(&dialog, SIGNAL(haveConferenceUrl(const QString&, int)), SLOT(importFromNetwork(const QString&, int)));
     321    connect(&dialog, SIGNAL(haveConferenceFile(const QString&, int)), SLOT(importFromFile(const QString&, int)));
    322322    connect(&dialog, SIGNAL(removeConferenceRequested(int)), SLOT(removeConference(int)));
    323323    connect(&dialog, SIGNAL(changeUrlRequested(int, const QString&)),
     
    350350        if (!redirectUrl.isEmpty()) {
    351351            if (redirectUrl != aReply->request().url()) {
    352                 importFromNetwork(redirectUrl.toString());
     352                importFromNetwork(redirectUrl.toString(), aReply->request().attribute(QNetworkRequest::User).toInt());
    353353                return; // don't enable controls
    354354            } else {
     
    356356            }
    357357        } else {
    358             importData(aReply->readAll(), aReply->url().toEncoded());
     358            importData(aReply->readAll(), aReply->url().toEncoded(), aReply->request().attribute(QNetworkRequest::User).toInt());
    359359        }
    360360    }
     
    362362}
    363363
    364 void MainWindow::importData(const QByteArray &aData, const QString& url)
    365 {
    366     mXmlParser->parseData(aData, url);
    367 }
    368 
    369 void MainWindow::importFromNetwork(const QString& url)
     364void MainWindow::importData(const QByteArray &aData, const QString& url, int conferenceId)
     365{
     366    mXmlParser->parseData(aData, url, conferenceId);
     367}
     368
     369void MainWindow::importFromNetwork(const QString& url, int conferenceId)
    370370{
    371371    QNetworkRequest request;
    372372    request.setUrl(QUrl(url));
     373    request.setAttribute(QNetworkRequest::User, conferenceId);
    373374
    374375    mNetworkAccessManager->setProxy(QNetworkProxy::applicationProxy());
     
    376377}
    377378
    378 void MainWindow::importFromFile(const QString& filename)
     379void MainWindow::importFromFile(const QString& filename, int conferenceId)
    379380{
    380381    QFile file(filename);
     
    384385    }
    385386
    386     importData(file.readAll(), "");
     387    importData(file.readAll(), "", conferenceId);
    387388}
    388389
  • src/gui/mainwindow.h

    rca20842 r2dffed3  
    5555    // TODO: remove
    5656    void networkQueryFinished(QNetworkReply*);
    57     void importFromNetwork(const QString&);
    58     void importFromFile(const QString&);
     57    void importFromNetwork(const QString&, int conferenceId);
     58    void importFromFile(const QString&, int conferenceId);
    5959    void removeConference(int);
    6060    void changeConferenceUrl(int, const QString&);
     
    6666    void initTabs();
    6767    void clearTabs();
    68     void importData(const QByteArray &aData, const QString& url);
     68    void importData(const QByteArray &aData, const QString& url, int conferenceId);
    6969
    7070    QString saved_title;
  • src/sql/schedulexmlparser.cpp

    rca20842 r2dffed3  
    3333}
    3434
    35 void ScheduleXmlParser::parseData(const QByteArray &aData, const QString& url)
     35void ScheduleXmlParser::parseData(const QByteArray &aData, const QString& url, int conferenceId)
    3636{
    3737    QDomDocument document;
     
    4848    SqlEngine::beginTransaction();
    4949
    50     int confId = 0;
    5150    QString conference_title;
    5251    if (!scheduleElement.isNull())
     
    5756            emit(parsingScheduleBegin());
    5857            QHash<QString,QString> conference;
    59             conference["id"] = QString::number(0); // conference ID is assigned automatically, or obtained from the DB
     58            conference["id"] = conferenceId; // conference ID is assigned automatically if 0
    6059            conference["title"] = conferenceElement.firstChildElement("title").text();
    6160            conference["subtitle"] = conferenceElement.firstChildElement("subtitle").text();
     
    6867            conference["timeslot_duration"] = conferenceElement.firstChildElement("timeslot_duration").text(); // time
    6968            conference["url"] = url;
    70             SqlEngine::addConferenceToDB(conference);
    71             confId = conference["id"].toInt();
     69            SqlEngine::addConferenceToDB(conference, conferenceId);
     70            conferenceId = conference["id"].toInt();
    7271            conference_title = conference["title"];
    7372        }
     
    105104                        room["name"] = roomElement.attribute("name");
    106105                        room["event_id"] = eventElement.attribute("id");
    107                         room["conference_id"] = QString::number(confId,10);
     106                        room["conference_id"] = QString::number(conferenceId,10);
    108107                        SqlEngine::addRoomToDB(room);
    109108
     
    111110                        QHash<QString,QString> event;
    112111                        event["id"] = eventElement.attribute("id");;
    113                         event["conference_id"] = QString::number(confId, 10);
     112                        event["conference_id"] = QString::number(conferenceId, 10);
    114113                        event["start"] = eventElement.firstChildElement("start").text(); // time eg. 10:00
    115114                        event["date"] = dayElement.attribute("date"); // date eg. 2009-02-07
     
    126125                        SqlEngine::addEventToDB(event);
    127126                        // process persons' nodes
    128                         QList<QString> persons;
    129127                        QDomElement personsElement = eventElement.firstChildElement("persons");
    130128                        QDomNodeList personList = personsElement.elementsByTagName("person");
     
    134132                            person["name"] = personList.at(i).toElement().text();
    135133                            person["event_id"] = eventElement.attribute("id");
    136                             person["conference_id"] = QString::number(confId, 10);
    137                             //qDebug() << "adding Person: " << person["name"];
     134                            person["conference_id"] = QString::number(conferenceId, 10);
    138135                            SqlEngine::addPersonToDB(person);
    139136                        }
     
    146143                            link["url"] = linkList.at(i).toElement().attribute("href");
    147144                            link["event_id"] = eventElement.attribute("id");
    148                             link["conference_id"] = QString::number(confId, 10);
     145                            link["conference_id"] = QString::number(conferenceId, 10);
    149146                            SqlEngine::addLinkToDB(link);
    150147                        }
  • src/sql/schedulexmlparser.h

    rca20842 r2dffed3  
    3030
    3131    public slots:
    32         void parseData(const QByteArray &aData, const QString& url);
     32        void parseData(const QByteArray &aData, const QString& url, int conferenceId);
    3333
    3434    signals:
  • src/sql/sqlengine.cpp

    rca20842 r2dffed3  
    8787}
    8888
    89 void SqlEngine::addConferenceToDB(QHash<QString,QString> &aConference)
     89void SqlEngine::addConferenceToDB(QHash<QString,QString> &aConference, int conferenceId)
    9090{
    9191    QSqlDatabase db = QSqlDatabase::database();
     
    9393    if (db.isValid() && db.isOpen())
    9494    {
    95         int confId = 0;
    96         QList<Conference> confsList = Conference::getAll();
    97         if(confsList.count())
    98         {
    99             QListIterator<Conference> i(confsList);
    100             while (i.hasNext())
    101             {
    102                 Conference conf = i.next();
    103                 if( aConference["title"] == conf.title() )
    104                 {
    105                     confId = conf.id();
    106                     aConference["id"] = QString::number(confId);
    107                     break;
    108                 }
    109             }
    110         }
    111 
    112         if(!confId) // conference 'aConference' isn't in the table => insert
    113         {
    114             // HACK
    115             // When city is empty, assign a dummy value. We probably want to find a way to change the database scheme ...
    116             // cf. #32
    117             if (aConference["city"].isEmpty()) aConference["city"] = "n/a";
    118 
    119             QSqlQuery query(db);
     95        // HACK
     96        // When city is empty, assign a dummy value. We probably want to find a way to change the database scheme ...
     97        // cf. #32
     98        if (aConference["city"].isEmpty()) aConference["city"] = "n/a";
     99
     100        QSqlQuery query(db);
     101        if (conferenceId <= 0) // insert conference
     102        {
    120103            query.prepare("INSERT INTO CONFERENCE (title,url,subtitle,venue,city,start,end,days,"
    121104                                                    "day_change,timeslot_duration,active) "
     
    128111            query.bindValue(":end", QDateTime(QDate::fromString(aConference["end"],DATE_FORMAT),QTime(0,0),Qt::UTC).toTime_t());
    129112            query.bindValue(":day_change", -QTime::fromString(aConference["day_change"],TIME_FORMAT).secsTo(QTime(0,0)));
    130             query.bindValue(":day_change", -QTime::fromString(aConference["timeslot_duration"],TIME_FORMAT).secsTo(QTime(0,0)));
    131             query.bindValue(":active", confsList.count() > 0 ? 0 : 1);
     113            query.bindValue(":timeslot_duration", -QTime::fromString(aConference["timeslot_duration"],TIME_FORMAT).secsTo(QTime(0,0)));
     114            query.bindValue(":active", 1);
    132115            if (!query.exec()) qDebug() << "Could not execute query to insert a conference:" << query.lastError();
    133116            aConference["id"] = query.lastInsertId().toString(); // 'id' is assigned automatically
     117        }
     118        else // update conference
     119        {
     120            query.prepare("UPDATE CONFERENCE set title=:title, url=:url, subtitle=:subtitle, venue=:venue, city=:city, start=:start, end=:end, days=:days,"
     121                                                "day_change=:day_change, timeslot_duration=:timeslot_duration, active=:active "
     122                          "WHERE id=:id");
     123            foreach (QString prop_name, (QList<QString>() << "title" << "url" << "subtitle" << "venue" << "city" << "days")) {
     124                query.bindValue(QString(":") + prop_name, aConference[prop_name]);
     125            }
     126            query.bindValue(":start", QDateTime(QDate::fromString(aConference["start"],DATE_FORMAT),QTime(0,0),Qt::UTC).toTime_t());
     127            query.bindValue(":end", QDateTime(QDate::fromString(aConference["end"],DATE_FORMAT),QTime(0,0),Qt::UTC).toTime_t());
     128            query.bindValue(":day_change", -QTime::fromString(aConference["day_change"],TIME_FORMAT).secsTo(QTime(0,0)));
     129            query.bindValue(":timeslot_duration", -QTime::fromString(aConference["timeslot_duration"],TIME_FORMAT).secsTo(QTime(0,0)));
     130            query.bindValue(":active", 1);
     131            query.bindValue(":id", conferenceId);
     132            if (!query.exec()) qDebug() << "Could not execute query to update a conference:" << query.lastError();
     133            aConference["id"] = conferenceId;
    134134        }
    135135    }
  • src/sql/sqlengine.h

    rca20842 r2dffed3  
    3333        ~SqlEngine();
    3434        static void initialize();
    35         static void addConferenceToDB(QHash<QString,QString> &aConference);
     35        // if a conferneceId != 0 is given, the confernece is updated instead of inserted.
     36        static void addConferenceToDB(QHash<QString,QString> &aConference, int conferenceId);
    3637        static void addEventToDB(QHash<QString,QString> &aEvent);
    3738        static void addPersonToDB(QHash<QString,QString> &aPerson);
Note: See TracChangeset for help on using the changeset viewer.