Example #1
0
void Communication::startListening(){
	int last_seq = 0;
	int last_filtered_seq = 0;
	listenFlag = true;
	while(listenFlag){
		for(int i=0; i<listeners.size(); i++){
			FilteredListener l = listeners[i];
			if ( l.url.length() == 0 ){
				l.last_seq = 0;
				std::stringstream s;
				s << "/" << l.database << "/_changes?feed=longpoll";
				if ( l.filter.length() > 0 ){
					s << "&filter=" << l.filter;
				}
				l.url = s.str();
				listeners[i] = l;
			}

			std::stringstream s;
			s << l.url << "&since=" << l.last_seq;
			std::string url = s.str();
			string data = getRawData(url, true);
			Value value = parseData(data);
			if ( value.isObject() ){
				Object obj = value.getObject();
				if ( obj["last_seq"].isInteger() ){
					l.last_seq = obj["last_seq"].getInt();
					l.notifyFunc();
					listeners[i] = l;
				}
			}
		}
	}
}
Example #2
0
bool Connection::deleteDatabase(const string &db){
   Value val = comm.getData("/" + db, "DELETE");
   Object obj = val.getObject();

   if(obj.find("error") != obj.end())
	   throw Exception("Unable to create database '" + db + "': " + obj["reason"].getString());

   return obj["ok"].getBoolean();
}
Example #3
0
void Form::deserializeForm(HWND parent, Value v){
	
	removeAllDetailPages();
	removeAllFields();

	Object o = v.getObject();
	Array fields = o["fields"].getArray();
	string type = o["target_type"].getString();

	preloadTypeDefinitions();
	
	for(unsigned int i=0; i<fields.size(); i++){

		string id = fields[i].getString();
		
		FormField * formField = createFieldForType(parent, type, id, false);

		/*if ( type.compare(DATEPICKER) == 0 ){
			formField = FormField::createDatePicker(parent, GetModuleHandle(0), name, wclabel);
		} else if ( type.compare(RADIO) == 0 ){
			formField = FormField::createRadioGroup(parent, GetModuleHandle(0), name, wclabel);
		} else if ( type.compare(NUMBER) == 0 ){
			formField = FormField::createNumberField(parent, GetModuleHandle(0), name, wclabel);
		} else if ( type.compare(YESNO) == 0 ){
			formField = FormField::createYesNoField(parent, GetModuleHandle(0), name, wclabel);
		} else if ( type.compare(MULTILINE) == 0 ){
			formField = FormField::createMultilineText(parent, GetModuleHandle(0), name, wclabel);
		} else if ( type.compare(EDIT) == 0 ){
			formField = FormField::createEditField(parent, GetModuleHandle(0), name, wclabel);
		} else if ( type.compare(COMBO) == 0 ){
			formField = FormField::createComboBox(parent, GetModuleHandle(0), name, wclabel, config);
		} else if ( type.compare(REFERENCE) == 0 ){
			formField = FormField::createReferenceField(parent, GetModuleHandle(0), name, wclabel, config);
		} else {
			formField = FormField::createEditField(parent, GetModuleHandle(0), name, wclabel);
		}*/

		addField(formField);
		int a = 1;
	}

	show(parent, GetModuleHandle(0));

	detail.deserializeUIElements(o);

}
Example #4
0
void Form::SaveDocument(int changedFieldId){
	if ( hasDocument == false ) return; 
	
	for(int i=0; i<layout.getFieldCount(); i++){
		FormField* field = layout.getField(i);
		if ( field->controlChildId == changedFieldId ){
			obj = field->storeValue(obj);
		}
	}

	obj = detail.StoreValuesToDocument(changedFieldId, obj);
	
	
	Document updatedDoc = db.createDocument(Value(obj), id);

	Value v = updatedDoc.getData();
	
	LoadDocument(id, v.getObject(), true);

}