summaryrefslogtreecommitdiff
path: root/protocols/JabberG
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2020-05-27 13:17:31 +0300
committerGeorge Hazan <ghazan@miranda.im>2020-05-27 13:17:31 +0300
commit59bcd6091e2332308e4aac5a05d3b719f15aa031 (patch)
tree884931a950c6bb0f46df3de8df730c7d23572e89 /protocols/JabberG
parent985d99a13b43a8420faadae25c4b3fe7f52305d6 (diff)
Jabber: roster to be exported into the simple xml format (import from the old format is also supported)
Diffstat (limited to 'protocols/JabberG')
-rw-r--r--protocols/JabberG/src/jabber_roster.cpp40
1 files changed, 14 insertions, 26 deletions
diff --git a/protocols/JabberG/src/jabber_roster.cpp b/protocols/JabberG/src/jabber_roster.cpp
index b15200dc9a..36629dfc05 100644
--- a/protocols/JabberG/src/jabber_roster.cpp
+++ b/protocols/JabberG/src/jabber_roster.cpp
@@ -407,17 +407,16 @@ public:
wchar_t filter[MAX_PATH];
mir_snwprintf(filter, L"%s (*.xml)%c*.xml%c%c", TranslateT("XML for MS Excel (UTF-8 encoded)"), 0, 0, 0);
- OPENFILENAME ofn = { 0 };
+ OPENFILENAME ofn = {};
ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
ofn.hwndOwner = m_hwnd;
- ofn.hInstance = nullptr;
ofn.lpstrFilter = filter;
ofn.lpstrFile = filename;
ofn.Flags = OFN_HIDEREADONLY;
ofn.nMaxFile = _countof(filename);
ofn.nMaxFileTitle = MAX_PATH;
ofn.lpstrDefExt = L"xml";
- if (!GetSaveFileName(&ofn))
+ if (!GetSaveFileNameW(&ofn))
return;
FILE * fp = _wfopen(filename, L"wb");
@@ -426,16 +425,7 @@ public:
int ListItemCount = m_list.GetItemCount();
- XmlNode root("Workbook");
- root << XATTR("xmlns", "urn:schemas-microsoft-com:office:spreadsheet")
- << XATTR("xmlns:o", "urn:schemas-microsoft-com:office:office")
- << XATTR("xmlns:x", "urn:schemas-microsoft-com:office:excel")
- << XATTR("xmlns:ss", "urn:schemas-microsoft-com:office:spreadsheet")
- << XATTR("xmlns:html", "http://www.w3.org/TR/REC-html40");
- root << XCHILD("ExcelWorkbook")
- << XATTR("xmlns", "urn:schemas-microsoft-com:office:excel");
- TiXmlElement *table = root << XCHILD("Worksheet") << XATTR("ss:Name", "Exported roster")
- << XCHILD("Table");
+ XmlNode root("Roster");
for (int index = 0; index < ListItemCount; index++) {
wchar_t jid[JABBER_MAX_JID_LEN] = L"";
@@ -446,22 +436,11 @@ public:
m_list.GetItemText(index, 1, name, _countof(name));
m_list.GetItemText(index, 2, group, _countof(group));
m_list.GetItemText(index, 3, subscr, _countof(subscr));
-
- TiXmlElement *node = table << XCHILD("Row");
- node << XCHILD("Cell") << XCHILD("Data", "+") << XATTR("ss:Type", "String");
- node << XCHILD("Cell") << XCHILD("Data", T2Utf(jid)) << XATTR("ss:Type", "String");
- node << XCHILD("Cell") << XCHILD("Data", T2Utf(name)) << XATTR("ss:Type", "String");
- node << XCHILD("Cell") << XCHILD("Data", T2Utf(group)) << XATTR("ss:Type", "String");
- node << XCHILD("Cell") << XCHILD("Data", T2Utf(subscr)) << XATTR("ss:Type", "String");
-
+ root << XCHILD("Item") << XATTR("jid", T2Utf(jid)) << XATTR("name", T2Utf(name)) << XATTR("group", T2Utf(group)) << XATTR("subscription", T2Utf(subscr));
}
- char header[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<?mso-application progid=\"Excel.Sheet\"?>\n";
- fwrite(header, 1, sizeof(header) - 1 /* for zero terminator */, fp);
-
- tinyxml2::XMLPrinter printer(0);
+ tinyxml2::XMLPrinter printer(fp);
root.Print(&printer);
- fputs(printer.CStr(), fp);
fclose(fp);
}
@@ -538,6 +517,15 @@ public:
_RosterInsertListItem(jid, name, group, subscr, bAdd);
}
}
+ else if (Table = TiXmlConst(&doc)["Roster"].ToElement()) {
+ for (auto *Row : TiXmlFilter(Table, "Item")) {
+ auto *jid = Row->Attribute("jid");
+ auto *name = Row->Attribute("name");
+ auto *group = Row->Attribute("group");
+ auto *subscr = Row->Attribute("subscription");
+ _RosterInsertListItem(jid, name, group, subscr, true);
+ }
+ }
OnChangeStatus();
}