Пример #1
0
void Globalization::stringToDate(int scId, int ecId, const QVariantMap &options) {
    QString dateString = options.find("dateString")->toString();
    Globalization::Format formatLength = static_cast<Globalization::Format>(options.find("formatLength")->toInt());
    Globalization::Selector selector = static_cast<Globalization::Selector>(options.find("selector")->toInt());

    QLocale::FormatType format = translateFormat(formatLength);
    QLocale locale;
    bool valid(true);
    int year(0), month(0), day(0), hour(0), minute(0), second(0), millisecond(0);
    switch (selector) {
    case SELECTOR_ALL:
        {
            QDateTime dateTime = locale.toDateTime(dateString, format);
            valid = dateTime.isValid();
            QTime time = dateTime.time();
            hour = time.hour(); minute = time.minute(); second = time.second(); millisecond = time.msec();
            QDate date = dateTime.date();
            year = date.year(); month = date.month(); day = date.day();
        }
        break;
    case SELECTOR_TIME:
        {
            QTime time = locale.toTime(dateString, format);
            valid = time.isValid();
            hour = time.hour(); minute = time.minute(); second = time.second(); millisecond = time.msec();
        }
        break;
    case SELECTOR_DATE:
        {
            QDate date = locale.toDate(dateString, format);
            valid = date.isValid();
            year = date.year(); month = date.month(); day = date.day();
        }
        break;
    }
    if ((format == QLocale::NarrowFormat || format == QLocale::ShortFormat) && year < 2000 && year > 1900) {
        year += 100;
    }
    if (!valid) {
        this->callback(ecId, QString("new GlobalizationError(%1, 'parsing error')").arg(Globalization::PARSING_ERROR));
    } else {
        QVariantMap obj;
        obj.insert("year", year);
        obj.insert("month", month - 1);
        obj.insert("day", day);
        obj.insert("hour", hour);
        obj.insert("minute", minute);
        obj.insert("second", second);
        obj.insert("millisecond", millisecond);
        this->cb(scId, obj);
    }
}
Пример #2
0
QV4::ReturnedValue QQmlDateExtension::method_fromLocaleString(QV4::CallContext *ctx)
{
    QV4::ExecutionEngine * const engine = ctx->d()->engine;
    if (ctx->argc() == 1 && ctx->args()[0].isString()) {
        QLocale locale;
        QString dateString = ctx->args()[0].stringValue()->toQString();
        QDateTime dt = locale.toDateTime(dateString);
        return QV4::Encode(engine->newDateObject(dt));
    }

    QV4::Scope scope(ctx);

    if (ctx->argc() < 1 || ctx->argc() > 3 || !isLocaleObject(ctx->args()[0]))
        V4THROW_ERROR("Locale: Date.fromLocaleString(): Invalid arguments");

    GET_LOCALE_DATA_RESOURCE(ctx->args()[0]);

    QLocale::FormatType enumFormat = QLocale::LongFormat;
    QDateTime dt;
    QString dateString = ctx->args()[1].toQStringNoThrow();
    if (ctx->argc() == 3) {
        if (ctx->args()[2].isString()) {
            QString format = ctx->args()[2].stringValue()->toQString();
            dt = r->d()->locale.toDateTime(dateString, format);
        } else if (ctx->args()[2].isNumber()) {
            quint32 intFormat = ctx->args()[2].toNumber();
            QLocale::FormatType format = QLocale::FormatType(intFormat);
            dt = r->d()->locale.toDateTime(dateString, format);
        } else {
            V4THROW_ERROR("Locale: Date.fromLocaleString(): Invalid datetime format");
        }
    } else {
        dt = r->d()->locale.toDateTime(dateString, enumFormat);
    }

    return QV4::Encode(engine->newDateObject(dt));
}
Пример #3
0
void WPUtils::replyFinished(QNetworkReply *rep)
{
	QVariantMap _res_bck;
	model = new GroupDataModel(QStringList() << "sortDate" ); //"date" << "date_created_gmt" << "post_date");

	model->setSortedAscending(false);

	model->setGrouping(ItemGrouping::None);

	if ( model && !model->isEmpty() )
		model->clear();

	if ( !res.isEmpty() )
		res.clear();

	if (!_res_bck.isEmpty() )
		_res_bck.clear();


	QByteArray ret = rep->readAll();

	if ( !ret.isEmpty() )
		qDebug() << "reading " << ret; //rep->readAll();
	else qDebug() << "ret empty -> error handling /*TODO*/";

	QString _current_name = "";

	QXmlStreamReader xml(ret);

	QList<QVariantMap> Entries;
	int _struct_counter = 0;

	while(!xml.atEnd() && !xml.hasError()) {
		QXmlStreamReader::TokenType token = xml.readNext();
		if ( token == QXmlStreamReader::StartElement )
		{
			if ( xml.name().toString() == "fault")
			{
				res["ERROR"] = "fault";
			} else if ( xml.name().toString() == "struct" )
			{
				_struct_counter++;
			} else if ( xml.name().toString() == "name" )
			{
				token = xml.readNext();
				_current_name = xml.text().toString();
			} else if ( xml.name().toString() == "value" && !_current_name.isEmpty() )
			{
				token = xml.readNext();
				if ( xml.name().toString() == "string" || xml.name().toString() == "boolean" || xml.name().toString() == "dateTime.iso8601" )
				{
					token = xml.readNext();
					if ( _current_name == "post_date" || _current_name == "date_created_gmt" )
					{
						QLocale c = QLocale::c();
						QDateTime date = c.toDateTime(xml.text().toString(), QLatin1String("yyyyMMddTHH:mm:ss"));//ddd, dd MMM yyyy HH:mm:ss"));// '+0000"));
						QString outputFromat("dd MMM yyyy - HH:mm:ss");
						date.setTimeSpec(Qt::UTC);
						res["sortDate"] = date;
						res["date"] = date.toString(outputFromat);
						/* is this insane?! */
						/*
						QString theDate = xml.text().toString(); //"20130503T14:48:55";
						QDateTime date = QDateTime::fromString(theDate, "yyyyMMddTHH:mm:ss");
						res["sortDate"] = date;
						res["date"] = date.toString(Qt::SystemLocaleShortDate);
						 */
					}
					else res[_current_name] = xml.text().toString();

					_current_name = "";
				} else _current_name = "";
			} else if ( xml.name().toString() == "string" )
			{
				/* newpost workaround */
				token = xml.readNext();
				res["newpostid"] = xml.text().toString();
				model->insert(res);
				_res_bck.unite(res);
				res.clear();
			} else if ( xml.name().toString() == "boolean")
			{
				/* deletepost workaround */
				token = xml.readNext();
				res["delpost"] = xml.text().toString();
				model->insert(res);
				_res_bck.unite(res);
				res.clear();
			} else if ( xml.name().toString() == "int" )
			{
				/* newcomment workaround */
				token = xml.readNext();
				res["newcommentid"] = xml.text().toString();
				model->insert(res);
				_res_bck.unite(res);
				res.clear();
			}
			QVariantMap Entry;
						foreach(const QXmlStreamAttribute &attr, xml.attributes()) {
							qDebug() << "adding name = " << attr.name().toString() << " value = " << attr.value().toString();
							Entry[attr.name().toString()] = attr.value().toString();
						}
						qDebug() << "adding name = " << xml.name().toString() << " and = " << xml.text().toString();
						Entry[_current_name] = xml.text().toString();
								//xml.text().toString();
						Entries.append(Entry);

		} else if ( token == QXmlStreamReader::EndElement )
		{
			if ( xml.name().toString() == "struct" )
			{
				_struct_counter--;

				if ( _struct_counter == 0 )
				{
					if ( !res.isEmpty() )
					{
						model->insert(res);
						_res_bck.unite(res);
						res.clear();
					} else qDebug() << "*+*+*+*+*+*+*+* ouch! res is empty!! =====DO SMTG======";

				}
			}
		}
	}