- Timestamp:
- 04/15/10 14:01:48 (13 years ago)
- Branches:
- master, qt5
- Children:
- f5b68a4
- Parents:
- be9b645
- Location:
- src
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
src/fosdem.sql
rbe9b645 rd06ae27 10 10 , day_change INTEGER 11 11 , timeslot_duration INTEGER 12 , active INTEGER DEFAULT 0); 13 INSERT INTO "CONFERENCE" VALUES(1,'FOSDEM 2010','Free and Opensource Software Developers European Meeting','ULB (Campus Solbosch)','Brussels',1265414400,1265500800,2,28800,900,1); 12 , active INTEGER DEFAULT 0 13 , url VARCHAR UNIQUE); 14 INSERT INTO "CONFERENCE" VALUES(1,'FOSDEM 2010','Free and Opensource Software Developers European Meeting','ULB (Campus Solbosch)','Brussels',1265414400,1265500800,2,28800,900,1,"http://fosdem.org/2010/schedule/xml"); 14 15 CREATE TABLE TRACK ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL 15 16 , name VARCHAR UNIQUE NOT NULL ); -
src/gui/importschedulewidget.cpp
rbe9b645 rd06ae27 30 30 #include <appsettings.h> 31 31 32 const QString SCHEDULE_URL = "http://fosdem.org/2010/schedule/xml"; 32 // TODO: this is temporary 33 #include <QInputDialog> 34 35 #include "conference.h" 36 37 // const QString SCHEDULE_URL = "http://fosdem.org/2010/schedule/xml"; 33 38 34 39 const QString PROXY_USERNAME; … … 91 96 } 92 97 93 importData(file.readAll() );98 importData(file.readAll(), QString()); 94 99 95 100 } … … 108 113 else 109 114 { 110 importData(aReply->readAll() );115 importData(aReply->readAll(), aReply->url().toEncoded()); 111 116 } 112 117 } … … 115 120 { 116 121 QNetworkRequest request; 117 request.setUrl(QUrl(SCHEDULE_URL)); 122 123 // TODO: make a nicer GUI 124 // basically, you have to do the following things: 125 // 1. store schedule URL for each conteferce 126 // 2. allow refreshing of the current conference schedule with "1 button click" 127 // 3. allow changing of the URL for a conference; 128 // run refresh together with it is ok and even justified by usability, 129 // but it must not loose this change if refresh not available. 130 // So it cannot be done as "do like #4 and rely on REPLACE". 131 // 4. allow getting the new conference by URL 132 133 QString url_default; 134 try { 135 url_default = Conference::getById(Conference::activeConference()).getUrl(); 136 } catch (OrmException& e) { 137 qWarning() << "failed to get default URL:" << e.text(); 138 } 139 140 bool ok = false; 141 QString url = QInputDialog::getText(this, "URL request", "Put proper schedule URL or let it try with it", QLineEdit::Normal, url_default, &ok); 142 if (!ok) { // cancel pressed 143 return; 144 } 145 request.setUrl(QUrl(url)); 118 146 119 147 mNetworkAccessManager->setProxy(QNetworkProxy::applicationProxy()); … … 121 149 } 122 150 123 void ImportScheduleWidget::importData(const QByteArray &aData )151 void ImportScheduleWidget::importData(const QByteArray &aData, const QString& url) 124 152 { 125 153 browse->hide(); … … 128 156 // proxySettings->hide(); 129 157 130 int confId = mXmlParser->parseData(aData );158 int confId = mXmlParser->parseData(aData, url); 131 159 132 160 progressBar->hide(); -
src/gui/importschedulewidget.h
rbe9b645 rd06ae27 42 42 void scheduleImported(int confId); 43 43 private: 44 void importData(const QByteArray &aData );44 void importData(const QByteArray &aData, const QString& url); 45 45 private: 46 46 ScheduleXmlParser *mXmlParser; -
src/mvc/conference.cpp
rbe9b645 rd06ae27 30 30 << QSqlField("day_change", QVariant::Int) 31 31 << QSqlField("timeslot_duration", QVariant::Int) 32 << QSqlField("active", QVariant::Bool)); 32 << QSqlField("active", QVariant::Bool) 33 << QSqlField("url", QVariant::String)); 33 34 34 35 QString const Conference::sTableName = QString("conference"); … … 58 59 activeConfs.append(query.record().value("id").toInt()); 59 60 61 qDebug() << __PRETTY_FUNCTION__ 62 << "activeConfs.count()" << activeConfs.count() 63 ; 64 60 65 if(activeConfs.count()==0) // no active DB 61 66 return 1; -
src/mvc/conference.h
rbe9b645 rd06ae27 49 49 int timeslotDuration() const { return value("timeslot_duration").toInt(); } // in seconds 50 50 bool isActive() const { return value("active").toBool(); } 51 QString getUrl() const 52 { 53 QVariant val = value("url"); 54 qDebug() << __PRETTY_FUNCTION__ << val; 55 if (val.isValid()) { 56 return val.toString(); 57 } else { 58 return QString(); 59 } 60 } 51 61 52 62 void setId(int id) { setValue("id", id); } … … 61 71 void setTimeslotDuration(int timeslotDuration) { setValue("timeslot_duration", timeslotDuration); } 62 72 void setActive(bool active) { setValue("active", (int)((active))); } 73 void setUrl(const QString& url) { setValue("url", url.isNull() ? QVariant() : url); } 63 74 }; 64 75 -
src/sql/schedulexmlparser.cpp
rbe9b645 rd06ae27 31 31 } 32 32 33 int ScheduleXmlParser::parseData(const QByteArray &aData )33 int ScheduleXmlParser::parseData(const QByteArray &aData, const QString& url) 34 34 { 35 35 QDomDocument document; … … 57 57 conference["day_change"] = conferenceElement.firstChildElement("day_change").text(); // time 58 58 conference["timeslot_duration"] = conferenceElement.firstChildElement("timeslot_duration").text(); // time 59 conference["url"] = url; 59 60 SqlEngine::addConferenceToDB(conference); 60 61 confId = conference["id"].toInt(); -
src/sql/schedulexmlparser.h
rbe9b645 rd06ae27 29 29 30 30 public slots: 31 int parseData(const QByteArray &aData ); // returns 'confId' of parsed conference schedule31 int parseData(const QByteArray &aData, const QString& url); // returns 'confId' of parsed conference schedule 32 32 33 33 signals: -
src/sql/sqlengine.cpp
rbe9b645 rd06ae27 102 102 if(!confId) // conference 'aConference' isn't in the table => insert 103 103 { 104 QS tring values = QString("'%1', '%2', '%3', '%4', '%5', '%6', '%7', '%8', '%9'") \105 .arg(aConference["title"]) \106 .arg(aConference["subtitle"]) \107 .arg(aConference["venue"]) \108 .arg(aConference["city"]) \109 .arg(QDateTime(QDate::fromString(aConference["start"],DATE_FORMAT),QTime(0,0),Qt::UTC).toTime_t()) \110 .arg(QDateTime(QDate::fromString(aConference["end"],DATE_FORMAT),QTime(0,0),Qt::UTC).toTime_t()) \111 .arg(aConference["days"]) \112 .arg(-QTime::fromString(aConference["day_change"],TIME_FORMAT).secsTo(QTime(0,0))) \113 .arg(-QTime::fromString(aConference["timeslot_duration"],TIME_FORMAT).secsTo(QTime(0,0)));114 values.append(QString(", '%1'").arg(confsList.count()>0?"0":"1"));115 116 QString query = QString("INSERT INTO CONFERENCE (title,subtitle,venue,city,start,end,days,day_change,timeslot_duration,active) VALUES (%1)").arg(values);117 QSqlQuery result (query, db);118 aConference["id"] = result.lastInsertId().toString(); // 'id' is assigned automatically104 QSqlQuery query(db); 105 query.prepare("INSERT INTO CONFERENCE (title,url,subtitle,venue,city,start,end,days," 106 "day_change,timeslot_duration,active) " 107 " VALUES (:title,:url,:subtitle,:venue,:city,:start,:end,:days," 108 ":day_change,:timeslot_duration,:active)"); 109 foreach (QString prop_name, (QList<QString>() << "title" << "url" << "subtitle" << "venue" << "city" << "days")) { 110 query.bindValue(QString(":") + prop_name, aConference[prop_name]); 111 } 112 query.bindValue(":start", QDateTime(QDate::fromString(aConference["start"],DATE_FORMAT),QTime(0,0),Qt::UTC).toTime_t()); 113 query.bindValue(":end", QDateTime(QDate::fromString(aConference["end"],DATE_FORMAT),QTime(0,0),Qt::UTC).toTime_t()); 114 query.bindValue(":day_change", -QTime::fromString(aConference["day_change"],TIME_FORMAT).secsTo(QTime(0,0))); 115 query.bindValue(":day_change", -QTime::fromString(aConference["timeslot_duration"],TIME_FORMAT).secsTo(QTime(0,0))); 116 query.bindValue(":active", confsList.count() > 0 ? 0 : 1); 117 query.exec(); 118 aConference["id"] = query.lastInsertId().toString(); // 'id' is assigned automatically 119 119 } 120 120 }
Note: See TracChangeset
for help on using the changeset viewer.