diff options
Diffstat (limited to 'plugins/NewsAggregator/Src/Utils.cpp')
-rw-r--r-- | plugins/NewsAggregator/Src/Utils.cpp | 1054 |
1 files changed, 0 insertions, 1054 deletions
diff --git a/plugins/NewsAggregator/Src/Utils.cpp b/plugins/NewsAggregator/Src/Utils.cpp index 21c8e5c037..d5baafedb5 100644 --- a/plugins/NewsAggregator/Src/Utils.cpp +++ b/plugins/NewsAggregator/Src/Utils.cpp @@ -84,121 +84,6 @@ int GetImageFormat(const TCHAR *ext) return PA_FORMAT_UNKNOWN;
}
-void CreateAuthString(char *auth, HANDLE hContact, HWND hwndDlg)
-{
- DBVARIANT dbv;
- char *user = NULL, *pass = NULL;
- TCHAR *tlogin = NULL, *tpass = NULL, buf[MAX_PATH] = {0};
- if (hContact && db_get_b(hContact, MODULE, "UseAuth", 0)) {
- if (!db_get_ts(hContact, MODULE, "Login", &dbv)) {
- tlogin = mir_tstrdup(dbv.ptszVal);
- db_free(&dbv);
- }
- ptrA pwd(db_get_sa(hContact, MODULE, "Password"));
- if (pwd)
- CallService(MS_DB_CRYPT_DECODESTRING, strlen(pwd), pwd);
- tpass = mir_a2t(pwd);
- }
- else if (hwndDlg && IsDlgButtonChecked(hwndDlg, IDC_USEAUTH)) {
- GetDlgItemText(hwndDlg, IDC_LOGIN, buf, SIZEOF(buf));
- tlogin = mir_tstrdup(buf);
- GetDlgItemText(hwndDlg, IDC_PASSWORD, buf, SIZEOF(buf));
- tpass = mir_tstrdup(buf);
- }
- user = mir_t2a(tlogin);
- pass = mir_t2a(tpass);
-
- char str[MAX_PATH];
- int len = mir_snprintf(str, SIZEOF(str), "%s:%s", user, pass);
- mir_free(user);
- mir_free(pass);
- mir_free(tlogin);
- mir_free(tpass);
-
- mir_snprintf(auth, 250, "Basic %s", ptrA(mir_base64_encode((PBYTE)str, len)));
-}
-
-INT_PTR CALLBACK AuthenticationProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- switch (msg) {
- case WM_INITDIALOG:
- TranslateDialogDefault(hwndDlg);
- {
- ItemInfo &SelItem = *(ItemInfo*)lParam;
- SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG)&SelItem);
-
- if (SelItem.hwndList)
- {
- TCHAR str[MAX_PATH];
- if (GetDlgItemText(SelItem.hwndList, IDC_FEEDTITLE, str, SIZEOF(str)))
- SetDlgItemText(hwndDlg, IDC_FEEDNAME, str);
- else
- {
- GetDlgItemText(SelItem.hwndList, IDC_FEEDURL, str, SIZEOF(str));
- SetDlgItemText(hwndDlg, IDC_FEEDNAME, str);
- }
- }
- else if (SelItem.hContact)
- {
- DBVARIANT dbv;
- if (!db_get_ts(SelItem.hContact, MODULE, "Nick", &dbv)) {
- SetDlgItemText(hwndDlg, IDC_FEEDNAME, dbv.ptszVal);
- db_free(&dbv);
- }
- else if (!db_get_ts(SelItem.hContact, MODULE, "URL", &dbv)) {
- SetDlgItemText(hwndDlg, IDC_FEEDNAME, dbv.ptszVal);
- db_free(&dbv);
- }
- }
- }
- return TRUE;
-
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDOK:
- {
- ItemInfo &SelItem = *(ItemInfo*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
- TCHAR username[MAX_PATH];
- char passw[MAX_PATH];
- if (!GetDlgItemText(hwndDlg, IDC_FEEDUSERNAME, username, SIZEOF(username))) {
- MessageBox(hwndDlg, TranslateT("Enter your username"), TranslateT("Error"), MB_OK);
- break;
- }
- if (!GetDlgItemTextA(hwndDlg, IDC_FEEDPASSWORD, passw, SIZEOF(passw))) {
- MessageBox(hwndDlg, TranslateT("Enter your password"), TranslateT("Error"), MB_OK);
- break;
- }
- if (SelItem.hwndList)
- {
- CheckDlgButton(SelItem.hwndList, IDC_USEAUTH, BST_CHECKED);
- EnableWindow(GetDlgItem(SelItem.hwndList, IDC_LOGIN), TRUE);
- EnableWindow(GetDlgItem(SelItem.hwndList, IDC_PASSWORD), TRUE);
- SetDlgItemText(SelItem.hwndList, IDC_LOGIN, username);
- SetDlgItemTextA(SelItem.hwndList, IDC_PASSWORD, passw);
- }
- else if (SelItem.hContact)
- {
- db_set_b(SelItem.hContact, MODULE, "UseAuth", 1);
- db_set_ts(SelItem.hContact, MODULE, "Login", username);
- CallService(MS_DB_CRYPT_ENCODESTRING, strlen(passw), (LPARAM)&passw);
- db_set_s(SelItem.hContact, MODULE, "Password", passw);
- }
- EndDialog(hwndDlg, IDOK);
- return TRUE;
- }
-
- case IDCANCEL:
- {
- EndDialog(hwndDlg, IDCANCEL);
- return TRUE;
- }
- }
- break;
- }
-
- return FALSE;
-}
-
VOID GetNewsData(TCHAR *tszUrl, char **szData, HANDLE hContact, HWND hwndDlg)
{
NETLIBHTTPREQUEST nlhr = {0};
@@ -705,943 +590,4 @@ VOID ClearText(TCHAR *&message) }
SysFreeString(bstrHtml);
CoUninitialize();
-}
-
-TCHAR * CheckFeed(TCHAR *tszURL, HWND hwndDlg)
-{
- char *szData = NULL;
- DBVARIANT dbVar = {0};
- GetNewsData(tszURL, &szData, NULL, hwndDlg);
- if (szData) {
- TCHAR *tszData = mir_utf8decodeT(szData);
- if (!tszData)
- tszData = mir_a2t(szData);
- int bytesParsed = 0;
- HXML hXml = xi.parseString(tszData, &bytesParsed, NULL);
- mir_free(tszData);
- mir_free(szData);
- if (hXml != NULL) {
- int childcount = 0;
- HXML node;
- if ( !lstrcmpi(xi.getName(hXml), _T("xml")))
- node = xi.getChild(hXml, childcount);
- else
- node = hXml;
- while (node) {
- if (!lstrcmpi(xi.getName(node), _T("rss")) || !lstrcmpi(xi.getName(node), _T("rdf"))) {
- HXML chan = xi.getChild(node, 0);
- for (int j = 0; j < xi.getChildCount(chan); j++) {
- HXML child = xi.getChild(chan, j);
- if (!lstrcmpi(xi.getName(child), _T("title"))) {
- TCHAR mes[MAX_PATH];
- mir_sntprintf(mes, SIZEOF(mes), TranslateT("%s\nis a valid feed's address."), tszURL);
- MessageBox(hwndDlg, mes, TranslateT("News Aggregator"), MB_OK|MB_ICONINFORMATION);
- TCHAR *tszTitle = (TCHAR *)xi.getText(child);
- return tszTitle;
- }
- }
- }
- else if (!lstrcmpi(xi.getName(node), _T("feed"))) {
- for (int j = 0; j < xi.getChildCount(node); j++) {
- HXML child = xi.getChild(node, j);
- if (!lstrcmpi(xi.getName(child), _T("title"))) {
- TCHAR mes[MAX_PATH];
- mir_sntprintf(mes, SIZEOF(mes), TranslateT("%s\nis a valid feed's address."), tszURL);
- MessageBox(hwndDlg, mes, TranslateT("News Aggregator"), MB_OK|MB_ICONINFORMATION);
- TCHAR *tszTitle = (TCHAR *)xi.getText(child);
- return tszTitle;
- }
- }
- }
- childcount +=1;
- node = xi.getChild(hXml, childcount);
- }
- }
- xi.destroyNode(hXml);
- }
- TCHAR mes[MAX_PATH];
- mir_sntprintf(mes, SIZEOF(mes), TranslateT("%s\nis not a valid feed's address."), tszURL);
- MessageBox(hwndDlg, mes, TranslateT("New Aggregator"), MB_OK|MB_ICONERROR);
- return NULL;
-}
-
-VOID CheckCurrentFeed(HANDLE hContact)
-{
- char *szData = NULL;
- DBVARIANT dbURL = {0};
- if (db_get_ts(hContact, MODULE, "URL", &dbURL))
- return;
-
- if (db_get_b(hContact, MODULE, "CheckState", 1) != 0) {
- GetNewsData(dbURL.ptszVal, &szData, hContact, NULL);
- db_free(&dbURL);
- if (szData) {
- TCHAR *tszData = mir_utf8decodeT(szData);
- if (!tszData)
- tszData = mir_a2t(szData);
- int bytesParsed = 0;
- HXML hXml = xi.parseString(tszData, &bytesParsed, NULL);
- mir_free(tszData);
- mir_free(szData);
- if(hXml != NULL) {
- int childcount = 0;
- HXML node;
- if ( !lstrcmpi(xi.getName(hXml), _T("xml")))
- node = xi.getChild(hXml, childcount);
- else
- node = hXml;
- while (node) {
- if (!lstrcmpi(xi.getName(node), _T("rss")) || !lstrcmpi(xi.getName(node), _T("rdf"))) {
- if (!lstrcmpi(xi.getName(node), _T("rss"))) {
- for (int i = 0; i < xi.getAttrCount(node); i++) {
- if (!lstrcmpi(xi.getAttrName(node, i), _T("version"))) {
- TCHAR ver[MAX_PATH];
- mir_sntprintf(ver, SIZEOF(ver), _T("RSS %s"), xi.getAttrValue(node, xi.getAttrName(node, i)));
- db_set_ts(hContact, MODULE, "MirVer", ver);
- break;
- }
- }
- }
- else if (!lstrcmpi(xi.getName(node), _T("rdf")))
- db_set_ts(hContact, MODULE, "MirVer", _T("RSS 1.0"));
-
- HXML chan = xi.getChild(node, 0);
- for (int j = 0; j < xi.getChildCount(chan); j++) {
- HXML child = xi.getChild(chan, j);
- if (!lstrcmpi(xi.getName(child), _T("title")) && xi.getText(child)) {
- TCHAR *string = mir_tstrdup(xi.getText(child));
- ClearText(string);
- db_set_ts(hContact, MODULE, "FirstName", string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(child), _T("link")) && xi.getText(child)) {
- TCHAR *string = mir_tstrdup(xi.getText(child));
- ClearText(string);
- db_set_ts(hContact, MODULE, "Homepage", string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(child), _T("description")) && xi.getText(child)) {
- TCHAR *string = mir_tstrdup(xi.getText(child));
- ClearText(string);
- db_set_ts(hContact, MODULE, "About", string);
- db_set_ts(hContact, "CList", "StatusMsg", string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(child), _T("language")) && xi.getText(child)) {
- TCHAR *string = mir_tstrdup(xi.getText(child));
- ClearText(string);
- db_set_ts(hContact, MODULE, "Language1", string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(child), _T("managingEditor")) && xi.getText(child)) {
- TCHAR *string = mir_tstrdup(xi.getText(child));
- ClearText(string);
- db_set_ts(hContact, MODULE, "e-mail", string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(child), _T("category")) && xi.getText(child)) {
- TCHAR *string = mir_tstrdup(xi.getText(child));
- ClearText(string);
- db_set_ts(hContact, MODULE, "Interest0Text", string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(child), _T("image"))) {
- for (int x = 0; x < xi.getChildCount(child); x++) {
- HXML imageval = xi.getChild(child, x);
- if (!lstrcmpi(xi.getName(imageval), _T("url"))) {
- LPCTSTR url = xi.getText(imageval);
- db_set_ts(hContact, MODULE, "ImageURL", url);
-
- PROTO_AVATAR_INFORMATIONT pai = {NULL};
- pai.cbSize = sizeof(pai);
- pai.hContact = hContact;
- DBVARIANT dbVar = {0};
-
- if (!db_get_ts(hContact, MODULE, "Nick", &dbVar)) {
- TCHAR *ext = _tcsrchr((TCHAR *)url, _T('.')) + 1;
- pai.format = GetImageFormat(ext);
-
- TCHAR *filename = dbVar.ptszVal;
- mir_sntprintf(pai.filename, SIZEOF(pai.filename), _T("%s\\%s.%s"), tszRoot, filename, ext);
- if (DownloadFile(url, pai.filename)) {
- db_set_ts(hContact, MODULE, "ImagePath", pai.filename);
- ProtoBroadcastAck(MODULE, hContact, ACKTYPE_AVATAR, ACKRESULT_SUCCESS, (HANDLE) &pai, NULL);
- }
- else ProtoBroadcastAck(MODULE, hContact, ACKTYPE_AVATAR, ACKRESULT_FAILED, (HANDLE) &pai, NULL);
- db_free(&dbVar);
- break;
- }
- }
- }
- }
- if (!lstrcmpi(xi.getName(child), _T("lastBuildDate")) && xi.getText(child)) {
- TCHAR *lastupdtime = (TCHAR *)xi.getText(child);
- time_t stamp = DateToUnixTime(lastupdtime, 0);
- double deltaupd = difftime(time(NULL), stamp);
- double deltacheck = difftime(time(NULL), db_get_dw(hContact, MODULE, "LastCheck", 0));
- if (deltaupd - deltacheck >= 0) {
- db_set_dw(hContact, MODULE, "LastCheck", time(NULL));
- xi.destroyNode(hXml);
- return;
- }
- continue;
- }
- if (!lstrcmpi(xi.getName(child), _T("item"))) {
- TCHAR *title = NULL, *link = NULL, *datetime = NULL, *descr = NULL, *author = NULL, *comments = NULL, *guid = NULL, *category = NULL;
- for (int z = 0; z < xi.getChildCount(child); z++) {
- HXML itemval = xi.getChild(child, z);
- if (!lstrcmpi(xi.getName(itemval), _T("title"))) {
- TCHAR *string = mir_tstrdup(xi.getText(itemval));
- ClearText(string);
- title = mir_tstrdup(string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(itemval), _T("link"))) {
- TCHAR *string = mir_tstrdup(xi.getText(itemval));
- ClearText(string);
- link = mir_tstrdup(string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(itemval), _T("pubDate"))) {
- datetime = (TCHAR *)xi.getText(itemval);
- continue;
- }
- if (!lstrcmpi(xi.getName(itemval), _T("dc:date"))) {
- datetime = (TCHAR *)xi.getText(itemval);
- continue;
- }
- if (!lstrcmpi(xi.getName(itemval), _T("description"))) {
- TCHAR *string = mir_tstrdup(xi.getText(itemval));
- ClearText(string);
- descr = mir_tstrdup(string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(itemval), _T("author"))) {
- TCHAR *string = mir_tstrdup(xi.getText(itemval));
- ClearText(string);
- author = mir_tstrdup(string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(itemval), _T("comments"))) {
- TCHAR *string = mir_tstrdup(xi.getText(itemval));
- ClearText(string);
- comments = mir_tstrdup(string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(itemval), _T("guid"))) {
- TCHAR *string = mir_tstrdup(xi.getText(itemval));
- ClearText(string);
- guid = mir_tstrdup(string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(itemval), _T("category"))) {
- TCHAR *string = mir_tstrdup(xi.getText(itemval));
- ClearText(string);
- category = mir_tstrdup(string);
- mir_free(string);
- continue;
- }
- }
- TCHAR *message;
- DBVARIANT dbMsg = {0};
- if (db_get_ts(hContact, MODULE, "MsgFormat", &dbMsg))
- message = _T(TAGSDEFAULT);
- else
- message = mir_tstrdup(dbMsg.ptszVal);
- db_free(&dbMsg);
- if (!title)
- StrReplace(_T("#<title>#"), TranslateT("empty"), message);
- else {
- StrReplace(_T("#<title>#"), title, message);
- mir_free(title);
- }
- if (!link)
- StrReplace(_T("#<link>#"), TranslateT("empty"), message);
- else {
- StrReplace(_T("#<link>#"), link, message);
- mir_free(link);
- }
- if (!descr)
- StrReplace(_T("#<description>#"), TranslateT("empty"), message);
- else {
- StrReplace(_T("#<description>#"), descr, message);
- mir_free(descr);
- }
- if (!author)
- StrReplace(_T("#<author>#"), TranslateT("empty"), message);
- else {
- StrReplace(_T("#<author>#"), author, message);
- mir_free(author);
- }
- if (!comments)
- StrReplace(_T("#<comments>#"), TranslateT("empty"), message);
- else {
- StrReplace(_T("#<comments>#"), comments, message);
- mir_free(comments);
- }
- if (!guid)
- StrReplace(_T("#<guid>#"), TranslateT("empty"), message);
- else {
- StrReplace(_T("#<guid>#"), guid, message);
- mir_free(guid);
- }
- if (!category)
- StrReplace(_T("#<category>#"), TranslateT("empty"), message);
- else {
- StrReplace(_T("#<category>#"), category, message);
- mir_free(category);
- }
-
- time_t stamp;
- if (!datetime)
- stamp = time(NULL);
- else
- stamp = DateToUnixTime(datetime, 0);
-
- HANDLE hDbEvent = db_event_first(hContact);
- BOOL MesExist = FALSE;
- while (hDbEvent) {
- DBEVENTINFO olddbei = { sizeof(olddbei) };
- olddbei.cbBlob = db_event_getBlobSize(hDbEvent);
- olddbei.pBlob = (PBYTE)mir_alloc(olddbei.cbBlob);
- db_event_get(hDbEvent, &olddbei);
- char *pszTemp = mir_utf8encodeT(message);
- if (olddbei.cbBlob == lstrlenA(pszTemp) + 1 && !lstrcmpA((char *)olddbei.pBlob, pszTemp)) {
- MesExist = TRUE;
- break;
- }
- hDbEvent = db_event_next(hDbEvent);
- mir_free(olddbei.pBlob);
- mir_free(pszTemp);
- }
-
- if (!MesExist) {
- PROTORECVEVENT recv;
- recv.flags = PREF_TCHAR;
- recv.timestamp = stamp;
- recv.tszMessage = message;
- ProtoChainRecvMsg(hContact, &recv);
- }
- mir_free(message);
- }
- }
- }
- else if (!lstrcmpi(xi.getName(node), _T("feed"))) {
- db_set_ts(hContact, MODULE, "MirVer", _T("Atom 3"));
- for (int j = 0; j < xi.getChildCount(node); j++) {
- HXML child = xi.getChild(node, j);
- if (!lstrcmpi(xi.getName(child), _T("title")) && xi.getText(child)) {
- TCHAR *string = mir_tstrdup(xi.getText(child));
- ClearText(string);
- db_set_ts(hContact, MODULE, "FirstName", string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(child), _T("link"))) {
- for (int x = 0; x < xi.getAttrCount(child); x++) {
- if (!lstrcmpi(xi.getAttrName(child, x), _T("rel")))
- if (!lstrcmpi(xi.getAttrValue(child, xi.getAttrName(child, x)), _T("self")))
- break;
-
- if (!lstrcmpi(xi.getAttrName(child, x), _T("href")))
- db_set_ts(hContact, MODULE, "Homepage", xi.getAttrValue(child, xi.getAttrName(child, x)));
- }
- continue;
- }
- if (!lstrcmpi(xi.getName(child), _T("subtitle")) && xi.getText(child)) {
- TCHAR *string = mir_tstrdup(xi.getText(child));
- ClearText(string);
- db_set_ts(hContact, MODULE, "About", string);
- db_set_ts(hContact, "CList", "StatusMsg", string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(child), _T("language")) && xi.getText(child)) {
- TCHAR *string = mir_tstrdup(xi.getText(child));
- ClearText(string);
- db_set_ts(hContact, MODULE, "Language1", string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(child), _T("author"))) {
- for (int x = 0; x < xi.getChildCount(child); x++) {
- HXML authorval = xi.getChild(child, x);
- if (!lstrcmpi(xi.getName(authorval), _T("name"))) {
- db_set_ts(hContact, MODULE, "e-mail", xi.getText(authorval));
- break;
- }
- }
- continue;
- }
- if (!lstrcmpi(xi.getName(child), _T("category")) && xi.getText(child)) {
- TCHAR *string = mir_tstrdup(xi.getText(child));
- ClearText(string);
- db_set_ts(hContact, MODULE, "Interest0Text", string);
- mir_free(string);
- continue;
- }
- if (!lstrcmpi(xi.getName(child), _T("icon"))) {
- for (int x = 0; x < xi.getChildCount(child); x++) {
- HXML imageval = xi.getChild(child, x);
- if (!lstrcmpi(xi.getName(imageval), _T("url"))) {
- LPCTSTR url = xi.getText(imageval);
- db_set_ts(hContact, MODULE, "ImageURL", url);
-
- PROTO_AVATAR_INFORMATIONT pai = {NULL};
- pai.cbSize = sizeof(pai);
- pai.hContact = hContact;
- DBVARIANT dbVar = {0};
-
- if (!db_get_ts(hContact, MODULE, "Nick", &dbVar)) {
- TCHAR *ext = _tcsrchr((TCHAR *)url, _T('.')) + 1;
- pai.format = GetImageFormat(ext);
-
- TCHAR *filename = dbVar.ptszVal;
- mir_sntprintf(pai.filename, SIZEOF(pai.filename), _T("%s\\%s.%s"), tszRoot, filename, ext);
- if (DownloadFile(url, pai.filename)) {
- db_set_ts(hContact, MODULE, "ImagePath", pai.filename);
- ProtoBroadcastAck(MODULE, hContact, ACKTYPE_AVATAR, ACKRESULT_SUCCESS, (HANDLE) &pai, NULL);
- }
- else ProtoBroadcastAck(MODULE, hContact, ACKTYPE_AVATAR, ACKRESULT_FAILED, (HANDLE) &pai, NULL);
- db_free(&dbVar);
- break;
- }
- }
- }
- }
- if (!lstrcmpi(xi.getName(child), _T("updated")) && xi.getText(child)) {
- TCHAR *lastupdtime = (TCHAR *)xi.getText(child);
- time_t stamp = DateToUnixTime(lastupdtime, 1);
- double deltaupd = difftime(time(NULL), stamp);
- double deltacheck = difftime(time(NULL), db_get_dw(hContact, MODULE, "LastCheck", 0));
- if (deltaupd - deltacheck >= 0) {
- db_set_dw(hContact, MODULE, "LastCheck", time(NULL));
- xi.destroyNode(hXml);
- return;
- }
- continue;
- }
- if (!lstrcmpi(xi.getName(child), _T("entry"))) {
- TCHAR *title = NULL, *link = NULL, *datetime = NULL, *descr = NULL, *author = NULL, *comments = NULL, *guid = NULL, *category = NULL;
- for (int z = 0; z < xi.getChildCount(child); z++) {
- HXML itemval = xi.getChild(child, z);
- if (!lstrcmpi(xi.getName(itemval), _T("title")) && xi.getText(itemval)) {
- TCHAR *string = mir_tstrdup(xi.getText(itemval));
- ClearText(string);
- title = string;
- continue;
- }
- if (!lstrcmpi(xi.getName(itemval), _T("link"))) {
- for (int x = 0; x < xi.getAttrCount(itemval); x++) {
- if (!lstrcmpi(xi.getAttrName(itemval, x), _T("href"))) {
- TCHAR *string = mir_tstrdup(xi.getAttrValue(itemval, xi.getAttrName(itemval, x)));
- ClearText(string);
- link = string;
- break;
- }
- }
- continue;
- }
- if (!lstrcmpi(xi.getName(itemval), _T("updated"))) {
- datetime = (TCHAR *)xi.getText(itemval);
- continue;
- }
- if ((!lstrcmpi(xi.getName(itemval), _T("summary")) || !lstrcmpi(xi.getName(itemval), _T("content"))) && xi.getText(itemval)) {
- TCHAR *string = mir_tstrdup(xi.getText(itemval));
- ClearText(string);
- descr = string;
- continue;
- }
- if (!lstrcmpi(xi.getName(itemval), _T("author"))) {
- for (int x = 0; x < xi.getChildCount(itemval); x++) {
- HXML authorval = xi.getChild(itemval, x);
- if (!lstrcmpi(xi.getName(authorval), _T("name")) && xi.getText(authorval)) {
- TCHAR *string = mir_tstrdup(xi.getText(authorval));
- ClearText(string);
- author = string;
- break;
- }
- }
- continue;
- }
- if (!lstrcmpi(xi.getName(itemval), _T("comments")) && xi.getText(itemval)) {
- TCHAR *string = mir_tstrdup(xi.getText(itemval));
- ClearText(string);
- comments = string;
- continue;
- }
- if (!lstrcmpi(xi.getName(itemval), _T("id"))) {
- TCHAR *string = mir_tstrdup(xi.getText(itemval));
- ClearText(string);
- guid = string;
- continue;
- }
- if (!lstrcmpi(xi.getName(itemval), _T("category"))) {
- for (int x = 0; x < xi.getAttrCount(itemval); x++) {
- if (!lstrcmpi(xi.getAttrName(itemval, x), _T("term")) && xi.getText(itemval)) {
- TCHAR *string = mir_tstrdup(xi.getAttrValue(itemval, xi.getAttrName(itemval, x)));
- ClearText(string);
- category = string;
- break;
- }
- }
- continue;
- }
- }
- TCHAR *message;
- DBVARIANT dbMsg = {0};
- if (db_get_ts(hContact, MODULE, "MsgFormat", &dbMsg))
- message = _T(TAGSDEFAULT);
- else
- message = mir_tstrdup(dbMsg.ptszVal);
- db_free(&dbMsg);
-
- if (!title)
- StrReplace(_T("#<title>#"), TranslateT("empty"), message);
- else {
- StrReplace(_T("#<title>#"), title, message);
- mir_free(title);
- }
- if (!link)
- StrReplace(_T("#<link>#"), TranslateT("empty"), message);
- else {
- StrReplace(_T("#<link>#"), link, message);
- mir_free(link);
- }
- if (!descr)
- StrReplace(_T("#<description>#"), TranslateT("empty"), message);
- else {
- StrReplace(_T("#<description>#"), descr, message);
- mir_free(descr);
- }
- if (!author)
- StrReplace(_T("#<author>#"), TranslateT("empty"), message);
- else {
- StrReplace(_T("#<author>#"), author, message);
- mir_free(author);
- }
- if (!comments)
- StrReplace(_T("#<comments>#"), TranslateT("empty"), message);
- else {
- StrReplace(_T("#<comments>#"), comments, message);
- mir_free(comments);
- }
- if (!guid)
- StrReplace(_T("#<guid>#"), TranslateT("empty"), message);
- else {
- StrReplace(_T("#<guid>#"), guid, message);
- mir_free(guid);
- }
- if (!category)
- StrReplace(_T("#<category>#"), TranslateT("empty"), message);
- else {
- StrReplace(_T("#<category>#"), category, message);
- mir_free(category);
- }
-
- time_t stamp;
- if (!datetime)
- stamp = time(NULL);
- else
- stamp = DateToUnixTime(datetime, 1);
-
- HANDLE hDbEvent = db_event_first(hContact);
- BOOL MesExist = FALSE;
- while (hDbEvent) {
- DBEVENTINFO olddbei = { sizeof(olddbei) };
- olddbei.cbBlob = db_event_getBlobSize(hDbEvent);
- olddbei.pBlob = (PBYTE)mir_alloc(olddbei.cbBlob);
- db_event_get(hDbEvent, &olddbei);
- char *pszTemp = mir_utf8encodeT(message);
- if (olddbei.cbBlob == lstrlenA(pszTemp) + 1 && !lstrcmpA((char *)olddbei.pBlob, pszTemp))
- MesExist = TRUE;
- hDbEvent = db_event_next(hDbEvent);
- mir_free(olddbei.pBlob);
- mir_free(pszTemp);
- }
-
- if (!MesExist) {
- PROTORECVEVENT recv;
- recv.flags = PREF_TCHAR;
- recv.timestamp = stamp;
- recv.tszMessage = message;
- ProtoChainRecvMsg(hContact, &recv);
- }
- mir_free(message);
- }
- }
- }
- childcount +=1;
- node = xi.getChild(hXml, childcount);
- }
- xi.destroyNode(hXml);
- }
- }
- db_set_dw(hContact, MODULE, "LastCheck", time(NULL));
- }
-}
-
-VOID CheckCurrentFeedAvatar(HANDLE hContact)
-{
- char *szData = NULL;
- DBVARIANT dbURL = {0};
- if (db_get_ts(hContact, MODULE, "URL", &dbURL))
- return;
-
- if (db_get_b(hContact, MODULE, "CheckState", 1) != 0) {
- GetNewsData(dbURL.ptszVal, &szData, hContact, NULL);
- db_free(&dbURL);
- if (szData) {
- TCHAR *tszData = mir_utf8decodeT(szData);
- if (!tszData)
- tszData = mir_a2t(szData);
- int bytesParsed = 0;
- HXML hXml = xi.parseString(tszData, &bytesParsed, NULL);
- mir_free(tszData);
- mir_free(szData);
- if(hXml != NULL) {
- int childcount = 0;
- HXML node = xi.getChild(hXml, childcount);
- while (node) {
- if (!lstrcmpi(xi.getName(node), _T("rss")) || !lstrcmpi(xi.getName(node), _T("rdf"))) {
- HXML chan = xi.getChild(node, 0);
- for (int j = 0; j < xi.getChildCount(chan); j++) {
- HXML child = xi.getChild(chan, j);
- if (!lstrcmpi(xi.getName(child), _T("image"))) {
- for (int x = 0; x < xi.getChildCount(child); x++) {
- HXML imageval = xi.getChild(child, x);
- if (!lstrcmpi(xi.getName(imageval), _T("url"))) {
- LPCTSTR url = xi.getText(imageval);
- db_set_ts(hContact, MODULE, "ImageURL", url);
-
- PROTO_AVATAR_INFORMATIONT pai = {NULL};
- pai.cbSize = sizeof(pai);
- pai.hContact = hContact;
- DBVARIANT dbVar = {0};
-
- if (!db_get_ts(hContact, MODULE, "Nick", &dbVar)) {
- TCHAR *ext = _tcsrchr((TCHAR *)url, _T('.')) + 1;
- pai.format = GetImageFormat(ext);
-
- TCHAR *filename = dbVar.ptszVal;
- mir_sntprintf(pai.filename, SIZEOF(pai.filename), _T("%s\\%s.%s"), tszRoot, filename, ext);
- if (DownloadFile(url, pai.filename)) {
- db_set_ts(hContact, MODULE, "ImagePath", pai.filename);
- ProtoBroadcastAck(MODULE, hContact, ACKTYPE_AVATAR, ACKRESULT_SUCCESS, (HANDLE) &pai, NULL);
- }
- else ProtoBroadcastAck(MODULE, hContact, ACKTYPE_AVATAR, ACKRESULT_FAILED, (HANDLE) &pai, NULL);
- db_free(&dbVar);
- break;
- }
- }
- }
- }
- }
- }
- else if (!lstrcmpi(xi.getName(node), _T("feed"))) {
- for (int j = 0; j < xi.getChildCount(node); j++) {
- HXML child = xi.getChild(node, j);
- if (!lstrcmpi(xi.getName(child), _T("icon"))) {
- for (int x = 0; x < xi.getChildCount(child); x++) {
- HXML imageval = xi.getChild(child, x);
- if (!lstrcmpi(xi.getName(imageval), _T("url"))) {
- LPCTSTR url = xi.getText(imageval);
- db_set_ts(hContact, MODULE, "ImageURL", url);
-
- PROTO_AVATAR_INFORMATIONT pai = {NULL};
- pai.cbSize = sizeof(pai);
- pai.hContact = hContact;
- DBVARIANT dbVar = {0};
-
- if (!db_get_ts(hContact, MODULE, "Nick", &dbVar)) {
- TCHAR *ext = _tcsrchr((TCHAR *)url, _T('.')) + 1;
- pai.format = GetImageFormat(ext);
-
- TCHAR *filename = dbVar.ptszVal;
- mir_sntprintf(pai.filename, SIZEOF(pai.filename), _T("%s\\%s.%s"), tszRoot, filename, ext);
- if (DownloadFile(url, pai.filename)) {
- db_set_ts(hContact, MODULE, "ImagePath", pai.filename);
- ProtoBroadcastAck(MODULE, hContact, ACKTYPE_AVATAR, ACKRESULT_SUCCESS, (HANDLE) &pai, NULL);
- }
- else ProtoBroadcastAck(MODULE, hContact, ACKTYPE_AVATAR, ACKRESULT_FAILED, (HANDLE) &pai, NULL);
- db_free(&dbVar);
- break;
- }
- }
- }
- }
- }
- }
- childcount +=1;
- node = xi.getChild(hXml, childcount);
- }
- xi.destroyNode(hXml);
- }
- }
- }
-}
-
-int ImportFeedsDialog()
-{
- TCHAR FileName[MAX_PATH];
- TCHAR *tszMirDir = Utils_ReplaceVarsT(_T("%miranda_path%"));
-
- OPENFILENAME ofn = {0};
- ofn.lStructSize = sizeof(ofn);
- TCHAR tmp[MAX_PATH];
- mir_sntprintf(tmp, SIZEOF(tmp), _T("%s (*.opml, *.xml)%c*.opml;*.xml%c%c"), TranslateT("OPML files"), 0, 0, 0);
- ofn.lpstrFilter = tmp;
- ofn.hwndOwner = 0;
- ofn.lpstrFile = FileName;
- ofn.nMaxFile = MAX_PATH;
- ofn.nMaxFileTitle = MAX_PATH;
- ofn.Flags = OFN_HIDEREADONLY;
- ofn.lpstrInitialDir = tszMirDir;
- *FileName = '\0';
- ofn.lpstrDefExt = _T("");
-
- if (GetOpenFileName(&ofn)) {
- int bytesParsed = 0;
- HXML hXml = xi.parseFile(FileName, &bytesParsed, NULL);
- if(hXml != NULL) {
- BYTE isTitleUTF = 0, isURLUTF = 0, isSiteURLUTF = 0, isGroupUTF = 0;
- HXML node = xi.getChildByPath(hXml, _T("opml/body/outline"), 0);
- if ( !node)
- node = xi.getChildByPath(hXml, _T("body/outline"), 0);
- if (node) {
- while (node) {
- int outlineAttr = xi.getAttrCount(node);
- int outlineChildsCount = xi.getChildCount(node);
- TCHAR *type = (TCHAR *)xi.getAttrValue(node, _T("type"));
- if ( !type && !outlineChildsCount) {
- HXML tmpnode = node;
- node = xi.getNextNode(node);
- if ( !node) {
- do {
- node = tmpnode;
- node = xi.getParent(node);
- tmpnode = node;
- node = xi.getNextNode(node);
- if (node)
- break;
- } while (lstrcmpi(xi.getName(node), _T("body")));
- }
- }
- else if (!type && outlineChildsCount)
- node = xi.getFirstChild(node);
- else if (type) {
- TCHAR *title = NULL, *url = NULL, *siteurl = NULL, *group = NULL, *utfgroup = NULL;
- for (int i = 0; i < outlineAttr; i++) {
- if (!lstrcmpi(xi.getAttrName(node, i), _T("title"))) {
- title = mir_utf8decodeT(_T2A(xi.getAttrValue(node, xi.getAttrName(node, i))));
- if ( !title) {
- isTitleUTF = 0;
- title = (TCHAR *)xi.getAttrValue(node, xi.getAttrName(node, i));
- } else
- isTitleUTF = 1;
- continue;
- }
- if (!lstrcmpi(xi.getAttrName(node, i), _T("xmlUrl"))) {
- url = mir_utf8decodeT(_T2A(xi.getAttrValue(node, xi.getAttrName(node, i))));
- if ( !url) {
- isURLUTF = 0;
- url = (TCHAR *)xi.getAttrValue(node, xi.getAttrName(node, i));
- } else
- isURLUTF = 1;
- continue;
- }
- if (!lstrcmpi(xi.getAttrName(node, i), _T("htmlUrl"))) {
- siteurl = mir_utf8decodeT(_T2A(xi.getAttrValue(node, xi.getAttrName(node, i))));
- if ( !siteurl) {
- isSiteURLUTF = 0;
- siteurl = (TCHAR *)xi.getAttrValue(node, xi.getAttrName(node, i));
- } else
- isSiteURLUTF = 1;
- continue;
- }
- if (title && url && siteurl)
- break;
- }
-
- HXML parent = xi.getParent(node);
- while (lstrcmpi(xi.getName(parent), _T("body"))) {
- for (int i = 0; i < xi.getAttrCount(parent); i++) {
- if (!lstrcmpi(xi.getAttrName(parent, i), _T("title"))) {
- if ( !group)
- group = (TCHAR *)xi.getAttrValue(parent, xi.getAttrName(parent, i));
- else {
- TCHAR tmpgroup[1024];
- mir_sntprintf(tmpgroup, SIZEOF(tmpgroup), _T("%s\\%s"), xi.getAttrValue(parent, xi.getAttrName(parent, i)), group);
- group = tmpgroup;
- }
- break;
- }
- }
- parent = xi.getParent(parent);
- }
-
- if (group) {
- utfgroup = mir_utf8decodeT(_T2A(group));
- if ( !utfgroup) {
- isGroupUTF = 0;
- utfgroup = group;
- } else
- isGroupUTF = 1;
- }
-
- HANDLE hContact = (HANDLE)CallService(MS_DB_CONTACT_ADD, 0, 0);
- CallService(MS_PROTO_ADDTOCONTACT, (WPARAM)hContact, (LPARAM)MODULE);
- db_set_ts(hContact, MODULE, "Nick", title);
- db_set_ts(hContact, MODULE, "URL", url);
- db_set_ts(hContact, MODULE, "Homepage", siteurl);
- db_set_b(hContact, MODULE, "CheckState", 1);
- db_set_dw(hContact, MODULE, "UpdateTime", DEFAULT_UPDATE_TIME);
- db_set_ts(hContact, MODULE, "MsgFormat", _T(TAGSDEFAULT));
- db_set_w(hContact, MODULE, "Status", CallProtoService(MODULE, PS_GETSTATUS, 0, 0));
- if (utfgroup) {
- db_set_ts(hContact, "CList", "Group", utfgroup);
- int hGroup = 1;
- char *group_name;
- BYTE GroupExist = 0;
- do {
- group_name = (char *)CallService(MS_CLIST_GROUPGETNAME, (WPARAM)hGroup, 0);
- if (group_name != NULL && !strcmp(group_name, _T2A(utfgroup))) {
- GroupExist = 1;
- break;
- }
- hGroup++;
- }
- while (group_name);
-
- if(!GroupExist)
- CallService(MS_CLIST_GROUPCREATE, 0, (LPARAM)utfgroup);
- }
- if (isTitleUTF)
- mir_free(title);
- if (isURLUTF)
- mir_free(url);
- if (isGroupUTF)
- mir_free(utfgroup);
- if (isSiteURLUTF)
- mir_free(siteurl);
-
- HXML tmpnode = node;
- node = xi.getNextNode(node);
- if ( !node) {
- do {
- node = tmpnode;
- node = xi.getParent(node);
- tmpnode = node;
- node = xi.getNextNode(node);
- if (node)
- break;
- }
- while (lstrcmpi(xi.getName(tmpnode), _T("body")));
- }
- }
- }
- }
- else MessageBox(NULL, TranslateT("Not valid import file."), TranslateT("Error"), MB_OK | MB_ICONERROR);
- xi.destroyNode(hXml);
- }
- else MessageBox(NULL, TranslateT("Not valid import file."), TranslateT("Error"), MB_OK | MB_ICONERROR);
-
- mir_free(tszMirDir);
- return 0;
- }
- mir_free(tszMirDir);
- return 1;
-}
-
-VOID ExportFeedsDialog()
-{
- TCHAR FileName[MAX_PATH];
- TCHAR *tszMirDir = Utils_ReplaceVarsT(_T("%miranda_path%"));
-
- OPENFILENAME ofn = {0};
- ofn.lStructSize = sizeof(ofn);
- TCHAR tmp[MAX_PATH];
- mir_sntprintf(tmp, SIZEOF(tmp), _T("%s (*.opml)%c*.opml%c%c"), TranslateT("OPML files"), 0, 0, 0);
- ofn.lpstrFilter = tmp;
- ofn.hwndOwner = 0;
- 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 = _T("");
-
- if (GetSaveFileName(&ofn)) {
- HXML hXml = xi.createNode(_T("opml"), NULL, FALSE);
- xi.addAttr(hXml, _T("version"), _T("1.0"));
- HXML header = xi.addChild(hXml, _T("head"), NULL);
- HXML title = xi.addChild(header, _T("title"), _T("Miranda NG NewsAggregator plugin export"));
- header = xi.addChild(hXml, _T("body"), NULL);
-
- for (HANDLE hContact = db_find_first(MODULE); hContact; hContact = db_find_next(hContact, MODULE)) {
- TCHAR *title = NULL, *url = NULL, *siteurl = NULL, *group = NULL;
- DBVARIANT dbv = {0};
- if (!db_get_ts(hContact, MODULE, "Nick", &dbv)) {
- title = mir_tstrdup(dbv.ptszVal);
- db_free(&dbv);
- }
- if (!db_get_ts(hContact, MODULE, "URL", &dbv)) {
- url = mir_tstrdup(dbv.ptszVal);
- db_free(&dbv);
- }
- if (!db_get_ts(hContact, MODULE, "Homepage", &dbv)) {
- siteurl = mir_tstrdup(dbv.ptszVal);
- db_free(&dbv);
- }
- if (!db_get_ts(hContact, "CList", "Group", &dbv)) {
- group = mir_tstrdup(dbv.ptszVal);
- db_free(&dbv);
- }
- HXML elem = header;
- if (group)
- {
- TCHAR *section = _tcstok(group, _T("\\"));
- while (section != NULL)
- {
- HXML existgroup = xi.getChildByAttrValue(header, _T("outline"), _T("title"), section);
- if ( !existgroup)
- {
- elem = xi.addChild(elem, _T("outline"), NULL);
- xi.addAttr(elem, _T("title"), section);
- xi.addAttr(elem, _T("text"), section);
- } else {
- elem = existgroup;
- }
- section = _tcstok(NULL, _T("\\"));
- }
- elem = xi.addChild(elem, _T("outline"), NULL);
- } else
- elem = xi.addChild(elem, _T("outline"), NULL);
- xi.addAttr(elem, _T("text"), title);
- xi.addAttr(elem, _T("title"), title);
- xi.addAttr(elem, _T("type"), _T("rss"));
- xi.addAttr(elem, _T("xmlUrl"), url);
- xi.addAttr(elem, _T("htmlUrl"), siteurl);
-
- mir_free(title);
- mir_free(url);
- mir_free(siteurl);
- mir_free(group);
- }
- xi.toFile(hXml, FileName, 1);
- xi.destroyNode(hXml);
- }
}
\ No newline at end of file |