/* Copyright (C) 2012 Mataes This is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this file; see the file license.txt. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "stdafx.h" INT_PTR CALLBACK DlgProcImportOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { HWND FeedsList = GetDlgItem(hwndDlg, IDC_FEEDSLIST); HWND FeedsImportList = GetDlgItem(hwndDlg, IDC_FEEDSIMPORTLIST); switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG)lParam); Utils_RestoreWindowPositionNoSize(hwndDlg, NULL, MODULE, "ImportDlg"); EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), FALSE); return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: { wchar_t FileName[MAX_PATH]; GetDlgItemText(hwndDlg, IDC_IMPORTFILEPATH, FileName, _countof(FileName)); int bytesParsed = 0; HXML hXml = xmlParseFile(FileName, &bytesParsed, nullptr); if(hXml != nullptr) { HWND hwndList = (HWND)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); bool isTextUTF = false, isURLUTF = false, isSiteURLUTF = false, isGroupUTF = false; HXML node = xmlGetChildByPath(hXml, L"opml/body/outline", 0); if ( !node) node = xmlGetChildByPath(hXml, L"body/outline", 0); int count = (int)SendMessage(FeedsImportList, LB_GETCOUNT, 0, 0); int DUPES = 0; if (node) { while (node) { int outlineAttr = xmlGetAttrCount(node); int outlineChildsCount = xmlGetChildCount(node); wchar_t *xmlUrl = (wchar_t *)xmlGetAttrValue(node, L"xmlUrl"); if (!xmlUrl && !outlineChildsCount) { HXML tmpnode = node; node = xmlGetNextNode(node); if ( !node) { do { node = tmpnode; node = xmlGetParent(node); tmpnode = node; node = xmlGetNextNode(node); if (node) break; } while (mir_wstrcmpi(xmlGetName(node), L"body")); } } else if (!xmlUrl && outlineChildsCount) node = xmlGetFirstChild(node); else if (xmlUrl) { wchar_t *text = nullptr, *url = nullptr, *siteurl = nullptr, *group = nullptr; BYTE NeedToImport = FALSE; for (int i = 0; i < outlineAttr; i++) { if (!mir_wstrcmpi(xmlGetAttrName(node, i), L"text")) { text = mir_utf8decodeW(_T2A(xmlGetAttrValue(node, xmlGetAttrName(node, i)))); if (!text) { isTextUTF = 0; text = (wchar_t *)xmlGetAttrValue(node, xmlGetAttrName(node, i)); } else isTextUTF = 1; for (int j = 0; j < count; j++) { wchar_t item[MAX_PATH]; SendMessage(FeedsImportList, LB_GETTEXT, (WPARAM)j, (LPARAM)item); if (!mir_wstrcmpi(item, text)) { NeedToImport = TRUE; break; } } continue; } if (!mir_wstrcmpi(xmlGetAttrName(node, i), L"xmlUrl")) { url = mir_utf8decodeW(_T2A(xmlGetAttrValue(node, xmlGetAttrName(node, i)))); if ( !url) { isURLUTF = false; url = (wchar_t *)xmlGetAttrValue(node, xmlGetAttrName(node, i)); } else isURLUTF = true; if (GetContactByURL(url) && NeedToImport) { NeedToImport = FALSE; DUPES++; } continue; } if (!mir_wstrcmpi(xmlGetAttrName(node, i), L"htmlUrl")) { siteurl = mir_utf8decodeW(_T2A(xmlGetAttrValue(node, xmlGetAttrName(node, i)))); if ( !siteurl) { isSiteURLUTF = false; siteurl = (wchar_t *)xmlGetAttrValue(node, xmlGetAttrName(node, i)); } else isSiteURLUTF = true; continue; } if (text && url && siteurl) break; } if (NeedToImport) { HXML parent = xmlGetParent(node); wchar_t tmpgroup[1024]; while (mir_wstrcmpi(xmlGetName(parent), L"body")) { for (int i = 0; i < xmlGetAttrCount(parent); i++) { if (!mir_wstrcmpi(xmlGetAttrName(parent, i), L"text")) { if ( !group) group = (wchar_t *)xmlGetAttrValue(parent, xmlGetAttrName(parent, i)); else { mir_snwprintf(tmpgroup, L"%s\\%s", xmlGetAttrValue(parent, xmlGetAttrName(parent, i)), group); group = tmpgroup; } break; } } parent = xmlGetParent(parent); } wchar_t *ptszGroup = nullptr; if (group) { ptszGroup = mir_utf8decodeW(_T2A(group)); if ( !ptszGroup) { isGroupUTF = false; ptszGroup = group; } else isGroupUTF = 1; } MCONTACT hContact = db_add_contact(); Proto_AddToContact(hContact, MODULE); db_set_ws(hContact, MODULE, "Nick", text); db_set_ws(hContact, MODULE, "URL", url); db_set_ws(hContact, MODULE, "Homepage", siteurl); db_set_b(hContact, MODULE, "CheckState", 1); db_set_dw(hContact, MODULE, "UpdateTime", DEFAULT_UPDATE_TIME); db_set_ws(hContact, MODULE, "MsgFormat", TAGSDEFAULT); db_set_w(hContact, MODULE, "Status", CallProtoService(MODULE, PS_GETSTATUS, 0, 0)); if (ptszGroup) { db_set_ws(hContact, "CList", "Group", ptszGroup); Clist_GroupCreate(0, ptszGroup); } if (isGroupUTF) mir_free(ptszGroup); } if (isTextUTF) mir_free(text); if (isURLUTF) mir_free(url); if (isSiteURLUTF) mir_free(siteurl); HXML tmpnode = node; node = xmlGetNextNode(node); if ( !node) { do { node = tmpnode; node = xmlGetParent(node); tmpnode = node; node = xmlGetNextNode(node); if (node) break; } while (mir_wstrcmpi(xmlGetName(tmpnode), L"body")); } } } } xmlDestroyNode(hXml); if (hwndList) { DeleteAllItems(hwndList); UpdateList(hwndList); } wchar_t mes[MAX_PATH]; if (DUPES) mir_snwprintf(mes, TranslateT("Imported %d feed(s)\r\nNot imported %d duplicate(s)."), count - DUPES, DUPES); else mir_snwprintf(mes, TranslateT("Imported %d feed(s)."), count); MessageBox(hwndDlg, mes, TranslateT("News Aggregator"), MB_OK | MB_ICONINFORMATION); } } // fall through case IDCANCEL: DestroyWindow(hwndDlg); break; case IDC_BROWSEIMPORTFILE: { wchar_t FileName[MAX_PATH]; VARSW tszMirDir(L"%miranda_path%"); OPENFILENAME ofn = {0}; ofn.lStructSize = sizeof(ofn); wchar_t tmp[MAX_PATH]; mir_snwprintf(tmp, L"%s (*.opml, *.xml)%c*.opml;*.xml%c%c", TranslateT("OPML files"), 0, 0, 0); ofn.lpstrFilter = tmp; ofn.hwndOwner = nullptr; ofn.lpstrFile = FileName; ofn.nMaxFile = MAX_PATH; ofn.nMaxFileTitle = MAX_PATH; ofn.Flags = OFN_HIDEREADONLY; ofn.lpstrInitialDir = tszMirDir; *FileName = '\0'; ofn.lpstrDefExt = L""; if (GetOpenFileName(&ofn)) { int bytesParsed = 0; HXML hXml = xmlParseFile(FileName, &bytesParsed, nullptr); if(hXml != nullptr) { HXML node = xmlGetChildByPath(hXml, L"opml/body/outline", 0); if ( !node) node = xmlGetChildByPath(hXml, L"body/outline", 0); if (node) { while (node) { int outlineAttr = xmlGetAttrCount(node); int outlineChildsCount = xmlGetChildCount(node); wchar_t *xmlUrl = (wchar_t *)xmlGetAttrValue(node, L"xmlUrl"); if (!xmlUrl && !outlineChildsCount) { HXML tmpnode = node; node = xmlGetNextNode(node); if ( !node) { do { node = tmpnode; node = xmlGetParent(node); tmpnode = node; node = xmlGetNextNode(node); if (node) break; } while (mir_wstrcmpi(xmlGetName(node), L"body")); } } else if (!xmlUrl && outlineChildsCount) node = xmlGetFirstChild(node); else if (xmlUrl) { for (int i = 0; i < outlineAttr; i++) { if (!mir_wstrcmpi(xmlGetAttrName(node, i), L"text")) { wchar_t *text = mir_utf8decodeW(_T2A(xmlGetAttrValue(node, xmlGetAttrName(node, i)))); bool isTextUTF; if (!text) { isTextUTF = false; text = (wchar_t *)xmlGetAttrValue(node, xmlGetAttrName(node, i)); } else isTextUTF = true; SendMessage(FeedsList, LB_ADDSTRING, 0, (LPARAM)text); EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), TRUE); EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), TRUE); if (isTextUTF) mir_free(text); } } HXML tmpnode = node; node = xmlGetNextNode(node); if ( !node) { do { node = tmpnode; node = xmlGetParent(node); tmpnode = node; node = xmlGetNextNode(node); if (node) break; } while (mir_wstrcmpi(xmlGetName(tmpnode), L"body")); } } } } else MessageBox(hwndDlg, TranslateT("Not valid import file."), TranslateT("Error"), MB_OK | MB_ICONERROR); xmlDestroyNode(hXml); SetDlgItemText(hwndDlg, IDC_IMPORTFILEPATH, FileName); } else MessageBox(hwndDlg, TranslateT("Not valid import file."), TranslateT("Error"), MB_OK | MB_ICONERROR); break; } break; } break; case IDC_ADDFEED: { if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_REMOVEFEED))) EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEFEED), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS))) EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDOK))) EnableWindow(GetDlgItem(hwndDlg, IDOK), TRUE); int cursel = (int)SendMessage(FeedsList, LB_GETCURSEL, 0, 0); wchar_t item[MAX_PATH]; SendMessage(FeedsList, LB_GETTEXT, (WPARAM)cursel, (LPARAM)item); SendMessage(FeedsImportList, LB_ADDSTRING, 0, (LPARAM)item); SendMessage(FeedsList, LB_DELETESTRING, (WPARAM)cursel, 0); if (!SendMessage(FeedsList, LB_GETCOUNT, 0, 0)) { EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), FALSE); } } break; case IDC_REMOVEFEED: { if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ADDFEED))) EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS))) EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), TRUE); int cursel = (int)SendMessage(FeedsImportList, LB_GETCURSEL, 0, 0); wchar_t item[MAX_PATH]; SendMessage(FeedsImportList, LB_GETTEXT, (WPARAM)cursel, (LPARAM)item); SendMessage(FeedsList, LB_ADDSTRING, 0, (LPARAM)item); SendMessage(FeedsImportList, LB_DELETESTRING, (WPARAM)cursel, 0); if (!SendMessage(FeedsImportList, LB_GETCOUNT, 0, 0)) { EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE); } } break; case IDC_ADDALLFEEDS: { if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_REMOVEFEED))) EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEFEED), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS))) EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDOK))) EnableWindow(GetDlgItem(hwndDlg, IDOK), TRUE); int count = (int)SendMessage(FeedsList, LB_GETCOUNT, 0, 0); for (int i = 0; i < count; i++) { wchar_t item[MAX_PATH]; SendMessage(FeedsList, LB_GETTEXT, (WPARAM)i, (LPARAM)item); SendMessage(FeedsImportList, LB_ADDSTRING, 0, (LPARAM)item); } for (int i = count - 1; i > -1; i--) SendMessage(FeedsList, LB_DELETESTRING, (WPARAM)i, 0); EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), FALSE); } break; case IDC_REMOVEALLFEEDS: { if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ADDFEED))) EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS))) EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), TRUE); int count = (int)SendMessage(FeedsImportList, LB_GETCOUNT, 0, 0); for (int i = 0; i < count; i++) { wchar_t item[MAX_PATH]; SendMessage(FeedsImportList, LB_GETTEXT, (WPARAM)i, (LPARAM)item); SendMessage(FeedsList, LB_ADDSTRING, 0, (LPARAM)item); } for (int i = count - 1; i > -1; i--) SendMessage(FeedsImportList, LB_DELETESTRING, (WPARAM)i, 0); EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE); } break; case IDC_FEEDSLIST: { if (HIWORD(wParam) == LBN_DBLCLK) { if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_REMOVEFEED))) EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEFEED), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS))) EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDOK))) EnableWindow(GetDlgItem(hwndDlg, IDOK), TRUE); int cursel = (int)SendMessage(FeedsList, LB_GETCURSEL, 0, 0); wchar_t item[MAX_PATH]; SendMessage(FeedsList, LB_GETTEXT, (WPARAM)cursel, (LPARAM)item); SendMessage(FeedsImportList, LB_ADDSTRING, 0, (LPARAM)item); SendMessage(FeedsList, LB_DELETESTRING, (WPARAM)cursel, 0); if (!SendMessage(FeedsList, LB_GETCOUNT, 0, 0)) { EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), FALSE); } } } break; case IDC_FEEDSIMPORTLIST: { if (HIWORD(wParam) == LBN_DBLCLK) { if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ADDFEED))) EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS))) EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), TRUE); int cursel = (int)SendMessage(FeedsImportList, LB_GETCURSEL, 0, 0); wchar_t item[MAX_PATH]; SendMessage(FeedsImportList, LB_GETTEXT, (WPARAM)cursel, (LPARAM)item); SendMessage(FeedsList, LB_ADDSTRING, 0, (LPARAM)item); SendMessage(FeedsImportList, LB_DELETESTRING, (WPARAM)cursel, 0); if (!SendMessage(FeedsImportList, LB_GETCOUNT, 0, 0)) { EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE); } } } break; } break; case WM_CLOSE: DestroyWindow(hwndDlg); break; case WM_DESTROY: Utils_SaveWindowPosition(hwndDlg, NULL, MODULE, "ImportDlg"); break; } return FALSE; } INT_PTR CALLBACK DlgProcExportOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM) { HWND FeedsList = GetDlgItem(hwndDlg, IDC_FEEDSLIST); HWND FeedsExportList = GetDlgItem(hwndDlg, IDC_FEEDSEXPORTLIST); switch (msg) { case WM_INITDIALOG: TranslateDialogDefault(hwndDlg); Utils_RestoreWindowPositionNoSize(hwndDlg, NULL, MODULE, "ExportDlg"); for (MCONTACT hContact = db_find_first(MODULE); hContact; hContact = db_find_next(hContact, MODULE)) { wchar_t *message = db_get_wsa(hContact, MODULE, "Nick"); if (message != nullptr) { SendMessage(FeedsList, LB_ADDSTRING, 0, (LPARAM)message); mir_free(message); } } EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE); if (!SendMessage(FeedsList, LB_GETCOUNT, 0, 0)) { EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), FALSE); } return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: { wchar_t FileName[MAX_PATH]; VARSW tszMirDir(L"%miranda_path%"); OPENFILENAME ofn = {0}; ofn.lStructSize = sizeof(ofn); wchar_t tmp[MAX_PATH]; mir_snwprintf(tmp, L"%s (*.opml)%c*.opml%c%c", TranslateT("OPML files"), 0, 0, 0); ofn.lpstrFilter = tmp; ofn.hwndOwner = nullptr; ofn.lpstrFile = FileName; ofn.nMaxFile = MAX_PATH; ofn.nMaxFileTitle = MAX_PATH; ofn.Flags = OFN_HIDEREADONLY | OFN_SHAREAWARE | OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT; ofn.lpstrInitialDir = tszMirDir; *FileName = '\0'; ofn.lpstrDefExt = L""; if (GetSaveFileName(&ofn)) { HXML hXml = xmlCreateNode(L"opml", nullptr, FALSE); xmlAddAttr(hXml, L"version", L"1.0"); HXML header = xmlAddChild(hXml, L"head", nullptr); xmlAddChild(header, L"title", L"Miranda NG NewsAggregator plugin export"); header = xmlAddChild(hXml, L"body", nullptr); int count = (int)SendMessage(FeedsExportList, LB_GETCOUNT, 0, 0); for (int i = 0; i < count; i++) { wchar_t item[MAX_PATH]; SendMessage(FeedsExportList, LB_GETTEXT, (WPARAM)i, (LPARAM)item); MCONTACT hContact = GetContactByNick(item); wchar_t *title = db_get_wsa(hContact, MODULE, "Nick"), *url = db_get_wsa(hContact, MODULE, "URL"), *siteurl = db_get_wsa(hContact, MODULE, "Homepage"), *group = db_get_wsa(hContact, "CList", "Group"); HXML elem = header; if (group) { wchar_t *section = wcstok(group, L"\\"); while (section != nullptr) { HXML existgroup = xmlGetChildByAttrValue(header, L"outline", L"title", section); if ( !existgroup) { elem = xmlAddChild(elem, L"outline", nullptr); xmlAddAttr(elem, L"title", section); xmlAddAttr(elem, L"text", section); } else { elem = existgroup; } section = wcstok(nullptr, L"\\"); } elem = xmlAddChild(elem, L"outline", nullptr); } else elem = xmlAddChild(elem, L"outline", nullptr); xmlAddAttr(elem, L"text", title); xmlAddAttr(elem, L"title", title); xmlAddAttr(elem, L"type", L"rss"); xmlAddAttr(elem, L"xmlUrl", url); xmlAddAttr(elem, L"htmlUrl", siteurl); mir_free(title); mir_free(url); mir_free(siteurl); mir_free(group); } xmlToFile(hXml, FileName, 1); xmlDestroyNode(hXml); } } // fall through case IDCANCEL: DestroyWindow(hwndDlg); break; case IDC_ADDFEED: { if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_REMOVEFEED))) EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEFEED), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS))) EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDOK))) EnableWindow(GetDlgItem(hwndDlg, IDOK), TRUE); int cursel = (int)SendMessage(FeedsList, LB_GETCURSEL, 0, 0); wchar_t item[MAX_PATH]; SendMessage(FeedsList, LB_GETTEXT, (WPARAM)cursel, (LPARAM)item); SendMessage(FeedsExportList, LB_ADDSTRING, 0, (LPARAM)item); SendMessage(FeedsList, LB_DELETESTRING, (WPARAM)cursel, 0); if (!SendMessage(FeedsList, LB_GETCOUNT, 0, 0)) { EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), FALSE); } } break; case IDC_REMOVEFEED: { if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ADDFEED))) EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS))) EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), TRUE); int cursel = (int)SendMessage(FeedsExportList, LB_GETCURSEL, 0, 0); wchar_t item[MAX_PATH]; SendMessage(FeedsExportList, LB_GETTEXT, (WPARAM)cursel, (LPARAM)item); SendMessage(FeedsList, LB_ADDSTRING, 0, (LPARAM)item); SendMessage(FeedsExportList, LB_DELETESTRING, (WPARAM)cursel, 0); if (!SendMessage(FeedsExportList, LB_GETCOUNT, 0, 0)) { EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE); } } break; case IDC_ADDALLFEEDS: { if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_REMOVEFEED))) EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEFEED), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS))) EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDOK))) EnableWindow(GetDlgItem(hwndDlg, IDOK), TRUE); int count = (int)SendMessage(FeedsList, LB_GETCOUNT, 0, 0); for (int i = 0; i < count; i++) { wchar_t item[MAX_PATH]; SendMessage(FeedsList, LB_GETTEXT, (WPARAM)i, (LPARAM)item); SendMessage(FeedsExportList, LB_ADDSTRING, 0, (LPARAM)item); } for (int i = count - 1; i > -1; i--) SendMessage(FeedsList, LB_DELETESTRING, (WPARAM)i, 0); EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), FALSE); } break; case IDC_REMOVEALLFEEDS: { if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ADDFEED))) EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS))) EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), TRUE); int count = (int)SendMessage(FeedsExportList, LB_GETCOUNT, 0, 0); for (int i = 0; i < count; i++) { wchar_t item[MAX_PATH]; SendMessage(FeedsExportList, LB_GETTEXT, (WPARAM)i, (LPARAM)item); SendMessage(FeedsList, LB_ADDSTRING, 0, (LPARAM)item); } for (int i = count - 1; i > -1; i--) SendMessage(FeedsExportList, LB_DELETESTRING, (WPARAM)i, 0); EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE); } break; case IDC_FEEDSLIST: { if (HIWORD(wParam) == LBN_DBLCLK) { if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_REMOVEFEED))) EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEFEED), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS))) EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDOK))) EnableWindow(GetDlgItem(hwndDlg, IDOK), TRUE); int cursel = (int)SendMessage(FeedsList, LB_GETCURSEL, 0, 0); wchar_t item[MAX_PATH]; SendMessage(FeedsList, LB_GETTEXT, (WPARAM)cursel, (LPARAM)item); SendMessage(FeedsExportList, LB_ADDSTRING, 0, (LPARAM)item); SendMessage(FeedsList, LB_DELETESTRING, (WPARAM)cursel, 0); if (!SendMessage(FeedsList, LB_GETCOUNT, 0, 0)) { EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), FALSE); } } } break; case IDC_FEEDSEXPORTLIST: { if (HIWORD(wParam) == LBN_DBLCLK) { if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ADDFEED))) EnableWindow(GetDlgItem(hwndDlg, IDC_ADDFEED), TRUE); if (!IsWindowEnabled(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS))) EnableWindow(GetDlgItem(hwndDlg, IDC_ADDALLFEEDS), TRUE); int cursel = (int)SendMessage(FeedsExportList, LB_GETCURSEL, 0, 0); wchar_t item[MAX_PATH]; SendMessage(FeedsExportList, LB_GETTEXT, (WPARAM)cursel, (LPARAM)item); SendMessage(FeedsList, LB_ADDSTRING, 0, (LPARAM)item); SendMessage(FeedsExportList, LB_DELETESTRING, (WPARAM)cursel, 0); if (!SendMessage(FeedsExportList, LB_GETCOUNT, 0, 0)) { EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEFEED), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_REMOVEALLFEEDS), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE); } } } break; } break; case WM_CLOSE: DestroyWindow(hwndDlg); break; case WM_DESTROY: Utils_SaveWindowPosition(hwndDlg, NULL, MODULE, "ExportDlg"); break; } return FALSE; }