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; } } } } }
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(); }
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); }
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); }