diff options
author | George Hazan <ghazan@miranda.im> | 2020-05-27 13:17:31 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2020-05-27 13:17:31 +0300 |
commit | 59bcd6091e2332308e4aac5a05d3b719f15aa031 (patch) | |
tree | 884931a950c6bb0f46df3de8df730c7d23572e89 /protocols/JabberG | |
parent | 985d99a13b43a8420faadae25c4b3fe7f52305d6 (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.cpp | 40 |
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(); } |