void queryFavouriteFileProvider::SaveFavourites(queryFavouriteFolder *favourites) { xmlTextWriterPtr writer; writer = xmlNewTextWriterFilename((const char *)settings->GetFavouritesFile().mb_str(wxConvUTF8), 0); if (!writer) { wxMessageBox(_("Failed to write to favourites file!")); return; } xmlTextWriterSetIndent(writer, 1); if ((xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL) < 0) || (xmlTextWriterStartElement(writer, XML_STR("favourites")) < 0)) { wxMessageBox(_("Failed to write to favourites file!")); xmlFreeTextWriter(writer); return; } ((queryFavouriteFolder *)favourites)->saveFolder(writer); if (xmlTextWriterEndDocument(writer) < 0) { wxMessageBox(_("Failed to write to favourites file!")); } xmlFreeTextWriter(writer); }
void queryMacroFileProvider::SaveMacros(queryMacroList *macros) { xmlTextWriterPtr writer; writer = xmlNewTextWriterFilename((const char *)settings->GetMacrosFile().mb_str(wxConvUTF8), 0); if (!writer) { wxMessageBox(_("Failed to open macros file!")); return; } xmlTextWriterSetIndent(writer, 1); if ((xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL) < 0) || (xmlTextWriterStartElement(writer, XML_STR("macros")) < 0)) { wxMessageBox(_("Failed to write to macros file!")); xmlFreeTextWriter(writer); return; } ((queryMacroList *)macros)->saveList(writer); if (xmlTextWriterEndDocument(writer) < -1) { wxMessageBox(_("Failed to write to macros file!")); } xmlFreeTextWriter(writer); }
void queryMacroList::saveList(xmlTextWriterPtr writer) { size_t i; for (i = 0; i < macros.GetCount(); i++) { xmlTextWriterStartElement(writer, XML_STR("macro")); xmlTextWriterWriteAttribute(writer, XML_STR("key"), XML_FROM_WXSTRING(macros.Item(i)->GetKey())); xmlTextWriterWriteAttribute(writer, XML_STR("name"), XML_FROM_WXSTRING(macros.Item(i)->GetName())); xmlTextWriterWriteString(writer, XML_FROM_WXSTRING(macros.Item(i)->GetQuery())); xmlTextWriterEndElement(writer); } }
queryMacroList::queryMacroList(xmlTextReaderPtr reader) { // Element of type <foo />, meaning empty folder if (xmlTextReaderIsEmptyElement(reader)) return; while (xmlTextReaderRead(reader)) { int type = xmlTextReaderNodeType(reader); if (type == 15) return; // Close on parent element if (xmlTextReaderNodeType(reader) != 1) continue; // Any unknown element type wxString nodename = WXSTRING_FROM_XML(xmlTextReaderConstName(reader)); xmlChar *ckey = xmlTextReaderGetAttribute(reader, XML_STR("key")); if (!ckey) continue; wxString key = WXSTRING_FROM_XML(ckey); xmlFree(ckey); xmlChar *cname = xmlTextReaderGetAttribute(reader, XML_STR("name")); if (!cname) continue; wxString name = WXSTRING_FROM_XML(cname); xmlFree(cname); if (nodename == wxT("macro")) { xmlChar *cquery = xmlTextReaderReadString(reader); if (!cquery) continue; wxString query = WXSTRING_FROM_XML(cquery); xmlFree(cquery); macros.Add(new queryMacroItem(key, name, query)); SkipToEndElement(reader); } } }
void queryFavouriteFolder::saveFolder(xmlTextWriterPtr writer) { size_t i; for (i = 0; i < favourites.GetCount(); i++) { if (favourites.Item(i)->GetId() == -2) { queryFavouriteFolder *subfolder = (queryFavouriteFolder *)favourites.Item(i); xmlTextWriterStartElement(writer, XML_STR("folder")); xmlTextWriterWriteAttribute(writer, XML_STR("title"), XML_FROM_WXSTRING(subfolder->title)); subfolder->saveFolder(writer); xmlTextWriterEndElement(writer); } else { xmlTextWriterStartElement(writer, XML_STR("favourite")); xmlTextWriterWriteAttribute(writer, XML_STR("title"), XML_FROM_WXSTRING(favourites.Item(i)->GetTitle())); xmlTextWriterWriteString(writer, XML_FROM_WXSTRING(favourites.Item(i)->GetContents())); xmlTextWriterEndElement(writer); } } }
queryFavouriteFolder::queryFavouriteFolder(xmlTextReaderPtr reader, wxString title) : queryFavouriteItem(title, wxT("")) { id = -2; // Element of type <foo />, meaning empty folder if (xmlTextReaderIsEmptyElement(reader)) return; while (xmlTextReaderRead(reader)) { int type = xmlTextReaderNodeType(reader); if (type == 15) return; // Close on parent element if (xmlTextReaderNodeType(reader) != 1) continue; // Any unknown element type wxString nodename = WXSTRING_FROM_XML(xmlTextReaderConstName(reader)); xmlChar *ctitle = xmlTextReaderGetAttribute(reader, XML_STR("title")); if (!ctitle) continue; // We ignore nodes without title wxString title = WXSTRING_FROM_XML(ctitle); xmlFree(ctitle); if (nodename == wxT("favourite")) { xmlChar *cont = xmlTextReaderReadString(reader); if (!cont) continue; // No contents, so ignore node favourites.Add(new queryFavouriteItem(title, WXSTRING_FROM_XML(cont))); xmlFree(cont); SkipToEndElement(reader); } else if (nodename == wxT("folder")) { favourites.Add(new queryFavouriteFolder(reader, title)); } } }