summaryrefslogtreecommitdiff
path: root/plugins/NewsAggregator
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/NewsAggregator')
-rw-r--r--plugins/NewsAggregator/NewsAggregator_10.vcxproj199
-rw-r--r--plugins/NewsAggregator/NewsAggregator_10.vcxproj.filters62
-rw-r--r--plugins/NewsAggregator/Res/AddFeed.icobin0 -> 318 bytes
-rw-r--r--plugins/NewsAggregator/Res/CheckALL.icobin0 -> 318 bytes
-rw-r--r--plugins/NewsAggregator/Res/Export.icobin0 -> 318 bytes
-rw-r--r--plugins/NewsAggregator/Res/Import.icobin0 -> 318 bytes
-rw-r--r--plugins/NewsAggregator/Res/Main.icobin0 -> 6318 bytes
-rw-r--r--plugins/NewsAggregator/Res/Resource.rc148
-rw-r--r--plugins/NewsAggregator/Res/Version.rc42
-rw-r--r--plugins/NewsAggregator/Src/Common.h162
-rw-r--r--plugins/NewsAggregator/Src/Icons.cpp79
-rw-r--r--plugins/NewsAggregator/Src/Menus.cpp78
-rw-r--r--plugins/NewsAggregator/Src/NewsAggregator.cpp126
-rw-r--r--plugins/NewsAggregator/Src/Options.cpp651
-rw-r--r--plugins/NewsAggregator/Src/Services.cpp245
-rw-r--r--plugins/NewsAggregator/Src/Stdafx.cpp18
-rw-r--r--plugins/NewsAggregator/Src/Update.cpp147
-rw-r--r--plugins/NewsAggregator/Src/Utils.cpp1400
-rw-r--r--plugins/NewsAggregator/Src/Version.h20
-rw-r--r--plugins/NewsAggregator/Src/resource.h39
-rw-r--r--plugins/NewsAggregator/docs/AtomText.txt482
-rw-r--r--plugins/NewsAggregator/docs/RssText.txt713
-rw-r--r--plugins/NewsAggregator/docs/ToDo.txt11
-rw-r--r--plugins/NewsAggregator/proto_newsaggr/Proto_NewsAggr.vcxproj130
-rw-r--r--plugins/NewsAggregator/proto_newsaggr/Proto_NewsAggr.vcxproj.filters23
-rw-r--r--plugins/NewsAggregator/proto_newsaggr/res/Offline.icobin0 -> 5430 bytes
-rw-r--r--plugins/NewsAggregator/proto_newsaggr/res/Online.icobin0 -> 5430 bytes
-rw-r--r--plugins/NewsAggregator/proto_newsaggr/res/Proto_NewsAggr.rcbin0 -> 3388 bytes
-rw-r--r--plugins/NewsAggregator/proto_newsaggr/src/resource.hbin0 -> 1006 bytes
29 files changed, 4775 insertions, 0 deletions
diff --git a/plugins/NewsAggregator/NewsAggregator_10.vcxproj b/plugins/NewsAggregator/NewsAggregator_10.vcxproj
new file mode 100644
index 0000000000..78450a3189
--- /dev/null
+++ b/plugins/NewsAggregator/NewsAggregator_10.vcxproj
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>NewsAggregator</ProjectName>
+ <ProjectGuid>{6DE11A47-2268-4B08-8DE5-15A1705FCE28}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64\Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\Obj\$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64\Obj\$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\Plugins\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64\Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\Obj\$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64\Obj\$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary>true</IgnoreImportLibrary>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;NEWSAGGREGATOR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <DisableSpecificWarnings>4996</DisableSpecificWarnings>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>Common.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <AdditionalDependencies>comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(ProfileDir)..\..\bin10\lib</AdditionalLibraryDirectories>
+ </Link>
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>..\..\include\msapi</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;_USRDLL;NEWSAGGREGATOR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <WarningLevel>Level3</WarningLevel>
+ <DisableSpecificWarnings>4996</DisableSpecificWarnings>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>Common.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <AdditionalLibraryDirectories>$(ProfileDir)..\..\bin10\lib</AdditionalLibraryDirectories>
+ </Link>
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>..\..\include\msapi</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;NEWSAGGREGATOR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <WarningLevel>Level3</WarningLevel>
+ <DisableSpecificWarnings>4996</DisableSpecificWarnings>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>Common.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalDependencies>comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>$(ProfileDir)..\..\bin10\lib</AdditionalLibraryDirectories>
+ <AdditionalOptions>/PDBALTPATH:%_PDB%</AdditionalOptions>
+ </Link>
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>..\..\include\msapi</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>..\..\include;..\..\plugins\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;_USRDLL;NEWSAGGREGATOR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <WarningLevel>Level3</WarningLevel>
+ <DisableSpecificWarnings>4996</DisableSpecificWarnings>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>Common.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalLibraryDirectories>$(ProfileDir)..\..\bin10\lib</AdditionalLibraryDirectories>
+ <AdditionalOptions>/PDBALTPATH:%_PDB%</AdditionalOptions>
+ </Link>
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>..\..\include\msapi</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ResourceCompile Include="res\Resource.rc" />
+ <ResourceCompile Include="res\Version.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="src\resource.h" />
+ <ClInclude Include="Src\Common.h" />
+ <ClInclude Include="src\Version.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="Src\Icons.cpp" />
+ <ClCompile Include="Src\Menus.cpp" />
+ <ClCompile Include="Src\Options.cpp" />
+ <ClCompile Include="Src\Stdafx.cpp">
+ <PrecompiledHeader>Create</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="Src\Services.cpp" />
+ <ClCompile Include="Src\NewsAggregator.cpp" />
+ <ClCompile Include="Src\Update.cpp" />
+ <ClCompile Include="Src\Utils.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/plugins/NewsAggregator/NewsAggregator_10.vcxproj.filters b/plugins/NewsAggregator/NewsAggregator_10.vcxproj.filters
new file mode 100644
index 0000000000..e02b0ce97e
--- /dev/null
+++ b/plugins/NewsAggregator/NewsAggregator_10.vcxproj.filters
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="res\Version.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ <ResourceCompile Include="res\Resource.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="src\Version.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="Src\Common.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="src\resource.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="Src\Options.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Src\Menus.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Src\Services.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Src\Icons.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Src\Update.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Src\Utils.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Src\NewsAggregator.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Src\Stdafx.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/plugins/NewsAggregator/Res/AddFeed.ico b/plugins/NewsAggregator/Res/AddFeed.ico
new file mode 100644
index 0000000000..2503d8ec60
--- /dev/null
+++ b/plugins/NewsAggregator/Res/AddFeed.ico
Binary files differ
diff --git a/plugins/NewsAggregator/Res/CheckALL.ico b/plugins/NewsAggregator/Res/CheckALL.ico
new file mode 100644
index 0000000000..98d434b2ba
--- /dev/null
+++ b/plugins/NewsAggregator/Res/CheckALL.ico
Binary files differ
diff --git a/plugins/NewsAggregator/Res/Export.ico b/plugins/NewsAggregator/Res/Export.ico
new file mode 100644
index 0000000000..ef475bb5cd
--- /dev/null
+++ b/plugins/NewsAggregator/Res/Export.ico
Binary files differ
diff --git a/plugins/NewsAggregator/Res/Import.ico b/plugins/NewsAggregator/Res/Import.ico
new file mode 100644
index 0000000000..4becddf394
--- /dev/null
+++ b/plugins/NewsAggregator/Res/Import.ico
Binary files differ
diff --git a/plugins/NewsAggregator/Res/Main.ico b/plugins/NewsAggregator/Res/Main.ico
new file mode 100644
index 0000000000..4e9d1abc51
--- /dev/null
+++ b/plugins/NewsAggregator/Res/Main.ico
Binary files differ
diff --git a/plugins/NewsAggregator/Res/Resource.rc b/plugins/NewsAggregator/Res/Resource.rc
new file mode 100644
index 0000000000..ccfef31466
--- /dev/null
+++ b/plugins/NewsAggregator/Res/Resource.rc
@@ -0,0 +1,148 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "..\src\resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Ðóññêèé (Ðîññèÿ) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)
+LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
+#pragma code_page(1251)
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_ICON ICON "Main.ico"
+IDI_CHECKALL ICON "CheckAll.ico"
+IDI_ADDFEED ICON "AddFeed.ico"
+IDI_IMPORTFEEDS ICON "Import.ico"
+IDI_EXPORTFEEDS ICON "Export.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_OPTIONS DIALOGEX 0, 0, 314, 234
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ CONTROL "",IDC_FEEDLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_TABSTOP,9,8,294,174
+ 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
+END
+
+IDD_ADDFEED DIALOGEX 0, 0, 250, 228
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_NOFAILCREATE | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ DEFPUSHBUTTON "OK",IDOK,140,209,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,194,209,50,14
+ GROUPBOX "General Settings",IDC_STATIC,6,3,238,61
+ RTEXT "Title",IDC_STATIC,17,16,44,8
+ EDITTEXT IDC_FEEDTITLE,63,14,173,13,ES_AUTOHSCROLL
+ RTEXT "URL",IDC_STATIC,17,31,44,8
+ EDITTEXT IDC_FEEDURL,63,29,173,13,ES_AUTOHSCROLL
+ RTEXT "Check every",IDC_STATIC,7,46,54,8
+ LTEXT "minutes",IDC_STATIC,100,46,75,8
+ PUSHBUTTON "Check Feed",IDC_DISCOVERY,177,44,59,12
+ GROUPBOX "Authentication",IDC_STATIC,6,67,238,48
+ CONTROL "Use &authentication",IDC_USEAUTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,80,157,10
+ RTEXT "Login",IDC_STATIC,16,96,42,8
+ EDITTEXT IDC_LOGIN,61,94,63,14,ES_AUTOHSCROLL | WS_DISABLED
+ RTEXT "Password",IDC_STATIC,129,96,41,8
+ EDITTEXT IDC_PASSWORD,173,94,63,14,ES_PASSWORD | ES_AUTOHSCROLL | WS_DISABLED
+ GROUPBOX "Visualization",IDC_STATIC,6,119,238,85
+ LTEXT "Display news using the following format:",IDC_STATIC,13,132,168,8
+ EDITTEXT IDC_TAGSEDIT,13,143,224,36,ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_VSCROLL
+ LTEXT "All item's tags are valid. Put them between #. Example: #<author>#",IDC_STATIC,14,182,167,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
+ 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
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "..\\src\\resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_OPTIONS, DIALOG
+ BEGIN
+ BOTTOMMARGIN, 189
+ END
+
+ IDD_ADDFEED, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 241
+ TOPMARGIN, 7
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+#endif // Ðóññêèé (Ðîññèÿ) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/plugins/NewsAggregator/Res/Version.rc b/plugins/NewsAggregator/Res/Version.rc
new file mode 100644
index 0000000000..d741488c4f
--- /dev/null
+++ b/plugins/NewsAggregator/Res/Version.rc
@@ -0,0 +1,42 @@
+// Microsoft Visual C++ generated resource script.
+//
+#ifdef APSTUDIO_INVOKED
+#error this file is not editable by Microsoft Visual C++
+#endif //APSTUDIO_INVOKED
+
+#include "afxres.h"
+#include "..\src\version.h"
+
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#endif //_WIN32
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION __FILEVERSION_STRING
+ PRODUCTVERSION __FILEVERSION_STRING
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x0L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "000004b0"
+ BEGIN
+ VALUE "FileDescription", __DESCRIPTION
+ VALUE "InternalName", __PLUGIN_NAME
+ VALUE "LegalCopyright", __COPYRIGHT
+ VALUE "OriginalFilename", __FILENAME
+ VALUE "ProductName", __PLUGIN_NAME
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0, 1200
+ END
+END
diff --git a/plugins/NewsAggregator/Src/Common.h b/plugins/NewsAggregator/Src/Common.h
new file mode 100644
index 0000000000..953229080d
--- /dev/null
+++ b/plugins/NewsAggregator/Src/Common.h
@@ -0,0 +1,162 @@
+/*
+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.
+*/
+
+#define MIRANDA_VER 0x0A00
+
+// Windows Header Files:
+#include <windows.h>
+#include <commctrl.h>
+#include <time.h>
+#include <fcntl.h>
+#include <io.h>
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys\stat.h>
+#include <mshtml.h>
+
+// Miranda header files
+#include <newpluginapi.h>
+#include <m_clist.h>
+#include <m_skin.h>
+#include <m_langpack.h>
+#include <m_options.h>
+#include <m_database.h>
+#include <m_utils.h>
+#include <m_system.h>
+#include <m_popup.h>
+#include <m_hotkeys.h>
+#include <m_netlib.h>
+#include <m_icolib.h>
+#include <m_message.h>
+#include <win2k.h>
+#include <m_protocols.h>
+#include <m_protomod.h>
+#include <m_protosvc.h>
+#include <m_xml.h>
+#include <m_avatars.h>
+
+#include <m_folders.h>
+#include <m_popup.h>
+
+#include "version.h"
+#include "resource.h"
+
+#define MODULE "NewsAggr"
+#define TAGSHELP "#<title># - The title of the item.\r\n#<description># - The item synopsis.\r\n#<link># - The URL of the item.\r\n#<author># - Email address of the author of the item.\r\n#<comments># - URL of a page for comments relating to the item.\r\n#<guid># - A string that uniquely identifies the item.\r\n#<category># - Specify one or more categories that the item belongs to."
+#define TAGSDEFAULT "#<title>#\r\n#<link>#\r\n#<description>#"
+#define DEFAULT_AVATARS_FOLDER "NewsAggregator"
+extern HINSTANCE hInst;
+extern HWND hAddFeedDlg;
+extern HANDLE hChangeFeedDlgList;
+extern UINT_PTR timerId;
+// check if Feeds is currently updating
+extern BOOL ThreadRunning;
+extern BOOL UpdateListFlag;
+extern TCHAR tszRoot[MAX_PATH];
+struct ItemInfo
+{
+ HWND hwndList;
+ HANDLE hContact;
+ int SelNumber;
+ TCHAR nick[MAX_PATH];
+ TCHAR url[MAX_PATH];
+};
+
+//============ STRUCT USED TO MAKE AN UPDATE LIST ============
+
+struct NEWSCONTACTLIST {
+ HANDLE hContact;
+ struct NEWSCONTACTLIST *next;
+};
+
+typedef struct NEWSCONTACTLIST UPDATELIST;
+
+extern UPDATELIST *UpdateListHead;
+extern UPDATELIST *UpdateListTail;
+
+void UpdateListAdd(HANDLE hContact);
+void UpdateThreadProc(LPVOID hWnd);
+void DestroyUpdateList(void);
+
+extern HANDLE hUpdateMutex;
+
+int NewsAggrInit(WPARAM wParam,LPARAM lParam);
+INT OptInit(WPARAM wParam, LPARAM lParam);
+int NewsAggrPreShutdown(WPARAM wParam,LPARAM lParam);
+VOID NetlibInit();
+VOID NetlibUnInit();
+VOID InitMenu();
+VOID InitIcons();
+HICON LoadIconEx(const char* name, BOOL big);
+HANDLE GetIconHandle(const char* name);
+INT_PTR NewsAggrGetName(WPARAM wParam, LPARAM lParam);
+INT_PTR NewsAggrGetCaps(WPARAM wp, LPARAM lp);
+INT_PTR NewsAggrSetStatus(WPARAM wp, LPARAM /*lp*/);
+INT_PTR NewsAggrGetStatus(WPARAM/* wp*/, LPARAM/* lp*/);
+INT_PTR NewsAggrLoadIcon(WPARAM wParam, LPARAM lParam);
+INT_PTR NewsAggrGetInfo(WPARAM wParam, LPARAM lParam);
+INT_PTR NewsAggrGetAvatarInfo(WPARAM wParam, LPARAM lParam);
+INT_PTR NewsAggrRecvMessage(WPARAM wParam,LPARAM lParam);
+
+INT_PTR CheckAllFeeds(WPARAM wParam,LPARAM lParam);
+INT_PTR AddFeed(WPARAM wParam,LPARAM lParam);
+INT_PTR ChangeFeed(WPARAM wParam,LPARAM lParam);
+INT_PTR ImportFeeds(WPARAM wParam,LPARAM lParam);
+INT_PTR ExportFeeds(WPARAM wParam,LPARAM lParam);
+INT_PTR CheckFeed(WPARAM wParam,LPARAM lParam);
+INT_PTR CALLBACK DlgProcAddFeedOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+INT_PTR CALLBACK DlgProcChangeFeedOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+INT_PTR CALLBACK DlgProcChangeFeedMenu(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+VOID CALLBACK timerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
+VOID CALLBACK timerProc2(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
+
+BOOL IsMyContact(HANDLE hContact);
+VOID GetNewsData(TCHAR *szUrl, char** szData, HANDLE hContact, HWND hwndDlg);
+VOID CreateList (HWND hwndList);
+VOID UpdateList (HWND hwndList);
+VOID DeleteAllItems(HWND hwndList);
+time_t __stdcall DateToUnixTime(TCHAR *stamp, BOOL FeedType);
+VOID CheckCurrentFeed (HANDLE hContact);
+TCHAR* CheckFeed(TCHAR* tszURL, HWND hwndDlg);
+
+// =============== NewsAggr SERVICES ================
+// Check all Feeds info
+// WPARAM = LPARAM = NULL
+#define MS_NEWSAGGR_CHECKALLFEEDS "NEWSAGGR/CheckAllFeeds"
+
+// Add new Feed channel
+// WPARAM = LPARAM = NULL
+#define MS_NEWSAGGR_ADDFEED "NEWSAGGR/AddNewsFeed"
+
+// Add new Feed channel
+// WPARAM = LPARAM = NULL
+#define MS_NEWSAGGR_CHANGEFEED "NEWSAGGR/ChangeNewsFeed"
+
+// Import Feed chanels from file
+// WPARAM = LPARAM = NULL
+#define MS_NEWSAGGR_IMPORTFEEDS "NEWSAGGR/ImportFeeds"
+
+// Export Feed chanels to file
+// WPARAM = LPARAM = NULL
+#define MS_NEWSAGGR_EXPORTFEEDS "NEWSAGGR/ExportFeeds"
+
+// Check Feed info
+// WPARAM = LPARAM = NULL
+#define MS_NEWSAGGR_CHECKFEED "NEWSAGGR/CheckFeed" \ No newline at end of file
diff --git a/plugins/NewsAggregator/Src/Icons.cpp b/plugins/NewsAggregator/Src/Icons.cpp
new file mode 100644
index 0000000000..5cd94ff76d
--- /dev/null
+++ b/plugins/NewsAggregator/Src/Icons.cpp
@@ -0,0 +1,79 @@
+/*
+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 "common.h"
+
+struct _tag_iconList
+{
+ TCHAR* szDescr;
+ char* szName;
+ int defIconID;
+ HANDLE hIconLibItem;
+}
+
+static iconList[] =
+{
+ { LPGENT("Protocol icon"), "main", IDI_ICON },
+ { LPGENT("Check All Feeds"), "checkall", IDI_CHECKALL },
+ { LPGENT("Add Feed"), "addfeed", IDI_ADDFEED },
+ { LPGENT("Import Feeds"), "importfeeds", IDI_IMPORTFEEDS },
+ { LPGENT("Export Feeds"), "exportfeeds", IDI_EXPORTFEEDS },
+ { LPGENT("Check Feed"), "checkfeed", IDI_CHECKALL },
+};
+
+VOID InitIcons()
+{
+ TCHAR szFile[MAX_PATH];
+ char szSettingName[100];
+ SKINICONDESC sid = {0};
+ unsigned i;
+
+ GetModuleFileName(hInst, szFile, MAX_PATH);
+
+ sid.cbSize = sizeof(SKINICONDESC);
+ sid.flags = SIDF_ALL_TCHAR;
+ sid.ptszDefaultFile = szFile;
+ sid.pszName = szSettingName;
+ sid.ptszSection = _T("News Aggregator");
+
+ for (i = 0; i < SIZEOF(iconList); i++)
+ {
+ mir_snprintf(szSettingName, SIZEOF(szSettingName), "%s_%s", MODULE, iconList[i].szName);
+
+ sid.ptszDescription = iconList[i].szDescr;
+ sid.iDefaultIndex = -iconList[i].defIconID;
+ iconList[i].hIconLibItem = Skin_AddIcon(&sid);
+ }
+}
+
+HICON LoadIconEx(const char* name, BOOL big)
+{
+ char szSettingName[100];
+ mir_snprintf(szSettingName, SIZEOF(szSettingName), "%s_%s", MODULE, name);
+ return Skin_GetIcon(szSettingName, big);
+}
+
+HANDLE GetIconHandle(const char* name)
+{
+ unsigned i;
+ for (i=0; i < SIZEOF(iconList); i++)
+ if (strcmp(iconList[i].szName, name) == 0)
+ return iconList[i].hIconLibItem;
+ return NULL;
+} \ No newline at end of file
diff --git a/plugins/NewsAggregator/Src/Menus.cpp b/plugins/NewsAggregator/Src/Menus.cpp
new file mode 100644
index 0000000000..62a5da045d
--- /dev/null
+++ b/plugins/NewsAggregator/Src/Menus.cpp
@@ -0,0 +1,78 @@
+/*
+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 "common.h"
+
+HANDLE hService2[6];
+
+VOID InitMenu()
+{
+ CLISTMENUITEM mi = {0};
+ mi.cbSize = sizeof(mi);
+ mi.pszContactOwner = MODULE;
+ mi.flags = CMIF_TCHAR|CMIF_ICONFROMICOLIB|CMIF_NOTOFFLINE;
+
+ // adding main menu items
+ mi.ptszPopupName = LPGENT("News Aggregator");
+ mi.popupPosition = 500099000;
+
+ mi.position=10100001;
+ mi.icolibItem = GetIconHandle("main");
+ mi.ptszName = LPGENT("Check All Feeds");
+ mi.pszService = MS_NEWSAGGR_CHECKALLFEEDS;
+ hService2[0] = Menu_AddMainMenuItem(&mi);
+
+ mi.position=10100002;
+ mi.icolibItem = GetIconHandle("addfeed");
+ mi.ptszName = LPGENT("Add Feed");
+ mi.pszService = MS_NEWSAGGR_ADDFEED;
+ hService2[1] = Menu_AddMainMenuItem(&mi);
+
+ mi.position=10100003;
+ mi.icolibItem = GetIconHandle("importfeeds");
+ mi.ptszName = LPGENT("Import Feeds");
+ mi.pszService = MS_NEWSAGGR_IMPORTFEEDS;
+ hService2[2] = Menu_AddMainMenuItem(&mi);
+
+ mi.position=10100004;
+ mi.icolibItem = GetIconHandle("exportfeeds");
+ mi.ptszName = LPGENT("Export Feeds");
+ mi.pszService = MS_NEWSAGGR_EXPORTFEEDS;
+ hService2[3] = Menu_AddMainMenuItem(&mi);
+
+ // adding contact menu items
+ mi.position=-0x7FFFFFFA;
+ mi.icolibItem = GetIconHandle("checkfeed");
+ mi.ptszName = LPGENT("Check feed");
+ mi.pszService = MS_NEWSAGGR_CHECKFEED;
+ hService2[4] = Menu_AddContactMenuItem(&mi);
+
+ // adding contact menu items
+ mi.position=-0x7FFFFFFA;
+ //mi.icolibItem = GetIconHandle("checkfeed");
+ mi.ptszName = LPGENT("Change feed");
+ mi.pszService = MS_NEWSAGGR_CHANGEFEED;
+ hService2[5] = Menu_AddContactMenuItem(&mi);
+
+ ZeroMemory(&mi, sizeof(mi));
+ mi.cbSize = sizeof(mi);
+ mi.flags = CMIM_ICON;
+ mi.icolibItem = GetIconHandle("checkall");
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hService2[0], (LPARAM)&mi);
+} \ No newline at end of file
diff --git a/plugins/NewsAggregator/Src/NewsAggregator.cpp b/plugins/NewsAggregator/Src/NewsAggregator.cpp
new file mode 100644
index 0000000000..57795ac15d
--- /dev/null
+++ b/plugins/NewsAggregator/Src/NewsAggregator.cpp
@@ -0,0 +1,126 @@
+/*
+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 "Common.h"
+
+HINSTANCE hInst = NULL;
+
+int hLangpack;
+HANDLE hOptHook = NULL, hLoadHook = NULL, hOnPreShutdown = NULL, hPrebuildMenuHook = NULL, hPackUpdaterFolder = NULL;
+HANDLE hProtoService[8];
+HWND hAddFeedDlg;
+HANDLE hChangeFeedDlgList = NULL;
+XML_API xi = {0};
+TCHAR tszRoot[MAX_PATH] = {0};
+HANDLE hUpdateMutex;
+#define NUM_SERVICES 6
+HANDLE hService[NUM_SERVICES];
+
+PLUGININFOEX pluginInfoEx = {
+ sizeof(PLUGININFOEX),
+ __PLUGIN_NAME,
+ PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM),
+ __DESCRIPTION,
+ __AUTHOR,
+ __AUTHOREMAIL,
+ __COPYRIGHT,
+ __AUTHORWEB,
+ UNICODE_AWARE,
+ // {56CC3F29-CCBF-4546-A8BA-9856248A412A}
+ {0x56cc3f29, 0xccbf, 0x4546, {0xa8, 0xba, 0x98, 0x56, 0x24, 0x8a, 0x41, 0x2a}}
+};
+
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+ hInst = hinstDLL;
+ return TRUE;
+}
+
+extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ return &pluginInfoEx;
+}
+
+extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = {{0x29517be5, 0x779a, 0x48e5, {0x89, 0x50, 0xcb, 0x4d, 0xe1, 0xd4, 0x31, 0x72}}, MIID_LAST};
+
+extern "C" __declspec(dllexport) int Load(void)
+{
+
+ mir_getLP(&pluginInfoEx);
+ mir_getXI(&xi);
+
+ if (ServiceExists(MS_FOLDERS_REGISTER_PATH))
+ {
+ hPackUpdaterFolder = FoldersRegisterCustomPathT("News Aggregator", "Avatars", MIRANDA_USERDATAT _T("\\Avatars\\")_T(DEFAULT_AVATARS_FOLDER));
+ FoldersGetCustomPathT(hPackUpdaterFolder, tszRoot, MAX_PATH, _T(""));
+ }
+ else
+ {
+ TCHAR* tszFolder = Utils_ReplaceVarsT(_T("%miranda_userdata%\\"_T(DEFAULT_AVATARS_FOLDER)));
+ lstrcpyn(tszRoot, tszFolder, SIZEOF(tszRoot));
+ mir_free(tszFolder);
+ }
+
+ // Add options hook
+ hOptHook = HookEvent(ME_OPT_INITIALISE, OptInit);
+ hLoadHook = HookEvent(ME_SYSTEM_MODULESLOADED, NewsAggrInit);
+ hOnPreShutdown = HookEvent(ME_SYSTEM_PRESHUTDOWN, NewsAggrPreShutdown);
+
+ hUpdateMutex = CreateMutex(NULL, FALSE, NULL);
+ hChangeFeedDlgList = (HANDLE) CallService(MS_UTILS_ALLOCWINDOWLIST,0,0);
+
+ // register weather protocol
+ PROTOCOLDESCRIPTOR pd = { PROTOCOLDESCRIPTOR_V3_SIZE };
+ pd.szName = MODULE;
+ pd.type = PROTOTYPE_VIRTUAL;
+ CallService(MS_PROTO_REGISTERMODULE,0,(LPARAM)&pd);
+
+ hProtoService[0] = CreateProtoServiceFunction(MODULE, PS_GETNAME, NewsAggrGetName);
+ hProtoService[1] = CreateProtoServiceFunction(MODULE, PS_GETCAPS, NewsAggrGetCaps);
+ hProtoService[2] = CreateProtoServiceFunction(MODULE, PS_SETSTATUS, NewsAggrSetStatus);
+ hProtoService[3] = CreateProtoServiceFunction(MODULE, PS_GETSTATUS, NewsAggrGetStatus);
+ hProtoService[4] = CreateProtoServiceFunction(MODULE, PS_LOADICON, NewsAggrLoadIcon);
+ hProtoService[5] = CreateProtoServiceFunction(MODULE, PSS_GETINFO, NewsAggrGetInfo);
+ hProtoService[6] = CreateProtoServiceFunction(MODULE, PS_GETAVATARINFOT, NewsAggrGetAvatarInfo);
+ hProtoService[7] = CreateProtoServiceFunction(MODULE, PSR_MESSAGE, NewsAggrRecvMessage);
+
+ hService[0] = CreateServiceFunction(MS_NEWSAGGR_CHECKALLFEEDS, CheckAllFeeds);
+ hService[1] = CreateServiceFunction(MS_NEWSAGGR_ADDFEED, AddFeed);
+ hService[2] = CreateServiceFunction(MS_NEWSAGGR_IMPORTFEEDS, ImportFeeds);
+ hService[3] = CreateServiceFunction(MS_NEWSAGGR_EXPORTFEEDS, ExportFeeds);
+ hService[4] = CreateServiceFunction(MS_NEWSAGGR_CHECKFEED, CheckFeed);
+ hService[5] = CreateServiceFunction(MS_NEWSAGGR_CHANGEFEED, ChangeFeed);
+
+ return 0;
+}
+
+extern "C" __declspec(dllexport) int Unload(void)
+{
+ for (int i = 0;i<NUM_SERVICES;i++)
+ DestroyServiceFunction(hService[i]);
+
+ UnhookEvent(hOptHook);
+ UnhookEvent(hLoadHook);
+ UnhookEvent(hOnPreShutdown);
+
+ DestroyUpdateList();
+ CloseHandle(hUpdateMutex);
+
+ return 0;
+} \ No newline at end of file
diff --git a/plugins/NewsAggregator/Src/Options.cpp b/plugins/NewsAggregator/Src/Options.cpp
new file mode 100644
index 0000000000..4869867d9a
--- /dev/null
+++ b/plugins/NewsAggregator/Src/Options.cpp
@@ -0,0 +1,651 @@
+/*
+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 "common.h"
+
+INT_PTR CALLBACK DlgProcAddFeedOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam);
+ SetWindowText(hwndDlg, TranslateT("Add Feed"));
+ 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);
+ SendDlgItemMessage(hwndDlg, IDC_TIMEOUT_VALUE_SPIN, UDM_SETRANGE32, 0, 999);
+ Utils_RestoreWindowPositionNoSize(hwndDlg,NULL,MODULE,"AddDlg");
+ return TRUE;
+ }
+ case WM_COMMAND:
+ {
+ switch (LOWORD(wParam))
+ {
+ case IDOK:
+ {
+ TCHAR str[MAX_PATH];
+ if (!GetDlgItemText(hwndDlg, IDC_FEEDTITLE, str, SIZEOF(str)))
+ {
+ MessageBox(hwndDlg, TranslateT("Enter Feed name"), TranslateT("Error"), MB_OK);
+ break;
+ }
+ else if (!GetDlgItemText(hwndDlg, IDC_FEEDURL, str, SIZEOF(str)) || lstrcmp(str, _T("http://")) == 0)
+ {
+ MessageBox(hwndDlg, TranslateT("Enter Feed URL"), TranslateT("Error"), MB_OK);
+ break;
+ }
+ else if (GetDlgItemInt(hwndDlg, IDC_CHECKTIME, false, false) < 0)
+ {
+ MessageBox(hwndDlg, TranslateT("Enter checking interval"), TranslateT("Error"), MB_OK);
+ break;
+ }
+ else if (!GetDlgItemText(hwndDlg, IDC_TAGSEDIT, str, SIZEOF(str)))
+ {
+ MessageBox(hwndDlg, TranslateT("Enter message format"), TranslateT("Error"), MB_OK);
+ break;
+ }
+ else
+ {
+ HANDLE hContact = (HANDLE) CallService(MS_DB_CONTACT_ADD, 0, 0);
+ CallService(MS_PROTO_ADDTOCONTACT, (WPARAM)hContact, (LPARAM)MODULE);
+ GetDlgItemText(hwndDlg, IDC_FEEDTITLE, str, SIZEOF(str));
+ DBWriteContactSettingTString(hContact, MODULE, "Nick", str);
+ HWND hwndList = (HWND)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ GetDlgItemText(hwndDlg, IDC_FEEDURL, str, SIZEOF(str));
+ DBWriteContactSettingTString(hContact, MODULE, "URL", str);
+ DBWriteContactSettingByte(hContact, MODULE, "CheckState", 1);
+ DBWriteContactSettingDword(hContact, MODULE, "UpdateTime", GetDlgItemInt(hwndDlg, IDC_CHECKTIME, false, false));
+ GetDlgItemText(hwndDlg, IDC_TAGSEDIT, str, SIZEOF(str));
+ DBWriteContactSettingTString(hContact, MODULE, "MsgFormat", str);
+ DBWriteContactSettingWord(hContact, MODULE, "Status", CallProtoService(MODULE, PS_GETSTATUS, 0, 0));
+ if (IsDlgButtonChecked(hwndDlg, IDC_USEAUTH))
+ {
+ DBWriteContactSettingByte(hContact, MODULE, "UseAuth", 1);
+ GetDlgItemText(hwndDlg, IDC_LOGIN, str, SIZEOF(str));
+ DBWriteContactSettingTString(hContact, MODULE, "Login", str);
+ GetDlgItemText(hwndDlg, IDC_PASSWORD, str, SIZEOF(str));
+ DBWriteContactSettingTString(hContact, MODULE, "Password", str);
+ }
+ DeleteAllItems(hwndList);
+ UpdateList(hwndList);
+ }
+ }
+
+ case IDCANCEL:
+ DestroyWindow(hwndDlg);
+ break;
+
+ case IDC_USEAUTH:
+ {
+ if (IsDlgButtonChecked(hwndDlg, IDC_USEAUTH))
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOGIN), TRUE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PASSWORD), TRUE);
+ }
+ else
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOGIN), FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PASSWORD), FALSE);
+ }
+ }
+ break;
+
+ case IDC_TAGHELP:
+ MessageBox(hwndDlg, TranslateT(TAGSHELP), TranslateT("Feed Tag Help"), MB_OK);
+ break;
+
+ case IDC_RESET:
+ if (MessageBox(hwndDlg, TranslateT("Are you sure?"), TranslateT("Tags Mask Reset"), MB_YESNO | MB_ICONWARNING) == IDYES)
+ SetDlgItemText(hwndDlg, IDC_TAGSEDIT, _T(TAGSDEFAULT));
+ break;
+
+ case IDC_DISCOVERY:
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DISCOVERY), FALSE);
+ SetDlgItemText(hwndDlg, IDC_DISCOVERY, TranslateT("Wait..."));
+ TCHAR tszURL[MAX_PATH] = {0}, *tszTitle = NULL;
+ if (GetDlgItemText(hwndDlg, IDC_FEEDURL, tszURL, SIZEOF(tszURL)) || lstrcmp(tszURL, _T("http://")) != 0)
+ tszTitle = CheckFeed(tszURL, hwndDlg);
+ else
+ MessageBox(hwndDlg, TranslateT("Enter Feed URL"), TranslateT("Error"), MB_OK);
+ SetDlgItemText(hwndDlg, IDC_FEEDTITLE, tszTitle);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DISCOVERY), TRUE);
+ SetDlgItemText(hwndDlg, IDC_DISCOVERY, TranslateT("Check Feed"));
+ }
+ break;
+ }
+ break;
+ }
+ case WM_CLOSE:
+ {
+ DestroyWindow(hwndDlg);
+ break;
+ }
+ case WM_DESTROY:
+ {
+ Utils_SaveWindowPosition(hwndDlg,NULL,MODULE,"AddDlg");
+ }
+ }
+
+ return FALSE;
+}
+
+INT_PTR CALLBACK DlgProcChangeFeedOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ ItemInfo &SelItem = *(ItemInfo*)lParam;
+ ItemInfo *nSelItem = new ItemInfo(SelItem);
+ SetWindowText(hwndDlg, TranslateT("Change Feed"));
+ SendDlgItemMessage(hwndDlg, IDC_CHECKTIME, EM_LIMITTEXT, 3, 0);
+ SendDlgItemMessage(hwndDlg, IDC_TIMEOUT_VALUE_SPIN, UDM_SETRANGE32, 0, 999);
+
+ HANDLE hContact = db_find_first();
+ while (hContact != NULL)
+ {
+ if (IsMyContact(hContact))
+ {
+ DBVARIANT dbNick = {0};
+ if (DBGetContactSettingTString(hContact, MODULE, "Nick", &dbNick))
+ continue;
+ else if (lstrcmp(dbNick.ptszVal, SelItem.nick) == 0)
+ {
+ DBFreeVariant(&dbNick);
+ DBVARIANT dbURL = {0};
+ if (DBGetContactSettingTString(hContact, MODULE, "URL", &dbURL))
+ continue;
+ else if (lstrcmp(dbURL.ptszVal, SelItem.url) == 0)
+ {
+ DBFreeVariant(&dbURL);
+ nSelItem->hContact = hContact;
+ 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);
+ DBVARIANT dbMsg = {0};
+ if (!DBGetContactSettingTString(hContact, MODULE, "MsgFormat", &dbMsg))
+ {
+ SetDlgItemText(hwndDlg, IDC_TAGSEDIT, dbMsg.ptszVal);
+ DBFreeVariant(&dbMsg);
+ }
+ if (DBGetContactSettingByte(hContact, MODULE, "UseAuth", 0))
+ {
+ CheckDlgButton(hwndDlg, IDC_USEAUTH, BST_CHECKED);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOGIN), TRUE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PASSWORD), TRUE);
+ DBVARIANT dbLogin = {0};
+ if (!DBGetContactSettingTString(hContact, MODULE, "Login", &dbLogin))
+ {
+ SetDlgItemText(hwndDlg, IDC_LOGIN, dbLogin.ptszVal);
+ DBFreeVariant(&dbLogin);
+ }
+ DBVARIANT dbPass = {0};
+ if (!DBGetContactSettingTString(hContact, MODULE, "Password", &dbPass))
+ {
+ SetDlgItemText(hwndDlg, IDC_PASSWORD, dbPass.ptszVal);
+ DBFreeVariant(&dbPass);
+ }
+ }
+ break;
+ }
+ DBFreeVariant(&dbURL);
+ }
+ DBFreeVariant(&dbNick);
+ }
+ hContact = db_find_next(hContact);
+ }
+ WindowList_Add(hChangeFeedDlgList,hwndDlg,hContact);
+ Utils_RestoreWindowPositionNoSize(hwndDlg,hContact,MODULE,"ChangeDlg");
+ return TRUE;
+ }
+ case WM_COMMAND:
+ {
+ switch (LOWORD(wParam))
+ {
+ case IDOK:
+ {
+ ItemInfo *SelItem = (ItemInfo*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ TCHAR str[MAX_PATH];
+ if (!GetDlgItemText(hwndDlg, IDC_FEEDTITLE, str, SIZEOF(str)))
+ {
+ MessageBox(hwndDlg, TranslateT("Enter Feed name"), TranslateT("Error"), MB_OK);
+ break;
+ }
+ else if (!GetDlgItemText(hwndDlg, IDC_FEEDURL, str, SIZEOF(str)) || lstrcmp(str, _T("http://")) == 0)
+ {
+ MessageBox(hwndDlg, TranslateT("Enter Feed URL"), TranslateT("Error"), MB_OK);
+ break;
+ }
+ else if (GetDlgItemInt(hwndDlg, IDC_CHECKTIME, false, false) < 0)
+ {
+ MessageBox(hwndDlg, TranslateT("Enter checking interval"), TranslateT("Error"), MB_OK);
+ break;
+ }
+ else if (!GetDlgItemText(hwndDlg, IDC_TAGSEDIT, str, SIZEOF(str)))
+ {
+ MessageBox(hwndDlg, TranslateT("Enter message format"), TranslateT("Error"), MB_OK);
+ break;
+ }
+ else
+ {
+ GetDlgItemText(hwndDlg, IDC_FEEDURL, str, SIZEOF(str));
+ DBWriteContactSettingTString(SelItem->hContact, MODULE, "URL", str);
+ GetDlgItemText(hwndDlg, IDC_FEEDTITLE, str, SIZEOF(str));
+ DBWriteContactSettingTString(SelItem->hContact, MODULE, "Nick", str);
+ DBWriteContactSettingDword(SelItem->hContact, MODULE, "UpdateTime", GetDlgItemInt(hwndDlg, IDC_CHECKTIME, false, false));
+ GetDlgItemText(hwndDlg, IDC_TAGSEDIT, str, SIZEOF(str));
+ DBWriteContactSettingTString(SelItem->hContact, MODULE, "MsgFormat", str);
+ if (IsDlgButtonChecked(hwndDlg, IDC_USEAUTH))
+ {
+ DBWriteContactSettingByte(SelItem->hContact, MODULE, "UseAuth", 1);
+ GetDlgItemText(hwndDlg, IDC_LOGIN, str, SIZEOF(str));
+ DBWriteContactSettingTString(SelItem->hContact, MODULE, "Login", str);
+ GetDlgItemText(hwndDlg, IDC_PASSWORD, str, SIZEOF(str));
+ DBWriteContactSettingTString(SelItem->hContact, MODULE, "Password", str);
+ }
+ DeleteAllItems(SelItem->hwndList);
+ UpdateList(SelItem->hwndList);
+ }
+ }
+
+ case IDCANCEL:
+ DestroyWindow(hwndDlg);
+ break;
+
+ case IDC_USEAUTH:
+ {
+ if (IsDlgButtonChecked(hwndDlg, IDC_USEAUTH))
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOGIN), TRUE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PASSWORD), TRUE);
+ }
+ else
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOGIN), FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PASSWORD), FALSE);
+ }
+ break;
+ }
+
+ case IDC_TAGHELP:
+ MessageBox(hwndDlg, TranslateT(TAGSHELP), TranslateT("Feed Tag Help"), MB_OK);
+ break;
+
+ case IDC_RESET:
+ if (MessageBox(hwndDlg, TranslateT("Are you sure?"), TranslateT("Tags Mask Reset"), MB_YESNO | MB_ICONWARNING) == IDYES)
+ SetDlgItemText(hwndDlg, IDC_TAGSEDIT, _T(TAGSDEFAULT));
+ break;
+
+ case IDC_DISCOVERY:
+ {
+ TCHAR tszURL[MAX_PATH] = {0};
+ if (GetDlgItemText(hwndDlg, IDC_FEEDURL, tszURL, SIZEOF(tszURL)) || lstrcmp(tszURL, _T("http://")) != 0)
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DISCOVERY), FALSE);
+ SetDlgItemText(hwndDlg, IDC_DISCOVERY, TranslateT("Wait..."));
+ TCHAR *tszTitle = CheckFeed(tszURL, hwndDlg);
+ SetDlgItemText(hwndDlg, IDC_FEEDTITLE, tszTitle);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DISCOVERY), TRUE);
+ SetDlgItemText(hwndDlg, IDC_DISCOVERY, TranslateT("Check Feed"));
+ }
+ else
+ MessageBox(hwndDlg, TranslateT("Enter Feed URL"), TranslateT("Error"), MB_OK);
+ }
+ break;
+ }
+ break;
+ }
+
+ case WM_CLOSE:
+ {
+ DestroyWindow(hwndDlg);
+ break;
+ }
+
+ case WM_DESTROY:
+ {
+ HANDLE hContact = (HANDLE) GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ Utils_SaveWindowPosition(hwndDlg,hContact,MODULE,"ChangeDlg");
+ WindowList_Remove(hChangeFeedDlgList,hwndDlg);
+ ItemInfo *SelItem = (ItemInfo*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ delete SelItem;
+ break;
+ }
+ }
+
+ return FALSE;
+}
+
+INT_PTR CALLBACK DlgProcChangeFeedMenu(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ SetWindowText(hwndDlg, TranslateT("Change Feed"));
+ SendDlgItemMessage(hwndDlg, IDC_CHECKTIME, UDM_SETRANGE32, 0, 999);
+
+ HANDLE hContact = (HANDLE)lParam;
+ WindowList_Add(hChangeFeedDlgList,hwndDlg,hContact);
+ Utils_RestoreWindowPositionNoSize(hwndDlg,hContact,MODULE,"ChangeDlg");
+ DBVARIANT dbNick = {0};
+ if (!DBGetContactSettingTString(hContact, MODULE, "Nick", &dbNick))
+ {
+ SetDlgItemText(hwndDlg, IDC_FEEDTITLE, dbNick.ptszVal);
+ DBFreeVariant(&dbNick);
+ DBVARIANT dbURL = {0};
+ if (!DBGetContactSettingTString(hContact, MODULE, "URL", &dbURL))
+ {
+ SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG)lParam);
+ SetDlgItemText(hwndDlg, IDC_FEEDURL, dbURL.ptszVal);
+ DBFreeVariant(&dbURL);
+ SetDlgItemInt(hwndDlg, IDC_CHECKTIME, DBGetContactSettingDword(hContact, MODULE, "UpdateTime", 60), TRUE);
+ DBVARIANT dbMsg = {0};
+ if (!DBGetContactSettingTString(hContact, MODULE, "MsgFormat", &dbMsg))
+ {
+ SetDlgItemText(hwndDlg, IDC_TAGSEDIT, dbMsg.ptszVal);
+ DBFreeVariant(&dbMsg);
+ }
+ if (DBGetContactSettingByte(hContact, MODULE, "UseAuth", 0))
+ {
+ CheckDlgButton(hwndDlg, IDC_USEAUTH, BST_CHECKED);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOGIN), TRUE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PASSWORD), TRUE);
+ DBVARIANT dbLogin = {0};
+ if (!DBGetContactSettingTString(hContact, MODULE, "Login", &dbLogin))
+ {
+ SetDlgItemText(hwndDlg, IDC_LOGIN, dbLogin.ptszVal);
+ DBFreeVariant(&dbLogin);
+ }
+ DBVARIANT dbPass = {0};
+ if (!DBGetContactSettingTString(hContact, MODULE, "Password", &dbPass))
+ {
+ SetDlgItemText(hwndDlg, IDC_PASSWORD, dbPass.ptszVal);
+ DBFreeVariant(&dbPass);
+ }
+ }
+ break;
+ }
+ }
+ return TRUE;
+ }
+ case WM_COMMAND:
+ {
+ switch (LOWORD(wParam))
+ {
+ case IDOK:
+ {
+ HANDLE hContact = (HANDLE)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ TCHAR str[MAX_PATH];
+ if (!GetDlgItemText(hwndDlg, IDC_FEEDTITLE, str, SIZEOF(str)))
+ {
+ MessageBox(hwndDlg, TranslateT("Enter Feed name"), TranslateT("Error"), MB_OK);
+ break;
+ }
+ else if (!GetDlgItemText(hwndDlg, IDC_FEEDURL, str, SIZEOF(str)) || lstrcmp(str, _T("http://")) == 0)
+ {
+ MessageBox(hwndDlg, TranslateT("Enter Feed URL"), TranslateT("Error"), MB_OK);
+ break;
+ }
+ else if (GetDlgItemInt(hwndDlg, IDC_CHECKTIME, false, false) < 0)
+ {
+ MessageBox(hwndDlg, TranslateT("Enter checking interval"), TranslateT("Error"), MB_OK);
+ break;
+ }
+ else if (!GetDlgItemText(hwndDlg, IDC_TAGSEDIT, str, SIZEOF(str)))
+ {
+ MessageBox(hwndDlg, TranslateT("Enter message format"), TranslateT("Error"), MB_OK);
+ break;
+ }
+ else
+ {
+ GetDlgItemText(hwndDlg, IDC_FEEDURL, str, SIZEOF(str));
+ DBWriteContactSettingTString(hContact, MODULE, "URL", str);
+ GetDlgItemText(hwndDlg, IDC_FEEDTITLE, str, SIZEOF(str));
+ DBWriteContactSettingTString(hContact, MODULE, "Nick", str);
+ DBWriteContactSettingDword(hContact, MODULE, "UpdateTime", GetDlgItemInt(hwndDlg, IDC_CHECKTIME, false, false));
+ GetDlgItemText(hwndDlg, IDC_TAGSEDIT, str, SIZEOF(str));
+ DBWriteContactSettingTString(hContact, MODULE, "MsgFormat", str);
+ if (IsDlgButtonChecked(hwndDlg, IDC_USEAUTH))
+ {
+ DBWriteContactSettingByte(hContact, MODULE, "UseAuth", 1);
+ GetDlgItemText(hwndDlg, IDC_LOGIN, str, SIZEOF(str));
+ DBWriteContactSettingTString(hContact, MODULE, "Login", str);
+ GetDlgItemText(hwndDlg, IDC_PASSWORD, str, SIZEOF(str));
+ DBWriteContactSettingTString(hContact, MODULE, "Password", str);
+ }
+ }
+ }
+
+ case IDCANCEL:
+ DestroyWindow(hwndDlg);
+ break;
+
+ case IDC_USEAUTH:
+ {
+ if (IsDlgButtonChecked(hwndDlg, IDC_USEAUTH))
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOGIN), TRUE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PASSWORD), TRUE);
+ }
+ else
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_LOGIN), FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_PASSWORD), FALSE);
+ }
+ break;
+ }
+
+ case IDC_TAGHELP:
+ MessageBox(hwndDlg, TranslateT(TAGSHELP), TranslateT("Feed Tag Help"), MB_OK);
+ break;
+
+ case IDC_RESET:
+ if (MessageBox(hwndDlg, TranslateT("Are you sure?"), TranslateT("Tags Mask Reset"), MB_YESNO | MB_ICONWARNING) == IDYES)
+ SetDlgItemText(hwndDlg, IDC_TAGSEDIT, _T(TAGSDEFAULT));
+ break;
+
+ case IDC_DISCOVERY:
+ {
+ TCHAR tszURL[MAX_PATH] = {0};
+ if (GetDlgItemText(hwndDlg, IDC_FEEDURL, tszURL, SIZEOF(tszURL)) || lstrcmp(tszURL, _T("http://")) != 0)
+ {
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DISCOVERY), FALSE);
+ SetDlgItemText(hwndDlg, IDC_DISCOVERY, TranslateT("Wait..."));
+ TCHAR *tszTitle = CheckFeed(tszURL, hwndDlg);
+ SetDlgItemText(hwndDlg, IDC_FEEDTITLE, tszTitle);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DISCOVERY), TRUE);
+ SetDlgItemText(hwndDlg, IDC_DISCOVERY, TranslateT("Check Feed"));
+ }
+ else
+ MessageBox(hwndDlg, TranslateT("Enter Feed URL"), TranslateT("Error"), MB_OK);
+ }
+ break;
+ }
+ break;
+ }
+
+ case WM_CLOSE:
+ {
+ DestroyWindow(hwndDlg);
+ break;
+ }
+ case WM_DESTROY:
+ {
+ HANDLE hContact = (HANDLE) GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ Utils_SaveWindowPosition(hwndDlg,hContact,MODULE,"ChangeDlg");
+ WindowList_Remove(hChangeFeedDlgList,hwndDlg);
+ }
+ }
+
+ return FALSE;
+}
+
+INT_PTR CALLBACK UpdateNotifyOptsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ HWND hwndList = GetDlgItem(hwndDlg, IDC_FEEDLIST);
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ SetWindowLongPtr(hwndDlg, GWLP_USERDATA, 0);
+ CreateList(hwndList);
+ UpdateList(hwndList);
+ return TRUE;
+ }
+
+ case WM_COMMAND:
+ {
+ switch (LOWORD(wParam))
+ {
+ case IDC_ADD:
+ {
+ CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_ADDFEED), hwndDlg, DlgProcAddFeedOpts, (LPARAM)hwndList);
+ }
+ return FALSE;
+ case IDC_CHANGE:
+ {
+ ItemInfo SelItem = {0};
+ int sel = ListView_GetSelectionMark(hwndList);
+ ListView_GetItemText(hwndList, sel, 0, SelItem.nick, MAX_PATH);
+ ListView_GetItemText(hwndList, sel, 1, SelItem.url, MAX_PATH);
+ SelItem.hwndList = hwndList;
+ SelItem.SelNumber = sel;
+ 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)
+ {
+ TCHAR nick[MAX_PATH], url[MAX_PATH];
+ int sel = ListView_GetSelectionMark(hwndList);
+ ListView_GetItemText(hwndList, sel, 0, nick, MAX_PATH);
+ ListView_GetItemText(hwndList, sel, 1, url, MAX_PATH);
+
+ HANDLE hContact = db_find_first();
+ while (hContact != NULL)
+ {
+ if(IsMyContact(hContact))
+ {
+ DBVARIANT dbNick = {0};
+ if (DBGetContactSettingTString(hContact, MODULE, "Nick", &dbNick))
+ break;
+ else if (lstrcmp(dbNick.ptszVal, nick) == 0)
+ {
+ DBFreeVariant(&dbNick);
+ DBVARIANT dbURL = {0};
+ if (DBGetContactSettingTString(hContact, MODULE, "URL", &dbURL))
+ break;
+ else if (lstrcmp(dbURL.ptszVal, url) == 0)
+ {
+ DBFreeVariant(&dbURL);
+ CallService(MS_DB_CONTACT_DELETE, (WPARAM)hContact, 0);
+ ListView_DeleteItem(hwndList, sel);
+ break;
+ }
+ DBFreeVariant(&dbURL);
+ }
+ DBFreeVariant(&dbNick);
+ }
+ hContact = db_find_next(hContact);
+ }
+ }
+ return FALSE;
+ }
+ }
+ break;
+ }
+ case WM_NOTIFY:
+ {
+ NMHDR *hdr = (NMHDR *)lParam;
+ switch (hdr->code)
+ {
+ case PSN_APPLY:
+ {
+ HANDLE hContact = db_find_first();
+ int i = 0;
+ while (hContact != NULL)
+ {
+ if(IsMyContact(hContact))
+ {
+ DBWriteContactSettingByte(hContact, MODULE, "CheckState", ListView_GetCheckState(hwndList, i));
+ if (!ListView_GetCheckState(hwndList, i))
+ DBWriteContactSettingByte(hContact, "CList", "Hidden", 1);
+ else
+ DBDeleteContactSetting(hContact,"CList","Hidden");
+ i += 1;
+ }
+ hContact = db_find_next(hContact);
+ }
+ break;
+ }
+
+ case NM_DBLCLK:
+ {
+ ItemInfo SelItem = {0};
+ int sel = ListView_GetHotItem(hwndList);
+ if (sel != -1)
+ {
+ ListView_GetItemText(hwndList, sel, 0, SelItem.nick, MAX_PATH);
+ ListView_GetItemText(hwndList, sel, 1, SelItem.url, MAX_PATH);
+ SelItem.hwndList = hwndList;
+ SelItem.SelNumber = sel;
+ CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_ADDFEED), hwndDlg, DlgProcChangeFeedOpts, (LPARAM)&SelItem);
+ }
+ break;
+ }
+
+ case LVN_ITEMCHANGED:
+ {
+ NMLISTVIEW *nmlv = (NMLISTVIEW *)lParam;
+ if (((nmlv->uNewState ^ nmlv->uOldState) & LVIS_STATEIMAGEMASK) && !UpdateListFlag)
+ {
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+ break;
+ }
+ }
+ }
+ }//end* switch (msg)
+ return FALSE;
+}
+
+INT OptInit(WPARAM wParam, LPARAM lParam)
+{
+ OPTIONSDIALOGPAGE odp = {0};
+ odp.cbSize = sizeof(odp);
+ odp.position = 100000000;
+ odp.hInstance = hInst;
+ odp.flags = ODPF_BOLDGROUPS;
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTIONS);
+ odp.pszGroup = LPGEN("Network");
+ odp.pszTitle = LPGEN("News Aggregator");
+ odp.pfnDlgProc = UpdateNotifyOptsProc;
+ Options_AddPage(wParam, &odp);
+ return 0;
+} \ No newline at end of file
diff --git a/plugins/NewsAggregator/Src/Services.cpp b/plugins/NewsAggregator/Src/Services.cpp
new file mode 100644
index 0000000000..72f666fa98
--- /dev/null
+++ b/plugins/NewsAggregator/Src/Services.cpp
@@ -0,0 +1,245 @@
+/*
+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 "common.h"
+
+int g_nStatus = ID_STATUS_OFFLINE;
+UINT_PTR timerId = 0;
+
+void SetContactStatus(HANDLE hContact,int nNewStatus)
+{
+ if(DBGetContactSettingWord(hContact,MODULE,"Status",ID_STATUS_OFFLINE) != nNewStatus)
+ DBWriteContactSettingWord(hContact,MODULE,"Status",nNewStatus);
+}
+
+static void __cdecl WorkingThread(void* param)
+{
+ int nStatus = (int)param;
+// UpdateAll(FALSE, FALSE);
+ HANDLE hContact= db_find_first();
+ while (hContact != NULL)
+ {
+ if(IsMyContact(hContact))
+ {
+ SetContactStatus(hContact, nStatus);
+ }
+ hContact = db_find_next(hContact);
+ }
+}
+
+int NewsAggrInit(WPARAM wParam,LPARAM lParam)
+{
+ HANDLE hContact= db_find_first();
+ while (hContact != NULL)
+ {
+ if(IsMyContact(hContact))
+ {
+ SetContactStatus(hContact, ID_STATUS_OFFLINE);
+ }
+ hContact = db_find_next(hContact);
+ }
+ NetlibInit();
+ InitIcons();
+ InitMenu();
+
+ // timer for the first update
+ timerId = SetTimer(NULL, 0, 5000, timerProc2); // first update is 5 sec after load
+
+ return 0;
+}
+
+int NewsAggrPreShutdown(WPARAM wParam,LPARAM lParam)
+{
+ if (hAddFeedDlg)
+ {
+ SendMessage(hAddFeedDlg, WM_CLOSE, 0, 0);
+ }
+ WindowList_Broadcast(hChangeFeedDlgList, WM_CLOSE, 0, 0);
+
+ mir_forkthread(WorkingThread, (void*)ID_STATUS_OFFLINE);
+ KillTimer(NULL, timerId);
+ NetlibUnInit();
+
+ return 0;
+}
+
+INT_PTR NewsAggrGetName(WPARAM wParam, LPARAM lParam)
+{
+ if(lParam)
+ {
+ lstrcpynA((char*)lParam, MODULE, wParam);
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+}
+
+INT_PTR NewsAggrGetCaps(WPARAM wp,LPARAM lp)
+{
+ switch(wp)
+ {
+ case PFLAGNUM_1:
+ return PF1_IM | PF1_PEER2PEER;
+ case PFLAGNUM_3:
+ case PFLAGNUM_2:
+ return PF2_ONLINE;
+ case PFLAGNUM_4:
+ return PF4_AVATARS;
+ case PFLAG_UNIQUEIDTEXT:
+ return (INT_PTR) "News Feed";
+ case PFLAG_UNIQUEIDSETTING:
+ return (INT_PTR) "URL";
+ default:
+ return 0;
+ }
+}
+
+INT_PTR NewsAggrSetStatus(WPARAM wp,LPARAM /*lp*/)
+{
+ int nStatus = wp;
+ if ((ID_STATUS_ONLINE == nStatus) || (ID_STATUS_OFFLINE == nStatus))
+ {
+ int nOldStatus = g_nStatus;
+ if(nStatus != g_nStatus)
+ {
+ g_nStatus = nStatus;
+ mir_forkthread(WorkingThread, (void*)g_nStatus);
+ ProtoBroadcastAck(MODULE, NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)nOldStatus, g_nStatus);
+ }
+
+ }
+
+ return 0;
+}
+
+INT_PTR NewsAggrGetStatus(WPARAM/* wp*/,LPARAM/* lp*/)
+{
+ return g_nStatus;
+}
+
+INT_PTR NewsAggrLoadIcon(WPARAM wParam,LPARAM lParam)
+{
+ return (LOWORD(wParam) == PLI_PROTOCOL) ? (INT_PTR)CopyIcon(LoadIconEx("main", FALSE)) : 0;
+}
+
+static void __cdecl AckThreadProc(HANDLE param)
+{
+ Sleep(100);
+ ProtoBroadcastAck(MODULE, param, ACKTYPE_GETINFO, ACKRESULT_SUCCESS, (HANDLE) 1, 0);
+}
+
+INT_PTR NewsAggrGetInfo(WPARAM wParam,LPARAM lParam)
+{
+ CCSDATA *ccs = (CCSDATA *) lParam;
+ mir_forkthread(AckThreadProc, ccs->hContact);
+ return 0;
+}
+
+INT_PTR CheckAllFeeds(WPARAM wParam,LPARAM lParam)
+{
+ HANDLE hContact = db_find_first();
+ while (hContact != NULL)
+ {
+ if (IsMyContact(hContact) && lParam && DBGetContactSettingDword(hContact, MODULE, "UpdateTime", 60))
+ UpdateListAdd(hContact);
+ else if (IsMyContact(hContact) && !lParam)
+ UpdateListAdd(hContact);
+ hContact = db_find_next(hContact);
+ }
+ if (!ThreadRunning)
+ mir_forkthread(UpdateThreadProc, NULL);
+
+
+ return 0;
+}
+
+INT_PTR AddFeed(WPARAM wParam,LPARAM lParam)
+{
+ hAddFeedDlg = CreateDialog(hInst, MAKEINTRESOURCE(IDD_ADDFEED), NULL, DlgProcAddFeedOpts);
+ ShowWindow(hAddFeedDlg, SW_SHOW);
+ return 0;
+}
+
+INT_PTR ChangeFeed(WPARAM wParam, LPARAM lParam)
+{
+ HANDLE hContact = (HANDLE) wParam;
+ HWND hChangeFeedDlg = WindowList_Find(hChangeFeedDlgList,hContact);
+ if (!hChangeFeedDlg)
+ {
+ hChangeFeedDlg = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_ADDFEED), NULL, DlgProcChangeFeedMenu, (LPARAM)hContact);
+ ShowWindow(hChangeFeedDlg, SW_SHOW);
+ }
+ else
+ {
+ SetForegroundWindow(hChangeFeedDlg);
+ SetFocus(hChangeFeedDlg);
+ }
+ return 0;
+}
+
+INT_PTR ImportFeeds(WPARAM wParam, LPARAM lParam)
+{
+ return 0;
+}
+
+INT_PTR ExportFeeds(WPARAM wParam, LPARAM lParam)
+{
+ return 0;
+}
+
+INT_PTR CheckFeed(WPARAM wParam, LPARAM lParam)
+{
+ HANDLE hContact = (HANDLE)wParam;
+ if(IsMyContact(hContact))
+ UpdateListAdd(hContact);
+ if (!ThreadRunning)
+ mir_forkthread(UpdateThreadProc, NULL);
+ return 0;
+}
+
+INT_PTR NewsAggrGetAvatarInfo(WPARAM wParam, LPARAM lParam)
+{
+ PROTO_AVATAR_INFORMATIONT* pai = (PROTO_AVATAR_INFORMATIONT*) lParam;
+
+ if (!IsMyContact(pai->hContact))
+ return GAIR_NOAVATAR;
+
+ // 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))
+ UpdateListAdd(pai->hContact);
+ if (!ThreadRunning)
+ mir_forkthread(UpdateThreadProc, NULL);
+
+ DBVARIANT dbv = {0};
+ if(DBGetContactSettingTString(pai->hContact,MODULE,"ImageURL",&dbv))
+ {
+ return GAIR_NOAVATAR;
+ }
+ DBFreeVariant(&dbv);
+ return GAIR_WAITFOR;
+}
+
+INT_PTR NewsAggrRecvMessage(WPARAM wParam, LPARAM lParam)
+{
+ CallService(MS_PROTO_RECVMSG, 0, lParam);
+ return 0;
+} \ No newline at end of file
diff --git a/plugins/NewsAggregator/Src/Stdafx.cpp b/plugins/NewsAggregator/Src/Stdafx.cpp
new file mode 100644
index 0000000000..7a516adf58
--- /dev/null
+++ b/plugins/NewsAggregator/Src/Stdafx.cpp
@@ -0,0 +1,18 @@
+/*
+Copyright (C) 2012 Miranda NG team (http://miranda-ng.org)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation version 2
+of the License.
+
+This program 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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "common.h" \ No newline at end of file
diff --git a/plugins/NewsAggregator/Src/Update.cpp b/plugins/NewsAggregator/Src/Update.cpp
new file mode 100644
index 0000000000..c0b42eb759
--- /dev/null
+++ b/plugins/NewsAggregator/Src/Update.cpp
@@ -0,0 +1,147 @@
+/*
+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 "common.h"
+
+// check if Feed is currently updating
+BOOL ThreadRunning;
+UPDATELIST *UpdateListHead = NULL;
+UPDATELIST *UpdateListTail = NULL;
+
+// main auto-update timer
+VOID CALLBACK timerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
+{
+ // only run if it is not current updating and the auto update option is enabled
+ if (!ThreadRunning && !Miranda_Terminated())
+ {
+ BOOL HaveUpdates = FALSE;
+ HANDLE hContact = db_find_first();
+ while (hContact != NULL)
+ {
+ if(IsMyContact(hContact))
+ {
+ if (DBGetContactSettingDword(hContact, MODULE, "UpdateTime", 60))
+ {
+ double diff = difftime(time(NULL), DBGetContactSettingDword(hContact, MODULE, "LastCheck", 0));
+ if (diff >= DBGetContactSettingDword(hContact, MODULE, "UpdateTime", 60) * 60)
+ {
+ UpdateListAdd(hContact);
+ HaveUpdates = TRUE;
+ }
+ }
+ }
+ hContact = db_find_next(hContact);
+ }
+ if (!ThreadRunning && HaveUpdates)
+ mir_forkthread(UpdateThreadProc, NULL);
+ }
+}
+
+// temporary timer for first run
+// when this is run, it kill the old startup timer and create the permenant one above
+VOID CALLBACK timerProc2(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
+{
+ KillTimer(NULL, timerId);
+ ThreadRunning = FALSE;
+
+ if (!Miranda_Terminated())
+ {
+ CheckAllFeeds(0, 1);
+ timerId = SetTimer(NULL, 0, 30000, (TIMERPROC)timerProc);
+ }
+}
+
+void UpdateListAdd(HANDLE hContact)
+{
+ UPDATELIST *newItem;
+
+ newItem = (UPDATELIST*)mir_alloc(sizeof(UPDATELIST));
+ newItem->hContact = hContact;
+ newItem->next = NULL;
+
+ WaitForSingleObject(hUpdateMutex, INFINITE);
+
+ if (UpdateListTail == NULL) UpdateListHead = newItem;
+ else UpdateListTail->next = newItem;
+ UpdateListTail = newItem;
+
+ ReleaseMutex(hUpdateMutex);
+}
+
+HANDLE UpdateGetFirst()
+{
+ HANDLE hContact = NULL;
+
+ WaitForSingleObject(hUpdateMutex, INFINITE);
+
+ if (UpdateListHead != NULL)
+ {
+ UPDATELIST* Item = UpdateListHead;
+
+ hContact = Item->hContact;
+ UpdateListHead = Item->next;
+ mir_free(Item);
+
+ if (UpdateListHead == NULL) UpdateListTail = NULL;
+ }
+
+ ReleaseMutex(hUpdateMutex);
+
+ return hContact;
+}
+
+void DestroyUpdateList(void)
+{
+ UPDATELIST *temp;
+
+ WaitForSingleObject(hUpdateMutex, INFINITE);
+
+ temp = UpdateListHead;
+
+ // free the list one by one
+ while (temp != NULL)
+ {
+ UpdateListHead = temp->next;
+ mir_free(temp);
+ temp = UpdateListHead;
+ }
+ // make sure the entire list is clear
+ UpdateListTail = NULL;
+
+ ReleaseMutex(hUpdateMutex);
+}
+
+void UpdateThreadProc(LPVOID hWnd)
+{
+ WaitForSingleObject(hUpdateMutex, INFINITE);
+ if (ThreadRunning)
+ {
+ ReleaseMutex(hUpdateMutex);
+ return;
+ }
+ ThreadRunning = TRUE; // prevent 2 instance of this thread running
+ ReleaseMutex(hUpdateMutex);
+
+ // update weather by getting the first station from the queue until the queue is empty
+ while (UpdateListHead != NULL && !Miranda_Terminated())
+ CheckCurrentFeed(UpdateGetFirst());
+
+ // exit the update thread
+ ThreadRunning = FALSE;
+} \ No newline at end of file
diff --git a/plugins/NewsAggregator/Src/Utils.cpp b/plugins/NewsAggregator/Src/Utils.cpp
new file mode 100644
index 0000000000..f28825d7e5
--- /dev/null
+++ b/plugins/NewsAggregator/Src/Utils.cpp
@@ -0,0 +1,1400 @@
+/*
+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 "common.h"
+
+HANDLE hNetlibUser = NULL, hNetlibHttp;
+BOOL UpdateListFlag = FALSE;
+
+BOOL IsMyContact(HANDLE hContact)
+{
+ const char* szProto = GetContactProto(hContact);
+ return szProto != NULL && strcmp(MODULE, szProto) == 0;
+}
+
+VOID NetlibInit()
+{
+ NETLIBUSER nlu = {0};
+ nlu.cbSize = sizeof(nlu);
+ nlu.flags = NUF_OUTGOING | NUF_INCOMING | NUF_HTTPCONNS | NUF_TCHAR; // | NUF_HTTPGATEWAY;
+ nlu.ptszDescriptiveName = TranslateT("NewsAggr HTTP connection");
+ nlu.szSettingsModule = MODULE;
+ hNetlibUser = (HANDLE)CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM)&nlu);
+}
+
+VOID NetlibUnInit()
+{
+ Netlib_CloseHandle(hNetlibUser);
+ hNetlibUser = NULL;
+}
+
+static void arrayToHex(BYTE* data, size_t datasz, char* res)
+{
+ char* resptr = res;
+ for (unsigned i=0; i<datasz ; i++)
+ {
+ const BYTE ch = data[i];
+
+ const char ch0 = (char)(ch >> 4);
+ *resptr++ = (char)((ch0 <= 9) ? ('0' + ch0) : (('a' - 10) + ch0));
+
+ const char ch1 = (char)(ch & 0xF);
+ *resptr++ = (char)((ch1 <= 9) ? ('0' + ch1) : (('a' - 10) + ch1));
+ }
+ *resptr = '\0';
+}
+
+int GetImageFormat(const TCHAR* ext)
+{
+ if (!lstrcmp(ext,_T(".jpg")) || !lstrcmp(ext,_T(".jpeg")))
+ {
+ return PA_FORMAT_JPEG;
+ }
+ else if (!lstrcmp(ext,_T(".png")))
+ {
+ return PA_FORMAT_PNG;
+ }
+ else if (!lstrcmp(ext,_T(".gif")))
+ {
+ return PA_FORMAT_GIF;
+ }
+ else if (!lstrcmp(ext,_T(".ico")))
+ {
+ return PA_FORMAT_ICON;
+ }
+ else if (!lstrcmp(ext,_T(".bmp")))
+ {
+ return PA_FORMAT_BMP;
+ }
+ else if (!lstrcmp(ext,_T(".swf")))
+ {
+ return PA_FORMAT_SWF;
+ }
+ else if (!lstrcmp(ext,_T(".xml")))
+ {
+ return PA_FORMAT_XML;
+ }
+ else
+ {
+ return PA_FORMAT_UNKNOWN;
+ }
+}
+void CreateAuthString(char* auth, HANDLE hContact, HWND hwndDlg)
+{
+ char *user = NULL, *pass = NULL;
+ TCHAR *tlogin = NULL, *tpass = NULL, buf[MAX_PATH] = {0};
+ if (hContact && DBGetContactSettingByte(hContact, MODULE, "UseAuth", 0))
+ {
+ DBVARIANT dbLogin = {0};
+ if (!DBGetContactSettingTString(hContact, MODULE, "Login", &dbLogin))
+ {
+ tlogin = mir_tstrdup(dbLogin.ptszVal);
+ DBFreeVariant(&dbLogin);
+ }
+ DBVARIANT dbPass = {0};
+ if (!DBGetContactSettingTString(hContact, MODULE, "Password", &dbPass))
+ {
+ tpass = mir_tstrdup(dbPass.ptszVal);
+ DBFreeVariant(&dbPass);
+ }
+ }
+ else if (hwndDlg && IsDlgButtonChecked(hwndDlg, IDC_USEAUTH))
+ {
+ GetDlgItemText(hwndDlg, IDC_LOGIN, buf, SIZEOF(buf));
+ tlogin = buf;
+ GetDlgItemText(hwndDlg, IDC_PASSWORD, buf, SIZEOF(buf));
+ tpass = 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);
+
+ strcpy(auth, "Basic ");
+ NETLIBBASE64 nlb = { auth+6, 250, (PBYTE)str, len };
+ CallService(MS_NETLIB_BASE64ENCODE, 0, LPARAM(&nlb));
+}
+
+VOID GetNewsData(TCHAR *tszUrl, char** szData, HANDLE hContact, HWND hwndDlg)
+{
+ char* szRedirUrl = NULL;
+ NETLIBHTTPREQUEST nlhr = {0};
+ NETLIBHTTPHEADER headers[5];
+
+ // initialize the netlib request
+ nlhr.cbSize = sizeof(nlhr);
+ nlhr.requestType = REQUEST_GET;
+ nlhr.flags = NLHRF_HTTP11;
+ char *szUrl = mir_t2a(tszUrl);
+ nlhr.szUrl = szUrl;
+ nlhr.nlc = hNetlibHttp;
+
+ // change the header so the plugin is pretended to be IE 6 + WinXP
+ nlhr.headers = headers;
+ nlhr.headers[0].szName = "User-Agent";
+ nlhr.headers[0].szValue = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
+ nlhr.headers[1].szName = "Cache-Control";
+ nlhr.headers[1].szValue = "no-cache";
+ nlhr.headers[2].szName = "Pragma";
+ nlhr.headers[2].szValue = "no-cache";
+ nlhr.headers[3].szName = "Connection";
+ nlhr.headers[3].szValue = "close";
+ nlhr.headers[4].szName = "Accept";
+ nlhr.headers[4].szValue = "*/*";
+ if (DBGetContactSettingByte(hContact, MODULE, "UseAuth", 0) || IsDlgButtonChecked(hwndDlg, IDC_USEAUTH))
+ {
+ nlhr.headersCount = 6;
+ nlhr.headers[5].szName = "Authorization";
+
+ char auth[256];
+ CreateAuthString(auth, hContact, hwndDlg);
+ nlhr.headers[5].szValue = auth;
+ }
+ else
+ nlhr.headersCount = 5;
+
+ // download the page
+ NETLIBHTTPREQUEST *nlhrReply = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)hNetlibUser, (LPARAM)&nlhr);
+ if (nlhrReply)
+ {
+ // if the recieved code is 200 OK
+ switch (nlhrReply->resultCode)
+ {
+ case 200:
+ {
+ if (nlhrReply->dataLength)
+ {
+ // allocate memory and save the retrieved data
+ *szData = (char *)mir_alloc(nlhrReply->dataLength + 2);
+ memcpy(*szData, nlhrReply->pData, nlhrReply->dataLength);
+ (*szData)[nlhrReply->dataLength] = 0;
+ }
+ break;
+ }
+
+ case 401:
+ {
+ //ShowMessage(0, TranslateT("Cannot upload VersionInfo. Incorrect username or password"));
+ break;
+ }
+
+ case 301:
+ case 302:
+ case 307:
+ // get the url for the new location and save it to szInfo
+ // look for the reply header "Location"
+ for (int i=0; i<nlhrReply->headersCount; i++)
+ {
+ if (!strcmp(nlhrReply->headers[i].szName, "Location"))
+ {
+ size_t rlen = 0;
+ if (nlhrReply->headers[i].szValue[0] == '/')
+ {
+ const char* szPath;
+ const char* szPref = strstr(szUrl, "://");
+ szPref = szPref ? szPref + 3 : szUrl;
+ szPath = strchr(szPref, '/');
+ rlen = szPath != NULL ? szPath - szUrl : strlen(szUrl);
+ }
+
+ szRedirUrl = (char*)mir_realloc(szRedirUrl, rlen + strlen(nlhrReply->headers[i].szValue)*3 + 1);
+
+ strncpy(szRedirUrl, szUrl, rlen);
+ strcpy(szRedirUrl+rlen, nlhrReply->headers[i].szValue);
+
+ nlhr.szUrl = szRedirUrl;
+ break;
+ }
+ }
+ break;
+
+ default:
+ //ShowMessage(0, TranslateT("Cannot upload VersionInfo. Unknown error"));
+ break;
+ }
+ CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)nlhrReply);
+ }
+ mir_free(szUrl);
+}
+
+VOID CreateList(HWND hwndList)
+{
+ SendMessage(hwndList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES);
+
+ LVCOLUMN lvc = {0};
+ // Initialize the LVCOLUMN structure.
+ // The mask specifies that the format, width, text, and
+ // subitem members of the structure are valid.
+ lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
+ lvc.fmt = LVCFMT_LEFT;
+
+ lvc.iSubItem = 0;
+ lvc.pszText = TranslateT("Feed");
+ lvc.cx = 160; // width of column in pixels
+ ListView_InsertColumn(hwndList, 0, &lvc);
+
+ lvc.iSubItem = 1;
+ lvc.pszText = TranslateT("URL");
+ lvc.cx = 280; // width of column in pixels
+ ListView_InsertColumn(hwndList, 1, &lvc);
+}
+
+VOID UpdateList(HWND hwndList)
+{
+ LVITEM lvI = {0};
+
+ // Some code to create the list-view control.
+ // Initialize LVITEM members that are common to all
+ // items.
+ HANDLE hContact = db_find_first();
+ int i = 0;
+ while (hContact != NULL)
+ {
+ if (IsMyContact(hContact))
+ {
+ UpdateListFlag = TRUE;
+ lvI.mask = LVIF_TEXT;
+ lvI.iSubItem = 0;
+ DBVARIANT dbNick = {0};
+ if (!DBGetContactSettingTString(hContact, MODULE, "Nick", &dbNick))
+ {
+ lvI.pszText = dbNick.ptszVal;
+ lvI.iItem = i;
+ ListView_InsertItem(hwndList, &lvI);
+ lvI.iSubItem = 1;
+ DBVARIANT dbURL = {0};
+ if (!DBGetContactSettingTString(hContact, MODULE, "URL", &dbURL))
+ {
+ lvI.pszText = dbURL.ptszVal;
+ ListView_SetItem(hwndList, &lvI);
+ i += 1;
+ ListView_SetCheckState(hwndList, lvI.iItem, DBGetContactSettingByte(hContact, MODULE, "CheckState", 1));
+ DBFreeVariant(&dbURL);
+ }
+ DBFreeVariant(&dbNick);
+ }
+ }
+ hContact = db_find_next(hContact);
+ }
+ UpdateListFlag = FALSE;
+}
+
+VOID DeleteAllItems(HWND hwndList)
+{
+ ListView_DeleteAllItems(hwndList);
+}
+
+time_t __stdcall DateToUnixTime(TCHAR* stamp, BOOL FeedType)
+{
+ struct tm timestamp;
+ TCHAR date[9];
+ int i, y;
+ time_t t;
+
+ if ( stamp == NULL ) return ( time_t ) 0;
+
+ TCHAR *p = stamp;
+
+ if (FeedType)
+ {
+ // skip '-' chars
+ int si = 0, sj = 0;
+ while (1) {
+ if ( p[si] == _T('-'))
+ si++;
+ else
+ if ( !( p[sj++] = p[si++] ))
+ break;
+ };
+ }
+ else
+ {
+ TCHAR weekday[4], monthstr[4], timezonesign[2];
+ INT day, month, year, hour, min, sec, timezoneh, timezonem;
+ if (_tcsstr(p, _T(",")))
+ {
+ _stscanf( p, _T("%3s, %d %3s %d %d:%d:%d %1s%02d%02d"), &weekday, &day, &monthstr, &year, &hour, &min, &sec, &timezonesign, &timezoneh, &timezonem);
+ if (!lstrcmpi(monthstr, _T("Jan")))
+ month = 1;
+ if (!lstrcmpi(monthstr, _T("Feb")))
+ month = 2;
+ if (!lstrcmpi(monthstr, _T("Mar")))
+ month = 3;
+ if (!lstrcmpi(monthstr, _T("Apr")))
+ month = 4;
+ if (!lstrcmpi(monthstr, _T("May")))
+ month = 5;
+ if (!lstrcmpi(monthstr, _T("Jun")))
+ month = 6;
+ if (!lstrcmpi(monthstr, _T("Jul")))
+ month = 7;
+ if (!lstrcmpi(monthstr, _T("Aug")))
+ month = 8;
+ if (!lstrcmpi(monthstr, _T("Sep")))
+ month = 9;
+ if (!lstrcmpi(monthstr, _T("Oct")))
+ month = 10;
+ if (!lstrcmpi(monthstr, _T("Nov")))
+ month = 11;
+ if (!lstrcmpi(monthstr, _T("Dec")))
+ month = 12;
+ if (!lstrcmp(timezonesign, _T("+")))
+ mir_sntprintf(p, 4+2+2+1+2+1+2+1+2+1, _T("%04d%02d%02dT%02d:%02d:%02d"), year, month, day, hour-timezoneh, min-timezonem, sec);
+ else if (!lstrcmp(timezonesign, _T("-")))
+ mir_sntprintf(p, 4+2+2+1+2+1+2+1+2+1, _T("%04d%02d%02dT%02d:%02d:%02d"), year, month, day, hour+timezoneh, min+timezonem, sec);
+ else
+ mir_sntprintf(p, 4+2+2+1+2+1+2+1+2+1, _T("%04d%02d%02dT%02d:%02d:%02d"), year, month, day, hour, min, sec);
+ }
+ else
+ {
+ _stscanf( p, _T("%d-%d-%d %d:%d:%d %1s%02d%02d"), &year, &month, &day, &hour, &min, &sec, &timezonesign, &timezoneh, &timezonem);
+ if (!lstrcmp(timezonesign, _T("+")))
+ mir_sntprintf(p, 4+2+2+1+2+1+2+1+2+1, _T("%04d%02d%02dT%02d:%02d:%02d"), year, month, day, hour-timezoneh, min-timezonem, sec);
+ else if (!lstrcmp(timezonesign, _T("-")))
+ mir_sntprintf(p, 4+2+2+1+2+1+2+1+2+1, _T("%04d%02d%02dT%02d:%02d:%02d"), year, month, day, hour+timezoneh, min+timezonem, sec);
+ else
+ mir_sntprintf(p, 4+2+2+1+2+1+2+1+2+1, _T("%04d%02d%02dT%02d:%02d:%02d"), year, month, day, hour, min, sec);
+ }
+ }
+ // Get the date part
+ for ( i=0; *p!='\0' && i<8 && isdigit( *p ); p++,i++ )
+ date[i] = *p;
+
+ // Parse year
+ if ( i == 6 ) {
+ // 2-digit year ( 1970-2069 )
+ y = ( date[0]-'0' )*10 + ( date[1]-'0' );
+ if ( y < 70 ) y += 100;
+ }
+ else if ( i == 8 ) {
+ // 4-digit year
+ y = ( date[0]-'0' )*1000 + ( date[1]-'0' )*100 + ( date[2]-'0' )*10 + date[3]-'0';
+ y -= 1900;
+ }
+ else
+ return ( time_t ) 0;
+ timestamp.tm_year = y;
+ // Parse month
+ timestamp.tm_mon = ( date[i-4]-'0' )*10 + date[i-3]-'0' - 1;
+ // Parse date
+ timestamp.tm_mday = ( date[i-2]-'0' )*10 + date[i-1]-'0';
+
+ // Skip any date/time delimiter
+ for ( ; *p!='\0' && !isdigit( *p ); p++ );
+
+ // Parse time
+ if ( _stscanf( p, _T("%d:%d:%d"), &timestamp.tm_hour, &timestamp.tm_min, &timestamp.tm_sec ) != 3 )
+ return ( time_t ) 0;
+
+ timestamp.tm_isdst = 0; // DST is already present in _timezone below
+ t = mktime( &timestamp );
+
+ _tzset();
+ t -= _timezone;
+
+ if ( t >= 0 )
+ return t;
+ else
+ return ( time_t ) 0;
+}
+
+TCHAR * _tcsistr(const TCHAR * str, const TCHAR * substr)
+{
+ if (!str || !substr || (substr[0] == _T('\0')))
+ return (TCHAR *) str;
+
+ size_t nLen = _tcslen(substr);
+ while (*str)
+ {
+ if (_tcsnicmp(str, substr, nLen) == 0)
+ break;
+ str++;
+ }
+
+ if (*str == _T('\0'))
+ str = NULL;
+
+ return (TCHAR *) str;
+}
+
+int StrReplace(TCHAR* lpszOld, TCHAR* lpszNew, TCHAR*& lpszStr)
+{
+ if (!lpszStr || !lpszOld || !lpszNew)
+ return 0;
+
+ size_t nStrLen = _tcslen(lpszStr);
+ if (nStrLen == 0)
+ return 0;
+
+ size_t nOldLen = _tcslen(lpszOld);
+ if (nOldLen == 0)
+ return 0;
+
+ size_t nNewLen = _tcslen(lpszNew);
+
+ // loop once to figure out the size of the result string
+ int nCount = 0;
+ TCHAR *pszStart = (TCHAR *) lpszStr;
+ TCHAR *pszEnd = (TCHAR *) lpszStr + nStrLen;
+ TCHAR *pszTarget = NULL;
+ TCHAR * pszResultStr = NULL;
+
+ while (pszStart < pszEnd)
+ {
+ while ((pszTarget = _tcsistr(pszStart, lpszOld)) != NULL)
+ {
+ nCount++;
+ pszStart = pszTarget + nOldLen;
+ }
+ pszStart += _tcslen(pszStart);
+ }
+
+ // if any changes, make them now
+ if (nCount > 0)
+ {
+ // allocate buffer for result string
+ size_t nResultStrSize = nStrLen + (nNewLen - nOldLen) * nCount + 2;
+ pszResultStr = new TCHAR [nResultStrSize];
+ ZeroMemory(pszResultStr, nResultStrSize*sizeof(TCHAR));
+
+ pszStart = (TCHAR *) lpszStr;
+ pszEnd = (TCHAR *) lpszStr + nStrLen;
+ TCHAR *cp = pszResultStr;
+
+ // loop again to actually do the work
+ while (pszStart < pszEnd)
+ {
+ while ((pszTarget = _tcsistr(pszStart, lpszOld)) != NULL)
+ {
+ int nCopyLen = (int)(pszTarget - pszStart);
+ _tcsncpy(cp, &lpszStr[pszStart-lpszStr], nCopyLen);
+
+ cp += nCopyLen;
+
+ pszStart = pszTarget + nOldLen;
+
+ _tcscpy(cp, lpszNew);
+
+ cp += nNewLen;
+ }
+ _tcscpy(cp, pszStart);
+ pszStart += _tcslen(pszStart);
+ }
+
+ if (pszResultStr)
+ lpszStr = mir_tstrdup(pszResultStr);
+ }
+
+ int nSize = 0;
+ if (pszResultStr)
+ {
+ nSize = (int)_tcslen(pszResultStr);
+ delete [] pszResultStr;
+ }
+
+ return nSize;
+}
+
+BOOL DownloadFile(LPCTSTR tszURL, LPCTSTR tszLocal)
+{
+ HANDLE hFile = NULL;
+ DWORD dwBytes;
+
+ NETLIBHTTPREQUEST nlhr = {0};
+ nlhr.cbSize = sizeof(nlhr);
+ nlhr.requestType = REQUEST_GET;
+ nlhr.flags = NLHRF_DUMPASTEXT | NLHRF_HTTP11;
+ char* szUrl = mir_t2a(tszURL);
+ nlhr.szUrl = szUrl;
+ nlhr.headersCount = 4;
+ nlhr.headers=(NETLIBHTTPHEADER*)mir_alloc(sizeof(NETLIBHTTPHEADER)*nlhr.headersCount);
+ nlhr.headers[0].szName = "User-Agent";
+ nlhr.headers[0].szValue = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
+ nlhr.headers[1].szName = "Connection";
+ nlhr.headers[1].szValue = "close";
+ nlhr.headers[2].szName = "Cache-Control";
+ nlhr.headers[2].szValue = "no-cache";
+ nlhr.headers[3].szName = "Pragma";
+ nlhr.headers[3].szValue = "no-cache";
+
+ bool ret = false;
+ NETLIBHTTPREQUEST *pReply = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)hNetlibUser,(LPARAM)&nlhr);
+
+ if (pReply)
+ {
+ if ((200 == pReply->resultCode) && (pReply->dataLength > 0))
+ {
+ char *date = NULL, *size = NULL;
+ for (int i = 0; i < pReply->headersCount; i++)
+ {
+ if (!lstrcmpiA(pReply->headers[i].szName, "Last-Modified"))
+ {
+ date = pReply->headers[i].szValue;
+ continue;
+ }
+ if (!lstrcmpiA(pReply->headers[i].szName, "Content-Length"))
+ {
+ size = pReply->headers[i].szValue;
+ continue;
+ }
+ }
+ if (date != NULL && size != NULL)
+ {
+ TCHAR *tdate = mir_a2t(date);
+ TCHAR *tsize = mir_a2t(size);
+ int fh;
+ struct _stat buf;
+
+ fh = _topen(tszLocal, _O_RDONLY);
+ if (fh != -1)
+ {
+ _fstat(fh, &buf);
+ time_t modtime = DateToUnixTime(tdate, 0);
+ time_t filemodtime = mktime(localtime(&buf.st_atime));
+ if (modtime > filemodtime && buf.st_size != _ttoi(tsize))
+ {
+ hFile = CreateFile(tszLocal, GENERIC_READ | GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+ WriteFile(hFile, pReply->pData, (DWORD)pReply->dataLength, &dwBytes, NULL);
+ ret = true;
+ }
+ _close(fh);
+ }
+ else
+ {
+ hFile = CreateFile(tszLocal, GENERIC_READ | GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+ WriteFile(hFile, pReply->pData, (DWORD)pReply->dataLength, &dwBytes, NULL);
+ ret = true;
+ }
+ mir_free(tdate);
+ mir_free(tsize);
+ }
+ else
+ {
+ hFile = CreateFile(tszLocal, GENERIC_READ | GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+ WriteFile(hFile, pReply->pData, (DWORD)pReply->dataLength, &dwBytes, NULL);
+ ret = true;
+ }
+ }
+ CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT,0,(LPARAM)pReply);
+ }
+
+ mir_free(szUrl);
+ mir_free(nlhr.headers);
+
+ if (hFile)
+ CloseHandle(hFile);
+
+ return ret;
+}
+
+size_t PathToRelative(const TCHAR *pSrc, TCHAR *pOut)
+{
+ return CallService( MS_UTILS_PATHTORELATIVET, (WPARAM)pSrc, (LPARAM)pOut );
+}
+
+typedef HRESULT (MarkupCallback)(IHTMLDocument3*, BSTR& message);
+
+HRESULT TestMarkupServices(BSTR bstrHtml, MarkupCallback* pCallback, BSTR& message)
+{
+ IHTMLDocument3* pHtmlDocRoot = NULL;
+
+ // Create the root document -- a "workspace" for parsing.
+ HRESULT hr = CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pHtmlDocRoot));
+ if (SUCCEEDED(hr) && pHtmlDocRoot)
+ {
+ IPersistStreamInit *pPersistStreamInit = NULL;
+
+ HRESULT hr = pHtmlDocRoot->QueryInterface(IID_PPV_ARGS(&pPersistStreamInit));
+ if (SUCCEEDED(hr))
+ {
+ // Initialize the root document to a default state -- ready for parsing.
+ hr = pPersistStreamInit->InitNew();
+
+ IMarkupServices *pMarkupServices = NULL;
+ hr = pHtmlDocRoot->QueryInterface(IID_PPV_ARGS(&pMarkupServices));
+ if (SUCCEEDED(hr))
+ {
+ IMarkupPointer *pMarkupBegin = NULL;
+ IMarkupPointer *pMarkupEnd = NULL;
+
+ // These markup pointers indicate the insertion point.
+ hr = pMarkupServices->CreateMarkupPointer(&pMarkupBegin);
+ if (SUCCEEDED(hr))
+ hr = pMarkupServices->CreateMarkupPointer(&pMarkupEnd);
+
+ if (SUCCEEDED(hr) && pMarkupBegin && pMarkupEnd)
+ {
+ IMarkupContainer *pMarkupContainer = NULL;
+
+ // Parse the string -- the markup container contains the parsed HTML.
+ // Markup pointers are updated to point to begining and end of new container.
+ hr = pMarkupServices->ParseString(bstrHtml, 0, &pMarkupContainer, pMarkupBegin, pMarkupEnd);
+ if (SUCCEEDED(hr) && pMarkupContainer)
+ {
+ IHTMLDocument3 *pHtmlDoc = NULL;
+
+ // Retrieve the document interface to the markup container.
+ hr = pMarkupContainer->QueryInterface(IID_PPV_ARGS(&pHtmlDoc));
+ if (SUCCEEDED(hr) && pHtmlDoc)
+ {
+ // Invoke the user-defined action for this new fragment.
+ hr = pCallback(pHtmlDoc, message);
+
+ // Clean up.
+ pHtmlDoc->Release();
+ }
+ pMarkupContainer->Release();
+ }
+ pMarkupEnd->Release();
+ }
+ if (pMarkupBegin)
+ pMarkupBegin->Release();
+ pMarkupServices->Release();
+ }
+ pPersistStreamInit->Release();
+ }
+ pHtmlDocRoot->Release();
+ }
+ return hr;
+}
+
+HRESULT TestDocumentText(IHTMLDocument3* pHtmlDoc, BSTR& message)
+{
+ IHTMLDocument2 *pDoc = NULL;
+ IHTMLElement *pElem = NULL;
+ BSTR bstrId = SysAllocString(L"test");
+
+ HRESULT hr = pHtmlDoc->QueryInterface(IID_PPV_ARGS(&pDoc));
+ if (SUCCEEDED(hr) && pDoc)
+ {
+ hr = pDoc->get_body(&pElem);
+ if (SUCCEEDED(hr) && pElem)
+ {
+ BSTR bstrText = NULL;
+ pElem->get_innerText(&bstrText);
+ message = SysAllocString(bstrText);
+ SysFreeString(bstrText);
+ pElem->Release();
+ }
+
+ pDoc->Release();
+ }
+
+ SysFreeString(bstrId);
+ return hr;
+}
+
+VOID ClearText(TCHAR*& message)
+{
+ CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
+ BSTR bstrHtml = SysAllocString(message), bstrRes = SysAllocString(L"");
+ HRESULT hr = TestMarkupServices(bstrHtml, &TestDocumentText, bstrRes);
+ if ( SUCCEEDED(hr)) {
+ replaceStrT(message, bstrRes);
+ SysFreeString(bstrRes);
+ }
+ SysFreeString(bstrHtml);
+ CoUninitialize();
+}
+
+TCHAR* CheckFeed(TCHAR* tszURL, HWND hwndDlg)
+{
+ char *szData = NULL;
+ DBVARIANT dbVar = {0};
+ if (CallProtoService(MODULE, PS_GETSTATUS, 0, 0) != ID_STATUS_OFFLINE)
+ {
+ 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 = 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("title")))
+ {
+ TCHAR mes[MAX_PATH];
+ mir_sntprintf(mes, SIZEOF(mes), TranslateT("%s\nis a valid feed's address."), tszURL);
+ MessageBox(NULL, mes, TranslateT("New 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(NULL, mes, TranslateT("New Aggregator"), MB_OK|MB_ICONINFORMATION);
+ TCHAR *tszTitle = (TCHAR*)xi.getText(child);
+ return tszTitle;
+ }
+ }
+ }
+ childcount +=1;
+ node = xi.getChild(hXml, childcount);
+ }
+ }
+ xi.destroyNode(hXml);
+ }
+ else
+ {
+ TCHAR mes[MAX_PATH];
+ mir_sntprintf(mes, SIZEOF(mes), TranslateT("%s\nis a not valid feed's address."), tszURL);
+ MessageBox(NULL, mes, TranslateT("New Aggregator"), MB_OK|MB_ICONERROR);
+ }
+ }
+ return NULL;
+}
+
+VOID CheckCurrentFeed(HANDLE hContact)
+{
+ char *szData = NULL;
+ DBVARIANT dbURL = {0};
+ if (DBGetContactSettingTString(hContact, MODULE, "URL", &dbURL))
+ return;
+ else if ((DBGetContactSettingWord(hContact, MODULE, "Status", ID_STATUS_OFFLINE) != ID_STATUS_OFFLINE) && DBGetContactSettingByte(hContact, MODULE, "CheckState", 1) != 0)
+ {
+ GetNewsData(dbURL.ptszVal, &szData, hContact, NULL);
+ DBFreeVariant(&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")))
+ {
+ 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)));
+ DBWriteContactSettingTString(hContact, MODULE, "MirVer", ver);
+ break;
+ }
+ }
+ }
+ else if (!lstrcmpi(xi.getName(node), _T("rdf")))
+ {
+ DBWriteContactSettingTString(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);
+ DBWriteContactSettingTString(hContact, MODULE, "FirstName", string);
+ mir_free(string);
+ continue;
+ }
+ if (!lstrcmpi(xi.getName(child), _T("link")))
+ {
+ DBWriteContactSettingTString(hContact, MODULE, "Homepage", xi.getText(child));
+ continue;
+ }
+ if (!lstrcmpi(xi.getName(child), _T("description")) && xi.getText(child))
+ {
+ TCHAR *string = mir_tstrdup(xi.getText(child));
+ ClearText(string);
+ DBWriteContactSettingTString(hContact, MODULE, "About", string);
+ DBWriteContactSettingTString(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);
+ DBWriteContactSettingTString(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);
+ DBWriteContactSettingTString(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);
+ DBWriteContactSettingTString(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);
+ DBWriteContactSettingTString(hContact, MODULE, "ImageURL", url);
+
+ PROTO_AVATAR_INFORMATIONT pai = {NULL};
+ pai.cbSize = sizeof(pai);
+ pai.hContact = hContact;
+ DBVARIANT dbVar = {0};
+
+ if (!DBGetContactSettingTString(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))
+ {
+ DBWriteContactSettingTString(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);
+ DBFreeVariant(&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), DBGetContactSettingDword(hContact, MODULE, "LastCheck", 0));
+ if (deltaupd - deltacheck >= 0)
+ {
+ DBWriteContactSettingDword(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 (DBGetContactSettingTString(hContact, MODULE, "MsgFormat", &dbMsg))
+ message = _T(TAGSDEFAULT);
+ else
+ message = mir_tstrdup(dbMsg.ptszVal);
+ DBFreeVariant(&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 = (HANDLE)CallService(MS_DB_EVENT_FINDFIRST, (WPARAM)hContact, 0);
+ BOOL MesExist = FALSE;
+ while (hDbEvent)
+ {
+ DBEVENTINFO olddbei = {0};
+ olddbei.cbSize = sizeof(olddbei);
+ olddbei.cbBlob = CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM)hDbEvent, 0);
+ olddbei.pBlob = (PBYTE)mir_alloc(olddbei.cbBlob);
+ CallService(MS_DB_EVENT_GET, (WPARAM)hDbEvent, (LPARAM)&olddbei);
+ char *pszTemp = mir_utf8encodeT(message);
+ if (olddbei.cbBlob == lstrlenA(pszTemp) + 1 && !lstrcmpA((char*)olddbei.pBlob, pszTemp))
+ MesExist = TRUE;
+ hDbEvent = (HANDLE)CallService(MS_DB_EVENT_FINDNEXT, (WPARAM)hDbEvent, 0);
+ 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")))
+ {
+ DBWriteContactSettingTString(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);
+ DBWriteContactSettingTString(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")))
+ {
+ DBWriteContactSettingTString(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);
+ DBWriteContactSettingTString(hContact, MODULE, "About", string);
+ DBWriteContactSettingTString(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);
+ DBWriteContactSettingTString(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")))
+ {
+ DBWriteContactSettingTString(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);
+ DBWriteContactSettingTString(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);
+ DBWriteContactSettingTString(hContact, MODULE, "ImageURL", url);
+
+ PROTO_AVATAR_INFORMATIONT pai = {NULL};
+ pai.cbSize = sizeof(pai);
+ pai.hContact = hContact;
+ DBVARIANT dbVar = {0};
+
+ if (!DBGetContactSettingTString(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))
+ {
+ DBWriteContactSettingTString(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);
+ DBFreeVariant(&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), DBGetContactSettingDword(hContact, MODULE, "LastCheck", 0));
+ if (deltaupd - deltacheck >= 0)
+ {
+ DBWriteContactSettingDword(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 (DBGetContactSettingTString(hContact, MODULE, "MsgFormat", &dbMsg))
+ message = _T(TAGSDEFAULT);
+ else
+ message = mir_tstrdup(dbMsg.ptszVal);
+ DBFreeVariant(&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 = (HANDLE)CallService(MS_DB_EVENT_FINDFIRST, (WPARAM)hContact, 0);
+ BOOL MesExist = FALSE;
+ while (hDbEvent)
+ {
+ DBEVENTINFO olddbei = {0};
+ olddbei.cbSize = sizeof(olddbei);
+ olddbei.cbBlob = CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM)hDbEvent, 0);
+ olddbei.pBlob = (PBYTE)mir_alloc(olddbei.cbBlob);
+ CallService(MS_DB_EVENT_GET, (WPARAM)hDbEvent, (LPARAM)&olddbei);
+ char *pszTemp = mir_utf8encodeT(message);
+ if (olddbei.cbBlob == lstrlenA(pszTemp) + 1 && !lstrcmpA((char*)olddbei.pBlob, pszTemp))
+ MesExist = TRUE;
+ hDbEvent = (HANDLE)CallService(MS_DB_EVENT_FINDNEXT, (WPARAM)hDbEvent, 0);
+ 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);
+ }
+ }
+ DBWriteContactSettingDword(hContact, MODULE, "LastCheck", time(NULL));
+ }
+} \ No newline at end of file
diff --git a/plugins/NewsAggregator/Src/Version.h b/plugins/NewsAggregator/Src/Version.h
new file mode 100644
index 0000000000..7d4efa3d9d
--- /dev/null
+++ b/plugins/NewsAggregator/Src/Version.h
@@ -0,0 +1,20 @@
+#define __MAJOR_VERSION 0
+#define __MINOR_VERSION 0
+#define __RELEASE_NUM 0
+#define __BUILD_NUM 1
+
+#define __FILEVERSION_STRING __MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM
+#define __FILEVERSION_DOTS __MAJOR_VERSION.__MINOR_VERSION.__RELEASE_NUM.__BUILD_NUM
+
+#define __STRINGIFY_IMPL(x) #x
+#define __STRINGIFY(x) __STRINGIFY_IMPL(x)
+#define __VERSION_STRING __STRINGIFY(__FILEVERSION_DOTS)
+
+#define __PLUGIN_NAME "NewsAggregator"
+#define __INTERNAL_NAME "NewsAggregator"
+#define __FILENAME "NewsAggregator.dll"
+#define __DESCRIPTION "RSS/Atom news aggregator."
+#define __AUTHOR "Mataes, FREAK_THEMIGHTY"
+#define __AUTHOREMAIL "mataes2007@gmail.com"
+#define __AUTHORWEB "http://miranda-ng.org/"
+#define __COPYRIGHT "© 2012 Mataes, FREAK_THEMIGHTY"
diff --git a/plugins/NewsAggregator/Src/resource.h b/plugins/NewsAggregator/Src/resource.h
new file mode 100644
index 0000000000..f243b95585
--- /dev/null
+++ b/plugins/NewsAggregator/Src/resource.h
@@ -0,0 +1,39 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by Resource.rc
+//
+#define IDD_OPTIONS 101
+#define IDI_ICON 109
+#define IDD_ADDFEED 110
+#define IDI_CHECKALL 111
+#define IDI_ADDFEED 112
+#define IDI_IMPORTFEEDS 113
+#define IDI_EXPORTFEEDS 114
+#define IDC_TIMEOUT_VALUE_SPIN 1035
+#define IDC_FEEDLIST 1036
+#define IDC_ADD 1037
+#define IDC_CHANGE 1038
+#define IDC_REMOVE 1039
+#define IDC_IMORT 1040
+#define IDC_EXORT 1041
+#define IDC_FEEDTITLE 1042
+#define IDC_FEEDURL 1043
+#define IDC_CHECKTIME 1044
+#define IDC_DISCOVERY 1045
+#define IDC_USEAUTH 1046
+#define IDC_LOGIN 1047
+#define IDC_PASSWORD 1048
+#define IDC_TAGSEDIT 1049
+#define IDC_RESET 1050
+#define IDC_TAGHELP 1051
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 111
+#define _APS_NEXT_COMMAND_VALUE 40075
+#define _APS_NEXT_CONTROL_VALUE 1052
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/plugins/NewsAggregator/docs/AtomText.txt b/plugins/NewsAggregator/docs/AtomText.txt
new file mode 100644
index 0000000000..052516a6bb
--- /dev/null
+++ b/plugins/NewsAggregator/docs/AtomText.txt
@@ -0,0 +1,482 @@
+<?xml version="1.0"?>
+
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <updated>2012-01-04T06:45:38Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic</id>
+
+ <title>watcher-miranda project updates - Google Code</title>
+
+ <link rel="self" type="application/atom+xml;type=feed" href="http://code.google.com/feeds/p/watcher-miranda/updates/basic"/>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/updates/list"/>
+
+ <entry>
+ <updated>2012-01-04T06:45:38Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z12pftbjzm31hlgp204cepjgmoicsl1oq1w</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=miranda-0.10.latest-vc2010_x64-static.7z" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=miranda-0.10.latest-vc2010_x64-static.7z&quot;&gt;miranda-0.10.latest-vc2010_x64-static.7z&lt;/a&gt; (Miranda IM 0.10.0 Alpha #2 VC2010 x64) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2012-01-03T21:06:03Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z12qdzfqdumlchjgm04cepjgmoicsl1oq1w</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=miranda-v0100a2w11.7z" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=miranda-v0100a2w11.7z&quot;&gt;miranda-v0100a2w11.7z&lt;/a&gt; (T - ) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2012-01-03T20:47:25Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z135ypx45kehgtcq304cepjgmoicsl1oq1w</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=miranda-v0100a2w11.7z" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=miranda-v0100a2w11.7z&quot;&gt;miranda-v0100a2w11.7z&lt;/a&gt; (Miranda IM 0.10.0 Alpha #2 VC6111) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2012-01-03T09:21:55Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z12szb1zzybuejnnv22pfv4p3ma4ch5kj</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=mirotr1.7z" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=mirotr1.7z&quot;&gt;mirotr1.7z&lt;/a&gt; (Miranda IM 0.10.0 Alpha #2 VC6) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2012-01-02T20:12:28Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z12ltxpzuvr4xvahk04cepjgmoicsl1oq1w</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=miranda32.exe" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=miranda32.exe&quot;&gt;miranda32.exe&lt;/a&gt; (Miranda32 v.0.9.40.0) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2012-01-01T18:00:06Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z13idtjadwu5y3q2322pfv4p3ma4ch5kj</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=Miranda%20IM%20Watcher%20Pack%20v3.1.0.exe" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=Miranda%20IM%20Watcher%20Pack%20v3.1.0.exe&quot;&gt;Miranda IM Watcher Pack v3.1.0.exe&lt;/a&gt; (Miranda IM Watcher Pack v3.1.0) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Type-Installer&lt;/span&gt;
+
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;OpSys-Windows&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2011-12-30T11:06:47Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z12vzfygpwqng3m3b22pfv4p3ma4ch5kj</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=Miranda_Empoli_Pack_Mod.exe" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=Miranda_Empoli_Pack_Mod.exe&quot;&gt;Miranda_Empoli_Pack_Mod.exe&lt;/a&gt; (Miranda IM Empoli Pack Mod v.2.2 (core 0.9.39)) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2011-12-29T14:08:24Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z135in4x1yi1fd2ou04cepjgmoicsl1oq1w</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=mirotr.7z" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=mirotr.7z&quot;&gt;mirotr.7z&lt;/a&gt; (MirOTR 0.11.0.3) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2011-12-25T10:59:24Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z13dgrs5elfkfp0n122pfv4p3ma4ch5kj</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=LangpackSuite.exe" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=LangpackSuite.exe&quot;&gt;LangpackSuite.exe&lt;/a&gt; (Test upload) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2011-12-25T10:58:18Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z13cu14hyzzawjmev22pfv4p3ma4ch5kj</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=LangpackSuite.exe" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=LangpackSuite.exe&quot;&gt;LangpackSuite.exe&lt;/a&gt; (Test) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2011-12-21T21:55:28Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z12sh1jqflzkj3ofd22pfv4p3ma4ch5kj</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=Miranda%20IM%20Watcher%20Pack%20v3.0.9.exe" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=Miranda%20IM%20Watcher%20Pack%20v3.0.9.exe&quot;&gt;Miranda IM Watcher Pack v3.0.9.exe&lt;/a&gt; (Miranda IM Watcher Pack v3.0.9) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Type-Installer&lt;/span&gt;
+
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;OpSys-Windows&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2011-12-13T19:46:02Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z13nxvbpft3ezr5ps04cepjgmoicsl1oq1w</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=Miranda%20IM%20Watcher%20Pack%20v3.0.8.exe" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=Miranda%20IM%20Watcher%20Pack%20v3.0.8.exe&quot;&gt;Miranda IM Watcher Pack v3.0.8.exe&lt;/a&gt; (Miranda IM Watcher Pack v3.0.8) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Type-Installer&lt;/span&gt;
+
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;OpSys-Windows&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2011-12-04T10:52:49Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z13vubiqswqqe1cf222pfv4p3ma4ch5kj</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=Fingerprint.dll" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=Fingerprint.dll&quot;&gt;Fingerprint.dll&lt;/a&gt; (Fingerprint.dll WP update) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html"></content>
+</entry>
+
+
+ <entry>
+ <updated>2011-12-04T10:52:32Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z125fjy5qruixxloh04cepjgmoicsl1oq1w</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=PackUpdater.dll" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=PackUpdater.dll&quot;&gt;PackUpdater.dll&lt;/a&gt; (PackUpdater.dll WP update) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html"></content>
+</entry>
+
+
+ <entry>
+ <updated>2011-12-03T15:01:42Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z13etferquvuyzd0z22pfv4p3ma4ch5kj</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=packupdater.7z" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=packupdater.7z&quot;&gt;packupdater.7z&lt;/a&gt; (Pack Updater 0.0.1.0) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2011-12-02T22:21:54Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z12ysnhy4zi2wvudo22pfv4p3ma4ch5kj</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=fingerprintmodplus.7z" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=fingerprintmodplus.7z&quot;&gt;fingerprintmodplus.7z&lt;/a&gt; (Fingerprint Mod Plus 0.2.2.4 (latest svn revision)) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2011-11-28T06:15:02Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z13hy1xpcr2hgbrfv22pfv4p3ma4ch5kj</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=Miranda%20IM%20Watcher%20Pack%20v3.0.7.exe" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=Miranda%20IM%20Watcher%20Pack%20v3.0.7.exe&quot;&gt;Miranda IM Watcher Pack v3.0.7.exe&lt;/a&gt; (Miranda IM Watcher Pack v3.0.7) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Type-Installer&lt;/span&gt;
+
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;OpSys-Windows&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2011-11-24T16:35:48Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z13mcvxqurmeybypn04cepjgmoicsl1oq1w</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=Miranda%20IM%20Watcher%20Pack%20v3.0.6.exe" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=Miranda%20IM%20Watcher%20Pack%20v3.0.6.exe&quot;&gt;Miranda IM Watcher Pack v3.0.6.exe&lt;/a&gt; (Miranda IM Watcher Pack v3.0.6) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Type-Installer&lt;/span&gt;
+
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;OpSys-Windows&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2011-11-23T04:58:16Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z13rxxbauu3wxtfmz22pfv4p3ma4ch5kj</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=simplestatusmsg.7z" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=simplestatusmsg.7z&quot;&gt;simplestatusmsg.7z&lt;/a&gt; (Simple Status Message 1.9.0.4) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+ <entry>
+ <updated>2011-11-19T06:13:19Z</updated>
+ <id>http://code.google.com/feeds/p/watcher-miranda/updates/basic/z13di1rprvjfhpta004cepjgmoicsl1oq1w</id>
+ <link rel="alternate" type="text/html" href="http://code.google.com/p/watcher-miranda/downloads/detail?name=Miranda%20IM%20Watcher%20Pack%20v3.0.5.exe" />
+ <title type="html">&lt;a class=&quot;ot-download-link&quot; href=&quot;http://code.google.com/p/watcher-miranda/downloads/detail?name=Miranda%20IM%20Watcher%20Pack%20v3.0.5.exe&quot;&gt;Miranda IM Watcher Pack v3.0.5.exe&lt;/a&gt; (Miranda IM Watcher Pack v3.0.5) file uploaded by &lt;a class=&quot;ot-profile-link-2&quot; href=&quot;http://code.google.com/u/watcherhd/&quot;&gt;watcherhd&lt;/a&gt;</title>
+ <author>
+ <name>watcherhd</name>
+ </author>
+ <category term="ProjectNewDownload" scheme="http://code.google.com/updates/type"/>
+ <content type="html">&lt;div class=&quot;ot-labels-field-wrapper&quot;&gt;
+ &lt;span class=&quot;ot-labels-field-name&quot;&gt;Labels: &lt;/span&gt;
+ &lt;span class=&quot;ot-labels-field-value&quot;&gt;
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Featured&lt;/span&gt;
+
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;Type-Installer&lt;/span&gt;
+
+
+
+ &lt;span class=&quot;ot-field-label&quot;&gt;OpSys-Windows&lt;/span&gt;
+
+
+ &lt;/span&gt;
+ &lt;/div&gt;</content>
+</entry>
+
+
+</feed>
diff --git a/plugins/NewsAggregator/docs/RssText.txt b/plugins/NewsAggregator/docs/RssText.txt
new file mode 100644
index 0000000000..b229fc9e78
--- /dev/null
+++ b/plugins/NewsAggregator/docs/RssText.txt
@@ -0,0 +1,713 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<rss version="2.0"
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:content="http://purl.org/rss/1.0/modules/content/">
+ <channel>
+ <title>Bash.Org.Ru</title>
+ <link>http://bash.org.ru/</link>
+ <atom:link href="http://bash.org.ru/rss/" rel="self" type="application/rss+xml" />
+ <description>Öèòàòíèê Ðóíåòà</description>
+ <language>ru</language>
+ <item>
+ <guid isPermaLink="false">b3cf2d64d57bdfea405b43426ec354e4b89a98912c71f243c93568020e2f0a70</guid>
+ <link>http://bash.org.ru/quote/414990</link>
+ <title>Öèòàòà #414990</title>
+ <pubDate>Fri, 30 Dec 2011 12:12:01 +0400</pubDate>
+ <description><![CDATA[xxx: Ýòî âñå ðàâíî ÷òî áðûçãàòü íà ïîðíîáàííåð ñâÿòîé âîäîé, à ïîòîì, êîãäà ìîíèòîð çàêîðîòèò, êðè÷àòü, ìîë, äüÿâîëüñêîå óñòðîéñòâî íå âûíåñëî ïðèñóòñòâèÿ ñâÿòîãî äóõà<br>]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">9f3028db6c6020de238a5d27b14d85c21e5f4c8a5f96506b757925df8500c940</guid>
+ <link>http://bash.org.ru/quote/414989</link>
+ <title>Öèòàòà #414989</title>
+ <pubDate>Fri, 30 Dec 2011 11:45:18 +0400</pubDate>
+ <description><![CDATA[ ïîëíîé ìåðå îñîçíàë, ÷òî ïåðåøåë íà íî÷íîé îáðàç æèçíè, êîãäà îòåö ðàçáóäèë â ÷àñ íî÷è ñ âîïðîñàìè: &quot;Òû ÷åãî ñïèøü? Íå çàáîëåë ñëó÷àåì?&quot;]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">c917324b76e57d2d6103af4b154f41fb335e9a4cc3f973b0b077a8c857c1353a</guid>
+ <link>http://bash.org.ru/quote/414988</link>
+ <title>Öèòàòà #414988</title>
+ <pubDate>Fri, 30 Dec 2011 11:44:38 +0400</pubDate>
+ <description><![CDATA[õõõ: íó êàê òåáå ôèëüì?<br>óóó: êîíåö òðó<br>õõõ: òû ôèëüì íå ïåðåïóòàë?<br>óóó: ÷åðò, â ñìûñëå, ôèíàë ìåíÿ ïðèÿòíî óäèâèë)]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">96b70712a7185b7d1167f6f9aee454841a4246b0f270185ea3f29d034b9bd39f</guid>
+ <link>http://bash.org.ru/quote/414987</link>
+ <title>Öèòàòà #414987</title>
+ <pubDate>Fri, 30 Dec 2011 11:44:01 +0400</pubDate>
+ <description><![CDATA[Îòçûâ î òåëåôîíå ñ ñåíñîðíûì ýêðàíîì:<br>Ñâåòà:<br>Êóïèëà åãî â ***. Êëàññíûé òåëåôîí!!! Åù¸ íå ðàçîáðàëàñü, êàê ñíÿòü áëîêèðîâêó ñ ýêðàíà. Îí êðàñèâûé.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">793886d798688d3e6bec7d2ffb51d6397f356e5c0e00ef06d07f22b87643c93a</guid>
+ <link>http://bash.org.ru/quote/414986</link>
+ <title>Öèòàòà #414986</title>
+ <pubDate>Fri, 30 Dec 2011 11:13:16 +0400</pubDate>
+ <description><![CDATA[xxx: ñåãîäíÿ ïðèøëà ïîñûëêà ïîñûëêà ñ ebay â êîòîðîé 50øò íàêëååê îò ipad. Òåïåðü ó ìåíÿ iÄîì, à â íåì iÓíèòàç, iØêàô, iÕîëîäèëüíèê è äàæå iÊîò êóäà òî óáåæàë....]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">6eac3f54c4f58d8a41c7e7f72f72ca6e0c6bf5869f0eefc99044ef4427db28d0</guid>
+ <link>http://bash.org.ru/quote/414985</link>
+ <title>Öèòàòà #414985</title>
+ <pubDate>Fri, 30 Dec 2011 11:12:02 +0400</pubDate>
+ <description><![CDATA[xxx: îòäàì 4-õ êîòÿò â ëþáûå ðóêè, èì óæå 3 ìåñÿöà è îíè âñåõ çàäîëáàëè.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">744d1d505dce7f1877c45baee1fdf97009a403d6dedb3ae1cd185480ec3dbbd0</guid>
+ <link>http://bash.org.ru/quote/414984</link>
+ <title>Öèòàòà #414984</title>
+ <pubDate>Fri, 30 Dec 2011 11:11:01 +0400</pubDate>
+ <description><![CDATA[xxx:<br>Ãäå êóïèòü êîðìîâûõ ìûøåé (ëûñûõ)?<br>Íà çîîðûíêå íåòó.<br><br>yyy:<br>Äîâåëè ñòðàíó... Íàðîä óæå ìûøåé æðàòü íà÷àë.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">aadc7f6194e8062c44250a9a878f010c0fe7d9d95af9a8389fbf8a8f748d6c6f</guid>
+ <link>http://bash.org.ru/quote/414983</link>
+ <title>Öèòàòà #414983</title>
+ <pubDate>Fri, 30 Dec 2011 10:45:08 +0400</pubDate>
+ <description><![CDATA[xxx: ó íàñ ¸ëêà íå ïðîñòàÿ, ïîíòîâàÿ<br>xxx: ñ îïòîâîëîêíîì è ñâåòèòñÿ<br>yyy: wifi áåñïëàòíî íå ðàçäàåò?]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">01511c230d7cdf4ed42f09106b3075a5021797ae5a11d3063dc9332bb7baf858</guid>
+ <link>http://bash.org.ru/quote/414982</link>
+ <title>Öèòàòà #414982</title>
+ <pubDate>Fri, 30 Dec 2011 10:44:36 +0400</pubDate>
+ <description><![CDATA[Darkforce: À òû ê ýêçàìåíó ñ ìóçûêîé ãîòîâèøüñÿ?<br>Ergo: Äà. È ñ âêëþ÷åííîé àñåé. Íå áåðè ñ ìåíÿ ïðèìåð.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">cc05613e48d3f285e2a2a95a12f542586c5c0fe4499addf3c2a633cf4940e572</guid>
+ <link>http://bash.org.ru/quote/414981</link>
+ <title>Öèòàòà #414981</title>
+ <pubDate>Fri, 30 Dec 2011 10:44:01 +0400</pubDate>
+ <description><![CDATA[&lt;Jakiro&gt; ñåãîäíÿ âåøàë ãèðëÿíäó, çàïóòàëñÿ â íåé, ñåë, ïðèøëà ñåñòðà, âêëþ÷èëà ãèðëÿíäó è ïîøëà ðæàòü :(]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">589fe99078c1447d672503cd8ffb9ba7524d9bd9e03cb5444e7c6fcd2be55269</guid>
+ <link>http://bash.org.ru/quote/414980</link>
+ <title>Öèòàòà #414980</title>
+ <pubDate>Fri, 30 Dec 2011 10:12:44 +0400</pubDate>
+ <description><![CDATA[SeeR: Åñëè ñ÷èòàòü êîýôôèöèåíò ëåíè ðàâíûì îòíîøåíèþ òîãî, ÷òî íóæíî áûëî ñäåëàòü, ê òîìó, ÷òî ñäåëàíî, òî ïî âîñêðåñåíüÿì ÿ òðàäèöèîííî äåëþ íà íîëü.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">58b960aeadb0e2700dd3ec5c18a0f9ca1f446d49f66edabf2ad3ea0f4a9f4933</guid>
+ <link>http://bash.org.ru/quote/414979</link>
+ <title>Öèòàòà #414979</title>
+ <pubDate>Fri, 30 Dec 2011 10:12:01 +0400</pubDate>
+ <description><![CDATA[Ñòèíà: Ãëóïî áûëî ïðèíèìàòü âàííó ñ áîìáî÷êîé ñ áëåñòêàìè. Ìû â áëåñòêàõ, ïîëîòåíöà â áëåñòêàõ, ïîñòåëüíîå áåëüå â áëåñòêàõ, äàæå êîøêà óæå â áëåñòêàõ.<br>Íî åùå ãëóïåå áûëî íàóòðî èäòè ê ãèíåêîëîãó! &gt;.&lt;]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">dda44cf9be0c8bf4691ce24629fd67dca371952e1dc45aa5dc1cce16ca095d29</guid>
+ <link>http://bash.org.ru/quote/414978</link>
+ <title>Öèòàòà #414978</title>
+ <pubDate>Fri, 30 Dec 2011 09:46:04 +0400</pubDate>
+ <description><![CDATA[BaDMaN: íåíàâèæó óòðî ñóááîòû. Ïðàâäà, îíî íå âñåãäà óòðîì è íå âñåãäà â ñóááîòó.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">33f18d83baf27fbd1e28e525c942b2c7e379b42a7d91f7436e2e199400ceda30</guid>
+ <link>http://bash.org.ru/quote/414977</link>
+ <title>Öèòàòà #414977</title>
+ <pubDate>Fri, 30 Dec 2011 09:45:01 +0400</pubDate>
+ <description><![CDATA[ÕÕÕ: Ñêàéðèìñêèå íîðäû òàêèå áðóòàëüíûå, ÷òî ñóðîâûå ÷åëÿáèíñêèå ìóæèêè ïî ñðàâíåíèþ ñ íèìè äåâî÷êè èç ïåñî÷íèöû. Íî ïðè ýòîì â êàæäîé ïåùåðå ñàìîãî æåñòîêîãî ðàçáîéíèêà, â êàæäîì äîìå ñàìîãî ÿðîñòíîãî íîðäà íà ñòîëå èëè ïîëêå ñòîèò ñëàäêèé ðóëåò.<br>ÓÓÓ: Ðóëåòèêè ôèãíÿ. Âñå òàìðèýëüñêèå ðàçáîéíèêè è ìàðîä¸ðû ïîääåðæèâàþò ñðåäè ñåáÿ âûñîêóþ ãðàìîòíîñòü è äàæå â ñàìîì ðàñïðîïàùåì, çàðîñøåì ìõîì è ïàóòèíîé ëîãîâå âñåãäà åñòü äâå-òðè êíèæå÷êè. Âîò òàê ïðèõîäèò áðóòàëüíûé ñêàéðèìñêèé äîðîæíûé ðàçáîéíèê ïîñëå òÿæ¸ëîãî òðóäîâîãî áóäíÿ, ñàäèòñÿ íà õëèïêèé òàáóðåòèê, áåð¸ò ñëàäêèé ðóëåòèê è ÷èòàåò &quot;êðàòêóþ èñòîðèþ èìïåðèè&quot;. áðóòàëüíåíüêî.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">5599090163fe32efddbf295e457fd9cc4f3426b524eebaaaa4fa8277f34e9be2</guid>
+ <link>http://bash.org.ru/quote/414976</link>
+ <title>Öèòàòà #414976</title>
+ <pubDate>Fri, 30 Dec 2011 09:13:01 +0400</pubDate>
+ <description><![CDATA[xxx: ìîé äðóã êàæäóþ ñóááîòó õîäèò â êèíîòåàòð!<br>yyy: òîððåíòû çàìàëèâàåò?]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">1bb26a5bc553b0570cbdf64be1a9ba3af74c3fd64dc60fe0bf9335ecb74600d0</guid>
+ <link>http://bash.org.ru/quote/414975</link>
+ <title>Öèòàòà #414975</title>
+ <pubDate>Fri, 30 Dec 2011 08:45:35 +0400</pubDate>
+ <description><![CDATA[xxx: Ìàëåíüêèé Ïåòÿ î÷åíü ëþáèò ïîäàðêè. Åãî ìàìà ïîäàðèëà åìó íà äåíü ðîæäåíèÿ äâå ñòðîêè ðàâíîé äëèíû, ñîñòîÿùèå èç áîëüøèõ è ìàëåíüêèõ áóêâ ëàòèíñêîãî àëôàâèòà. Òåïåðü Ïåòÿ õî÷åò ñðàâíèòü ýòè ñòðîêè ëåêñèêîãðàôè÷åñêè. Ïîìîãèòå Ïåòå âûïîëíèòü ñðàâíåíèå. (facepalm)<br>yyy: Ïîìîãèòå Ïåòå íå çàêîí÷èòü æèçíü ñóèöèäîì :D]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">cf4da48b55d3fdb9e9825e39a664bd4d41dc5c7a64227796ad1afb0900bdec19</guid>
+ <link>http://bash.org.ru/quote/414974</link>
+ <title>Öèòàòà #414974</title>
+ <pubDate>Fri, 30 Dec 2011 08:45:01 +0400</pubDate>
+ <description><![CDATA[Äàâíûì-äàâíî, êîãäà åù¸ íå áûëî áàòàðååê è àêêóìóëÿòîðîâ, ñàäèëîñü ñîëíöå. Åãî òîæå õâàòàëî îò ñèëû íà äåíü, íå áîëüøå.<br>]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">1a7a8ba066100acdf40b79f4fbc967932320641e3565b230678920432e80e1e3</guid>
+ <link>http://bash.org.ru/quote/414973</link>
+ <title>Öèòàòà #414973</title>
+ <pubDate>Fri, 30 Dec 2011 08:12:44 +0400</pubDate>
+ <description><![CDATA[xxx: òîëüêî â àðìèè ïîíèìàåøü, ÷òî çóáíàÿ ùåòêà ðåàëüíî äëÿ òðóäíîäîñòóïíûõ ìåñò...]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">339e00558b293e087749ba42e0f06916531e712b1edfb25e470e2c0d10494aea</guid>
+ <link>http://bash.org.ru/quote/414972</link>
+ <title>Öèòàòà #414972</title>
+ <pubDate>Fri, 30 Dec 2011 08:11:44 +0400</pubDate>
+ <description><![CDATA[Ñ ôîðóìà<br><br>XXX: Çäðàâñòâóéòå, ñêàæèòå ïîæàëóéñòà, êàêîâ ñðîê ãîäíîñòè ó ñèãàðåò?<br>Êóïèë ïà÷êó ñèãàðåò è ÷óâñòâóþ, ÷òî êàêèå òî îíè õðåíîâûå, ñíà÷àëà ïîäóìàë, ÷òî ýòî ñâÿçàíî ñ òåì, ÷òî ÿ ñåé÷àñ ïûòàþñü áðîñèòü êóðèòü (ðàíüøå êóðèë ïà÷êó â äåíü, à ùàñ ïà÷êó íà íåäåëþ òÿíó) è íà÷àë îòâûêàòü, ïîòîì ãëÿíóë íà ñðîê èçãîòîâëåíèÿ, à òàì íàïèñàíî èþëü 2008ã...<br><br>YYY: Áîèòåñü íàâðåäèòü çäîðîâüþ? )))]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">cfa6ff32cedafbf49ef812730e850a6abc9ec61c7682f3518d95fa00db4e1a14</guid>
+ <link>http://bash.org.ru/quote/414971</link>
+ <title>Öèòàòà #414971</title>
+ <pubDate>Fri, 30 Dec 2011 08:11:01 +0400</pubDate>
+ <description><![CDATA[R*: íè÷î òàê ïðîãà. ðàáî÷èå ìåñòà ïîëüçîâàòåëåé íà ñõåìå ìîæíî èçîáðàçèòü î÷åíü ðàçíîîáðàçíî - åñòü êàðòèíêè îëåíÿ, êåíãóðó, îâöû, æèðàôà]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">128696d56057a228c43deb8cad49205905868817d0b4e834e37e3fdaccecafb4</guid>
+ <link>http://bash.org.ru/quote/414970</link>
+ <title>Öèòàòà #414970</title>
+ <pubDate>Thu, 29 Dec 2011 12:12:42 +0400</pubDate>
+ <description><![CDATA[xxx: ß òàêàÿ, êàêàÿ ÿ åñòü!!<br>yyy: Äà, è ãëàçà ó òåáÿ öâåòà òâîèõ ãëàç.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">2d15491a51b88af3e66c02b4d326f1e2802656b6361f8f07dd667fbbe9dce728</guid>
+ <link>http://bash.org.ru/quote/414969</link>
+ <title>Öèòàòà #414969</title>
+ <pubDate>Thu, 29 Dec 2011 12:11:34 +0400</pubDate>
+ <description><![CDATA[õõõ: Äà ó ìåíÿ âîîáùå òàêîå îùóùåíèå, ÷òî âñå ïîêóïàåìûå ìíîþ ñðåäñòâà äëÿ óêðåïëåíèÿ è ðîñòà âîëîñ íå çàäåðæèâàÿñü íà ãîëîâå íà÷èíàþò äåéñòâîâàòü â îáëàñòè íèæíèõ êîíå÷íîñòåé è ïðîìåæíîñòè...]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">ed64e480321c46a51035c44a445cfd98927e2e303d972ac8874e8e36c11a8371</guid>
+ <link>http://bash.org.ru/quote/414968</link>
+ <title>Öèòàòà #414968</title>
+ <pubDate>Thu, 29 Dec 2011 12:11:01 +0400</pubDate>
+ <description><![CDATA[&quot;Ïî÷åìó ïðîãðàììèñòû ðàáîòàþò ïî íî÷àì&quot; @habr<br><br>troydm: Àáñîëþòíî ñîãëàñåí ñ àâòîðîì, èìåííî ïîýòîìó ÿ ëîæóñü ñïàòü â 5 óòðà è ïðîñûïàþñü â ÷àñ äíÿ! Âñåì ñïîêîéíîé íî÷è!<br>muzhig: Ýòî ìîæíî ñåáå ïîçâîëèòü, åñëè íåò æåíû. À âîò ìîåé î÷åíü íå íðàâèòñÿ êîãäà ÿ ðàáîòàþ ïî íî÷àì. Âñå îáúÿñíåíèÿ ïðî òî ÷òî «íî÷üþ íàìíîãî ëó÷øå ðàáîòàåòñÿ» îíà íå õî÷åò âîñïðèíèìàòü âñåðü¸ç.<br>ozgg: Íó æåíó ìîæíî òîæå íàó÷èòü ïðîãðàììèðîâàòü, è ãðàôèê ñèíõðîíèçèðóåòñÿ ;)<br>Vexilurz: Êîíå÷íî. Äåëîâ-òî íà 5 ìèíóò]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">aaa2f3a8dd486d209a697ecd4e3d728d99a2aa37dd482a3a859af5c473143b69</guid>
+ <link>http://bash.org.ru/quote/414967</link>
+ <title>Öèòàòà #414967</title>
+ <pubDate>Thu, 29 Dec 2011 11:46:07 +0400</pubDate>
+ <description><![CDATA[Íàøåë íà ñàéòå îäíîé íàó÷íîé ëàáîðàòîðèè â ñîòðóäíèêàõ ÷åëîâåêà, êîòîðûé ëåò ýäàê 16 íàçàä óãíàë ó ìåíÿ âåëèê. Âîò äóìàþ, ìîæåò ñõîäèòü, ïîïðîñèòü ó íåãî âåëîñèïåä îáðàòíî, îí æå ãîâîðèë &quot;äà ÿ ïðîêà÷óñü âîí äî òóäà è âåðíó!&quot; :)))]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">dc470e391715c450eef79e82aaadfb0342ecc256504946f0a32d2f8c1160557e</guid>
+ <link>http://bash.org.ru/quote/414966</link>
+ <title>Öèòàòà #414966</title>
+ <pubDate>Thu, 29 Dec 2011 11:45:06 +0400</pubDate>
+ <description><![CDATA[vova_belkin:<br><br>Âîò ìîé ïðàäåäóøêà, íàïðèìåð, óõèòðèëñÿ ïðîêóòèòü è ïðîèãðàòü â êàðòû äî êîïåéêè âñå èìåíèå, íàñëåäñòâî è æåíèíî ïðèäàíîå àêêóðàò ê 1917 ãîäó.<br><br>È ñ òåõ ïîð ñ÷èòàëñÿ â íàøåì ñåìåéñòâå íåïðåðåêàåìûì àâòîðèòåòîì â âîïðîñàõ ðàñïîðÿæåíèÿ êàïèòàëîì.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">a7147227d4c9f64edae338c2cec9f4456a1214ea3f9d899c2486038abe99a8f5</guid>
+ <link>http://bash.org.ru/quote/414965</link>
+ <title>Öèòàòà #414965</title>
+ <pubDate>Thu, 29 Dec 2011 11:44:01 +0400</pubDate>
+ <description><![CDATA[íó-íó: åñëè àòåèçì - ýòî ðåëèãèÿ, òî íå ñîáèðàòü ìàðêè - ýòî õîááè]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">d35adf64ed961a7e7ff88e11a9b57760b1cd3f0a835f008b6e9782a27ee1a31a</guid>
+ <link>http://bash.org.ru/quote/414964</link>
+ <title>Öèòàòà #414964</title>
+ <pubDate>Thu, 29 Dec 2011 11:13:11 +0400</pubDate>
+ <description><![CDATA[xxx: äà íó íàõåð ýòó ñåññèþ. Ïîêà ó÷èë äèñêðåòíóþ ìàòåìàòèêó, çàáûë ïàðîëè îò äâóõ ïî÷òîâûõ ÿùèêîâ.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">8ce06ad45b760d6b51e2432476e5c13dc9158f589c9b662147b760b0a1b967ac</guid>
+ <link>http://bash.org.ru/quote/414963</link>
+ <title>Öèòàòà #414963</title>
+ <pubDate>Thu, 29 Dec 2011 11:12:01 +0400</pubDate>
+ <description><![CDATA[Îáñóæäåíèå íîâîé àíòðåñîëè â êëàäîâêå:<br><br>Íó òàì âñå êàê íàäî ñäåëàëè. Íî áàðàõëà òðàäèöèîííî áîëüøå, ÷åì ìåñòà ïîä íåãî. Ïðè÷åì âîò â ÷åì çàãàäêà áûòèÿ: âûíèìàåøü áàðàõëî èç êëàäîâêè, ïîëîâèíó âûêèäûâàåøü, îñòàâøååñÿ óáèðàåøü â êëàäîâêó, à îíî òóäà íå âëåçàåò!]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">c64eb292881cc760ac0d2f7ac0b1010a8047b1271d39a0bc759076633640bbb4</guid>
+ <link>http://bash.org.ru/quote/414962</link>
+ <title>Öèòàòà #414962</title>
+ <pubDate>Thu, 29 Dec 2011 10:45:24 +0400</pubDate>
+ <description><![CDATA[Lilith: ÿ áîþñü ãîòîâèòü êàëüìàðà<br>Lightning: ïî÷åìó???<br>Lilith: ó íåãî êëþâ, è åùå íàäî ÷òî-òî ñäèðàòü êàê ÷óëîê<br>Lightning: ÷å òû áîèøüñÿ, òàì âñå ñõîäèò êëàññíî<br>Lilith: âäðóã ÿ ñäåðó êàëüìàðà, à ñúåì ÷óëîê<br>Lilith: à åùå ó íèõ òàì ÷åðíèëüíèöà âðîäå, è èêðà<br>Lightning: íó áëèí, òû ïîòðîøèëà êîãî-íèáóäü âîîáùå êîãäà-íèáóäü?<br>Lilith: ÿ ÷òî, ïîõîæà íà ñàìöà êàëüìàðà?<br>Lilith: òîëüêî êîï÷åíóþ ìîéâó<br>Lightning: à êóðèöó? íå? åå òàê ñìåøíî åùå ìîæíî íàäåâàòü íà ðóêó è èãðàòü â òåàòð<br>Lightning: øåâåëèòü êðûëûøêàìè, åñëè ÷åðåç æîïó âñòàâèòü<br>Lightning: òàê âîò, êàëüìàðà ëåã÷å ïîòðîøèòü, îí ìÿãîíüêèé òàêîé<br>Lightning: è æîïû íåò]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">19ee3858da403abdebc2f2694ade27e224d83cb2d0325964d802f3313c1333de</guid>
+ <link>http://bash.org.ru/quote/414961</link>
+ <title>Öèòàòà #414961</title>
+ <pubDate>Thu, 29 Dec 2011 10:44:36 +0400</pubDate>
+ <description><![CDATA[ìóæ: äà êàê, êàê, õåðîâî :( íå ïåðåæèâó ÿ, íàâåðíîå, èñïûòàòåëüíûé ñðîê<br>ÿ: ïî÷åìó??<br>ìóæ: äà âîò áëèí. ðåøèë ïîêàçàòü ñåáÿ â õîðîøåì ñâåòå ïåðåä øåôîì. ïîæåëàë åìó ïðèÿòíîãî àïïåòèòà. à îí øåë íå â ñòîëîâóþ à â òóàëåò.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">e0270fd309b6e90cb9f26d9012a1db8ed681fd071f5848b395535442033ffe3a</guid>
+ <link>http://bash.org.ru/quote/414960</link>
+ <title>Öèòàòà #414960</title>
+ <pubDate>Thu, 29 Dec 2011 10:44:01 +0400</pubDate>
+ <description><![CDATA[Luba: ×åì çàíèìàåøüñÿ â îòïóñêå?<br>BreakDancer: Ðàçíûìè âàæíûìè äåëàìè<br>Luba: Íàïðèìåð?<br>BreakDancer: Äà âîò âñïîìíèë, ÷òî â äåòñòâå ó ìåíÿ áûë ïèñòîëåò, ñòðåëÿþùèé ïðèñîñêàìè<br>BreakDancer: è ðåøèë, ÷òî ðàç óæ ÿ âûðîñ äî 29 ëåò è ñòàë áîëüøèì<br>BreakDancer: òî è ïðèñîñêè òîæå äîëæíû áûòü áîëüøèìè!<br>BreakDancer: Ñäåëàë àðáàëåò, êîòîðûé ñòðåëÿåò âàíòóñîì]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">8187c704ade265c329ccc02384e4206607407657bc6c9b9425a9542f0cb5a6a1</guid>
+ <link>http://bash.org.ru/quote/414959</link>
+ <title>Öèòàòà #414959</title>
+ <pubDate>Thu, 29 Dec 2011 10:13:01 +0400</pubDate>
+ <description><![CDATA[Îáåùàþò, ÷òî äåòè, ðîæäåííûå â ãîä ×åðíîãî Äðàêîíà, áóäóò òâîð÷åñêèìè è àêòèâíûìè. Íî ìû-òî çíàåì, ÷òî ãëàâíîå äëÿ íèõ - èììóíèòåò ê ìàãèè!]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">1e5eadf8678f61893bcf84e0dfb41290f63266eab736941b7ca07653b70f17d4</guid>
+ <link>http://bash.org.ru/quote/414958</link>
+ <title>Öèòàòà #414958</title>
+ <pubDate>Thu, 29 Dec 2011 09:45:26 +0400</pubDate>
+ <description><![CDATA[Çâîíèò êóðüåð èç îäíîé êîíòîðû è ñïðàøèâàåò êàê äîáðàòüñÿ.<br>ß: äàëåå ìîñò ÷åðåç ðåêó, èäåòå ïî ìîñòó...<br>Ê: À ðåêà ãäå â ýòî âðåìÿ? Ñëåâà? Ñïðàâà?<br>ß: ÂÍÈÇÓ!<br>Ê: àãà, ïîíÿòíî...<br>ß: Äàëüøå ïåðåõîäèòå íà äðóãîé áåðåã, ñïóñêàåòåñü íà íàáåðåæíóþ...<br>Ê: À ÷¸, ïðÿìî äî êîíöà ìîñòà èäòè? èëè ðàíüøå ïîâåðíóòü?]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">b7c708279640f1efe4ec3401970cb89f075864203ed0fbeeb612e9592655a4c3</guid>
+ <link>http://bash.org.ru/quote/414957</link>
+ <title>Öèòàòà #414957</title>
+ <pubDate>Thu, 29 Dec 2011 09:44:52 +0400</pubDate>
+ <description><![CDATA[gutta_honey@lj<br>Ëèçà ôàíàò &quot;Çâåçäíûõ âîéí&quot;. Ó íåå åñòü ôèãóðêà Äàðòà Âåéäåðà. Íî äåâ÷îíêà åñòü äåâ÷îíêà. Îíà, êàê ñ ïóïñèêîì, ñ íèì èãðàåò. Âîò ñåãîäíÿ:<br>- Äàðòó Âåéäåðó íóæíà êâàðòèðà! ß åãî ïîñåëþ â êîðîáêå èç-ïîä àïåëüñèíîâ.<br>Âîò òàê â æåíñêèõ ðóêàõ äàæå çëîäååâ ãàëàêòè÷åñêîãî ìàñøòàáà ïîñòèãàåò ñóäüáà ÷åáóðàøêè.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">e91f03e5e391060d916a7e7e827cb6eaeec132c17a1ac5d78af70d5368461ec5</guid>
+ <link>http://bash.org.ru/quote/414956</link>
+ <title>Öèòàòà #414956</title>
+ <pubDate>Thu, 29 Dec 2011 09:44:01 +0400</pubDate>
+ <description><![CDATA[ÕÕÕ: êòî ðàíî âñòà¸ò, òîãî êîò ðàçáóäèë :(]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">c805cfaf28bf072384933e50ea8e1c48f815063c3bfbfe05a0986d6b944bd14e</guid>
+ <link>http://bash.org.ru/quote/414955</link>
+ <title>Öèòàòà #414955</title>
+ <pubDate>Thu, 29 Dec 2011 09:13:01 +0400</pubDate>
+ <description><![CDATA[XXX: Áåæàòü, áåæàòü îòñþäà!<br>YYY: ×òî ó òåáÿ òàì?<br>XXX: Òîëüêî ÷òî êîììåð÷åñêèé ñ èñïîëíèòåëüíûì â êàáèíåòå îðàëè äðóã íà äðóãà: &quot;Äà ÿ òàêèõ êàê òû â Àôãàíå ê ñòåíêå ñòàâèë&quot; vs &quot;À ÿ òàêèõ êàê òû íà çîíå ïåòóøèë&quot;. Ìíå ñòðàøíî.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">0636538a5462fc292f9b4fc6439cd6f7f8ab0fe79ba081c47e36d3d8338806fe</guid>
+ <link>http://bash.org.ru/quote/414954</link>
+ <title>Öèòàòà #414954</title>
+ <pubDate>Thu, 29 Dec 2011 08:46:01 +0400</pubDate>
+ <description><![CDATA[xxx: Äà òû ÷òî, ýòî æå áàÿíú.<br>xxx: Êðóãîâîðîò èíòåðíåòà.  òâèòòåð ïîñòÿò çàïèñè ïÿòèëåòíåé äàâíîñòè èç ÆÆ.<br>yyy: âîò íå âèäåëà, ææ îáîøåë ìåíÿ ñòîðîíîé<br>õõõ: Òàê ÿ è ãîâîðþ, â ÆÆ ïîñòèëè øóòêè ñ ôîðóìîâ, â ôîðóìû - ñ ôèäî...<br>õõõ: è òîëüêî â ôèäî îñíîâîïîëîæíèêè ñåòåâîãî þìîðà ïåðåïå÷àòûâàëè àíåêäîòû èç ãàçåò]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">c8591055f839c5dbc882d36e7a4d2db9ce399460048e8e0e6d466dd43a88cae1</guid>
+ <link>http://bash.org.ru/quote/414953</link>
+ <title>Öèòàòà #414953</title>
+ <pubDate>Thu, 29 Dec 2011 08:13:04 +0400</pubDate>
+ <description><![CDATA[Î ñåêñå:<br>xxx: îòëè÷íî! â ëàáîðàòîðíûõ òàêîãî íå áûëî,íî ÿ ÇÀ! )))<br>yyy:  ëàáîðàòîðèÿõ îïàñíî. çàöåïèë íå òó êîëáó - è âñå, ÷åì ãîðäèëñÿ âñþ æèçíü è ñ ÷åì æèë - ñ òèõèì øèïåíèåì êàïàåò íà ïîë... =(<br>xxx: Èëè âûñîêîâîëüòíàÿ óñòàíîâêà ïî êðåñòöîâîìó ñïëåòåíèþ... Ñòðóÿ ýÿêóëÿòà ïðîáèâàåò êèðïè÷íóþ ñòåíó è ðàíèò ëåêòîðà â ñîñåäíåé àóäèòîðèè!<br>xxx: Êàæåòñÿ, ÿ òîëüêî ÷òî ïðèäóìàë êëàññíîå àíèìå, äà?]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">714be978a8678d201b16981150150166752145feaefa2f159980d76051602d87</guid>
+ <link>http://bash.org.ru/quote/414952</link>
+ <title>Öèòàòà #414952</title>
+ <pubDate>Thu, 29 Dec 2011 08:11:54 +0400</pubDate>
+ <description><![CDATA[Ðåêëàìà íà ßíäåêñå èçâåñòíîé êîìïàíèè è ñëîãàí &quot;Ïîïðîáóé ñ íàøèì âûáèðàòîðîì ïîäàðêîâ!&quot;<br>Àãà, ÿ òîæå ïåðâûé ðàç íåïðàâèëüíî ïðî÷èòàë =)]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">dd7d36ba1543a7ac360b28c72f669816d3551bb09f34156635f80efbc9a4f390</guid>
+ <link>http://bash.org.ru/quote/414951</link>
+ <title>Öèòàòà #414951</title>
+ <pubDate>Thu, 29 Dec 2011 08:11:01 +0400</pubDate>
+ <description><![CDATA[Ñåãîäíÿ âûíîñèë ìóñîð â îôèñå, à ìîÿ êîëëåãà èãðàëà â âèíäó, çàäàâàÿ âîïðîñû:<br>- Âû óâåðåíû, ÷òî õîòèòå î÷èñòèòü êîðçèíó? Ôàéëû áóäóò óäàëåíû áåçâîçâðàòíî.<br>À ïîòîì ó ìåíÿ ïîðâàëñÿ ïàêåò è âåñü ìóñîð ðàçëåòåëñÿ ïî îôèñó, íà ÷òî êîëëåãà ïå÷àëüíî çàìåòèëà:<br>- Ïðîèçîøåë ñáîé ïðè î÷èñòêå êîðçèíû, ïåðåçàãðóçèòåñü è ïîïðîáóéòå ñíîâà...]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">174e14053635b5325be15ae0a37b47953115b33e0d082053064572907d2829a0</guid>
+ <link>http://bash.org.ru/quote/414950</link>
+ <title>Öèòàòà #414950</title>
+ <pubDate>Wed, 28 Dec 2011 12:46:01 +0400</pubDate>
+ <description><![CDATA[[QuizMaster7] Ïîâòîðÿþ âîïðîñ: Èìåííî îíè âåøàëè ïîä øåþ êîíÿ âîë÷üþ ãîëîâó, à íà ñåäëî ïðèêðåïðÿëè ìåòëó, ÷òîáû âûíþõèâàòü èçìåíó è âûìåòàòü åå èç ãîñóäàðñòâà<br>[QuizMaster7] Ïåðâàÿ ïîäñêàçêà: Êîëè÷åñòâî áóêâ: 9<br>[EwokDoUrden] ôèãàñå!<br>[EwokDoUrden] ÍÀÐÊÎÌÀÍÛ]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">691660b05378e2d242a7a60429e2cd94a44e8d2041b2facb2597cb21ec213fbf</guid>
+ <link>http://bash.org.ru/quote/414949</link>
+ <title>Öèòàòà #414949</title>
+ <pubDate>Wed, 28 Dec 2011 12:13:18 +0400</pubDate>
+ <description><![CDATA[Äîê: Áëÿ, õîäèë ïîêóðèòü íà áàëêîí, âèæó â óãëó ÷òî-òî ìîõíàòîå ñ óãðîæàþùåé òåíüþ.  ñòîðîíó øàðàõíóëñÿ. È óæå äóìàþ, ãëþêè îò áåññîííèöû ïðóò. Íå áëèí, ÿ ïðîñòî çàáûë, ÷òî â÷åðà åëêó êóïèë.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">634c63c05a37bbb5933ccae9bd50bbc4e04d2a27dfd2895ab8f4be5cc77a5707</guid>
+ <link>http://bash.org.ru/quote/414948</link>
+ <title>Öèòàòà #414948</title>
+ <pubDate>Wed, 28 Dec 2011 12:12:02 +0400</pubDate>
+ <description><![CDATA[XXX: âñå, ôèíèø! ÿ êîíå÷íî ðàçíûõ äåáèëîâ âèäåëà. è ê ñêðåïêàì â ïðèíòåðå óæå äàæå ïî÷òè ïðèâûêëà. è ñêîò÷ íà áàðàáàíå, áëèí, ïðèêëååííûé ñ ÷åñòíûìè ãëàçàìè &quot;íó ÿ æå åãî äàæå íå îòêðûâàëà, ÿ íå çíàþ, êàê îí òóäà ïîïàë!&quot;. íî ÷òîáû òàê! ó ìåíÿ ñåé÷àñ ïðèíòåð ÊÀËÜÊÓËßÒÎÐ çàæåâàë!!! êàëüêóëÿòîð, áëèí!]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">2309307a0dd79a2f77f63dbbbf3239d5de3cd41409ce23750c0e8ebecd20466f</guid>
+ <link>http://bash.org.ru/quote/414946</link>
+ <title>Öèòàòà #414946</title>
+ <pubDate>Wed, 28 Dec 2011 11:44:57 +0400</pubDate>
+ <description><![CDATA[xxx:<br>îòäàì â äàð ïëååð<br>Explay T-7, ñëåãêà ïîäåðæàíûé (âõëàìèíó)]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">c58a33a67db26dab4b121d14ebad5cd80d78040eea517835a90bbdc81887b4dc</guid>
+ <link>http://bash.org.ru/quote/414945</link>
+ <title>Öèòàòà #414945</title>
+ <pubDate>Wed, 28 Dec 2011 11:44:01 +0400</pubDate>
+ <description><![CDATA[Êóïèëè ñ ñîòðóäíèöåé â îôèñ ëèêåðà. Ïîëîâèíó âûïèëè, îñòàòêè îíà çàìàòûâàåò â ïàêåòèê è ñòàâèò â õîëîäèëüíèê.<br>ß: Ìû ÷òî, òóò åãî è îñòàâèì?<br>Ñîòðóäíèöà: Íó äà, à ÷òî íàì òåðÿòü? )<br>ß: Íó, íàïðèìåð ðàáîòó....]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">3a8ab041c452b16f9f415d3f6d209f1d58f11ed2ab0ee5f928a5f6b8e22a78b9</guid>
+ <link>http://bash.org.ru/quote/414944</link>
+ <title>Öèòàòà #414944</title>
+ <pubDate>Wed, 28 Dec 2011 11:12:55 +0400</pubDate>
+ <description><![CDATA[&lt;Belka&gt; Âåñüìà ñìóòèëàñü, íàéäÿ â çàïèñíîé òåëåôîííîé êíèæêå ñâîåãî áåçãðàìîòíîãî áðàòà çàïèñü &quot;Ìàêñ -ñîñåò&quot;.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">d72696e62bb007bb3004d7403e5915734f7ca02ef54757e08cb0a689a1b4df4d</guid>
+ <link>http://bash.org.ru/quote/414943</link>
+ <title>Öèòàòà #414943</title>
+ <pubDate>Wed, 28 Dec 2011 11:12:01 +0400</pubDate>
+ <description><![CDATA[korsa: âîêðóã ìåíÿ òðè êîìïà, äâà òåëåôîíà è íàâèãàòîð<br>fintar: íóæíî ïåðåâåçòè èõ ÷åðåç ðåêó?]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">9ffbfa3d0268a0dc955b9969e4c2b77cc50443a7d6bd9b60f9cf4102daeb7fb1</guid>
+ <link>http://bash.org.ru/quote/414942</link>
+ <title>Öèòàòà #414942</title>
+ <pubDate>Wed, 28 Dec 2011 10:45:41 +0400</pubDate>
+ <description><![CDATA[Èç îáñóæäåíèÿ:<br>Êàê–òî ðàç ÿ â ñïîðå ñî ñâîåé æåíîé îáíàðóæèë êàêóþ–òî îòêðîâåííóþ äóðü â åå ñëîâàõ è ñêàçàë:<br>— Íî ýòî æå íå ëîãè÷íî!<br>— Íó è ÷òî?<br>Áëÿäü, ÍÓ È ×ÒÎ? â ýòîò ìîìåíò ó ìåíÿ âîîáùå âåñü ìèð ðóõíóë, è ÿ ïîíÿë ÷òî äëÿ íåå âîîáùå íåò ðàçíèöû, ëîãè÷íî èëè íåò òî, ÷òî îíà ãîâîðèò. ÂÎÎÁÙÅ!<br><br>Êîãäà ÿ ïåðåñêàçûâàþ ýòî ñâîèì äðóçüÿì, âñå õîõî÷óò èëè óëûáàþòñÿ. À êîãäà äåâóøêàì — îíè ïðîñòî æäóò, ÷òî ÿ äàëüøå ñêàæó, ñî âíèìàòåëüíûì ëèöîì, ïîòîìó ÷òî èñêðåííå íå çàìå÷àþò ïðîáëåìû â ýòîé ôðàçå]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">6017310e922bd529b5ad3be09f4f0c5e8b6b2fb76d0bd05b617a8eac0ae27193</guid>
+ <link>http://bash.org.ru/quote/414941</link>
+ <title>Öèòàòà #414941</title>
+ <pubDate>Wed, 28 Dec 2011 10:44:47 +0400</pubDate>
+ <description><![CDATA[xxx: ó íàñ â ñòîëîâîé äàâíî âìåñòî ñàëôåòîê áóìàãà ïðîìûøëåííàÿ íàðåçàíà, íî ñåé÷àñ îíà åùå è ãëÿíöåâàÿ]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">b101af3976aa2e9b7841576433b0c68af93c3ce85ac75383a6f7b20a0106a9c6</guid>
+ <link>http://bash.org.ru/quote/414940</link>
+ <title>Öèòàòà #414940</title>
+ <pubDate>Wed, 28 Dec 2011 10:44:01 +0400</pubDate>
+ <description><![CDATA[Ñåé÷àñ ñ æåíîé ïî òåëåôîíó ðàçãîâàðèâàë.<br>Îíà ãîâîðèò:<br>- Äàâàé òåáå íà Íà ðóáàøêó ïîøüåì êëåâóþ è ýòî áóäåò ìîèì ïîäàðêîì.<br>- Êàê õî÷åøü.<br>Ïðåäëàãàåò ìåðêè ïîåõàòü ñíÿòü, ÿ íà÷èíàþ äèêòîâàòü.<br>- Äëèíà 174 ñì, øèðèíà 80 ñì. Âíóòðè òêàíü áàðõàò, ñíàðóæè äåðåâî, ëó÷øå äóá, êðûøêà òîæå äóáîâàÿ ðåçíàÿ.<br>Îíà ãîâîðèò:<br>- Âñå çàïèñàëà, ñåé÷àñ èì ïîçâîíþ.<br>È òóò îíà ïðî÷èòàëà òî, ÷òî çàïèñàëà...]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">1d3da2d78ecf5bac86c480e26d65184e8b69cab96bc8d6c038de7de9ca468ebd</guid>
+ <link>http://bash.org.ru/quote/414939</link>
+ <title>Öèòàòà #414939</title>
+ <pubDate>Wed, 28 Dec 2011 10:13:07 +0400</pubDate>
+ <description><![CDATA[õõõ: Ó íàñ ñåãîäíÿ ýêçàìåí ïî àíàòîìèè âîîáùå çà÷åòíûé âûøåë. Îäèí ïàðåíü ñðåç ãîðòàíè íàçâàë ñðåçîì øåéêè ìàòêè, äðóãîé â ðîìáîâèäíîé ÿìêå ìîçãà ïðèìåòèë, çâèíÿþñü, âóëüâó.<br>õõõ: Îáîèõ îòïðàâèëè íà ïåðåñäà÷ó ñ ôîðìóëèðîâêîé &quot;âûëå÷èòå íåäîòðàõ è ïðèõîäèòå ñíîâà&quot;.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">0365ddac152e7a1f45d4fe35cc5d673ff9e9cbce8d9d125e40b5dca139cd293e</guid>
+ <link>http://bash.org.ru/quote/414938</link>
+ <title>Öèòàòà #414938</title>
+ <pubDate>Wed, 28 Dec 2011 10:12:01 +0400</pubDate>
+ <description><![CDATA[xxx: Æåíà ïîñëå ñóòîê íà ðàáîòå ïîïðîñèëà ðàçáóäèòü åå â 20:00. Çâîíþ, îíà ïîäíèìàåò òðóáêó, íè÷åãî íå ãîâîðèò, ñëûøíî òîëüêî ìèðíîå ñîïåíèå... Âûêëþ÷èëà áóäèëüíèê, áëèí :D]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">8774184a10feb87ab76c3eac63fcf6873b572cd376d06b87ec2cafa48464b57b</guid>
+ <link>http://bash.org.ru/quote/414937</link>
+ <title>Öèòàòà #414937</title>
+ <pubDate>Wed, 28 Dec 2011 09:45:31 +0400</pubDate>
+ <description><![CDATA[Ascha: êàê óäîáíî: åñëè ðåâåòü äâà ÷àñà ïîäðÿä - òî òóøü ñìûâàòü óæå íå íóæíî!]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">5f9e58d114c8a86764bd26780e94bb3f00f0a4db026821f84d06b4540db7b5ed</guid>
+ <link>http://bash.org.ru/quote/414936</link>
+ <title>Öèòàòà #414936</title>
+ <pubDate>Wed, 28 Dec 2011 09:45:01 +0400</pubDate>
+ <description><![CDATA[xxx: ÿ çàéäó ùàñ?<br>yyy: ß - ãîðÿ÷àÿ øòó÷êà. È ÿ óæå âñÿ òåêó. Íî áóäü ñî ìíîé îñòîðîæåí.<br>xxx: Àíÿ?<br>yyy: Ó ìåíÿ òåìïåðàòóðà. Ñîïëè ðó÷üåì. Ðèñêóåøü çàðàçèòüñÿ.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">8b1acd9ec8457ac318c78b1dc88005edf4fc9f0ace4d47c1080c1b670de19e2e</guid>
+ <link>http://bash.org.ru/quote/414935</link>
+ <title>Öèòàòà #414935</title>
+ <pubDate>Wed, 28 Dec 2011 09:13:01 +0400</pubDate>
+ <description><![CDATA[Duck: Ðåøèë ïîïðàâèòü çäîðîâüå, çàïèñàëñÿ â áàññåéí.<br>Dimes: óðèíîòåðàïèÿ íå ðàáîòàåò]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">187c05af1edfcce0de5da82d30a58fb83ae474e6fa897ad684bd3ad7c50e9dd7</guid>
+ <link>http://bash.org.ru/quote/414934</link>
+ <title>Öèòàòà #414934</title>
+ <pubDate>Wed, 28 Dec 2011 08:46:02 +0400</pubDate>
+ <description><![CDATA[xxx: Ìåíÿ ïîïðîñèëè â ìåòðî ïðîéòè ÷åðåç ðàìêó<br>yyy: êàêîãî õ?<br>xxx: Õðåí åãî çíàåò<br>yyy: òû ïîêàçàëñÿ èì ïîäîçðèòåëüíûì? )<br>xxx: Áûë êàê âñåãäà â äæèíñàõ ÷èñòûõ áîòèíêàõ êîæàíîé ñóìêå è íàãëîé ðîæåé<br>xxx: Ìåíÿ êàê ïðàâèëî îíè âîîáùå íå çàìå÷àþò<br>yyy: õû<br>yyy: òû áûë â êîæàíîé ñóìêå, ýòî íàñòîðàæèâàåò]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">00822e572762f43d2fb56ef00c2f7be12f703a27a39949f99036f7734a26f566</guid>
+ <link>http://bash.org.ru/quote/414933</link>
+ <title>Öèòàòà #414933</title>
+ <pubDate>Wed, 28 Dec 2011 08:45:02 +0400</pubDate>
+ <description><![CDATA[misterIT: Ñàíü, ïðèâåò. ñðî÷íî íóæíà ïîìîùü, ÷åðåç ñêîëüêî ìîæåøü â îôèñ ïîäãðåñòè?<br>misterIT: Äîìåí ðóõíóë, ðåéä çàãëþ÷èëî. È âèíò ïðèõâàòè.<br>misterIT: Ñàíü!!! òû òóò?<br>xxx@qip: Òóò, ñîáèðàþñü, à ÷òî ñëó÷èëîñü òî? Íàïðÿæåíèå? Êîðîòíóëî?<br>misterIT: Äà õç<br>misterIT: Áîðîäó â÷åðà ñáðèë, ñâèäàíèå áëÿäü âèäèòå ëè!<br>xxx@qip: À ÿ ñâèòåð ïîñòèðàë. Âèäèìî íå âðàëè.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">a6231be02247fcfffbaa07e020f43a4c7a1c7ed628ed86af16443ffe45ed7127</guid>
+ <link>http://bash.org.ru/quote/414932</link>
+ <title>Öèòàòà #414932</title>
+ <pubDate>Wed, 28 Dec 2011 08:12:38 +0400</pubDate>
+ <description><![CDATA[xxx: Æåíùèíû - êàê êîìïüþòåðíûå èãðû ñ ðàçíûìè óðîâíÿìè ñëîæíîñòè. Åñëè èãðàòü íà Very Easy - òî áûñòðî ïðîïàäàåò èíòåðåñ ê èãðå. À åñëè èãðàòü íà Very Hard - òî ìîæíî íàòåðåòü ìîçîëè äæîéñòèêîì.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">039ba4efda1619b3b4374b223e344b3423a8d9788a18bf73ac07bce7bac04bea</guid>
+ <link>http://bash.org.ru/quote/414931</link>
+ <title>Öèòàòà #414931</title>
+ <pubDate>Wed, 28 Dec 2011 08:12:01 +0400</pubDate>
+ <description><![CDATA[ß:<br>Æåíà ìíå òàêàÿ ãîâîðèò:<br>- ìíå íóæíà øóáà íîðêîâàÿ,<br>- ó òåáÿ æå åñòü,<br>- ó ìåíÿ èç êóñî÷êîâ, à ìíå íàäî öåëüíóþ, ó íàñ ó âñåé ãðóïïû óæå öåëüíûå, à z îäíà êàê ëîøàðà!<br>- ó âñåé - ýòî ó îäíîé Ëþäêè?<br>- íó íåò, ó äâîèõ òî÷íî åñòü!<br>- ... à ìíå íóæåí ôîòîàïïàðàò êýíîí 5ä ìàðê 2<br>- ó òåáÿ æå åñòü óæå.<br>- íó òàê ó ìåíÿ 5ä, à ÿ õî÷ó ÷òîáû áûë ìàðê 2, à òî ó âñåõ óæå â ãîðîäå ìàðêè, à ÿ îäèí êàê ëîøàðà<br>- íó òåáå-òî ïðîñòî õî÷åòñÿ, à ìíå... (âîò òóò âíèìàíèå!!!!) ÍÅÎÁÕÎÄÈÌÎ.<br><br>Êåìï:<br>õîðîøî, ÷òî òû íå ñêàçàë, ÷òî òû èì åùå è äåíüãè çàðàáàòûâàåøü, à òî îíà áû òåáå êàêóþ-íèáóäü àëüòåðíàòèâó ñ øóáîé ïðèäóìàëà]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">66fab6cb65e11c7de896d7c6840095b9a90bd70ed8d49f8fb7adc0adb9b6a43c</guid>
+ <link>http://bash.org.ru/quote/414930</link>
+ <title>Öèòàòà #414930</title>
+ <pubDate>Tue, 27 Dec 2011 13:46:01 +0400</pubDate>
+ <description><![CDATA[õõõ: Äðóã ìíå â÷åðà ðàññêàçàë. Îí áàðìåíîì ðàáîòàåò â çàâåäåíèè. Ïî÷òè â íî÷è ê íè íà÷àëè çàëàìûâàòüñÿ äâà ïüÿíûõ â çþçþ ÷óâàêà è îõðàíà èõ íå ïóñòèëà, òàê êàê çàâåäåíèå ïðèëè÷íîå. Ýòè äâà òèïà íå íàøëè íè÷åãî óìíåå è âûçâàëè ïîëèöèþ, òå ïðèåõàëè, èõ ñàìèõ æå çàáðàëè è óâåçëè!]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">39b40cb066f0a9b64c53dbc67c1a521a1b3948a5b021efd4b1982753059aaee1</guid>
+ <link>http://bash.org.ru/quote/414929</link>
+ <title>Öèòàòà #414929</title>
+ <pubDate>Tue, 27 Dec 2011 13:13:01 +0400</pubDate>
+ <description><![CDATA[xxx: ÿ èì çâîíèë<br>xxx: íåò ó íèõ âðåìåíè íà ïîíåäåëüíèê<br>yyy: ïå÷àëüêà<br>xxx: ýòî óæå íå ïå÷àëüêà<br>xxx: ýòî óæå çëîñòüêà, ÿðîñòüêà è ãíåâèê]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">4f3b79bfba6994d73b3eb21530d98188f4830c26c4f8108a6d8120a4c0b5e8fc</guid>
+ <link>http://bash.org.ru/quote/414928</link>
+ <title>Öèòàòà #414928</title>
+ <pubDate>Tue, 27 Dec 2011 12:46:01 +0400</pubDate>
+ <description><![CDATA[Êîììåíòû ê ñòàòüå &quot;Êàê îñâîáîäèòüñÿ èç íàðó÷íèêîâ-ñòÿæåê&quot;:<br>xxx: À âîò èíòåðåñíî, åñëè òû åäåøü â áàãàæíèêå ìàøèíû, ÷òî äåëàòü?<br>yyy: åñëè íî÷üþ è â ëåñ – òî ýòî ïðîñòî ïëîõàÿ ïðèìåòà.<br>zzz: Âî âñ¸ì íàäî èñêàòü ïîçèòèâ! ß óâåðåí, ýòî áóäåò ïîñëåäíÿÿ ïëîõàÿ ïðèìåòà â âàøåé æèçíè! :)]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">d3162ccb1c30aa3f654c0c6b368fa9e583c020dc3d04bcc07b6c5f02eeadaaeb</guid>
+ <link>http://bash.org.ru/quote/414927</link>
+ <title>Öèòàòà #414927</title>
+ <pubDate>Tue, 27 Dec 2011 12:13:01 +0400</pubDate>
+ <description><![CDATA[zzz: Íó âîò êàê îáúÿñíèòü èíîñòðàíöó, ïî÷åìó âèëêà — ëåæèò, òàðåëêà — ñòîèò, à ïòèöà — ñèäèò?<br>xxx: Âîò, êñòàòè, íîóòáóê: êîãäà çàêðûòà êðûøêà — ëåæèò, à êîãäà îòêðûòà — ñòîèò…<br>yyy: ß êàæåòñÿ íà÷èíàþ ïîíèìàòü, ëåæèò — áåç òîëêó, à ñòîèò — âî èìÿ Âåëèêîé Ñïðàâåäëèâîñòè!<br>]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">69e05b82fc5a5028a65e0435a584a83ffaa44e9784c024fb30eda9b7d87f38ba</guid>
+ <link>http://bash.org.ru/quote/414926</link>
+ <title>Öèòàòà #414926</title>
+ <pubDate>Tue, 27 Dec 2011 11:46:03 +0400</pubDate>
+ <description><![CDATA[Sovershenstvo: ðàñïå÷àòàëà äîêóìåíò íà 115 ñòðàíèö. çàáèðàëà èç ïðèíòåðà. îáîæãëàñü î áóìàãó :(<br>iNote: ïðèíòåð ææîò :D]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">caa3a31eca89b56e3669c9910f23564e1ee2bd2c67f0be5472e206496b688609</guid>
+ <link>http://bash.org.ru/quote/414925</link>
+ <title>Öèòàòà #414925</title>
+ <pubDate>Tue, 27 Dec 2011 11:45:01 +0400</pubDate>
+ <description><![CDATA[Èç îáñóæäåíèÿ èñïîëüçîâàíèÿ àêóñòè÷åñêîãî äàò÷èêà äëÿ âêëþ÷åíèÿ êîìïüþòåðà õëîïêîì â ëàäîøè:<br>xxx: Áûë òàêîé ñëó÷àé.<br>xxx: Ïðèÿòåëü ñäåëàë àêóñòè÷åñêèé âûêëþ÷àòåëü íà îñâåùåíèå.<br>xxx: Äîñòàâàë êíèãè ñ ïîëêè, ñòîÿ íà òàáóðåòå.<br>xxx: Óïàëà êíèãà, ñâåò ïîòóõ, îí îñòóïèëñÿ, ñëîìàë ðóêó.<br>xxx: Ñâåò çàãîðåëñÿ.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">d3db54801b673716d6b41137bbf9ca64c62a04a1211bf43ea44876c411f88728</guid>
+ <link>http://bash.org.ru/quote/414924</link>
+ <title>Öèòàòà #414924</title>
+ <pubDate>Tue, 27 Dec 2011 11:13:12 +0400</pubDate>
+ <description><![CDATA[Îáñóæäàåì ñ ìóæåì Ñêàéðèì:<br>- Ìíå îäíîé êàæåòñÿ, ÷òî äðàóãè êóäàõòàþò? &quot;Êóä-êó-äà&quot;, &quot;Êóä-êó-äààààà&quot;<br>- Ýòî åùå ÷òî. Â÷åðà ñêåëåò ïîäõîäèò êî ìíå è ÷åòêî òàê: &quot;ïàñ-ïîðò&quot;.<br>- Ñóðîâûå ñêåëåòû äðåâíåñêàéðèìñêèõ ïîãðàíè÷íèêîâ. Èç âñåãî, ÷òî ëåïå÷óò, ìîæíî ðàçîáðàòü òîëüêî &quot;ïàñïîðò&quot; è &quot;óõîäè&quot; )]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">6206e668575ef7364ca52bacdfc3d6b45da5ab80d4c69c0f1467269cec9ee6c4</guid>
+ <link>http://bash.org.ru/quote/414923</link>
+ <title>Öèòàòà #414923</title>
+ <pubDate>Tue, 27 Dec 2011 11:12:01 +0400</pubDate>
+ <description><![CDATA[xxx: Óñòðîèë äèâåðñèþ íà ðàáîòå - ïðèí¸ñ èðèñ &quot;Êèñ-Êèñ&quot; (ñîâåòñêèé, æåëåçîáåòîííûé). <br>xxx: Òåïåðü íèêòî ñî ìíîé íå ðàçãîâàðèâàåò. <br>xxx: ÂÎÎÁÙÅ ÍÈÊÒÎ ÍÈ Ñ ÊÅÌ ÍÅ ÐÀÇÃÎÂÀÐÈÂÀÅÒ! )))]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">47c8ec43ac12036ac0528b4b4077f8d9f80a0fe8d4aa029f8a39b7b9d4327b6f</guid>
+ <link>http://bash.org.ru/quote/414922</link>
+ <title>Öèòàòà #414922</title>
+ <pubDate>Tue, 27 Dec 2011 10:45:34 +0400</pubDate>
+ <description><![CDATA[õõõ: ß ãîòîâëþñü ê çà÷åòó, òîëüêî î÷åíü îáäóìàííî. Ñî ñòîðîíû ýòî âûãëÿäèò, áóäòî ÿ ïðèìåðÿþ êèðçà÷è]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">7871bd6a1b62f062468316e82234015b27a0c448d21c39120579d4c66c1b3367</guid>
+ <link>http://bash.org.ru/quote/414921</link>
+ <title>Öèòàòà #414921</title>
+ <pubDate>Tue, 27 Dec 2011 10:45:01 +0400</pubDate>
+ <description><![CDATA[xxx: Ïåðååõàëè â íîâûé îôèñ. Ñïóñòÿ òðè ìåñÿöà îáíàðóæèëè ëþê ïîä íîãàìè, à èç ùåëè ñâåò ãîðèò. Äóìàåì òåïåðü - âñêðûâàòü, èëè íå ñòîèò.<br>yyy: Âû àêêóðàòíåé òàì. À òî ïîñóòî÷íî äåæóðèòü çàñòàâÿò è öèôåðêè ââîäèòü.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">c5fcb5c4cf429099d6540943fd5f376998aee7e5ac90409e8afc3e6a61ef177f</guid>
+ <link>http://bash.org.ru/quote/414920</link>
+ <title>Öèòàòà #414920</title>
+ <pubDate>Tue, 27 Dec 2011 10:13:01 +0400</pubDate>
+ <description><![CDATA[MG: Ìàìà ìîåé ìàìû ñêàçàëà ìîåé ìàìå: òâîþ æ ìàòü çà íîãó! È óïàëà.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">72838435dc732ed7410037dd17b0e38588ac91999f5f195421621a8355ded16e</guid>
+ <link>http://bash.org.ru/quote/414919</link>
+ <title>Öèòàòà #414919</title>
+ <pubDate>Tue, 27 Dec 2011 09:45:45 +0400</pubDate>
+ <description><![CDATA[Seryozha:<br>ðîçîâûé óæå íå ìîäíî â ýòîì ñåçîíå<br>ñòîÿë íà îñòàíîâêå<br>ïðîåõàë ìèìî ðîçîâûé ëèìóçèí<br>îäíà ôèôà äðóãîé ñêàçàëà, ÷òî ýòî áåçâêóñèöà<br>è ýòî âîîáùå óåáèùå<br>íó è ïîòîì ùåìèëèñü ñî ìíîé â àâòîáóñ]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">7b098f0d541bdc4ac0f90634a82e781d38e174ef380aa56ff6c94e69734fcde8</guid>
+ <link>http://bash.org.ru/quote/414918</link>
+ <title>Öèòàòà #414918</title>
+ <pubDate>Tue, 27 Dec 2011 09:44:43 +0400</pubDate>
+ <description><![CDATA[Worontzoff: Èçáèðàòåëüíûå ó÷àñòêè áóäóò îñíàùåíû êàìåðàìè, êóäà áóäóò ïîìåùàòü íàáëþäàòåëåé âî âðåìÿ ïîäñ÷åòà áþëëåòåíåé.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">5af15998f29f5f063b9ce01b54dc8d3f0b73bb7d3f877edcc5eaa7ff8f71013b</guid>
+ <link>http://bash.org.ru/quote/414917</link>
+ <title>Öèòàòà #414917</title>
+ <pubDate>Tue, 27 Dec 2011 09:44:01 +0400</pubDate>
+ <description><![CDATA[õõõ: Ó íàñ â äâà ÷àñà íî÷è ïðèøåñòâèå Âèííè Ïóõà<br>óóó:  ñìûñëå? Ìàìà ïðèøëà?<br>õõõ: Íå, Êîëÿ ìåä â õîëîäèëüíèêå íàøåë. Õîäèò ïî êâàðòèðå, íåæíî ïðèæèìàÿ ê ñåáå áàíêó. ß ñåãîäíÿ Ïÿòà÷îê]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">b5a66cb535552b46159d467911174f1e4aac941c8c1d891a62619a8cdb00a3ea</guid>
+ <link>http://bash.org.ru/quote/414916</link>
+ <title>Öèòàòà #414916</title>
+ <pubDate>Tue, 27 Dec 2011 09:13:02 +0400</pubDate>
+ <description><![CDATA[(ðàçãîâîð î &quot;Ëåáåäèíîì Îçåðå&quot;)<br>xxx: ìîæåò áûòü, òû è ñþæåò ïîìíèøü?<br>yyy: î÷åíü ñìóòíî. ß ñîâñåì ìàëåíüêàÿ áûëà, êîãäà åãî â ïîñëåäíèé ðàç ïîêàçûâàëè...]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">9e007ee3d9984de85c727f6885f913891b11676f10b053ba8a51bec6fba0e23c</guid>
+ <link>http://bash.org.ru/quote/414915</link>
+ <title>Öèòàòà #414915</title>
+ <pubDate>Tue, 27 Dec 2011 08:46:11 +0400</pubDate>
+ <description><![CDATA[xxx: ïðèâåò<br>xxx: êàê ñëóæáà?<br>yyy: êàê ó ñëóæåáíîé ñîáàêè<br>yyy: öåëûé äåíü ñïàñàþ ìèð, à âå÷åðîì îáåùàëè ïîêîðìèòü]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">3dc9ddc2fad185181993315c5c3a404405ab704423d3c24bd9213dcb23bad2eb</guid>
+ <link>http://bash.org.ru/quote/414914</link>
+ <title>Öèòàòà #414914</title>
+ <pubDate>Tue, 27 Dec 2011 08:45:01 +0400</pubDate>
+ <description><![CDATA[õõõ: íåò, ÿ ñêîðåå ïîéäó óáèâàòü, ÷åì êðàñòü<br>óóó: ñòðàííàÿ ìîðàëü, ÷òî òàê?<br>õõõ: ÿ ÷åëîâåê ÷åñòíûé, à ïîòîìó çëîé]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">61e793991c5dea07ea5a5afa2bbc899e49c23d8a0d8a1f48918915129a13a35c</guid>
+ <link>http://bash.org.ru/quote/414913</link>
+ <title>Öèòàòà #414913</title>
+ <pubDate>Tue, 27 Dec 2011 08:12:04 +0400</pubDate>
+ <description><![CDATA[Ðå÷ü îá àóäèîíàðêîòèêàõ:<br><br>õõõ: Äà ôèãíÿ ýòî âñ¸!<br>yyy: Íó ïî÷åìó ôèãíÿ, åñòü æå çâóêè, êîòîðûå êàê-òî âîçäåéñòâóþò íà ïñèõèêó ÷åëîâåêà...<br>õõõ: Äà, íà ìåíÿ çâóê äðåëè òàê âîçäåéñòâóåò! Ñðàçó õî÷åòñÿ ïîéòè è óáèòü êîãî-íèáóäü!]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">ed2932ac0768ceb5ec1a155d4b039fb2cba050296935d7852baccb238ada1819</guid>
+ <link>http://bash.org.ru/quote/414912</link>
+ <title>Öèòàòà #414912</title>
+ <pubDate>Tue, 27 Dec 2011 08:11:31 +0400</pubDate>
+ <description><![CDATA[&lt;xxx&gt; ãîòîâèëè îáåä, ïîëåç â õîëîäèëüíèê<br>&lt;xxx&gt; îêàçûâàåòñÿ, â÷åðà ÿ íåâîëüíî êóïèë ïðîäóêòîâûé íàáîð &quot;Çëûå ïòèöû&quot;: íîãè êóðèíûå, ãðóäêà èíäåéêè, ñâèíûå ýñêàëîïû]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">1989a43d3a03de416d16788589caaa318ece611245b328df9b1567c13205cf70</guid>
+ <link>http://bash.org.ru/quote/414911</link>
+ <title>Öèòàòà #414911</title>
+ <pubDate>Tue, 27 Dec 2011 08:11:01 +0400</pubDate>
+ <description><![CDATA[xxx: ñêîëüçêî íà óëèöå, äàæå ñîáàêà ãóëÿòü íå õî÷åò<br>yyy: åé-òî ÷òî, ó íå¸ æ ïîëíûé ïðèâîä]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">c207fd198261176146047e54ccfff9058582e311ab402e32dfe67837c3e61e64</guid>
+ <link>http://bash.org.ru/quote/414910</link>
+ <title>Öèòàòà #414910</title>
+ <pubDate>Mon, 26 Dec 2011 13:12:49 +0400</pubDate>
+ <description><![CDATA[Ìàìà, êóïèâøàÿ ñâîåìó ðåáåíêó ÷åõîë ê ìîáèëüíîìó òåëåôîíó, ïðèíåñëà åãî â ìàãàçèí, ÷òîáû âåðíóòü ïðîäàâöó.<br><br>Ï: Íà ÷òî æàëóåòåñü?<br>Ì: Ðåáåíîê îòêàçûâàåòñÿ ïîëüçîâàòüñÿ ÷åõëîì.<br>Ï: Ïî÷åìó? ×òî íå óñòðàèâàåò?<br>Ì: Ìû çàêàçûâàëè ÷åõîë ñ ÷åëîâåêîì-ïàóêîì. Íà ÷åõëå íàäïèñü SPIDER-MAN. Òàê âîò, êîãäà çàñòåãèâàåì ìîëíèþ, ñòàíîâèòñÿ íå âèäíî áóêâó S.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">245f34c6c6da77a68ba258f717177e3ecb27865bd7cd72c5966a9bae3d68cdab</guid>
+ <link>http://bash.org.ru/quote/414909</link>
+ <title>Öèòàòà #414909</title>
+ <pubDate>Mon, 26 Dec 2011 13:11:56 +0400</pubDate>
+ <description><![CDATA[xxx: Äàé ôëîìàñòåð, ïàëåö ïîêðàñèòü!<br>yyy: Çà÷åì?<br>xxx: Èäó â ãîñòè, à ó ìåíÿ íîñîê äûðÿâûé!]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">b9674cdf642593a5c193c3262031513822c50bcb950170cc07aadfb7fddc2649</guid>
+ <link>http://bash.org.ru/quote/414908</link>
+ <title>Öèòàòà #414908</title>
+ <pubDate>Mon, 26 Dec 2011 13:11:02 +0400</pubDate>
+ <description><![CDATA[*  ÷àò âõîäèò Âàçåëèí.<br>Âàçåëèí: ñòóäåíòû, ÿ ïðèøåë<br>Âàçåëèí: êîìó ñêîëüêî?<br>Âàçåëèí: ïîðà áû óæå çàêàçûâàòü]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">f5e384c1050a5d6df2cbe999fbae0e082deda5e89839ad0a913b490b3fada8c0</guid>
+ <link>http://bash.org.ru/quote/414907</link>
+ <title>Öèòàòà #414907</title>
+ <pubDate>Mon, 26 Dec 2011 12:46:14 +0400</pubDate>
+ <description><![CDATA[õõõ: ãóëÿëè ñ ðåáåíêîì â ïàðêå, êîðìèëè óòî÷åê<br>õõõ: ñíà÷àëà èõ áûëî íåñêîëüêî øòóê, ïîòîì ïîäïëûëè åùå, íåêîòîðûå ïèêèðîâàëè ñ âîçäóõà)))<br>õõõ: ïðèëè÷íîå êîëè÷åñòâî ñîáðàëîñü, â îáùåì, íåêîòîðûå âûëåçëè íà áåðåã è ïîäîøëè ê íàì ïî÷òè âïëîòíóþ<br>õõõ: â êàêîé-òî ìîìåíò ìíå ñòàëî ñòðåìíî, ÷òî áóëêà êîí÷àåòñÿ]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">71aba0126bc495b6efcd494e8b95c11b4e27fadb96f8fa31475db7aa85c7f1a4</guid>
+ <link>http://bash.org.ru/quote/414906</link>
+ <title>Öèòàòà #414906</title>
+ <pubDate>Mon, 26 Dec 2011 12:45:14 +0400</pubDate>
+ <description><![CDATA[xxx: &quot;Åñëè âû ÷èòàëè ðîìàí Æþëÿ Âåðíà èëè õîòÿ áû ñìîòðåëè ôèëüì ñ îäíîèì¸ííûì íàçâàíèåì, òî áóäåòå íå òî ÷òîáû ðàçî÷àðîâàííû, âû, ìÿãêî ãîâîðÿ, áóäåòå øîêèðîâàíû óâèäåííûì, íà÷èíàÿ ñ ïåðâûõ ñåêóíä ôèëüìà&quot;<br><br>xxx: êòî áû áëÿòü ìîã ïîäóìàòü, ÷òî èìåííî òàê íà÷èíàåòñÿ ðåöåíçèÿ ê ôèëüìó Ìóøêåò¸ðû...]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">3d3b28ac59593143fe32ecbb4c5df048f39482f38d336d6dc4ad119ffbeea78b</guid>
+ <link>http://bash.org.ru/quote/414905</link>
+ <title>Öèòàòà #414905</title>
+ <pubDate>Mon, 26 Dec 2011 12:44:01 +0400</pubDate>
+ <description><![CDATA[xxx: à âåäóùèé ïðîãðàììèñò - ýòî òàêîé ïðîãðàììèñò, êîòîðûé ìîæåò ðåøèòü ëþáóþ ïîñòàâëåííóþ çàäà÷ó åãî ïðîôèëÿ ñàìîñòîÿòåëüíî<br>yyy: íî íå õî÷åò )]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">2931790e946054e81789e63e91d5dc9237bf492d3f26c6d7bc530b59ef2672fe</guid>
+ <link>http://bash.org.ru/quote/414904</link>
+ <title>Öèòàòà #414904</title>
+ <pubDate>Mon, 26 Dec 2011 12:13:01 +0400</pubDate>
+ <description><![CDATA[xxx: Ïîãîäèòå, íà àíäðîèäå ïðîõîäèò àâòîðèçàöèÿ ïî ðàñïîçíàâàíèþ ëèöà? Òî åñòü, åñëè ìíå íàáüþò ìîðäó, ÿ íå ñìîãó â ñêîðóþ ïîçâîíèòü?<br>yyy: Áîþñü, ÷òî íàáèòèå ìîðäû è îòú¸ì ñìàðòôîíà - ñîáûòèÿ ñèëüíî ñêîððåëèðîâàííûå, òàê ÷òî Âàøà ïðîáëåìà íåñêîëüêî íàäóìàííà. :)]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">5ee6027cf4758aa3989a3552db60d21acfc4bce66518265e9137abc3ce1fc3c7</guid>
+ <link>http://bash.org.ru/quote/414903</link>
+ <title>Öèòàòà #414903</title>
+ <pubDate>Mon, 26 Dec 2011 11:46:01 +0400</pubDate>
+ <description><![CDATA[leon:<br>Ñåãîäíÿ îòâîæó ðåáåíêà â øêîëó, à òàì ñòåíä íîâûé ïîâåñèëè ñ ôîòîãðàôèÿìè ó÷èòåëåé. Îçàãëàâëåíî ãîðäî &quot;Ñåðäöå íàøåé øêîëû!&quot;. Ðÿäîì ñ ôîòîãðàôèåé òðóäîâèêà â áåðåòå, ìàðêåðîì ñòðåëî÷êà è íàäïèñü &quot;ýòî ïå÷åíü&quot;.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">a47fdbea7602bfa4df71054ed3d391d00a1c0dd13f8adaa983bb5f93e5ac3d90</guid>
+ <link>http://bash.org.ru/quote/414902</link>
+ <title>Öèòàòà #414902</title>
+ <pubDate>Mon, 26 Dec 2011 11:13:01 +0400</pubDate>
+ <description><![CDATA[xxx: áåçðàáîòíûé ñòóäåíò âñåì ñâîèì âèäîì äîêàçûâàåò íàì, ÷òî ìèíèìàëüíîãî ðàçìåðà îïëàòû òðóäà íå ñóùåñòâóåò.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">bc8b51fdf44d63edc888ad063db2fa66d1ad92c48d999408fff00a8cbec8e4ae</guid>
+ <link>http://bash.org.ru/quote/414901</link>
+ <title>Öèòàòà #414901</title>
+ <pubDate>Mon, 26 Dec 2011 10:46:12 +0400</pubDate>
+ <description><![CDATA[Psihodel: ñåãîäíÿ ñ óòðà ïðèøëà ñìñ &quot;Ìàì êèíü óòðîì íà ìòñ õõõ-õõ-õõ-õõ 950ð. Ìíå íå çâîíè. Ïîçæå îáúÿñíþ.&quot; ×åðåç ÷àñ ìíå æåíà ñîîáùàåò, ÷òî îíà áåðåìåííà. Òåïåðü ÿ ïîíÿë, ïî÷åìó íå íàäî çâîíèòü. Âîò ëåò ÷åðåç 5 óçíàþ, çà÷åì åìó íàäî áûëî 950ð.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">e5174f709f5372c11eaf170b06efe25bf23fd3a65dbc9669e7b55b83ad598340</guid>
+ <link>http://bash.org.ru/quote/414900</link>
+ <title>Öèòàòà #414900</title>
+ <pubDate>Mon, 26 Dec 2011 10:45:01 +0400</pubDate>
+ <description><![CDATA[xxx: Çàâòðà âñòðå÷à îäíîãðóïïíèêîâ. â 16:00 â Ïàáå íà Òàãàíêå. Íó ÷åãî, òû áóäåøü ?<br>yyy: Âîäêó<br>yyy: Äóìàþ ÿ îòâåòèë ñðàçó íà äâà âîïðîñà]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">0f5c7eaee411484a37e8071fb60030eb902f42a26969363233116d425faec446</guid>
+ <link>http://bash.org.ru/quote/414899</link>
+ <title>Öèòàòà #414899</title>
+ <pubDate>Mon, 26 Dec 2011 10:12:34 +0400</pubDate>
+ <description><![CDATA[Íàñòîÿùèé ðàäèîëþáèòåëü, îòêðûâ ñïè÷å÷íûé êîðîáîê è îáíàðóæèâ òàì ñïè÷êè, ñìîòðèò íà íèõ Ñ ÓÄÈÂËÅÍÈÅÌ]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">1941999057f97da275dbaee167f5314de54a3de0f1ccc0f25c983cfe08845e71</guid>
+ <link>http://bash.org.ru/quote/414898</link>
+ <title>Öèòàòà #414898</title>
+ <pubDate>Mon, 26 Dec 2011 10:12:01 +0400</pubDate>
+ <description><![CDATA[xxx: Åñëè â âàøåé æèçíè ïîñòîÿííî ïðîèñõîäèò êàêàÿ-òî õåðíÿ, òî ñòîèò çàäóìàòüñÿ, à íå âû ëè òà ñàìàÿ õåðíÿ.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">1493df9ec128867419e1c9e0f8adf1e7c73eaecba9ba81e51395778f2c599faf</guid>
+ <link>http://bash.org.ru/quote/414897</link>
+ <title>Öèòàòà #414897</title>
+ <pubDate>Mon, 26 Dec 2011 09:46:15 +0400</pubDate>
+ <description><![CDATA[õõõ: ïëîõàÿ ýòî èäåÿ, ñ äåòñêèìè äîìàøíèìè ïðàçäíèêàìè.<br>óóó: äà ïî÷åìó? ó ìåíÿ çíàêîìûå ýòèì êàæäûå ïðàçäíèêè çàíèìàþòñÿ. âïîëíå íåïëîõî äëÿ ïîäðàáîòêè, âåñåëî + ñðàçó äåíüãè â êàðìàíå.<br>õõõ: ïàðó ëåò íàçàä ìû ñ ïîäðóãîé òîæå ðàçäîáûëè íîâîãîäíèõ êîñòþìîâ, íàïèñàëè âåñåëûé ñöåíàðèé è ðàçâåñëèëè îáúÿâëåíèÿ: &quot;Âîëøåáíîå íîâîãîäíåå ïðèêëþ÷åíèå îò ñåñòðè÷åê-Ñíåãóðî÷åê â âàøåì äîìå&quot;.<br>õõõ: àõ âû ìîè íåèñïîð÷åííûå!<br>óóó: àãà, âñå ïðàâèëüíî ïîíÿë.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">507045f7af9d1dbc586b1ea528ecc9edb09ea5a1f35dab1141afc0dee491c7f2</guid>
+ <link>http://bash.org.ru/quote/414896</link>
+ <title>Öèòàòà #414896</title>
+ <pubDate>Mon, 26 Dec 2011 09:45:01 +0400</pubDate>
+ <description><![CDATA[CKuB: ÇÀß, áëÿ! Ïåðåëîæèòü âñå ãîâíî íà ìîþ ïîëêó - ýòî íå òî, ÷òî ÿ èìåë â âèäó, ïðîñÿ íàâåñòè ïîðÿäîê ó ñåáÿ íà ïîëêå!]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">e4f30a21e7ffa737cc164ea71ddf1fe24a2c87b269a1b47db1dbf591ebe3e843</guid>
+ <link>http://bash.org.ru/quote/414895</link>
+ <title>Öèòàòà #414895</title>
+ <pubDate>Mon, 26 Dec 2011 09:12:45 +0400</pubDate>
+ <description><![CDATA[xxx: Àäìèíñêàÿ ïðèìåòà.<br>xxx: Åñëè 12-ëåòíèé ñûí íà÷àëüíèêà èäåò â ñåðâåðíóþ - ê áîëüøîé áåäå.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">0ac1bcd3e77c115764edf2fef78568d7e88f0dcfa2830ebff7a4a67ca246192b</guid>
+ <link>http://bash.org.ru/quote/414894</link>
+ <title>Öèòàòà #414894</title>
+ <pubDate>Mon, 26 Dec 2011 09:11:52 +0400</pubDate>
+ <description><![CDATA[Vegyja: ðîìàíòèêà - ÷åì åå ìåíüøå, òåì ëó÷øå. åñëè ïàðåíü òîëüêî è äåëàåò, ÷òî ñòðàäàåò òàêîé ôèãíåé... âîïðîñ âîçíèêàåò: à ìóæ÷èíà ëè îí?<br>Telecantrelem: À åñëè ïðåäëîæèòü äåâóøêå áóòåðáðîä ñ êîëáàñîé - ýòî ðîìàíòèêà?<br>1143r: Telecantrelem, â îïðåäåëåííûõ îáñòîÿòåëüñòâàõ ýòî î÷åíü äàæå ðîìàíòè÷íî. Íàïðèìåð, Îíà âûïèëà ñòàêàí ñàìîãîíó, à çàêóñèòü íå÷åì. À òóò òû ñ áóòåðîì. Îïà! Íà, åøü!]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">0b0d1ae0708037d49d4edd71c8e1d7a488907c379787b7827be44ba7adab6cef</guid>
+ <link>http://bash.org.ru/quote/414893</link>
+ <title>Öèòàòà #414893</title>
+ <pubDate>Mon, 26 Dec 2011 09:11:01 +0400</pubDate>
+ <description><![CDATA[Èç îáúÿñíèòåëüíîé çàïèñêè:<br><br>12.12 íà ñêëàäå ¹4 áûë ðàçãðóæåí ëàìèíàò &quot;...&quot; ñ áîëüøèì êîëè÷åñòâîì áðàêà. Ïà÷êè áûëè îòñîðòèðîâàíû ìíîé è ïîäïèñàíû, õîðîøèå ïà÷êè &quot;Õ&quot;, à ïëîõèå ïà÷êè &quot;Ï&quot;. Ïðè âîçâðàòå òîâàðà ïîñòàâùèêó, íà÷àëüíèê ñêëàäà îøèáî÷íî ïîñ÷èòàë, ÷òî &quot;Õ&quot; îçíà÷àåò &quot;õó¸âûå&quot;, à &quot;Ï&quot; îçíà÷àåò &quot;ïèçäàòûå&quot;, ÷òî â êîðíå ìåíÿëî ñèòóàöèþ. Ãðóç÷èêè åãî ïîääåðæàëè è íà âîçâðàò áûë îòãðóæåí êà÷åñòâåííûé òîâàð. Âèíîâíûì â äàííîì èíöèäåíòå ñåáÿ íå ïðèçíàþ, óñëóãè òðàíñïîðòíîé êîìïàíèè îïëà÷èâàòü îòêàçûâàþñü.]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">4caeec3b83a23c4ef7e6822f1b9151c62dd719538f9719fd9dc49079edf12869</guid>
+ <link>http://bash.org.ru/quote/414892</link>
+ <title>Öèòàòà #414892</title>
+ <pubDate>Mon, 26 Dec 2011 08:46:01 +0400</pubDate>
+ <description><![CDATA[Ëåíà: ÷òî äåëàòü, åñëè êîò ñïèò, ÿ îäíà äîìà, à íà êóõíå ãðîõîò?<br>Îëåã: êèíü òóäà êîòà)]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">533d63288a28594dd6858f5eb212c9fd62c95da02ef6c532902585a525f78b2e</guid>
+ <link>http://bash.org.ru/quote/414891</link>
+ <title>Öèòàòà #414891</title>
+ <pubDate>Mon, 26 Dec 2011 08:13:01 +0400</pubDate>
+ <description><![CDATA[îí: Ðàññêàæè ìíå ñêàçêó<br>îíà: Æèëà-áûëà íåêàÿ ôóíêöèÿ ýô îò èêñ, è áûëà îíà äèôôåðåíöèðóåìà íà âñåé ýïñèëîí-îêðåñòíîñòè íåêîé òî÷êè èêñ íóëåâîå<br>îíà: Ó ìåíÿ ÷èñëåííûå ìåòîäû )<br>îíà: Èçâèíè )]]></description>
+ </item>
+ <item>
+ <guid isPermaLink="false">92cf655d26cbe5d10b1af532ab4abb491a0d74ae9759cb81cd6dd4bb84a1d2bc</guid>
+ <link>http://bash.org.ru/quote/414890</link>
+ <title>Öèòàòà #414890</title>
+ <pubDate>Sun, 25 Dec 2011 09:13:01 +0400</pubDate>
+ <description><![CDATA[ñìñ èç î÷åðåäè ê âðà÷ó<br><br>õõõ: Ìàìà, çà ÷àñ ïðèíÿëè òîëüêî äâóõ áîëüíûõ è îíè äî ñèõ ïîð òàì. ïåðåäî ìíîé 12 çëûõ è îïàñíûõ áàáóøåê, êîòîðûå óæå óñïåëè çàêàòèòü äâà ñêàíäàëà ñ ïðèìåíåíèåì äâåðè è ãðóáîé ôèçè÷åñêîé ñèëû òåì, êòî ïûòàëñÿ ïðîéòè áåç î÷åðåäè. Ïîä÷¸ðêèâàþ: ÏÛÒÀËÑß! Ìíå åñòü ñìûñë ñèäåòü äàëüøå?]]></description>
+ </item>
+ </channel>
+</rss> \ No newline at end of file
diff --git a/plugins/NewsAggregator/docs/ToDo.txt b/plugins/NewsAggregator/docs/ToDo.txt
new file mode 100644
index 0000000000..fa08c1a5f3
--- /dev/null
+++ b/plugins/NewsAggregator/docs/ToDo.txt
@@ -0,0 +1,11 @@
+Ïàðñèòü xml
+ýêñïîðò\èìïîðò
+àâòîèìïîðò èç ôàéëà
+àâòîðèçàöèÿ
+çàìåíà âñåãî html'íîãî
+
+xml parse
+contacts export\import
+autoimport from file service
+authorization
+replace all html to text \ No newline at end of file
diff --git a/plugins/NewsAggregator/proto_newsaggr/Proto_NewsAggr.vcxproj b/plugins/NewsAggregator/proto_newsaggr/Proto_NewsAggr.vcxproj
new file mode 100644
index 0000000000..0b4c2702ce
--- /dev/null
+++ b/plugins/NewsAggregator/proto_newsaggr/Proto_NewsAggr.vcxproj
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{B97882DC-7462-41DB-A390-BDFCE5295265}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\Icons\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64\Icons\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\Obj\$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64\Obj\$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\Icons\</OutDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64\Icons\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\Obj\$(ProjectName)\</IntDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64\Obj\$(ProjectName)\</IntDir>
+ <IgnoreImportLibrary>true</IgnoreImportLibrary>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <NoEntryPoint>true</NoEntryPoint>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <AdditionalLibraryDirectories>$(SolutionDir)\lib</AdditionalLibraryDirectories>
+ </Link>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..\include\msapi</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <NoEntryPoint>true</NoEntryPoint>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <AdditionalLibraryDirectories>$(SolutionDir)\lib</AdditionalLibraryDirectories>
+ </Link>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..\include\msapi</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <NoEntryPoint>true</NoEntryPoint>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <AdditionalLibraryDirectories>$(SolutionDir)\lib</AdditionalLibraryDirectories>
+ </Link>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..\include\msapi</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <NoEntryPoint>true</NoEntryPoint>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <AdditionalLibraryDirectories>$(SolutionDir)\lib</AdditionalLibraryDirectories>
+ </Link>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\..\include\msapi</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="src\resource.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="res\Proto_NewsAggr.rc" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/plugins/NewsAggregator/proto_newsaggr/Proto_NewsAggr.vcxproj.filters b/plugins/NewsAggregator/proto_newsaggr/Proto_NewsAggr.vcxproj.filters
new file mode 100644
index 0000000000..e32e34e0dc
--- /dev/null
+++ b/plugins/NewsAggregator/proto_newsaggr/Proto_NewsAggr.vcxproj.filters
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="src\resource.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="res\Proto_NewsAggr.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/plugins/NewsAggregator/proto_newsaggr/res/Offline.ico b/plugins/NewsAggregator/proto_newsaggr/res/Offline.ico
new file mode 100644
index 0000000000..91788e73e7
--- /dev/null
+++ b/plugins/NewsAggregator/proto_newsaggr/res/Offline.ico
Binary files differ
diff --git a/plugins/NewsAggregator/proto_newsaggr/res/Online.ico b/plugins/NewsAggregator/proto_newsaggr/res/Online.ico
new file mode 100644
index 0000000000..3629737fda
--- /dev/null
+++ b/plugins/NewsAggregator/proto_newsaggr/res/Online.ico
Binary files differ
diff --git a/plugins/NewsAggregator/proto_newsaggr/res/Proto_NewsAggr.rc b/plugins/NewsAggregator/proto_newsaggr/res/Proto_NewsAggr.rc
new file mode 100644
index 0000000000..3eaac4e99b
--- /dev/null
+++ b/plugins/NewsAggregator/proto_newsaggr/res/Proto_NewsAggr.rc
Binary files differ
diff --git a/plugins/NewsAggregator/proto_newsaggr/src/resource.h b/plugins/NewsAggregator/proto_newsaggr/src/resource.h
new file mode 100644
index 0000000000..c6b804fd4e
--- /dev/null
+++ b/plugins/NewsAggregator/proto_newsaggr/src/resource.h
Binary files differ