summaryrefslogtreecommitdiff
path: root/plugins/NewsAggregator
diff options
context:
space:
mode:
authorKirill Volinsky <mataes2007@gmail.com>2013-03-30 12:10:27 +0000
committerKirill Volinsky <mataes2007@gmail.com>2013-03-30 12:10:27 +0000
commitc0fe2bfcae3c8b4eb856c750b25cd99a5705c9c8 (patch)
tree2594870cc99f43486928a864f2430aa0bb9667af /plugins/NewsAggregator
parentdb47dabaddfab41eb418eebfecac0ad3c841b8f0 (diff)
starting import implementation (not working yet)
git-svn-id: http://svn.miranda-ng.org/main/trunk@4249 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/NewsAggregator')
-rw-r--r--plugins/NewsAggregator/Res/Resource.rc10
-rw-r--r--plugins/NewsAggregator/Src/Common.h2
-rw-r--r--plugins/NewsAggregator/Src/Options.cpp150
-rw-r--r--plugins/NewsAggregator/Src/Services.cpp4
-rw-r--r--plugins/NewsAggregator/Src/Update.cpp4
-rw-r--r--plugins/NewsAggregator/Src/resource.h8
-rw-r--r--plugins/NewsAggregator/docs/subscriptions_test.xml175
7 files changed, 317 insertions, 36 deletions
diff --git a/plugins/NewsAggregator/Res/Resource.rc b/plugins/NewsAggregator/Res/Resource.rc
index ebfaf80278..a05fbb0698 100644
--- a/plugins/NewsAggregator/Res/Resource.rc
+++ b/plugins/NewsAggregator/Res/Resource.rc
@@ -13,7 +13,7 @@
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
-// () resources
+// Russian (Russia) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
@@ -48,8 +48,8 @@ BEGIN
PUSHBUTTON "Add",IDC_ADD,79,187,50,14
PUSHBUTTON "Change",IDC_CHANGE,133,187,50,14
PUSHBUTTON "Remove",IDC_REMOVE,187,187,50,14
- PUSHBUTTON "Import",IDC_IMORT,252,204,50,14
- PUSHBUTTON "Export",IDC_EXORT,252,219,50,14
+ PUSHBUTTON "Import",IDC_IMPORT,252,204,50,14
+ PUSHBUTTON "Export",IDC_EXPORT,252,219,50,14
CONTROL "Retrieve news at startup",IDC_STARTUPRETRIEVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,9,205,203,10
END
@@ -80,7 +80,7 @@ BEGIN
LTEXT "All item's tags are valid. Put them between #. Example: #<author>#",IDC_STATIC,14,182,160,16
PUSHBUTTON "Reset",IDC_RESET,192,184,45,14
PUSHBUTTON "?",IDC_TAGHELP,175,184,15,14
- LTEXT "0 - check manually",IDC_STATIC,100,55,79,8
+ LTEXT "0 - check manually",IDC_STATIC,100,55,78,8
EDITTEXT IDC_CHECKTIME,64,45,32,12,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_TIMEOUT_VALUE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,85,45,11,12
END
@@ -134,7 +134,7 @@ BEGIN
END
#endif // APSTUDIO_INVOKED
-#endif // () resources
+#endif // Russian (Russia) resources
/////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/NewsAggregator/Src/Common.h b/plugins/NewsAggregator/Src/Common.h
index 51824c6d07..d26aefed29 100644
--- a/plugins/NewsAggregator/Src/Common.h
+++ b/plugins/NewsAggregator/Src/Common.h
@@ -49,6 +49,8 @@ Boston, MA 02111-1307, USA.
#define MODULE "NewsAggregator"
#define TAGSDEFAULT "#<title>#\r\n#<link>#\r\n#<description>#"
#define DEFAULT_AVATARS_FOLDER "NewsAggregator"
+#define DEFAULT_UPDATE_TIME 60
+
extern HINSTANCE hInst;
extern HWND hAddFeedDlg;
extern HANDLE hChangeFeedDlgList;
diff --git a/plugins/NewsAggregator/Src/Options.cpp b/plugins/NewsAggregator/Src/Options.cpp
index af216f5b56..2294167848 100644
--- a/plugins/NewsAggregator/Src/Options.cpp
+++ b/plugins/NewsAggregator/Src/Options.cpp
@@ -31,7 +31,7 @@ INT_PTR CALLBACK DlgProcAddFeedOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA
SetDlgItemText(hwndDlg, IDC_FEEDURL, _T("http://"));
SetDlgItemText(hwndDlg, IDC_TAGSEDIT, _T(TAGSDEFAULT));
SendDlgItemMessage(hwndDlg, IDC_CHECKTIME, EM_LIMITTEXT, 3, 0);
- SetDlgItemInt(hwndDlg, IDC_CHECKTIME, 60, TRUE);
+ SetDlgItemInt(hwndDlg, IDC_CHECKTIME, DEFAULT_UPDATE_TIME, TRUE);
SendDlgItemMessage(hwndDlg, IDC_TIMEOUT_VALUE_SPIN, UDM_SETRANGE32, 0, 999);
Utils_RestoreWindowPositionNoSize(hwndDlg,NULL,MODULE,"AddDlg");
return TRUE;
@@ -195,7 +195,7 @@ INT_PTR CALLBACK DlgProcChangeFeedOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LP
SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG)nSelItem);
SetDlgItemText(hwndDlg, IDC_FEEDURL, SelItem.url);
SetDlgItemText(hwndDlg, IDC_FEEDTITLE, SelItem.nick);
- SetDlgItemInt(hwndDlg, IDC_CHECKTIME, DBGetContactSettingDword(hContact, MODULE, "UpdateTime", 60), TRUE);
+ SetDlgItemInt(hwndDlg, IDC_CHECKTIME, DBGetContactSettingDword(hContact, MODULE, "UpdateTime", DEFAULT_UPDATE_TIME), TRUE);
DBVARIANT dbMsg = {0};
if (!DBGetContactSettingTString(hContact, MODULE, "MsgFormat", &dbMsg))
{
@@ -228,8 +228,8 @@ INT_PTR CALLBACK DlgProcChangeFeedOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LP
}
hContact = db_find_next(hContact);
}
- WindowList_Add(hChangeFeedDlgList,hwndDlg,hContact);
- Utils_RestoreWindowPositionNoSize(hwndDlg,hContact,MODULE,"ChangeDlg");
+ WindowList_Add(hChangeFeedDlgList, hwndDlg, hContact);
+ Utils_RestoreWindowPositionNoSize(hwndDlg, hContact, MODULE, "ChangeDlg");
return TRUE;
}
case WM_COMMAND:
@@ -305,13 +305,13 @@ INT_PTR CALLBACK DlgProcChangeFeedOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LP
{
TCHAR tszTagHelp[1024];
mir_sntprintf(tszTagHelp, SIZEOF(tszTagHelp), _T("%s - %s\n%s - %s\n%s - %s\n%s - %s\n%s - %s\n%s - %s\n%s - %s"),
- _T("#<title>#"), TranslateT("The title of the item."),
- _T("#<description>#"), TranslateT("The item synopsis."),
- _T("#<link>#"), TranslateT("The URL of the item."),
+ _T("#<title>#"), TranslateT("The title of the item."),
+ _T("#<description>#"), TranslateT("The item synopsis."),
+ _T("#<link>#"), TranslateT("The URL of the item."),
_T("#<author>#"), TranslateT("Email address of the author of the item."),
- _T("#<comments>#"), TranslateT("URL of a page for comments relating to the item."),
- _T("#<guid>#"), TranslateT("A string that uniquely identifies the item."),
- _T("#<category>#"), TranslateT("Specify one or more categories that the item belongs to.")
+ _T("#<comments>#"), TranslateT("URL of a page for comments relating to the item."),
+ _T("#<guid>#"), TranslateT("A string that uniquely identifies the item."),
+ _T("#<category>#"), TranslateT("Specify one or more categories that the item belongs to.")
);
MessageBox(hwndDlg, tszTagHelp, TranslateT("Feed Tag Help"), MB_OK);
}
@@ -351,8 +351,8 @@ INT_PTR CALLBACK DlgProcChangeFeedOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LP
case WM_DESTROY:
{
HANDLE hContact = (HANDLE) GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
- Utils_SaveWindowPosition(hwndDlg,hContact,MODULE,"ChangeDlg");
- WindowList_Remove(hChangeFeedDlgList,hwndDlg);
+ Utils_SaveWindowPosition(hwndDlg, hContact, MODULE, "ChangeDlg");
+ WindowList_Remove(hChangeFeedDlgList, hwndDlg);
ItemInfo *SelItem = (ItemInfo*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
delete SelItem;
break;
@@ -373,8 +373,8 @@ INT_PTR CALLBACK DlgProcChangeFeedMenu(HWND hwndDlg, UINT msg, WPARAM wParam, LP
SendDlgItemMessage(hwndDlg, IDC_CHECKTIME, UDM_SETRANGE32, 0, 999);
HANDLE hContact = (HANDLE)lParam;
- WindowList_Add(hChangeFeedDlgList,hwndDlg,hContact);
- Utils_RestoreWindowPositionNoSize(hwndDlg,hContact,MODULE,"ChangeDlg");
+ WindowList_Add(hChangeFeedDlgList, hwndDlg, hContact);
+ Utils_RestoreWindowPositionNoSize(hwndDlg, hContact, MODULE, "ChangeDlg");
DBVARIANT dbNick = {0};
if (!DBGetContactSettingTString(hContact, MODULE, "Nick", &dbNick))
{
@@ -386,7 +386,7 @@ INT_PTR CALLBACK DlgProcChangeFeedMenu(HWND hwndDlg, UINT msg, WPARAM wParam, LP
SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG)lParam);
SetDlgItemText(hwndDlg, IDC_FEEDURL, dbURL.ptszVal);
DBFreeVariant(&dbURL);
- SetDlgItemInt(hwndDlg, IDC_CHECKTIME, DBGetContactSettingDword(hContact, MODULE, "UpdateTime", 60), TRUE);
+ SetDlgItemInt(hwndDlg, IDC_CHECKTIME, DBGetContactSettingDword(hContact, MODULE, "UpdateTime", DEFAULT_UPDATE_TIME), TRUE);
DBVARIANT dbMsg = {0};
if (!DBGetContactSettingTString(hContact, MODULE, "MsgFormat", &dbMsg))
{
@@ -486,14 +486,14 @@ INT_PTR CALLBACK DlgProcChangeFeedMenu(HWND hwndDlg, UINT msg, WPARAM wParam, LP
case IDC_TAGHELP:
{
TCHAR tszTagHelp[1024];
- mir_sntprintf(tszTagHelp, SIZEOF(tszTagHelp), _T("%s - %s\n%s - %s\n%s - %s\n%s - %s\n%s - %s\n%s - %s\n%s - %s\n%s - %s\n%s - %s"),
- _T("#<title>#"), TranslateT("The title of the item."),
- _T("#<description>#"), TranslateT("The item synopsis."),
- _T("#<link>#"), TranslateT("The URL of the item."),
+ mir_sntprintf(tszTagHelp, SIZEOF(tszTagHelp), _T("%s - %s\n%s - %s\n%s - %s\n%s - %s\n%s - %s\n%s - %s\n%s - %s"),
+ _T("#<title>#"), TranslateT("The title of the item."),
+ _T("#<description>#"), TranslateT("The item synopsis."),
+ _T("#<link>#"), TranslateT("The URL of the item."),
_T("#<author>#"), TranslateT("Email address of the author of the item."),
- _T("#<comments>#"), TranslateT("URL of a page for comments relating to the item."),
- _T("#<guid>#"), TranslateT("A string that uniquely identifies the item."),
- _T("#<category>#"), TranslateT("Specify one or more categories that the item belongs to.")
+ _T("#<comments>#"), TranslateT("URL of a page for comments relating to the item."),
+ _T("#<guid>#"), TranslateT("A string that uniquely identifies the item."),
+ _T("#<category>#"), TranslateT("Specify one or more categories that the item belongs to.")
);
MessageBox(hwndDlg, tszTagHelp, TranslateT("Feed Tag Help"), MB_OK);
}
@@ -564,6 +564,7 @@ INT_PTR CALLBACK UpdateNotifyOptsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_ADDFEED), hwndDlg, DlgProcAddFeedOpts, (LPARAM)hwndList);
}
return FALSE;
+
case IDC_CHANGE:
{
ItemInfo SelItem = {0};
@@ -575,6 +576,7 @@ INT_PTR CALLBACK UpdateNotifyOptsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_ADDFEED), hwndDlg, DlgProcChangeFeedOpts, (LPARAM)&SelItem);
}
return FALSE;
+
case IDC_REMOVE:
{
if (MessageBox(hwndDlg, TranslateT("Are you sure?"), TranslateT("Contact deleting"), MB_YESNO | MB_ICONWARNING) == IDYES)
@@ -612,8 +614,110 @@ INT_PTR CALLBACK UpdateNotifyOptsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
hContact = db_find_next(hContact);
}
}
- return FALSE;
}
+ return FALSE;
+
+ case IDC_IMPORT:
+ {
+ 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)
+ {
+ 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)
+ //
+ node = xi.getNextNode(node);
+ else if (!type && outlineChildsCount)
+ {
+ //
+ node = xi.getFirstChild(node);
+ //if ( !node)
+
+ /*TCHAR *group = NULL;
+ for (int i = 0; i < outlineAttr; i++)
+ {
+ if (!lstrcmpi(xi.getAttrName(node, i), _T("title")))
+ {
+ group = (TCHAR*)xi.getAttrValue(node, xi.getAttrName(node, i));
+ break;
+ }
+ }
+
+ for (int i = 0; i < outlineChildsCount; i++)
+ {
+ HXML elem = xi.getChild(node, i);
+ }*/
+ } else if (type) {
+ TCHAR *title = NULL, *url = NULL;
+ for (int i = 0; i < outlineAttr; i++)
+ {
+ if (!lstrcmpi(xi.getAttrName(node, i), _T("title")))
+ {
+ title = (TCHAR*)xi.getAttrValue(node, xi.getAttrName(node, i));
+ continue;
+ }
+ if (!lstrcmpi(xi.getAttrName(node, i), _T("xmlUrl")))
+ {
+ url = (TCHAR*)xi.getAttrValue(node, xi.getAttrName(node, i));
+ continue;
+ }
+ }
+ 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_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));
+ node = xi.getNextNode(node);
+ }
+ }
+ } 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);
+
+ DeleteAllItems(hwndList);
+ UpdateList(hwndList);
+ }
+ mir_free(tszMirDir);
+ }
+ return FALSE;
+
+ case IDC_EXPORT:
+ {
+ }
+ return FALSE;
case IDC_STARTUPRETRIEVE:
SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
diff --git a/plugins/NewsAggregator/Src/Services.cpp b/plugins/NewsAggregator/Src/Services.cpp
index ff12ebe2a4..65b0210605 100644
--- a/plugins/NewsAggregator/Src/Services.cpp
+++ b/plugins/NewsAggregator/Src/Services.cpp
@@ -174,7 +174,7 @@ INT_PTR CheckAllFeeds(WPARAM wParam,LPARAM lParam)
HANDLE hContact = db_find_first();
while (hContact != NULL)
{
- if (IsMyContact(hContact) && lParam && DBGetContactSettingDword(hContact, MODULE, "UpdateTime", 60))
+ if (IsMyContact(hContact) && lParam && DBGetContactSettingDword(hContact, MODULE, "UpdateTime", DEFAULT_UPDATE_TIME))
UpdateListAdd(hContact);
else if (IsMyContact(hContact) && !lParam)
UpdateListAdd(hContact);
@@ -239,7 +239,7 @@ INT_PTR NewsAggrGetAvatarInfo(WPARAM wParam, LPARAM lParam)
// if GAIF_FORCE is set, we are updating the feed
// otherwise, cached avatar is used
- if (wParam & GAIF_FORCE && DBGetContactSettingDword(pai->hContact, MODULE, "UpdateTime", 60))
+ if (wParam & GAIF_FORCE && DBGetContactSettingDword(pai->hContact, MODULE, "UpdateTime", DEFAULT_UPDATE_TIME))
UpdateListAdd(pai->hContact);
if (db_get_b(NULL, MODULE, "AutoUpdate", 1) != 0 && !ThreadRunning)
mir_forkthread(UpdateThreadProc, (LPVOID)TRUE);
diff --git a/plugins/NewsAggregator/Src/Update.cpp b/plugins/NewsAggregator/Src/Update.cpp
index 5a34bfb69b..677cade12b 100644
--- a/plugins/NewsAggregator/Src/Update.cpp
+++ b/plugins/NewsAggregator/Src/Update.cpp
@@ -36,10 +36,10 @@ VOID CALLBACK timerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
if(IsMyContact(hContact))
{
- if (DBGetContactSettingDword(hContact, MODULE, "UpdateTime", 60))
+ if (DBGetContactSettingDword(hContact, MODULE, "UpdateTime", DEFAULT_UPDATE_TIME))
{
double diff = difftime(time(NULL), DBGetContactSettingDword(hContact, MODULE, "LastCheck", 0));
- if (db_get_b(NULL, MODULE, "AutoUpdate", 1) != 0 && diff >= DBGetContactSettingDword(hContact, MODULE, "UpdateTime", 60) * 60)
+ if (db_get_b(NULL, MODULE, "AutoUpdate", 1) != 0 && diff >= DBGetContactSettingDword(hContact, MODULE, "UpdateTime", DEFAULT_UPDATE_TIME) * 60)
{
UpdateListAdd(hContact);
HaveUpdates = TRUE;
diff --git a/plugins/NewsAggregator/Src/resource.h b/plugins/NewsAggregator/Src/resource.h
index fbafab074f..d795f44add 100644
--- a/plugins/NewsAggregator/Src/resource.h
+++ b/plugins/NewsAggregator/Src/resource.h
@@ -1,6 +1,6 @@
//{{NO_DEPENDENCIES}}
-// , Microsoft Visual C++.
-// D:\Miranda NG\plugins\NewsAggregator\res\Resource.rc
+// Microsoft Visual C++ generated include file.
+// Used by C:\Temp\Myranda\plugins\NewsAggregator\res\Resource.rc
//
#define IDD_OPTIONS 101
#define IDI_ICON 109
@@ -16,8 +16,8 @@
#define IDC_ADD 1037
#define IDC_CHANGE 1038
#define IDC_REMOVE 1039
-#define IDC_IMORT 1040
-#define IDC_EXORT 1041
+#define IDC_IMPORT 1040
+#define IDC_EXPORT 1041
#define IDC_FEEDTITLE 1042
#define IDC_FEEDURL 1043
#define IDC_CHECKTIME 1044
diff --git a/plugins/NewsAggregator/docs/subscriptions_test.xml b/plugins/NewsAggregator/docs/subscriptions_test.xml
new file mode 100644
index 0000000000..9a624c7fc9
--- /dev/null
+++ b/plugins/NewsAggregator/docs/subscriptions_test.xml
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<opml version="1.0">
+ <head>
+ <title>BasiL: подписки в Google Reader</title>
+ </head>
+ <body>
+ <outline text="ithappens" title="ithappens" type="rss"
+ xmlUrl="http://ithappens.ru/rss" htmlUrl="http://ithappens.ru/"/>
+ <outline title="Computerra" text="Computerra">
+ <outline title="My_Test" text="My_Test">
+ <outline text="bash" title="bash" type="rss"
+ xmlUrl="http://bash.im/rss" htmlUrl="http://bash.im/"/>
+ </outline>
+ <outline text="inside" title="inside" type="rss"
+ xmlUrl="http://www.ctinside.com/feeds/posts/default" htmlUrl="http://www.ctinside.com/"/>
+ <outline text="Компьюлента" title="Компьюлента" type="rss"
+ xmlUrl="http://www.compulenta.ru/rss.xml" htmlUrl="http://www.compulenta.ru"/>
+ <outline text="Статьи Компьютерры"
+ title="Статьи Компьютерры" type="rss"
+ xmlUrl="http://www.computerra.ru/rss.xml" htmlUrl="http://www.computerra.ru"/>
+ </outline>
+ <outline title="Soft" text="Soft">
+ <outline
+ text="Downloads for project cm9-wildfire-s on Google Code"
+ title="Downloads for project cm9-wildfire-s on Google Code"
+ type="rss"
+ xmlUrl="https://code.google.com/feeds/p/cm9-wildfire-s/downloads/basic" htmlUrl="http://code.google.com/p/cm9-wildfire-s/downloads/list"/>
+ <outline text="Downloads for project uawks on Google Code"
+ title="Downloads for project uawks on Google Code"
+ type="rss"
+ xmlUrl="http://code.google.com/feeds/p/uawks/downloads/basic" htmlUrl="http://code.google.com/p/uawks/downloads/list"/>
+ <outline
+ text="Issue updates for project uawks on Google Code"
+ title="Issue updates for project uawks on Google Code"
+ type="rss"
+ xmlUrl="http://code.google.com/feeds/p/uawks/issueupdates/basic" htmlUrl="http://code.google.com/p/uawks/issues/list"/>
+ <outline
+ text="Mercurial commits to project uawks on Google Code"
+ title="Mercurial commits to project uawks on Google Code"
+ type="rss"
+ xmlUrl="http://code.google.com/feeds/p/uawks/hgchanges/basic" htmlUrl="http://code.google.com/p/uawks/source/list"/>
+ <outline text="Punk" title="Punk" type="rss"
+ xmlUrl="http://www.punksoftware.com/rss" htmlUrl="http://punklabs.com/rss"/>
+ <outline text="Tomato by Shibby" title="Tomato by Shibby"
+ type="rss" xmlUrl="http://tomato.groov.pl/?feed=rss2" htmlUrl="http://tomato.groov.pl"/>
+ <outline text="TOR" title="TOR" type="rss"
+ xmlUrl="http://rss.gmane.org/gmane.network.onion-routing.announce" htmlUrl="http://permalink.gmane.org/gmane.network.onion-routing.announce"/>
+ <outline text="VideoLAN" title="VideoLAN" type="rss"
+ xmlUrl="http://www.videolan.org/videolan-news.rss" htmlUrl="http://www.videolan.org/"/>
+ </outline>
+ <outline title="Miranda" text="Miranda">
+ <outline text="Dev Blog" title="Dev Blog" type="rss"
+ xmlUrl="http://feeds.miranda-im.org/mirandadevjournal" htmlUrl="http://www.miranda-im.org"/>
+ <outline text="FLNew" title="FLNew" type="rss"
+ xmlUrl="http://feeds.miranda-im.org/mirandalast10add" htmlUrl="http://addons.miranda-im.org"/>
+ <outline text="FLupd" title="FLupd" type="rss"
+ xmlUrl="http://feeds.miranda-im.org/mirandalast10upd" htmlUrl="http://addons.miranda-im.org"/>
+ <outline text="mir-rl project updates - Google Code"
+ title="mir-rl project updates - Google Code" type="rss"
+ xmlUrl="http://code.google.com/feeds/p/mir-rl/updates/basic" htmlUrl="http://code.google.com/p/mir-rl/updates/list"/>
+ <outline text="Miranda IM" title="Miranda IM" type="rss"
+ xmlUrl="http://feeds.feedburner.com/mirandaannouncements" htmlUrl="http://www.miranda-im.org"/>
+ <outline text="Miranda IM Community"
+ title="Miranda IM Community" type="rss"
+ xmlUrl="http://community.livejournal.com/ru_mirandaim/data/rss" htmlUrl="http://ru-mirandaim.livejournal.com/"/>
+ <outline text="Miranda NG Tickets"
+ title="Miranda NG Tickets" type="rss"
+ xmlUrl="http://trac.miranda-ng.org/report/1?asc=1&amp;format=rss" htmlUrl="http://trac.miranda-ng.org/report/1"/>
+ <outline
+ text="Miranda-Planet - ваша планета Miranda IM ( билды, сборки, скины, плагины, русификация, WiKi, Форум )"
+ title="Miranda-Planet - ваша планета Miranda IM ( билды, сборки, скины, плагины, русификация, WiKi, Форум )"
+ type="rss" xmlUrl="http://miranda-planet.com/rss.xml" htmlUrl="http://miranda-planet.com/"/>
+ <outline text="MirandaNG SVN" title="MirandaNG SVN"
+ type="rss"
+ xmlUrl="http://bugs.miranda-ng.org/log/?format=rss&amp;limit=100&amp;mode=stop_on_copy" htmlUrl="http://bugs.miranda-ng.org/log/?rev=4037"/>
+ <outline text="ruCommunity" title="ruCommunity" type="rss"
+ xmlUrl="http://forum.miranda.im/external.php?type=RSS2" htmlUrl="http://forum.miranda.im"/>
+ </outline>
+ <outline title="Habr" text="Habr">
+ <outline text="Android" title="Android" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/android/" htmlUrl="http://habrahabr.ru/rss/hub/android/"/>
+ <outline text="Design" title="Design" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/design/" htmlUrl="http://habrahabr.ru/rss/hub/design/"/>
+ <outline text="DSLR" title="DSLR" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/dslr/" htmlUrl="http://habrahabr.ru/rss/blog/dslr/"/>
+ <outline text="Future" title="Future" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/the_future_is_here/" htmlUrl="http://habrahabr.ru/rss/hub/the_future_is_here/"/>
+ <outline text="Google" title="Google" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/google/" htmlUrl="http://habrahabr.ru/rss/hub/google/"/>
+ <outline text="Hardware" title="Hardware" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/hardware/" htmlUrl="http://habrahabr.ru/rss/hub/hardware/"/>
+ <outline text="IM" title="IM" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/im/" htmlUrl="http://habrahabr.ru/rss/hub/im/"/>
+ <outline text="Jabber" title="Jabber" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/jabber/" htmlUrl="http://habrahabr.ru/rss/blogs/jabber/"/>
+ <outline text="Miranda" title="Miranda" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/miranda/" htmlUrl="http://habrahabr.ru/rss/blogs/miranda/"/>
+ <outline text="Netbook" title="Netbook" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/netbook/" htmlUrl="http://habrahabr.ru/rss/hub/netbook/"/>
+ <outline text="OldThings" title="OldThings" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/retro/" htmlUrl="http://habrahabr.ru/rss/blogs/retro/"/>
+ <outline text="Robots" title="Robots" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/robot/" htmlUrl="http://habrahabr.ru/rss/hub/robot/"/>
+ <outline text="sciense" title="sciense" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/popular_science/" htmlUrl="http://habrahabr.ru/rss/hub/popular_science/"/>
+ <outline text="TC" title="TC" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/totalcmd/" htmlUrl="http://habrahabr.ru/rss/blogs/totalcmd/"/>
+ <outline text="Telecom" title="Telecom" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/telecom/" htmlUrl="http://habrahabr.ru/rss/hub/telecom/"/>
+ <outline text="Win7" title="Win7" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/windows7/" htmlUrl="http://habrahabr.ru/rss/blogs/windows7/"/>
+ <outline text="Хабрахабр / Биотехнологии / Захабренные"
+ title="Хабрахабр / Биотехнологии / Захабренные"
+ type="rss"
+ xmlUrl="http://habrahabr.ru/rss/blogs/biotech/" htmlUrl="http://habrahabr.ru/rss/hub/biotech/"/>
+ <outline text="Хабрахабр: Метки / wzor.net"
+ title="Хабрахабр: Метки / wzor.net" type="rss"
+ xmlUrl="http://habrahabr.ru/rss/tag/wzor.net/" htmlUrl="http://habrahabr.ru/rss/tag/wzor.net/"/>
+ </outline>
+ <outline title="News" text="News">
+ <outline text="2КОМ (новости)" title="2КОМ (новости)"
+ type="rss"
+ xmlUrl="http://www.2kom.ru/home/news/-rss.xml" htmlUrl="http://www.2kom.ru/home/news.html"/>
+ <outline text="4PDA" title="4PDA" type="rss"
+ xmlUrl="http://4pda.ru/feed/" htmlUrl="http://4pda.ru/"/>
+ <outline text="FotoTips.ru" title="FotoTips.ru" type="rss"
+ xmlUrl="http://feeds.feedburner.com/fototipsru" htmlUrl="http://fototips.ru"/>
+ <outline text="LifeHack.ru" title="LifeHack.ru" type="rss"
+ xmlUrl="http://www.lifehack.ru/rss/" htmlUrl="http://lifehack.ru"/>
+ <outline text="MForum.ru" title="MForum.ru" type="rss"
+ xmlUrl="http://www.mforum.ru/rss/news.xml" htmlUrl="http://www.mforum.ru/"/>
+ <outline text="Overclockers.ru" title="Overclockers.ru"
+ type="rss"
+ xmlUrl="http://www.overclockers.ru/rss/all.rss" htmlUrl="http://www.overclockers.ru"/>
+ <outline text="revolver.ru" title="revolver.ru" type="rss"
+ xmlUrl="http://revolver.ru/rss" htmlUrl="http://revolver.ru/"/>
+ <outline text="Самый сок!" title="Самый сок!" type="rss"
+ xmlUrl="http://ibigdan.livejournal.com/data/rss" htmlUrl="http://ibigdan.livejournal.com/"/>
+ <outline text="Танки Онлайн" title="Танки Онлайн" type="rss"
+ xmlUrl="http://blog.tankionline.com/feed/" htmlUrl="http://news.tankionline.com"/>
+ <outline text="Фергана.Ру" title="Фергана.Ру" type="rss"
+ xmlUrl="http://news.ferghana.ru/news.xml" htmlUrl="http://www.fergananews.com"/>
+ </outline>
+ <outline title="TC" text="TC">
+ <outline text="en.totalcmd.pl" title="en.totalcmd.pl"
+ type="rss" xmlUrl="http://en.totalcmd.pl/rss" htmlUrl="http://en.totalcmd.pl"/>
+ <outline text="tc" title="tc" type="rss"
+ xmlUrl="http://wincmd.ru/rss.xml" htmlUrl="http://wincmd.ru"/>
+ </outline>
+ <outline title="Science" text="Science">
+ <outline text="Astronet" title="Astronet" type="rss"
+ xmlUrl="http://www.astronet.ru/db/rss.xml" htmlUrl="http://www.astronet.ru/"/>
+ <outline text="COPAH.info - Наука. Сибирь. Общество"
+ title="COPAH.info - Наука. Сибирь. Общество" type="rss"
+ xmlUrl="http://www.copah.info/rss" htmlUrl="http://www.copah.info/rss"/>
+ <outline text="LHC" title="LHC" type="rss"
+ xmlUrl="http://fulltextrssfeed.com/elementy.ru/rss/news/LHC" htmlUrl="http://elementy.ru/LHC/news"/>
+ <outline text="Membrana.ru" title="Membrana.ru" type="rss"
+ xmlUrl="http://ftr.fivefilters.org/makefulltextfeed.php?url=http%3A%2F%2Fwww.membrana.ru%2Fexport%2Frss.xml&amp;max=1" htmlUrl="http://www.membrana.ru"/>
+ <outline text="Иванов" title="Иванов" type="rss"
+ xmlUrl="http://igorivanov.blogspot.com/feeds/posts/default" htmlUrl="http://igorivanov.blogspot.com/"/>
+ <outline text="НаукаИжизнь" title="НаукаИжизнь" type="rss"
+ xmlUrl="http://fulltextrssfeed.com/www.nkj.ru/rss/iblock_rss_31.xml" htmlUrl="http://www.nkj.ru"/>
+ <outline text="Элементы" title="Элементы" type="rss"
+ xmlUrl="http://fulltextrssfeed.com/elementy.ru/rss/news" htmlUrl="http://elementy.ru/"/>
+ </outline>
+ <outline title="Moviez" text="Moviez">
+ <outline text="Twitter / kuraj_bambey"
+ title="Twitter / kuraj_bambey" type="rss"
+ xmlUrl="http://twitter.com/statuses/user_timeline/44353505.rss" htmlUrl="http://twitter.com/kuraj_bambey"/>
+ <outline text="Мосенька" title="Мосенька" type="rss"
+ xmlUrl="http://feed.rutracker.org/atom/u/0/26/3796626.atom" htmlUrl="http://rutracker.org/forum/profile.php?mode=viewprofile&amp;u=3796626"/>
+ </outline>
+ </body>
+</opml>