diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..2d99c50
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,4 @@
+[submodule "submodules/OPMLCore.NET"]
+ path = submodules/OPMLCore.NET
+ url = https://github.com/fnya/OPMLCore.NET
+ branch = master
diff --git a/src/.gitignore b/src/.gitignore
new file mode 100644
index 0000000..c779b69
--- /dev/null
+++ b/src/.gitignore
@@ -0,0 +1,364 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Ww][Ii][Nn]32/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# ASP.NET Scaffolding
+ScaffoldingReadMe.txt
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Coverlet is a free, cross platform Code Coverage Tool
+coverage*.json
+coverage*.xml
+coverage*.info
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+# Ionide (cross platform F# VS Code tools) working folder
+.ionide/
+
+# Fody - auto-generated XML schema
+FodyWeavers.xsd
+
+[Ss]ubmodules/*
\ No newline at end of file
diff --git a/src/.gitkeep b/src/.gitkeep
deleted file mode 100644
index 8b13789..0000000
--- a/src/.gitkeep
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/.gitmodules b/src/.gitmodules
new file mode 100644
index 0000000..2d99c50
--- /dev/null
+++ b/src/.gitmodules
@@ -0,0 +1,4 @@
+[submodule "submodules/OPMLCore.NET"]
+ path = submodules/OPMLCore.NET
+ url = https://github.com/fnya/OPMLCore.NET
+ branch = master
diff --git a/src/App.config b/src/App.config
new file mode 100644
index 0000000..775e457
--- /dev/null
+++ b/src/App.config
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AppProps.cs b/src/AppProps.cs
new file mode 100644
index 0000000..b93c359
--- /dev/null
+++ b/src/AppProps.cs
@@ -0,0 +1,26 @@
+using Cordial.Models;
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+namespace Cordial
+{
+ public class AppProps
+ {
+ public static string AppName = "Cordial";
+ public static string CreatorName = "exsersewo";
+ public static string AppFullName = Path.Combine(CreatorName, AppName).Replace("\\", "/");
+ public static readonly string BaseDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), AppFullName);
+ public static readonly string LogDirectory = Path.Combine(BaseDirectory, "logs");
+ public static readonly string ConfigurationDirectory = Path.Combine(BaseDirectory, "config");
+ public static readonly string DefaultPodcastDownloadDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyMusic), "Podcasts");
+ public static readonly string RepoUrl = Path.Combine("https://github.com", AppFullName);
+ public static string[] Contributors = new[] { CreatorName };
+ public static List OpenSourceProjects = new List
+ {
+ new GithubStruct("fnya", "https://github.com/fnya/OPMLCore.NET"),
+ new GithubStruct("Argotic team", "https://github.com/argotic-syndication-framework/Argotic"),
+ new GithubStruct("GitHub", "https://github.com/octokit/octokit.net")
+ };
+ }
+}
diff --git a/src/Cordial.csproj b/src/Cordial.csproj
new file mode 100644
index 0000000..57efcca
--- /dev/null
+++ b/src/Cordial.csproj
@@ -0,0 +1,224 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {7385FD85-EE39-4DB2-9853-7AD2736FAB18}
+ WinExe
+ Cordial
+ Cordial
+ v4.7.2
+ 512
+ true
+ true
+ false
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 0.1.0.%2a
+ false
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ bin\PreRelease\
+ TRACE;PRERELEASE
+ true
+ pdbonly
+ AnyCPU
+ 7.3
+ prompt
+ true
+
+
+ bin\PreRelease Debug\
+ TRACE;PRERELEASE; DEBUG
+ false
+ pdbonly
+ AnyCPU
+ 7.3
+ prompt
+ false
+
+
+ Cordial.Program
+
+
+
+ packages\Argotic.Common.2008.0.2.0\lib\Net35\Argotic.Common.dll
+
+
+ packages\Argotic.Core.2008.0.2.0\lib\Net35\Argotic.Core.dll
+
+
+ packages\Argotic.Extensions.2008.0.2.0\lib\Net35\Argotic.Extensions.dll
+
+
+ packages\Argotic.Web.2008.0.2.0\lib\Net35\Argotic.Web.dll
+
+
+ packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll
+
+
+ packages\Octokit.0.48.0\lib\net46\Octokit.dll
+
+
+
+ packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll
+
+
+
+ packages\System.Memory.4.5.4\lib\net461\System.Memory.dll
+
+
+
+ packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll
+
+
+ packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll
+
+
+ packages\System.Text.Encodings.Web.5.0.0\lib\net461\System.Text.Encodings.Web.dll
+
+
+ packages\System.Text.Json.5.0.0\lib\net461\System.Text.Json.dll
+
+
+ packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll
+
+
+ packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ en-gb.resx
+
+
+ True
+ True
+ nl-nl.resx
+
+
+ ResXFileCodeGenerator
+
+
+ Form1.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+ ResXFileCodeGenerator
+ en-gb.Designer.cs
+
+
+ ResXFileCodeGenerator
+ nl-nl.Designer.cs
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+ {e015f989-878b-4ff6-a9d2-724abbe9a959}
+ OPMLCore.NET
+
+
+
+
+
+
+
+ False
+ Microsoft .NET Framework 4.7.2 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+ XCOPY "$(SolutionDir)\Resources" "$(TargetDir)\Resources\" /S /Y
+RD /S /Q "$(TargetDir)\Resources\Icon"
+DEL "$(TargetDir)\Resources\Languages\*.cs"
+
+
+ RD /S /Q "$(TargetDir)\Resources\"
+
+
\ No newline at end of file
diff --git a/src/Cordial.sln b/src/Cordial.sln
new file mode 100644
index 0000000..6c50199
--- /dev/null
+++ b/src/Cordial.sln
@@ -0,0 +1,41 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30615.102
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cordial", "Cordial.csproj", "{7385FD85-EE39-4DB2-9853-7AD2736FAB18}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OPMLCore.NET", "submodules\OPMLCore.NET\src\OPMLCore.NET\OPMLCore.NET.csproj", "{E015F989-878B-4FF6-A9D2-724ABBE9A959}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ PreRelease Debug|Any CPU = PreRelease Debug|Any CPU
+ PreRelease|Any CPU = PreRelease|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7385FD85-EE39-4DB2-9853-7AD2736FAB18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7385FD85-EE39-4DB2-9853-7AD2736FAB18}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7385FD85-EE39-4DB2-9853-7AD2736FAB18}.PreRelease Debug|Any CPU.ActiveCfg = PreRelease Debug|Any CPU
+ {7385FD85-EE39-4DB2-9853-7AD2736FAB18}.PreRelease Debug|Any CPU.Build.0 = PreRelease Debug|Any CPU
+ {7385FD85-EE39-4DB2-9853-7AD2736FAB18}.PreRelease|Any CPU.ActiveCfg = PreRelease|Any CPU
+ {7385FD85-EE39-4DB2-9853-7AD2736FAB18}.PreRelease|Any CPU.Build.0 = PreRelease|Any CPU
+ {7385FD85-EE39-4DB2-9853-7AD2736FAB18}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7385FD85-EE39-4DB2-9853-7AD2736FAB18}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E015F989-878B-4FF6-A9D2-724ABBE9A959}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E015F989-878B-4FF6-A9D2-724ABBE9A959}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E015F989-878B-4FF6-A9D2-724ABBE9A959}.PreRelease Debug|Any CPU.ActiveCfg = PreRelease Debug|Any CPU
+ {E015F989-878B-4FF6-A9D2-724ABBE9A959}.PreRelease Debug|Any CPU.Build.0 = PreRelease Debug|Any CPU
+ {E015F989-878B-4FF6-A9D2-724ABBE9A959}.PreRelease|Any CPU.ActiveCfg = PreRelease|Any CPU
+ {E015F989-878B-4FF6-A9D2-724ABBE9A959}.PreRelease|Any CPU.Build.0 = PreRelease|Any CPU
+ {E015F989-878B-4FF6-A9D2-724ABBE9A959}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E015F989-878B-4FF6-A9D2-724ABBE9A959}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {037502FE-ECE8-4F20-9416-31EB1732ADDC}
+ EndGlobalSection
+EndGlobal
diff --git a/src/External/MessageBoxManager.cs b/src/External/MessageBoxManager.cs
new file mode 100644
index 0000000..5915d43
--- /dev/null
+++ b/src/External/MessageBoxManager.cs
@@ -0,0 +1,225 @@
+/*
+ * @Author Alex C. Duma
+ * @Url https://www.codeproject.com/Articles/18399/Localizing-System-MessageBox
+ * @Date 2 May 2007
+ * @License CPOL 1.02 https://www.codeproject.com/info/cpol10.aspx
+ */
+
+#pragma warning disable 0618
+using System.Runtime.InteropServices;
+using System.Security.Permissions;
+using System.Text;
+
+[assembly: SecurityPermission(SecurityAction.RequestMinimum, UnmanagedCode = true)]
+namespace System.Windows.Forms
+{
+ public class MessageBoxManager
+ {
+ private delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam);
+ private delegate bool EnumChildProc(IntPtr hWnd, IntPtr lParam);
+
+ private const int WH_CALLWNDPROCRET = 12;
+ private const int WM_DESTROY = 0x0002;
+ private const int WM_INITDIALOG = 0x0110;
+ private const int WM_TIMER = 0x0113;
+ private const int WM_USER = 0x400;
+ private const int DM_GETDEFID = WM_USER + 0;
+
+ private const int MBOK = 1;
+ private const int MBCancel = 2;
+ private const int MBAbort = 3;
+ private const int MBRetry = 4;
+ private const int MBIgnore = 5;
+ private const int MBYes = 6;
+ private const int MBNo = 7;
+
+
+ [DllImport("user32.dll")]
+ private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
+
+ [DllImport("user32.dll")]
+ private static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
+
+ [DllImport("user32.dll")]
+ private static extern int UnhookWindowsHookEx(IntPtr idHook);
+
+ [DllImport("user32.dll")]
+ private static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, IntPtr wParam, IntPtr lParam);
+
+ [DllImport("user32.dll", EntryPoint = "GetWindowTextLengthW", CharSet = CharSet.Unicode)]
+ private static extern int GetWindowTextLength(IntPtr hWnd);
+
+ [DllImport("user32.dll", EntryPoint = "GetWindowTextW", CharSet = CharSet.Unicode)]
+ private static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int maxLength);
+
+ [DllImport("user32.dll")]
+ private static extern int EndDialog(IntPtr hDlg, IntPtr nResult);
+
+ [DllImport("user32.dll")]
+ private static extern bool EnumChildWindows(IntPtr hWndParent, EnumChildProc lpEnumFunc, IntPtr lParam);
+
+ [DllImport("user32.dll", EntryPoint = "GetClassNameW", CharSet = CharSet.Unicode)]
+ private static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
+
+ [DllImport("user32.dll")]
+ private static extern int GetDlgCtrlID(IntPtr hwndCtl);
+
+ [DllImport("user32.dll")]
+ private static extern IntPtr GetDlgItem(IntPtr hDlg, int nIDDlgItem);
+
+ [DllImport("user32.dll", EntryPoint = "SetWindowTextW", CharSet = CharSet.Unicode)]
+ private static extern bool SetWindowText(IntPtr hWnd, string lpString);
+
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct CWPRETSTRUCT
+ {
+ public IntPtr lResult;
+ public IntPtr lParam;
+ public IntPtr wParam;
+ public uint message;
+ public IntPtr hwnd;
+ };
+
+ private static HookProc hookProc;
+ private static EnumChildProc enumProc;
+ [ThreadStatic]
+ private static IntPtr hHook;
+ [ThreadStatic]
+ private static int nButton;
+
+ ///
+ /// OK text
+ ///
+ public static string OK = "&OK";
+ ///
+ /// Cancel text
+ ///
+ public static string Cancel = "&Cancel";
+ ///
+ /// Abort text
+ ///
+ public static string Abort = "&Abort";
+ ///
+ /// Retry text
+ ///
+ public static string Retry = "&Retry";
+ ///
+ /// Ignore text
+ ///
+ public static string Ignore = "&Ignore";
+ ///
+ /// Yes text
+ ///
+ public static string Yes = "&Yes";
+ ///
+ /// No text
+ ///
+ public static string No = "&No";
+
+ static MessageBoxManager()
+ {
+ hookProc = new HookProc(MessageBoxHookProc);
+ enumProc = new EnumChildProc(MessageBoxEnumProc);
+ hHook = IntPtr.Zero;
+ }
+
+ ///
+ /// Enables MessageBoxManager functionality
+ ///
+ ///
+ /// MessageBoxManager functionality is enabled on current thread only.
+ /// Each thread that needs MessageBoxManager functionality has to call this method.
+ ///
+ public static void Register()
+ {
+ if (hHook != IntPtr.Zero)
+ throw new NotSupportedException("One hook per thread allowed.");
+ hHook = SetWindowsHookEx(WH_CALLWNDPROCRET, hookProc, IntPtr.Zero, AppDomain.GetCurrentThreadId());
+ }
+
+ ///
+ /// Disables MessageBoxManager functionality
+ ///
+ ///
+ /// Disables MessageBoxManager functionality on current thread only.
+ ///
+ public static void Unregister()
+ {
+ if (hHook != IntPtr.Zero)
+ {
+ UnhookWindowsHookEx(hHook);
+ hHook = IntPtr.Zero;
+ }
+ }
+
+ private static IntPtr MessageBoxHookProc(int nCode, IntPtr wParam, IntPtr lParam)
+ {
+ if (nCode < 0)
+ return CallNextHookEx(hHook, nCode, wParam, lParam);
+
+ CWPRETSTRUCT msg = (CWPRETSTRUCT)Marshal.PtrToStructure(lParam, typeof(CWPRETSTRUCT));
+ IntPtr hook = hHook;
+
+ if (msg.message == WM_INITDIALOG)
+ {
+ int nLength = GetWindowTextLength(msg.hwnd);
+ StringBuilder className = new StringBuilder(10);
+ GetClassName(msg.hwnd, className, className.Capacity);
+ if (className.ToString() == "#32770")
+ {
+ nButton = 0;
+ EnumChildWindows(msg.hwnd, enumProc, IntPtr.Zero);
+ if (nButton == 1)
+ {
+ IntPtr hButton = GetDlgItem(msg.hwnd, MBCancel);
+ if (hButton != IntPtr.Zero)
+ SetWindowText(hButton, OK);
+ }
+ }
+ }
+
+ return CallNextHookEx(hook, nCode, wParam, lParam);
+ }
+
+ private static bool MessageBoxEnumProc(IntPtr hWnd, IntPtr lParam)
+ {
+ StringBuilder className = new StringBuilder(10);
+ GetClassName(hWnd, className, className.Capacity);
+ if (className.ToString() == "Button")
+ {
+ int ctlId = GetDlgCtrlID(hWnd);
+ switch (ctlId)
+ {
+ case MBOK:
+ SetWindowText(hWnd, OK);
+ break;
+ case MBCancel:
+ SetWindowText(hWnd, Cancel);
+ break;
+ case MBAbort:
+ SetWindowText(hWnd, Abort);
+ break;
+ case MBRetry:
+ SetWindowText(hWnd, Retry);
+ break;
+ case MBIgnore:
+ SetWindowText(hWnd, Ignore);
+ break;
+ case MBYes:
+ SetWindowText(hWnd, Yes);
+ break;
+ case MBNo:
+ SetWindowText(hWnd, No);
+ break;
+
+ }
+ nButton++;
+ }
+
+ return true;
+ }
+
+
+ }
+}
\ No newline at end of file
diff --git a/src/Form1.Designer.cs b/src/Form1.Designer.cs
new file mode 100644
index 0000000..7c5daec
--- /dev/null
+++ b/src/Form1.Designer.cs
@@ -0,0 +1,875 @@
+
+namespace Cordial
+{
+ partial class Form1
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ System.Windows.Forms.DataGridView dataGridView1;
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
+ this.fileMenuStrip = new System.Windows.Forms.MenuStrip();
+ this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.importFeedsFromOpmlToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.exportFeedsAsOpmlToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.preferencesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
+ this.closeWindowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.quitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.closeNotificationTray = new System.Windows.Forms.ToolStripMenuItem();
+ this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.checkAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.catchupToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.checkSelectedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+ this.addAFeedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.removeFeedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.feedPropertiesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.schedulerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
+ this.selectLanguageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.checkForUpdateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.reportAProblemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
+ this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.tabControl1 = new System.Windows.Forms.TabControl();
+ this.downloadsPage = new System.Windows.Forms.TabPage();
+ this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
+ this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.removeSelectedButton = new System.Windows.Forms.Button();
+ this.cancelSelectedButton = new System.Windows.Forms.Button();
+ this.statusStrip2 = new System.Windows.Forms.StatusStrip();
+ this.liveDownloadCounter = new System.Windows.Forms.ToolStripStatusLabel();
+ this.downloadSpeed = new System.Windows.Forms.ToolStripStatusLabel();
+ this.subscriptionsPage = new System.Windows.Forms.TabPage();
+ this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
+ this.checkNewButton = new System.Windows.Forms.Button();
+ this.cactchUpButton = new System.Windows.Forms.Button();
+ this.subscriptionSearchBox = new System.Windows.Forms.TextBox();
+ this.checkSelectedButton = new System.Windows.Forms.Button();
+ this.addNewFeed = new System.Windows.Forms.Button();
+ this.feedPropertiesButton = new System.Windows.Forms.Button();
+ this.removeFeedButton = new System.Windows.Forms.Button();
+ this.schedulerButton = new System.Windows.Forms.Button();
+ this.cleanupPage = new System.Windows.Forms.TabPage();
+ this.logPage = new System.Windows.Forms.TabPage();
+ this.logRTB = new System.Windows.Forms.RichTextBox();
+ this.statusStrip1 = new System.Windows.Forms.StatusStrip();
+ this.notificationIcon = new System.Windows.Forms.NotifyIcon(this.components);
+ this.notificationMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+ this.showWindowNotificationMenu = new System.Windows.Forms.ToolStripMenuItem();
+ this.runCheckNotificationMenu = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
+ this.quitNotificationMenu = new System.Windows.Forms.ToolStripMenuItem();
+ this.opmlFileOpen = new System.Windows.Forms.OpenFileDialog();
+ this.opmlFileSave = new System.Windows.Forms.SaveFileDialog();
+ this.nameDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.statusDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.mBDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.locationDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.podcastBindingSource = new System.Windows.Forms.BindingSource(this.components);
+ dataGridView1 = new System.Windows.Forms.DataGridView();
+ ((System.ComponentModel.ISupportInitialize)(dataGridView1)).BeginInit();
+ this.fileMenuStrip.SuspendLayout();
+ this.tabControl1.SuspendLayout();
+ this.downloadsPage.SuspendLayout();
+ this.tableLayoutPanel2.SuspendLayout();
+ this.tableLayoutPanel1.SuspendLayout();
+ this.panel1.SuspendLayout();
+ this.statusStrip2.SuspendLayout();
+ this.subscriptionsPage.SuspendLayout();
+ this.tableLayoutPanel3.SuspendLayout();
+ this.logPage.SuspendLayout();
+ this.notificationMenuStrip.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.podcastBindingSource)).BeginInit();
+ this.SuspendLayout();
+ //
+ // dataGridView1
+ //
+ dataGridView1.AllowUserToAddRows = false;
+ dataGridView1.AllowUserToDeleteRows = false;
+ dataGridView1.AutoGenerateColumns = false;
+ dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+ dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
+ dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
+ dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
+ dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+ this.nameDataGridViewTextBoxColumn,
+ this.statusDataGridViewTextBoxColumn,
+ this.mBDataGridViewTextBoxColumn,
+ this.locationDataGridViewTextBoxColumn});
+ dataGridView1.DataSource = this.podcastBindingSource;
+ dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+ dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;
+ dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;
+ dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ dataGridView1.DefaultCellStyle = dataGridViewCellStyle2;
+ dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
+ dataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;
+ dataGridView1.Location = new System.Drawing.Point(2, 26);
+ dataGridView1.Margin = new System.Windows.Forms.Padding(2);
+ dataGridView1.Name = "dataGridView1";
+ dataGridView1.ReadOnly = true;
+ dataGridView1.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
+ dataGridView1.RowHeadersVisible = false;
+ dataGridView1.RowHeadersWidth = 51;
+ dataGridView1.RowTemplate.Height = 24;
+ dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
+ dataGridView1.ShowCellErrors = false;
+ dataGridView1.ShowEditingIcon = false;
+ dataGridView1.ShowRowErrors = false;
+ dataGridView1.Size = new System.Drawing.Size(796, 436);
+ dataGridView1.TabIndex = 0;
+ //
+ // fileMenuStrip
+ //
+ this.fileMenuStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
+ this.fileMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.fileToolStripMenuItem,
+ this.editToolStripMenuItem,
+ this.viewToolStripMenuItem,
+ this.toolsToolStripMenuItem,
+ this.helpToolStripMenuItem});
+ this.fileMenuStrip.Location = new System.Drawing.Point(0, 0);
+ this.fileMenuStrip.Name = "fileMenuStrip";
+ this.fileMenuStrip.Padding = new System.Windows.Forms.Padding(4, 2, 0, 2);
+ this.fileMenuStrip.Size = new System.Drawing.Size(808, 24);
+ this.fileMenuStrip.TabIndex = 0;
+ this.fileMenuStrip.Text = "menuStrip1";
+ //
+ // fileToolStripMenuItem
+ //
+ this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.importFeedsFromOpmlToolStripMenuItem,
+ this.exportFeedsAsOpmlToolStripMenuItem,
+ this.preferencesToolStripMenuItem,
+ this.toolStripSeparator3,
+ this.closeNotificationTray,
+ this.closeWindowToolStripMenuItem,
+ this.quitToolStripMenuItem});
+ this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
+ this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
+ this.fileToolStripMenuItem.Text = "File";
+ //
+ // importFeedsFromOpmlToolStripMenuItem
+ //
+ this.importFeedsFromOpmlToolStripMenuItem.Name = "importFeedsFromOpmlToolStripMenuItem";
+ this.importFeedsFromOpmlToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
+ | System.Windows.Forms.Keys.O)));
+ this.importFeedsFromOpmlToolStripMenuItem.Size = new System.Drawing.Size(285, 22);
+ this.importFeedsFromOpmlToolStripMenuItem.Text = "Import feeds from opml...";
+ this.importFeedsFromOpmlToolStripMenuItem.Click += new System.EventHandler(this.importFeedsFromOpmlToolStripMenuItem_Click);
+ //
+ // exportFeedsAsOpmlToolStripMenuItem
+ //
+ this.exportFeedsAsOpmlToolStripMenuItem.Name = "exportFeedsAsOpmlToolStripMenuItem";
+ this.exportFeedsAsOpmlToolStripMenuItem.Size = new System.Drawing.Size(285, 22);
+ this.exportFeedsAsOpmlToolStripMenuItem.Text = "Export feeds as opml";
+ this.exportFeedsAsOpmlToolStripMenuItem.Click += new System.EventHandler(this.exportFeedsAsOpmlToolStripMenuItem_Click);
+ //
+ // preferencesToolStripMenuItem
+ //
+ this.preferencesToolStripMenuItem.Name = "preferencesToolStripMenuItem";
+ this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(285, 22);
+ this.preferencesToolStripMenuItem.Text = "Preferences...";
+ //
+ // toolStripSeparator3
+ //
+ this.toolStripSeparator3.Name = "toolStripSeparator3";
+ this.toolStripSeparator3.Size = new System.Drawing.Size(282, 6);
+ //
+ // closeWindowToolStripMenuItem
+ //
+ this.closeWindowToolStripMenuItem.Name = "closeWindowToolStripMenuItem";
+ this.closeWindowToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.W)));
+ this.closeWindowToolStripMenuItem.Size = new System.Drawing.Size(285, 22);
+ this.closeWindowToolStripMenuItem.Text = "Close window";
+ this.closeWindowToolStripMenuItem.Click += new System.EventHandler(this.closeWindowToolStripMenuItem_Click);
+ //
+ // quitToolStripMenuItem
+ //
+ this.quitToolStripMenuItem.Name = "quitToolStripMenuItem";
+ this.quitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Q)));
+ this.quitToolStripMenuItem.Size = new System.Drawing.Size(285, 22);
+ this.quitToolStripMenuItem.Text = "Quit";
+ this.quitToolStripMenuItem.Click += new System.EventHandler(this.quitToolStripMenuItem_Click);
+ //
+ // closeNotificationTray
+ //
+ this.closeNotificationTray.Name = "closeNotificationTray";
+ this.closeNotificationTray.Size = new System.Drawing.Size(285, 22);
+ this.closeNotificationTray.Text = "Close to Notification Try";
+ //
+ // editToolStripMenuItem
+ //
+ this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.selectAllToolStripMenuItem});
+ this.editToolStripMenuItem.Name = "editToolStripMenuItem";
+ this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20);
+ this.editToolStripMenuItem.Text = "Edit";
+ //
+ // selectAllToolStripMenuItem
+ //
+ this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem";
+ this.selectAllToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.A)));
+ this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
+ this.selectAllToolStripMenuItem.Text = "Select all";
+ //
+ // viewToolStripMenuItem
+ //
+ this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
+ this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
+ this.viewToolStripMenuItem.Text = "View";
+ //
+ // toolsToolStripMenuItem
+ //
+ this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.checkAllToolStripMenuItem,
+ this.catchupToolStripMenuItem,
+ this.checkSelectedToolStripMenuItem,
+ this.toolStripSeparator1,
+ this.addAFeedToolStripMenuItem,
+ this.removeFeedToolStripMenuItem,
+ this.feedPropertiesToolStripMenuItem,
+ this.schedulerToolStripMenuItem,
+ this.toolStripSeparator2,
+ this.selectLanguageToolStripMenuItem});
+ this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem";
+ this.toolsToolStripMenuItem.Size = new System.Drawing.Size(47, 20);
+ this.toolsToolStripMenuItem.Text = "Tools";
+ //
+ // checkAllToolStripMenuItem
+ //
+ this.checkAllToolStripMenuItem.Name = "checkAllToolStripMenuItem";
+ this.checkAllToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F5;
+ this.checkAllToolStripMenuItem.Size = new System.Drawing.Size(187, 22);
+ this.checkAllToolStripMenuItem.Text = "Check all";
+ //
+ // catchupToolStripMenuItem
+ //
+ this.catchupToolStripMenuItem.Name = "catchupToolStripMenuItem";
+ this.catchupToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F6;
+ this.catchupToolStripMenuItem.Size = new System.Drawing.Size(187, 22);
+ this.catchupToolStripMenuItem.Text = "Catch-up";
+ //
+ // checkSelectedToolStripMenuItem
+ //
+ this.checkSelectedToolStripMenuItem.Enabled = false;
+ this.checkSelectedToolStripMenuItem.Name = "checkSelectedToolStripMenuItem";
+ this.checkSelectedToolStripMenuItem.Size = new System.Drawing.Size(187, 22);
+ this.checkSelectedToolStripMenuItem.Text = "Check Selected";
+ //
+ // toolStripSeparator1
+ //
+ this.toolStripSeparator1.Name = "toolStripSeparator1";
+ this.toolStripSeparator1.Size = new System.Drawing.Size(184, 6);
+ //
+ // addAFeedToolStripMenuItem
+ //
+ this.addAFeedToolStripMenuItem.Name = "addAFeedToolStripMenuItem";
+ this.addAFeedToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N)));
+ this.addAFeedToolStripMenuItem.Size = new System.Drawing.Size(187, 22);
+ this.addAFeedToolStripMenuItem.Text = "Add a Feed...";
+ //
+ // removeFeedToolStripMenuItem
+ //
+ this.removeFeedToolStripMenuItem.Enabled = false;
+ this.removeFeedToolStripMenuItem.Name = "removeFeedToolStripMenuItem";
+ this.removeFeedToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D)));
+ this.removeFeedToolStripMenuItem.Size = new System.Drawing.Size(187, 22);
+ this.removeFeedToolStripMenuItem.Text = "Remove Feed";
+ //
+ // feedPropertiesToolStripMenuItem
+ //
+ this.feedPropertiesToolStripMenuItem.Enabled = false;
+ this.feedPropertiesToolStripMenuItem.Name = "feedPropertiesToolStripMenuItem";
+ this.feedPropertiesToolStripMenuItem.Size = new System.Drawing.Size(187, 22);
+ this.feedPropertiesToolStripMenuItem.Text = "Feed properties...";
+ //
+ // schedulerToolStripMenuItem
+ //
+ this.schedulerToolStripMenuItem.Name = "schedulerToolStripMenuItem";
+ this.schedulerToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.L)));
+ this.schedulerToolStripMenuItem.Size = new System.Drawing.Size(187, 22);
+ this.schedulerToolStripMenuItem.Text = "Scheduler...";
+ //
+ // toolStripSeparator2
+ //
+ this.toolStripSeparator2.Name = "toolStripSeparator2";
+ this.toolStripSeparator2.Size = new System.Drawing.Size(184, 6);
+ //
+ // selectLanguageToolStripMenuItem
+ //
+ this.selectLanguageToolStripMenuItem.Name = "selectLanguageToolStripMenuItem";
+ this.selectLanguageToolStripMenuItem.Size = new System.Drawing.Size(187, 22);
+ this.selectLanguageToolStripMenuItem.Text = "Select language";
+ //
+ // helpToolStripMenuItem
+ //
+ this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.checkForUpdateToolStripMenuItem,
+ this.reportAProblemToolStripMenuItem,
+ this.toolStripSeparator4,
+ this.aboutToolStripMenuItem});
+ this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
+ this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
+ this.helpToolStripMenuItem.Text = "Help";
+ //
+ // checkForUpdateToolStripMenuItem
+ //
+ this.checkForUpdateToolStripMenuItem.Name = "checkForUpdateToolStripMenuItem";
+ this.checkForUpdateToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.checkForUpdateToolStripMenuItem.Text = "Check for Update....";
+ this.checkForUpdateToolStripMenuItem.Click += new System.EventHandler(this.checkForUpdateToolStripMenuItem_Click);
+ //
+ // reportAProblemToolStripMenuItem
+ //
+ this.reportAProblemToolStripMenuItem.Name = "reportAProblemToolStripMenuItem";
+ this.reportAProblemToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.reportAProblemToolStripMenuItem.Text = "Report a Problem";
+ this.reportAProblemToolStripMenuItem.Click += new System.EventHandler(this.reportAProblemToolStripMenuItem_Click);
+ //
+ // toolStripSeparator4
+ //
+ this.toolStripSeparator4.Name = "toolStripSeparator4";
+ this.toolStripSeparator4.Size = new System.Drawing.Size(177, 6);
+ //
+ // aboutToolStripMenuItem
+ //
+ this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
+ this.aboutToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.aboutToolStripMenuItem.Text = "About";
+ //
+ // tabControl1
+ //
+ this.tabControl1.Controls.Add(this.downloadsPage);
+ this.tabControl1.Controls.Add(this.subscriptionsPage);
+ this.tabControl1.Controls.Add(this.cleanupPage);
+ this.tabControl1.Controls.Add(this.logPage);
+ this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tabControl1.Location = new System.Drawing.Point(0, 24);
+ this.tabControl1.Margin = new System.Windows.Forms.Padding(2);
+ this.tabControl1.Name = "tabControl1";
+ this.tabControl1.SelectedIndex = 0;
+ this.tabControl1.Size = new System.Drawing.Size(808, 490);
+ this.tabControl1.TabIndex = 2;
+ //
+ // downloadsPage
+ //
+ this.downloadsPage.Controls.Add(this.tableLayoutPanel2);
+ this.downloadsPage.Controls.Add(this.statusStrip2);
+ this.downloadsPage.Location = new System.Drawing.Point(4, 22);
+ this.downloadsPage.Margin = new System.Windows.Forms.Padding(2);
+ this.downloadsPage.Name = "downloadsPage";
+ this.downloadsPage.Padding = new System.Windows.Forms.Padding(2);
+ this.downloadsPage.Size = new System.Drawing.Size(800, 464);
+ this.downloadsPage.TabIndex = 0;
+ this.downloadsPage.Text = "Downloads";
+ this.downloadsPage.UseVisualStyleBackColor = true;
+ //
+ // tableLayoutPanel2
+ //
+ this.tableLayoutPanel2.ColumnCount = 2;
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel1, 0, 0);
+ this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Top;
+ this.tableLayoutPanel2.Location = new System.Drawing.Point(2, 2);
+ this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(2);
+ this.tableLayoutPanel2.Name = "tableLayoutPanel2";
+ this.tableLayoutPanel2.RowCount = 1;
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel2.Size = new System.Drawing.Size(796, 41);
+ this.tableLayoutPanel2.TabIndex = 3;
+ //
+ // tableLayoutPanel1
+ //
+ this.tableLayoutPanel1.ColumnCount = 2;
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.46008F));
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 66.53992F));
+ this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);
+ this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.tableLayoutPanel1.Location = new System.Drawing.Point(2, 2);
+ this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(2);
+ this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+ this.tableLayoutPanel1.RowCount = 1;
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel1.Size = new System.Drawing.Size(394, 37);
+ this.tableLayoutPanel1.TabIndex = 2;
+ //
+ // panel1
+ //
+ this.panel1.Controls.Add(this.removeSelectedButton);
+ this.panel1.Controls.Add(this.cancelSelectedButton);
+ this.panel1.Location = new System.Drawing.Point(2, 2);
+ this.panel1.Margin = new System.Windows.Forms.Padding(2);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(127, 32);
+ this.panel1.TabIndex = 4;
+ //
+ // removeSelectedButton
+ //
+ this.removeSelectedButton.Dock = System.Windows.Forms.DockStyle.Right;
+ this.removeSelectedButton.Location = new System.Drawing.Point(15, 0);
+ this.removeSelectedButton.Margin = new System.Windows.Forms.Padding(2);
+ this.removeSelectedButton.Name = "removeSelectedButton";
+ this.removeSelectedButton.Size = new System.Drawing.Size(56, 32);
+ this.removeSelectedButton.TabIndex = 0;
+ this.removeSelectedButton.Text = "button1";
+ this.removeSelectedButton.UseVisualStyleBackColor = true;
+ //
+ // cancelSelectedButton
+ //
+ this.cancelSelectedButton.Dock = System.Windows.Forms.DockStyle.Right;
+ this.cancelSelectedButton.Location = new System.Drawing.Point(71, 0);
+ this.cancelSelectedButton.Margin = new System.Windows.Forms.Padding(2);
+ this.cancelSelectedButton.Name = "cancelSelectedButton";
+ this.cancelSelectedButton.Size = new System.Drawing.Size(56, 32);
+ this.cancelSelectedButton.TabIndex = 1;
+ this.cancelSelectedButton.Text = "button2";
+ this.cancelSelectedButton.UseVisualStyleBackColor = true;
+ //
+ // statusStrip2
+ //
+ this.statusStrip2.ImageScalingSize = new System.Drawing.Size(20, 20);
+ this.statusStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.liveDownloadCounter,
+ this.downloadSpeed});
+ this.statusStrip2.Location = new System.Drawing.Point(2, 440);
+ this.statusStrip2.Name = "statusStrip2";
+ this.statusStrip2.Padding = new System.Windows.Forms.Padding(1, 0, 10, 0);
+ this.statusStrip2.Size = new System.Drawing.Size(796, 22);
+ this.statusStrip2.SizingGrip = false;
+ this.statusStrip2.TabIndex = 1;
+ this.statusStrip2.Text = "statusStrip2";
+ //
+ // liveDownloadCounter
+ //
+ this.liveDownloadCounter.Name = "liveDownloadCounter";
+ this.liveDownloadCounter.Size = new System.Drawing.Size(101, 17);
+ this.liveDownloadCounter.Text = "Live downloads: 0";
+ //
+ // downloadSpeed
+ //
+ this.downloadSpeed.Name = "downloadSpeed";
+ this.downloadSpeed.Size = new System.Drawing.Size(139, 17);
+ this.downloadSpeed.Text = "Download speed: 0.0kB/s";
+ //
+ // subscriptionsPage
+ //
+ this.subscriptionsPage.Controls.Add(dataGridView1);
+ this.subscriptionsPage.Controls.Add(this.tableLayoutPanel3);
+ this.subscriptionsPage.Location = new System.Drawing.Point(4, 22);
+ this.subscriptionsPage.Margin = new System.Windows.Forms.Padding(2);
+ this.subscriptionsPage.Name = "subscriptionsPage";
+ this.subscriptionsPage.Padding = new System.Windows.Forms.Padding(2);
+ this.subscriptionsPage.Size = new System.Drawing.Size(800, 464);
+ this.subscriptionsPage.TabIndex = 1;
+ this.subscriptionsPage.Text = "Subscriptions";
+ this.subscriptionsPage.UseVisualStyleBackColor = true;
+ //
+ // tableLayoutPanel3
+ //
+ this.tableLayoutPanel3.AutoSize = true;
+ this.tableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.tableLayoutPanel3.ColumnCount = 10;
+ this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10F));
+ this.tableLayoutPanel3.Controls.Add(this.checkNewButton, 1, 0);
+ this.tableLayoutPanel3.Controls.Add(this.cactchUpButton, 2, 0);
+ this.tableLayoutPanel3.Controls.Add(this.subscriptionSearchBox, 8, 0);
+ this.tableLayoutPanel3.Controls.Add(this.checkSelectedButton, 6, 0);
+ this.tableLayoutPanel3.Controls.Add(this.addNewFeed, 3, 0);
+ this.tableLayoutPanel3.Controls.Add(this.feedPropertiesButton, 5, 0);
+ this.tableLayoutPanel3.Controls.Add(this.removeFeedButton, 4, 0);
+ this.tableLayoutPanel3.Controls.Add(this.schedulerButton, 7, 0);
+ this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Top;
+ this.tableLayoutPanel3.Location = new System.Drawing.Point(2, 2);
+ this.tableLayoutPanel3.Margin = new System.Windows.Forms.Padding(2);
+ this.tableLayoutPanel3.Name = "tableLayoutPanel3";
+ this.tableLayoutPanel3.RowCount = 1;
+ this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel3.Size = new System.Drawing.Size(796, 24);
+ this.tableLayoutPanel3.TabIndex = 1;
+ //
+ // checkNewButton
+ //
+ this.checkNewButton.Dock = System.Windows.Forms.DockStyle.Right;
+ this.checkNewButton.Location = new System.Drawing.Point(100, 2);
+ this.checkNewButton.Margin = new System.Windows.Forms.Padding(2);
+ this.checkNewButton.Name = "checkNewButton";
+ this.checkNewButton.Size = new System.Drawing.Size(56, 20);
+ this.checkNewButton.TabIndex = 0;
+ this.checkNewButton.Text = "Check for new podcasts";
+ this.checkNewButton.UseVisualStyleBackColor = true;
+ //
+ // cactchUpButton
+ //
+ this.cactchUpButton.Dock = System.Windows.Forms.DockStyle.Right;
+ this.cactchUpButton.Location = new System.Drawing.Point(179, 2);
+ this.cactchUpButton.Margin = new System.Windows.Forms.Padding(2);
+ this.cactchUpButton.Name = "cactchUpButton";
+ this.cactchUpButton.Size = new System.Drawing.Size(56, 20);
+ this.cactchUpButton.TabIndex = 1;
+ this.cactchUpButton.Text = "Catch-up";
+ this.cactchUpButton.UseVisualStyleBackColor = true;
+ //
+ // subscriptionSearchBox
+ //
+ this.subscriptionSearchBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)));
+ this.subscriptionSearchBox.Location = new System.Drawing.Point(634, 2);
+ this.subscriptionSearchBox.Margin = new System.Windows.Forms.Padding(2);
+ this.subscriptionSearchBox.Name = "subscriptionSearchBox";
+ this.subscriptionSearchBox.Size = new System.Drawing.Size(75, 20);
+ this.subscriptionSearchBox.TabIndex = 7;
+ //
+ // checkSelectedButton
+ //
+ this.checkSelectedButton.Dock = System.Windows.Forms.DockStyle.Right;
+ this.checkSelectedButton.Enabled = false;
+ this.checkSelectedButton.Location = new System.Drawing.Point(495, 2);
+ this.checkSelectedButton.Margin = new System.Windows.Forms.Padding(2);
+ this.checkSelectedButton.Name = "checkSelectedButton";
+ this.checkSelectedButton.Size = new System.Drawing.Size(56, 20);
+ this.checkSelectedButton.TabIndex = 5;
+ this.checkSelectedButton.Text = "Check/Download Selected";
+ this.checkSelectedButton.UseVisualStyleBackColor = true;
+ //
+ // addNewFeed
+ //
+ this.addNewFeed.Dock = System.Windows.Forms.DockStyle.Right;
+ this.addNewFeed.Location = new System.Drawing.Point(258, 2);
+ this.addNewFeed.Margin = new System.Windows.Forms.Padding(2);
+ this.addNewFeed.Name = "addNewFeed";
+ this.addNewFeed.Size = new System.Drawing.Size(56, 20);
+ this.addNewFeed.TabIndex = 2;
+ this.addNewFeed.Text = "Add New Feed";
+ this.addNewFeed.UseVisualStyleBackColor = true;
+ //
+ // feedPropertiesButton
+ //
+ this.feedPropertiesButton.Dock = System.Windows.Forms.DockStyle.Right;
+ this.feedPropertiesButton.Enabled = false;
+ this.feedPropertiesButton.Location = new System.Drawing.Point(416, 2);
+ this.feedPropertiesButton.Margin = new System.Windows.Forms.Padding(2);
+ this.feedPropertiesButton.Name = "feedPropertiesButton";
+ this.feedPropertiesButton.Size = new System.Drawing.Size(56, 20);
+ this.feedPropertiesButton.TabIndex = 4;
+ this.feedPropertiesButton.Text = "Properties";
+ this.feedPropertiesButton.UseVisualStyleBackColor = true;
+ //
+ // removeFeedButton
+ //
+ this.removeFeedButton.Dock = System.Windows.Forms.DockStyle.Right;
+ this.removeFeedButton.Enabled = false;
+ this.removeFeedButton.Location = new System.Drawing.Point(337, 2);
+ this.removeFeedButton.Margin = new System.Windows.Forms.Padding(2);
+ this.removeFeedButton.Name = "removeFeedButton";
+ this.removeFeedButton.Size = new System.Drawing.Size(56, 20);
+ this.removeFeedButton.TabIndex = 3;
+ this.removeFeedButton.Text = "Remove selected Feed";
+ this.removeFeedButton.UseVisualStyleBackColor = true;
+ //
+ // schedulerButton
+ //
+ this.schedulerButton.Dock = System.Windows.Forms.DockStyle.Right;
+ this.schedulerButton.Location = new System.Drawing.Point(574, 2);
+ this.schedulerButton.Margin = new System.Windows.Forms.Padding(2);
+ this.schedulerButton.Name = "schedulerButton";
+ this.schedulerButton.Size = new System.Drawing.Size(56, 20);
+ this.schedulerButton.TabIndex = 6;
+ this.schedulerButton.Text = "Scheduler";
+ this.schedulerButton.UseVisualStyleBackColor = true;
+ //
+ // cleanupPage
+ //
+ this.cleanupPage.Location = new System.Drawing.Point(4, 22);
+ this.cleanupPage.Margin = new System.Windows.Forms.Padding(2);
+ this.cleanupPage.Name = "cleanupPage";
+ this.cleanupPage.Padding = new System.Windows.Forms.Padding(2);
+ this.cleanupPage.Size = new System.Drawing.Size(800, 464);
+ this.cleanupPage.TabIndex = 2;
+ this.cleanupPage.Text = "Cleanup";
+ this.cleanupPage.UseVisualStyleBackColor = true;
+ //
+ // logPage
+ //
+ this.logPage.Controls.Add(this.logRTB);
+ this.logPage.Location = new System.Drawing.Point(4, 22);
+ this.logPage.Margin = new System.Windows.Forms.Padding(2);
+ this.logPage.Name = "logPage";
+ this.logPage.Padding = new System.Windows.Forms.Padding(2);
+ this.logPage.Size = new System.Drawing.Size(800, 464);
+ this.logPage.TabIndex = 3;
+ this.logPage.Text = "Log";
+ this.logPage.UseVisualStyleBackColor = true;
+ //
+ // logRTB
+ //
+ this.logRTB.Cursor = System.Windows.Forms.Cursors.Default;
+ this.logRTB.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.logRTB.Location = new System.Drawing.Point(2, 2);
+ this.logRTB.Margin = new System.Windows.Forms.Padding(2);
+ this.logRTB.Name = "logRTB";
+ this.logRTB.ReadOnly = true;
+ this.logRTB.Size = new System.Drawing.Size(796, 460);
+ this.logRTB.TabIndex = 0;
+ this.logRTB.Text = "";
+ //
+ // statusStrip1
+ //
+ this.statusStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
+ this.statusStrip1.Location = new System.Drawing.Point(0, 514);
+ this.statusStrip1.Name = "statusStrip1";
+ this.statusStrip1.Padding = new System.Windows.Forms.Padding(1, 0, 10, 0);
+ this.statusStrip1.Size = new System.Drawing.Size(808, 22);
+ this.statusStrip1.TabIndex = 0;
+ this.statusStrip1.Text = "statusStrip1";
+ //
+ // notificationIcon
+ //
+ this.notificationIcon.BalloonTipTitle = "Cordial";
+ this.notificationIcon.ContextMenuStrip = this.notificationMenuStrip;
+ this.notificationIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notificationIcon.Icon")));
+ this.notificationIcon.Text = "Cordial";
+ this.notificationIcon.Visible = true;
+ this.notificationIcon.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notificationIcon_MouseDoubleClick);
+ //
+ // notificationMenuStrip
+ //
+ this.notificationMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.showWindowNotificationMenu,
+ this.runCheckNotificationMenu,
+ this.toolStripSeparator5,
+ this.quitNotificationMenu});
+ this.notificationMenuStrip.Name = "notificationMenuStrip";
+ this.notificationMenuStrip.Size = new System.Drawing.Size(181, 76);
+ //
+ // showWindowNotificationMenu
+ //
+ this.showWindowNotificationMenu.Name = "showWindowNotificationMenu";
+ this.showWindowNotificationMenu.Size = new System.Drawing.Size(180, 22);
+ this.showWindowNotificationMenu.Text = "toolStripMenuItem1";
+ //
+ // runCheckNotificationMenu
+ //
+ this.runCheckNotificationMenu.Name = "runCheckNotificationMenu";
+ this.runCheckNotificationMenu.Size = new System.Drawing.Size(180, 22);
+ this.runCheckNotificationMenu.Text = "toolStripMenuItem2";
+ //
+ // toolStripSeparator5
+ //
+ this.toolStripSeparator5.Name = "toolStripSeparator5";
+ this.toolStripSeparator5.Size = new System.Drawing.Size(177, 6);
+ //
+ // quitNotificationMenu
+ //
+ this.quitNotificationMenu.Name = "quitNotificationMenu";
+ this.quitNotificationMenu.Size = new System.Drawing.Size(180, 22);
+ this.quitNotificationMenu.Text = "toolStripMenuItem3";
+ //
+ // opmlFileOpen
+ //
+ this.opmlFileOpen.Filter = "OMPL files|*.opml";
+ this.opmlFileOpen.Title = "Open File";
+ //
+ // opmlFileSave
+ //
+ this.opmlFileSave.Filter = "OPML files|*.opml";
+ this.opmlFileSave.Title = "Save to file";
+ //
+ // nameDataGridViewTextBoxColumn
+ //
+ this.nameDataGridViewTextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
+ this.nameDataGridViewTextBoxColumn.DataPropertyName = "Name";
+ this.nameDataGridViewTextBoxColumn.FillWeight = 60F;
+ this.nameDataGridViewTextBoxColumn.HeaderText = "Name";
+ this.nameDataGridViewTextBoxColumn.MinimumWidth = 6;
+ this.nameDataGridViewTextBoxColumn.Name = "nameDataGridViewTextBoxColumn";
+ this.nameDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // statusDataGridViewTextBoxColumn
+ //
+ this.statusDataGridViewTextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
+ this.statusDataGridViewTextBoxColumn.DataPropertyName = "Status";
+ this.statusDataGridViewTextBoxColumn.FillWeight = 30F;
+ this.statusDataGridViewTextBoxColumn.HeaderText = "Status";
+ this.statusDataGridViewTextBoxColumn.MinimumWidth = 6;
+ this.statusDataGridViewTextBoxColumn.Name = "statusDataGridViewTextBoxColumn";
+ this.statusDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // mBDataGridViewTextBoxColumn
+ //
+ this.mBDataGridViewTextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
+ this.mBDataGridViewTextBoxColumn.DataPropertyName = "MB";
+ this.mBDataGridViewTextBoxColumn.FillWeight = 20F;
+ this.mBDataGridViewTextBoxColumn.HeaderText = "MB";
+ this.mBDataGridViewTextBoxColumn.MinimumWidth = 6;
+ this.mBDataGridViewTextBoxColumn.Name = "mBDataGridViewTextBoxColumn";
+ this.mBDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // locationDataGridViewTextBoxColumn
+ //
+ this.locationDataGridViewTextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
+ this.locationDataGridViewTextBoxColumn.DataPropertyName = "Location";
+ this.locationDataGridViewTextBoxColumn.HeaderText = "Location";
+ this.locationDataGridViewTextBoxColumn.MinimumWidth = 6;
+ this.locationDataGridViewTextBoxColumn.Name = "locationDataGridViewTextBoxColumn";
+ this.locationDataGridViewTextBoxColumn.ReadOnly = true;
+ //
+ // podcastBindingSource
+ //
+ this.podcastBindingSource.DataSource = typeof(Cordial.Models.Podcast);
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(808, 536);
+ this.Controls.Add(this.tabControl1);
+ this.Controls.Add(this.statusStrip1);
+ this.Controls.Add(this.fileMenuStrip);
+ this.MainMenuStrip = this.fileMenuStrip;
+ this.Margin = new System.Windows.Forms.Padding(2);
+ this.Name = "Form1";
+ this.Text = "Form1";
+ ((System.ComponentModel.ISupportInitialize)(dataGridView1)).EndInit();
+ this.fileMenuStrip.ResumeLayout(false);
+ this.fileMenuStrip.PerformLayout();
+ this.tabControl1.ResumeLayout(false);
+ this.downloadsPage.ResumeLayout(false);
+ this.downloadsPage.PerformLayout();
+ this.tableLayoutPanel2.ResumeLayout(false);
+ this.tableLayoutPanel1.ResumeLayout(false);
+ this.panel1.ResumeLayout(false);
+ this.statusStrip2.ResumeLayout(false);
+ this.statusStrip2.PerformLayout();
+ this.subscriptionsPage.ResumeLayout(false);
+ this.subscriptionsPage.PerformLayout();
+ this.tableLayoutPanel3.ResumeLayout(false);
+ this.tableLayoutPanel3.PerformLayout();
+ this.logPage.ResumeLayout(false);
+ this.notificationMenuStrip.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.podcastBindingSource)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.MenuStrip fileMenuStrip;
+ private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
+ private System.Windows.Forms.TabControl tabControl1;
+ private System.Windows.Forms.TabPage downloadsPage;
+ private System.Windows.Forms.TabPage subscriptionsPage;
+ private System.Windows.Forms.StatusStrip statusStrip1;
+ private System.Windows.Forms.ToolStripMenuItem checkAllToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem catchupToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem checkSelectedToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+ private System.Windows.Forms.ToolStripMenuItem addAFeedToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem removeFeedToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem importFeedsFromOpmlToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem exportFeedsAsOpmlToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem preferencesToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
+ private System.Windows.Forms.ToolStripMenuItem closeWindowToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem quitToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem feedPropertiesToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem schedulerToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
+ private System.Windows.Forms.ToolStripMenuItem selectLanguageToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem checkForUpdateToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem reportAProblemToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
+ private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
+ private System.Windows.Forms.TabPage cleanupPage;
+ private System.Windows.Forms.TabPage logPage;
+ private System.Windows.Forms.RichTextBox logRTB;
+ private System.Windows.Forms.NotifyIcon notificationIcon;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+ private System.Windows.Forms.Panel panel1;
+ private System.Windows.Forms.Button removeSelectedButton;
+ private System.Windows.Forms.Button cancelSelectedButton;
+ private System.Windows.Forms.StatusStrip statusStrip2;
+ private System.Windows.Forms.ToolStripStatusLabel liveDownloadCounter;
+ private System.Windows.Forms.ToolStripStatusLabel downloadSpeed;
+ private System.Windows.Forms.OpenFileDialog opmlFileOpen;
+ private System.Windows.Forms.SaveFileDialog opmlFileSave;
+ private System.Windows.Forms.BindingSource podcastBindingSource;
+ private System.Windows.Forms.DataGridViewTextBoxColumn nameDataGridViewTextBoxColumn;
+ private System.Windows.Forms.DataGridViewTextBoxColumn statusDataGridViewTextBoxColumn;
+ private System.Windows.Forms.DataGridViewTextBoxColumn mBDataGridViewTextBoxColumn;
+ private System.Windows.Forms.DataGridViewTextBoxColumn locationDataGridViewTextBoxColumn;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
+ private System.Windows.Forms.Button addNewFeed;
+ private System.Windows.Forms.Button removeFeedButton;
+ private System.Windows.Forms.Button feedPropertiesButton;
+ private System.Windows.Forms.Button checkSelectedButton;
+ private System.Windows.Forms.Button schedulerButton;
+ private System.Windows.Forms.TextBox subscriptionSearchBox;
+ private System.Windows.Forms.Button checkNewButton;
+ private System.Windows.Forms.Button cactchUpButton;
+ private System.Windows.Forms.ContextMenuStrip notificationMenuStrip;
+ private System.Windows.Forms.ToolStripMenuItem showWindowNotificationMenu;
+ private System.Windows.Forms.ToolStripMenuItem runCheckNotificationMenu;
+ private System.Windows.Forms.ToolStripMenuItem quitNotificationMenu;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
+ private System.Windows.Forms.ToolStripMenuItem closeNotificationTray;
+ }
+}
+
diff --git a/src/Form1.cs b/src/Form1.cs
new file mode 100644
index 0000000..ffbe630
--- /dev/null
+++ b/src/Form1.cs
@@ -0,0 +1,396 @@
+using Cordial.Globalization;
+using Cordial.Models;
+using Octokit;
+using OPMLCore.NET;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Resources;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Configuration = Cordial.Models.Configuration;
+
+namespace Cordial
+{
+ public partial class Form1 : Form
+ {
+ List Feeds;
+ string downloadDestination;
+ List Subscriptions;
+ LocaleManager locale;
+ Configuration currentConfiguration;
+ GitHubClient githubClient;
+#if PRERELEASE
+ bool isPreRelease = true;
+#else
+ bool isPreRelease = false;
+#endif
+
+ public Form1()
+ {
+ if (!Directory.Exists(AppProps.DefaultPodcastDownloadDir))
+ {
+ Directory.CreateDirectory(AppProps.DefaultPodcastDownloadDir);
+ }
+
+ InitializeComponent();
+
+ Log.Configure(logRTB);
+
+ currentConfiguration = Configuration.Load();
+
+ Feeds = currentConfiguration.Podcasts;
+ downloadDestination = currentConfiguration.Destination;
+
+ currentConfiguration.Language = currentConfiguration.Language;
+
+ locale = LocaleManager.InitialiseLocales();
+
+ foreach (var localeEntry in locale.Locales)
+ {
+ ToolStripMenuItem item = new ToolStripMenuItem(localeEntry.Value.GetString("human_name"), image: null, onClick: (e, sender) =>
+ {
+ currentConfiguration.Language = localeEntry.Key;
+
+ currentConfiguration.Save();
+
+ Log.Info($"Using \"{localeEntry.Value.GetString("human_name")}\" as current language");
+
+ UpdateLanguage();
+ })
+ {
+ Checked = true,
+ CheckState = currentConfiguration.Language == localeEntry.Key ? CheckState.Checked : CheckState.Unchecked,
+ };
+
+ selectLanguageToolStripMenuItem.DropDownItems.Add(item);
+
+ if (currentConfiguration.Language == localeEntry.Key)
+ {
+ Log.Info($"Using \"{localeEntry.Value.GetString("human_name")}\" as current language");
+ }
+ }
+
+ showWindowNotificationMenu.Visible = false;
+ showWindowNotificationMenu.Click += ShowWindowNotificationMenu_Click;
+ closeNotificationTray.Click += CloseNotificationTray_Click;
+ closeNotificationTray.Checked = currentConfiguration.CloseNotifTray;
+
+ UpdateLanguage();
+
+ UpdateSubscriptions();
+ }
+
+ private void ShowWindowNotificationMenu_Click(object sender, EventArgs e)
+ {
+ Visible = true;
+ showWindowNotificationMenu.Visible = false;
+ }
+
+ void UpdateSubscriptions()
+ {
+ if (Subscriptions == null)
+ {
+ Subscriptions = new List();
+ }
+
+ Subscriptions.Clear();
+
+ foreach (var feed in Feeds)
+ {
+ ulong mb = 0;
+ string podcastPath = Path.Combine(downloadDestination, feed.Name);
+ if (Directory.Exists(podcastPath))
+ {
+ mb = (ulong)new DirectoryInfo(podcastPath).GetFiles().Sum(z => z.Length) / 1000000;
+ }
+
+ Subscriptions.Add(new Podcast
+ {
+ Name = feed.Name,
+ Status = PodcastStatus.NewlySubscribed,
+ MB = mb,
+ Location = feed.URL.OriginalString
+ });
+ }
+
+ podcastBindingSource.DataSource = Subscriptions;
+ }
+
+ string GetLanguageString(string key, ResourceManager targetResource, ResourceManager defaultResource = null)
+ {
+ var value = key;
+
+ if (locale != null)
+ {
+ if (defaultResource == null)
+ {
+ defaultResource = locale.GetDefaultLocale();
+ }
+
+ value = targetResource.GetString(key);
+
+ if (string.IsNullOrEmpty(value))
+ {
+ value = defaultResource.GetString(key);
+
+ if (string.IsNullOrEmpty(value))
+ {
+ value = key;
+ }
+ }
+ }
+
+ return value;
+ }
+
+ void UpdateLanguage()
+ {
+ var currentLocale = locale != null ? locale.GetLocale(currentConfiguration.Language) : null;
+ var defaultLocale = locale != null ? locale.GetDefaultLocale() : null;
+
+ foreach (var item in selectLanguageToolStripMenuItem.DropDownItems)
+ {
+ if (item is ToolStripMenuItem tsmi)
+ {
+ if (tsmi.Text == currentLocale.GetString("human_name"))
+ {
+ tsmi.CheckState = CheckState.Checked;
+ }
+ else
+ {
+ tsmi.CheckState = CheckState.Unchecked;
+ }
+ }
+ }
+
+ //statustray
+ liveDownloadCounter.Text = GetLanguageString("generic_livedownloads", currentLocale, defaultLocale).Replace("{0}", "0");
+ downloadSpeed.Text = GetLanguageString("generic_downloadspeed", currentLocale, defaultLocale).Replace("{0}", "0");
+
+ //toolstrip
+ fileToolStripMenuItem.Text = GetLanguageString("generic_file", currentLocale, defaultLocale);
+ editToolStripMenuItem.Text = GetLanguageString("generic_edit", currentLocale, defaultLocale);
+ viewToolStripMenuItem.Text = GetLanguageString("generic_view", currentLocale, defaultLocale);
+ toolsToolStripMenuItem.Text = GetLanguageString("generic_tools", currentLocale, defaultLocale);
+ helpToolStripMenuItem.Text = GetLanguageString("generic_help", currentLocale, defaultLocale);
+
+ //pages
+ downloadsPage.Text = GetLanguageString("generic_downloads", currentLocale, defaultLocale);
+ subscriptionsPage.Text = GetLanguageString("generic_subscriptions", currentLocale, defaultLocale);
+ cleanupPage.Text = GetLanguageString("generic_cleanup", currentLocale, defaultLocale);
+ logPage.Text = GetLanguageString("generic_log", currentLocale, defaultLocale);
+
+ //file
+ importFeedsFromOpmlToolStripMenuItem.Text = GetLanguageString("file_importopml", currentLocale, defaultLocale);
+ exportFeedsAsOpmlToolStripMenuItem.Text = GetLanguageString("file_exportopml", currentLocale, defaultLocale);
+ preferencesToolStripMenuItem.Text = GetLanguageString("file_preferences", currentLocale, defaultLocale);
+ closeWindowToolStripMenuItem.Text = GetLanguageString("file_close", currentLocale, defaultLocale);
+ closeNotificationTray.Text = GetLanguageString("file_closetotray", currentLocale, defaultLocale);
+ quitToolStripMenuItem.Text = GetLanguageString("file_quit", currentLocale, defaultLocale);
+
+ //edit
+ selectAllToolStripMenuItem.Text = GetLanguageString("edit_selectall", currentLocale, defaultLocale);
+
+ //view
+
+
+ //tools
+ checkAllToolStripMenuItem.Text = GetLanguageString("tools_checkall", currentLocale, defaultLocale);
+ catchupToolStripMenuItem.Text = GetLanguageString("tools_catchup", currentLocale, defaultLocale);
+ checkSelectedToolStripMenuItem.Text = GetLanguageString("tools_checkselected", currentLocale, defaultLocale);
+ addAFeedToolStripMenuItem.Text = GetLanguageString("tools_addfeed", currentLocale, defaultLocale);
+ removeFeedToolStripMenuItem.Text = GetLanguageString("tools_removefeed", currentLocale, defaultLocale);
+ feedPropertiesToolStripMenuItem.Text = GetLanguageString("tools_feedprops", currentLocale, defaultLocale);
+ schedulerToolStripMenuItem.Text = GetLanguageString("tools_scheduler", currentLocale, defaultLocale);
+ selectLanguageToolStripMenuItem.Text = GetLanguageString("tools_selectlang", currentLocale, defaultLocale);
+
+ //help
+ checkForUpdateToolStripMenuItem.Text = GetLanguageString("help_checkupdates", currentLocale, defaultLocale);
+ reportAProblemToolStripMenuItem.Text = GetLanguageString("help_reportproblem", currentLocale, defaultLocale);
+ aboutToolStripMenuItem.Text = string.Format(GetLanguageString("help_about", currentLocale, defaultLocale), AppProps.AppName);
+
+ //notification context menu
+ showWindowNotificationMenu.Text = GetLanguageString("file_showwindow", currentLocale, defaultLocale);
+ runCheckNotificationMenu.Text = GetLanguageString("generic_runcheck", currentLocale, defaultLocale);
+ quitNotificationMenu.Text = quitToolStripMenuItem.Text;
+ }
+
+ bool closeOverride = false;
+ private void quitToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ closeOverride = true;
+ this.Close();
+ }
+
+ protected override void OnClosing(CancelEventArgs e)
+ {
+ if (closeNotificationTray.CheckState == CheckState.Checked && !closeOverride)
+ {
+ Visible = false;
+ showWindowNotificationMenu.Visible = true;
+ }
+ else
+ {
+ base.OnClosing(e);
+ }
+ }
+
+ protected override void OnClosed(EventArgs e)
+ {
+ if (closeNotificationTray.CheckState == CheckState.Checked && !closeOverride)
+ {
+
+ }
+ else
+ {
+ base.OnClosed(e);
+ }
+ }
+
+ private void importFeedsFromOpmlToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ if (opmlFileOpen.ShowDialog() == DialogResult.OK)
+ {
+ if (opmlFileOpen.Multiselect)
+ {
+ foreach (var filePath in opmlFileOpen.FileNames)
+ {
+ ImportOPML(filePath);
+ }
+ }
+ else
+ {
+ ImportOPML(opmlFileOpen.FileName);
+ }
+ }
+ }
+
+ private void exportFeedsAsOpmlToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ opmlFileSave.ShowDialog();
+ }
+
+ void ImportOPML(string filePath)
+ {
+ Opml opmldoc = new Opml(filePath);
+
+ Log.Info($"Opened: {filePath}");
+
+ foreach (var rssOutline in opmldoc.Body.Outlines[0].Outlines)
+ {
+ Feeds.Add(new RSSFeed(rssOutline.Title, rssOutline.XMLUrl));
+
+ Log.Info($"Added: {rssOutline.Title}");
+ }
+
+ Configuration.Save(Configuration.GenerateConfiguration(downloadDestination, Feeds));
+
+ UpdateSubscriptions();
+ }
+
+ private void notificationIcon_MouseDoubleClick(object sender, MouseEventArgs e)
+ {
+ Visible = true;
+ showWindowNotificationMenu.Visible = false;
+ }
+
+ private void closeWindowToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ if (closeNotificationTray.CheckState == CheckState.Checked && !closeOverride)
+ {
+ Visible = false;
+ showWindowNotificationMenu.Visible = true;
+ }
+ else
+ {
+ this.Close();
+ }
+ }
+
+ private void CloseNotificationTray_Click(object sender, EventArgs e)
+ {
+ if (sender is ToolStripMenuItem tsmi)
+ {
+ tsmi.Checked = currentConfiguration.CloseNotifTray = !currentConfiguration.CloseNotifTray;
+ currentConfiguration.Save();
+ }
+ }
+
+ private void reportAProblemToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ System.Diagnostics.Process.Start(Path.Combine(AppProps.RepoUrl, "issues", "new", "choose"));
+ }
+
+ private void checkForUpdateToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ if (githubClient == null)
+ {
+ githubClient = new GitHubClient(new ProductHeaderValue(AppProps.AppName, Assembly.GetExecutingAssembly().GetName().Version.ToString()));
+ }
+
+ Task.Run(async () =>
+ {
+#if DEBUG
+ var releases = await githubClient.Repository.Release.GetAll("xercsis", $"Cordial-Test");
+#else
+ var releases = await githubClient.Repository.Release.GetAll(AppProps.CreatorName, AppProps.AppName);
+#endif
+
+ if (releases.Any())
+ {
+ var assName = Assembly.GetExecutingAssembly().GetName();
+
+ Release latestRelease = null;
+
+ if (isPreRelease)
+ {
+ latestRelease = releases.FirstOrDefault(rel => rel.Prerelease);
+ }
+ else
+ {
+ latestRelease = releases.FirstOrDefault(rel => !rel.Prerelease);
+ }
+
+ if (latestRelease != null)
+ {
+ var tagVersion = new Version(latestRelease.TagName);
+
+ if (tagVersion > assName.Version)
+ {
+ showUpdateBox();
+ }
+ }
+ }
+ });
+ }
+
+ [STAThread]
+ void showUpdateBox()
+ {
+ var currentLocale = locale != null ? locale.GetLocale(currentConfiguration.Language) : null;
+ var defaultLocale = locale != null ? locale.GetDefaultLocale() : null;
+
+ MessageBoxManager.Yes = GetLanguageString("generic_yes", currentLocale, defaultLocale);
+ MessageBoxManager.No = GetLanguageString("generic_no", currentLocale, defaultLocale);
+
+ MessageBoxManager.Register();
+
+ var dialogueResult = MessageBox.Show(
+ GetLanguageString("update_maintext", currentLocale, defaultLocale),
+ GetLanguageString("update_caption", currentLocale, defaultLocale),
+ MessageBoxButtons.YesNo
+ );
+
+ MessageBoxManager.Unregister();
+
+ if (dialogueResult == DialogResult.Yes)
+ {
+
+ }
+ }
+ }
+}
diff --git a/src/Form1.resx b/src/Form1.resx
new file mode 100644
index 0000000..ce5bb26
--- /dev/null
+++ b/src/Form1.resx
@@ -0,0 +1,728 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ False
+
+
+ 1319, 17
+
+
+ 17, 17
+
+
+ 722, 17
+
+
+ 287, 17
+
+
+ 424, 17
+
+
+ 1346, 17
+
+
+
+
+ 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
+ AABJRU5ErkJggg==
+
+
+
+ 859, 17
+
+
+ 1026, 17
+
+
\ No newline at end of file
diff --git a/src/LocaleManager.cs b/src/LocaleManager.cs
new file mode 100644
index 0000000..af1dad7
--- /dev/null
+++ b/src/LocaleManager.cs
@@ -0,0 +1,82 @@
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Resources;
+using System.Runtime.Serialization;
+using System.Text.RegularExpressions;
+using System.Windows.Forms;
+
+namespace Cordial.Globalization
+{
+ public class LocaleManager
+ {
+ private static Dictionary locales = new Dictionary();
+ private static Dictionary localehumannames = new Dictionary();
+ public Dictionary Locales { get => locales; }
+ public Dictionary LocaleHumanNames { get => localehumannames; }
+ public const string DefaultLocale = "en-gb";
+
+ public ResourceManager GetDefaultLocale()
+ {
+ if (locales.TryGetValue(DefaultLocale, out var resMan))
+ {
+ return resMan;
+ }
+
+ throw new System.NullReferenceException("Couldn't get default locale, is it registered?");
+ }
+
+ public static LocaleManager InitialiseLocales()
+ {
+ LocaleManager localeinstance = new LocaleManager();
+
+ if (!locales.Any())
+ {
+ string[] list = Directory.GetFiles(Path.Combine(Application.StartupPath, "Resources", "Languages"), "*.resx");
+
+ Assembly currentAssembly = Assembly.GetExecutingAssembly();
+
+ foreach (string str in list)
+ {
+ Regex regex = new Regex("[a-zA-Z-]*.resx");
+
+ string language = regex.Match(str).ToString().Replace(".resx", string.Empty);
+
+ if (string.IsNullOrEmpty(language)) continue;
+
+ if (!locales.ContainsKey(language))
+ {
+ var niceKey = language.Replace("-", "_");
+
+ var languageClass = currentAssembly.GetType($"Cordial.Resources.Languages.{niceKey}");
+
+ var instance = FormatterServices.GetUninitializedObject(languageClass.GetType());
+
+ var resProp = languageClass.GetRuntimeProperties().FirstOrDefault(x => x.Name == "ResourceManager");
+
+ var resMan = resProp.GetValue(instance) as ResourceManager;
+
+ locales.Add(language, resMan);
+ localehumannames.Add(resMan.GetString("human_name"), language);
+
+ Log.Info($"Registered \"{resMan.GetString("human_name")}\" into locale database");
+ }
+ }
+
+ Log.Info($"Registered: {locales.Count}/{list.Length} languages into locale database");
+ }
+
+ return localeinstance;
+ }
+
+ public ResourceManager GetLocale(string id)
+ {
+ var locale = locales.FirstOrDefault(x => x.Key == id);
+ if (locale.Value != null)
+ return locale.Value;
+ else
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Log.cs b/src/Log.cs
new file mode 100644
index 0000000..2d5d265
--- /dev/null
+++ b/src/Log.cs
@@ -0,0 +1,108 @@
+using System;
+using System.Globalization;
+using System.IO;
+using System.Windows.Forms;
+
+namespace Cordial
+{
+ public static class Log
+ {
+ readonly static string CurrentLogFileName =
+ DateTime.UtcNow.ToString(
+ "yyyy-MM-dd",
+ CultureInfo.InvariantCulture
+ ) + ".log";
+
+ static RichTextBox RichTextBox;
+ static StreamWriter LogFile;
+
+ public static void Configure(RichTextBox rtb)
+ {
+ RichTextBox = rtb;
+
+ if (!Directory.Exists(AppProps.BaseDirectory))
+ {
+ Directory.CreateDirectory(AppProps.BaseDirectory);
+ }
+
+ if (!Directory.Exists(AppProps.LogDirectory))
+ {
+ Directory.CreateDirectory(AppProps.LogDirectory);
+ }
+
+ LogFile = new StreamWriter(
+ File.Open(
+ Path.Combine(AppProps.LogDirectory, CurrentLogFileName),
+ FileMode.Append,
+ FileAccess.Write,
+ FileShare.Read
+ )
+ )
+ {
+ AutoFlush = true,
+ NewLine = Environment.NewLine
+ };
+ }
+
+ public static void Info(string message)
+ {
+ var log = GetMessage("INF", message, null);
+
+ if (RichTextBox != null)
+ {
+ RichTextBox.AppendText(log);
+ RichTextBox.AppendText(Environment.NewLine);
+ }
+ if (LogFile != null)
+ {
+ LogFile.WriteLine(log);
+ }
+
+ Console.WriteLine(log);
+ }
+ public static void Warning(string message, Exception exception)
+ {
+ var log = GetMessage("WAR", message, exception);
+
+ if (RichTextBox != null)
+ {
+ RichTextBox.AppendText(log);
+ RichTextBox.AppendText(Environment.NewLine);
+ }
+ if (LogFile != null)
+ {
+ LogFile.WriteLine(log);
+ }
+
+ Console.WriteLine(log);
+ }
+ public static void Error(string message, Exception exception)
+ {
+ var log = GetMessage("ERR", message, exception);
+
+ if (RichTextBox != null)
+ {
+ RichTextBox.AppendText(log);
+ RichTextBox.AppendText(Environment.NewLine);
+ }
+ if (LogFile != null)
+ {
+ LogFile.WriteLine(log);
+ }
+
+ Console.WriteLine(log);
+ }
+
+ static string GetMessage(string level, string message, Exception exception)
+ {
+ string logContent = $"[{DateTime.Now:yyyy/MM/dd HH:mm:ss}] [{level}] {message}";
+
+ if (exception != null)
+ {
+ logContent += $"\n{exception}";
+ }
+
+ return logContent;
+ }
+ }
+}
diff --git a/src/Models/Configuration.cs b/src/Models/Configuration.cs
new file mode 100644
index 0000000..edb8e01
--- /dev/null
+++ b/src/Models/Configuration.cs
@@ -0,0 +1,81 @@
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text.Json;
+
+namespace Cordial.Models
+{
+ public class Configuration
+ {
+ public string Language { get; set; } = "en-gb";
+ public bool CloseNotifTray { get; set; } = false;
+ public string Destination { get; set; } = AppProps.DefaultPodcastDownloadDir;
+ public List Podcasts { get; set; } = new List();
+
+ public static Configuration GenerateConfiguration(string dest, IEnumerable podcasts)
+ => new Configuration
+ {
+ Destination = dest,
+ Podcasts = podcasts.ToList()
+ };
+
+ public static Configuration Default
+ => new Configuration();
+
+ public void Save()
+ => Save(this);
+
+ public static string Save(Configuration configuration, string location = null)
+ {
+ if (string.IsNullOrEmpty(location))
+ {
+ if (!Directory.Exists(AppProps.ConfigurationDirectory))
+ {
+ Directory.CreateDirectory(AppProps.ConfigurationDirectory);
+ }
+
+ location = Path.Combine(AppProps.ConfigurationDirectory, "default.json");
+ }
+
+ File.WriteAllText(location, JsonSerializer.Serialize(configuration, new JsonSerializerOptions
+ {
+ WriteIndented = true
+ }));
+
+ Log.Info($"Written configuration to: {location}");
+
+ return location;
+ }
+
+ public static Configuration Load(string location = null)
+ {
+ if (string.IsNullOrEmpty(location))
+ {
+ if (!Directory.Exists(AppProps.ConfigurationDirectory))
+ {
+ Directory.CreateDirectory(AppProps.ConfigurationDirectory);
+ }
+
+ if (!File.Exists(Path.Combine(AppProps.ConfigurationDirectory, "default.json")))
+ {
+ location = Save(Default);
+ }
+ else
+ {
+ location = Path.Combine(AppProps.ConfigurationDirectory, "default.json");
+ }
+ }
+
+ var data = File.ReadAllText(location);
+
+ var config = JsonSerializer.Deserialize(data, new JsonSerializerOptions
+ {
+ WriteIndented = true
+ });
+
+ Log.Info($"Loaded configuration from: {location}");
+
+ return config;
+ }
+ }
+}
diff --git a/src/Models/GithubStruct.cs b/src/Models/GithubStruct.cs
new file mode 100644
index 0000000..fff2fa9
--- /dev/null
+++ b/src/Models/GithubStruct.cs
@@ -0,0 +1,21 @@
+using System;
+
+namespace Cordial.Models
+{
+ public class GithubStruct
+ {
+ public string Author { get; internal set; }
+ public Uri RepoUrl { get; internal set; }
+
+ public GithubStruct(string author, Uri repo)
+ {
+ Author = author;
+ RepoUrl = repo;
+ }
+
+ public GithubStruct(string author, string repo) : this(author, new Uri(repo))
+ {
+
+ }
+ }
+}
diff --git a/src/Models/Podcast.cs b/src/Models/Podcast.cs
new file mode 100644
index 0000000..169535e
--- /dev/null
+++ b/src/Models/Podcast.cs
@@ -0,0 +1,10 @@
+namespace Cordial.Models
+{
+ public class Podcast
+ {
+ public string Name { get; set; }
+ public PodcastStatus Status { get; set; }
+ public ulong MB { get; set; }
+ public string Location { get; set; }
+ }
+}
diff --git a/src/Models/PodcastStatus.cs b/src/Models/PodcastStatus.cs
new file mode 100644
index 0000000..d94faa8
--- /dev/null
+++ b/src/Models/PodcastStatus.cs
@@ -0,0 +1,10 @@
+namespace Cordial.Models
+{
+ public enum PodcastStatus
+ {
+ NewlySubscribed = 0,
+ Subscribed = 1,
+ Downloading = 2,
+ Syncing = 3
+ }
+}
diff --git a/src/Models/RSSFeed.cs b/src/Models/RSSFeed.cs
new file mode 100644
index 0000000..c36da88
--- /dev/null
+++ b/src/Models/RSSFeed.cs
@@ -0,0 +1,20 @@
+using System;
+
+namespace Cordial.Models
+{
+ public class RSSFeed
+ {
+ public string Name { get; set; }
+ public Uri URL { get; set; }
+
+ public RSSFeed() { }
+
+ public RSSFeed(string name, Uri url)
+ {
+ Name = name;
+ URL = url;
+ }
+
+ public RSSFeed(string name, string url) : this(name, new Uri(url)) { }
+ }
+}
diff --git a/src/Program.cs b/src/Program.cs
new file mode 100644
index 0000000..01fb7f1
--- /dev/null
+++ b/src/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Cordial
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Form1());
+ }
+ }
+}
diff --git a/src/Properties/AssemblyInfo.cs b/src/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..20cf63f
--- /dev/null
+++ b/src/Properties/AssemblyInfo.cs
@@ -0,0 +1,38 @@
+using System.Resources;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Cordial")]
+[assembly: AssemblyDescription("A podcast aggregator")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("exsersewo")]
+[assembly: AssemblyProduct("Cordial")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7385fd85-ee39-4db2-9853-7ad2736fab18")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("0.1.0.0")]
+[assembly: AssemblyFileVersion("0.1.0.0")]
+[assembly: NeutralResourcesLanguage("en-GB")]
diff --git a/src/Properties/DataSources/Podcast.datasource b/src/Properties/DataSources/Podcast.datasource
new file mode 100644
index 0000000..b780099
--- /dev/null
+++ b/src/Properties/DataSources/Podcast.datasource
@@ -0,0 +1,93 @@
+
+
+
+
+
+ System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cordial.Podcast, Cordial, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Properties/Resources.Designer.cs b/src/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..00e2861
--- /dev/null
+++ b/src/Properties/Resources.Designer.cs
@@ -0,0 +1,70 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+
+namespace Cordial.Properties
+{
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Cordial.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/src/Properties/Resources.resx b/src/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/src/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/src/Properties/Settings.Designer.cs b/src/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..e7cdfb3
--- /dev/null
+++ b/src/Properties/Settings.Designer.cs
@@ -0,0 +1,29 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+
+namespace Cordial.Properties
+{
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/src/Properties/Settings.settings b/src/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/src/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/Resources/Icon/lime.ico b/src/Resources/Icon/lime.ico
new file mode 100644
index 0000000..ab357a7
Binary files /dev/null and b/src/Resources/Icon/lime.ico differ
diff --git a/src/Resources/Languages/en-gb.Designer.cs b/src/Resources/Languages/en-gb.Designer.cs
new file mode 100644
index 0000000..9a45b93
--- /dev/null
+++ b/src/Resources/Languages/en-gb.Designer.cs
@@ -0,0 +1,405 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Cordial.Resources.Languages {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class en_gb {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal en_gb() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Cordial.Resources.Languages.en-gb", typeof(en_gb).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Select All.
+ ///
+ internal static string edit_selectall {
+ get {
+ return ResourceManager.GetString("edit_selectall", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Close Window.
+ ///
+ internal static string file_close {
+ get {
+ return ResourceManager.GetString("file_close", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Close to Notification Tray.
+ ///
+ internal static string file_closetotray {
+ get {
+ return ResourceManager.GetString("file_closetotray", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Export feeds as ompl.
+ ///
+ internal static string file_exportopml {
+ get {
+ return ResourceManager.GetString("file_exportopml", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Import feeds from opml....
+ ///
+ internal static string file_importopml {
+ get {
+ return ResourceManager.GetString("file_importopml", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Preferences....
+ ///
+ internal static string file_preferences {
+ get {
+ return ResourceManager.GetString("file_preferences", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Quit.
+ ///
+ internal static string file_quit {
+ get {
+ return ResourceManager.GetString("file_quit", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Show Window.
+ ///
+ internal static string file_showwindow {
+ get {
+ return ResourceManager.GetString("file_showwindow", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Cleanup.
+ ///
+ internal static string generic_cleanup {
+ get {
+ return ResourceManager.GetString("generic_cleanup", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Download.
+ ///
+ internal static string generic_download {
+ get {
+ return ResourceManager.GetString("generic_download", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Downloads.
+ ///
+ internal static string generic_downloads {
+ get {
+ return ResourceManager.GetString("generic_downloads", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Download speed: {0}kB/s.
+ ///
+ internal static string generic_downloadspeed {
+ get {
+ return ResourceManager.GetString("generic_downloadspeed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Edit.
+ ///
+ internal static string generic_edit {
+ get {
+ return ResourceManager.GetString("generic_edit", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to File.
+ ///
+ internal static string generic_file {
+ get {
+ return ResourceManager.GetString("generic_file", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Help.
+ ///
+ internal static string generic_help {
+ get {
+ return ResourceManager.GetString("generic_help", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Live Downloads: {0}.
+ ///
+ internal static string generic_livedownloads {
+ get {
+ return ResourceManager.GetString("generic_livedownloads", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Log.
+ ///
+ internal static string generic_log {
+ get {
+ return ResourceManager.GetString("generic_log", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to No.
+ ///
+ internal static string generic_no {
+ get {
+ return ResourceManager.GetString("generic_no", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Run Check.
+ ///
+ internal static string generic_runcheck {
+ get {
+ return ResourceManager.GetString("generic_runcheck", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Subscribe.
+ ///
+ internal static string generic_subscribe {
+ get {
+ return ResourceManager.GetString("generic_subscribe", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Subscriptions.
+ ///
+ internal static string generic_subscriptions {
+ get {
+ return ResourceManager.GetString("generic_subscriptions", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Tools.
+ ///
+ internal static string generic_tools {
+ get {
+ return ResourceManager.GetString("generic_tools", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to View.
+ ///
+ internal static string generic_view {
+ get {
+ return ResourceManager.GetString("generic_view", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Yes.
+ ///
+ internal static string generic_yes {
+ get {
+ return ResourceManager.GetString("generic_yes", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to About.
+ ///
+ internal static string help_about {
+ get {
+ return ResourceManager.GetString("help_about", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Check for updates....
+ ///
+ internal static string help_checkupdates {
+ get {
+ return ResourceManager.GetString("help_checkupdates", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Report a problem.
+ ///
+ internal static string help_reportproblem {
+ get {
+ return ResourceManager.GetString("help_reportproblem", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to English (Great Britain).
+ ///
+ internal static string human_name {
+ get {
+ return ResourceManager.GetString("human_name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Add Feed.
+ ///
+ internal static string tools_addfeed {
+ get {
+ return ResourceManager.GetString("tools_addfeed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Catch-up.
+ ///
+ internal static string tools_catchup {
+ get {
+ return ResourceManager.GetString("tools_catchup", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Check All.
+ ///
+ internal static string tools_checkall {
+ get {
+ return ResourceManager.GetString("tools_checkall", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Check Selected.
+ ///
+ internal static string tools_checkselected {
+ get {
+ return ResourceManager.GetString("tools_checkselected", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Feed Properties.
+ ///
+ internal static string tools_feedprops {
+ get {
+ return ResourceManager.GetString("tools_feedprops", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Remove Feed.
+ ///
+ internal static string tools_removefeed {
+ get {
+ return ResourceManager.GetString("tools_removefeed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Scheduler.
+ ///
+ internal static string tools_scheduler {
+ get {
+ return ResourceManager.GetString("tools_scheduler", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Select Language.
+ ///
+ internal static string tools_selectlang {
+ get {
+ return ResourceManager.GetString("tools_selectlang", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to An update is available.
+ ///
+ internal static string update_caption {
+ get {
+ return ResourceManager.GetString("update_caption", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to There's a new version available, do you wish to update?.
+ ///
+ internal static string update_maintext {
+ get {
+ return ResourceManager.GetString("update_maintext", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/src/Resources/Languages/en-gb.resx b/src/Resources/Languages/en-gb.resx
new file mode 100644
index 0000000..ec071fb
--- /dev/null
+++ b/src/Resources/Languages/en-gb.resx
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ English (Great Britain)
+
+
+ Cleanup
+
+
+ Download
+
+
+ Downloads
+
+
+ Edit
+
+
+ File
+
+
+ Help
+
+
+ Log
+
+
+ Subscribe
+
+
+ Subscriptions
+
+
+ Tools
+
+
+ View
+
+
+ Select All
+
+
+ Close Window
+
+
+ Export feeds as ompl
+
+
+ Import feeds from opml...
+
+
+ Preferences...
+
+
+ Quit
+
+
+ Download speed: {0}kB/s
+
+
+ Live Downloads: {0}
+
+
+ About
+
+
+ Check for updates...
+
+
+ Report a problem
+
+
+ Add Feed
+
+
+ Catch-up
+
+
+ Check All
+
+
+ Check Selected
+
+
+ Feed Properties
+
+
+ Remove Feed
+
+
+ Scheduler
+
+
+ Select Language
+
+
+ Show Window
+
+
+ Run Check
+
+
+ Close to Notification Tray
+
+
+ No
+
+
+ Yes
+
+
+ An update is available
+
+
+ There's a new version available, do you wish to update?
+
+
\ No newline at end of file
diff --git a/src/Resources/Languages/nl-nl.Designer.cs b/src/Resources/Languages/nl-nl.Designer.cs
new file mode 100644
index 0000000..6301c4b
--- /dev/null
+++ b/src/Resources/Languages/nl-nl.Designer.cs
@@ -0,0 +1,396 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Cordial.Resources.Languages {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class nl_nl {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal nl_nl() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Cordial.Resources.Languages.nl-nl", typeof(nl_nl).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Selecteer alles.
+ ///
+ internal static string edit_selectall {
+ get {
+ return ResourceManager.GetString("edit_selectall", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Venster sluiten.
+ ///
+ internal static string file_close {
+ get {
+ return ResourceManager.GetString("file_close", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Sluit naar systeemvak.
+ ///
+ internal static string file_closetotray {
+ get {
+ return ResourceManager.GetString("file_closetotray", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Exporteer feeds naar OPML.
+ ///
+ internal static string file_exportopml {
+ get {
+ return ResourceManager.GetString("file_exportopml", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Importeer feeds uit OPML.
+ ///
+ internal static string file_importopml {
+ get {
+ return ResourceManager.GetString("file_importopml", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Voorkeuren.
+ ///
+ internal static string file_preferences {
+ get {
+ return ResourceManager.GetString("file_preferences", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Afsluiten.
+ ///
+ internal static string file_quit {
+ get {
+ return ResourceManager.GetString("file_quit", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Toon venster.
+ ///
+ internal static string file_showwindow {
+ get {
+ return ResourceManager.GetString("file_showwindow", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Schoonmaken.
+ ///
+ internal static string generic_cleanup {
+ get {
+ return ResourceManager.GetString("generic_cleanup", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Downloaden.
+ ///
+ internal static string generic_download {
+ get {
+ return ResourceManager.GetString("generic_download", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Download snelheid: {0}kB/s.
+ ///
+ internal static string generic_downloadspeed {
+ get {
+ return ResourceManager.GetString("generic_downloadspeed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Bewerken.
+ ///
+ internal static string generic_edit {
+ get {
+ return ResourceManager.GetString("generic_edit", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Bestand.
+ ///
+ internal static string generic_file {
+ get {
+ return ResourceManager.GetString("generic_file", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Help.
+ ///
+ internal static string generic_help {
+ get {
+ return ResourceManager.GetString("generic_help", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Live Downloads: {0}.
+ ///
+ internal static string generic_livedownloads {
+ get {
+ return ResourceManager.GetString("generic_livedownloads", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Logboek.
+ ///
+ internal static string generic_log {
+ get {
+ return ResourceManager.GetString("generic_log", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Nee.
+ ///
+ internal static string generic_no {
+ get {
+ return ResourceManager.GetString("generic_no", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Voer Check uit.
+ ///
+ internal static string generic_runcheck {
+ get {
+ return ResourceManager.GetString("generic_runcheck", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Abonneren.
+ ///
+ internal static string generic_subscribe {
+ get {
+ return ResourceManager.GetString("generic_subscribe", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Abonnementen.
+ ///
+ internal static string generic_subscriptions {
+ get {
+ return ResourceManager.GetString("generic_subscriptions", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Gereedschap.
+ ///
+ internal static string generic_tools {
+ get {
+ return ResourceManager.GetString("generic_tools", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Beeld.
+ ///
+ internal static string generic_view {
+ get {
+ return ResourceManager.GetString("generic_view", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Ja.
+ ///
+ internal static string generic_yes {
+ get {
+ return ResourceManager.GetString("generic_yes", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Over {0}.
+ ///
+ internal static string help_about {
+ get {
+ return ResourceManager.GetString("help_about", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Controleer op updates.
+ ///
+ internal static string help_checkupdates {
+ get {
+ return ResourceManager.GetString("help_checkupdates", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Meld een probleem.
+ ///
+ internal static string help_reportproblem {
+ get {
+ return ResourceManager.GetString("help_reportproblem", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Dutch (Nederlands).
+ ///
+ internal static string human_name {
+ get {
+ return ResourceManager.GetString("human_name", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Feed toevoegen.
+ ///
+ internal static string tools_addfeed {
+ get {
+ return ResourceManager.GetString("tools_addfeed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Binnenhalen.
+ ///
+ internal static string tools_catchup {
+ get {
+ return ResourceManager.GetString("tools_catchup", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Controleer alles.
+ ///
+ internal static string tools_checkall {
+ get {
+ return ResourceManager.GetString("tools_checkall", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Selectievakje geselecteerd.
+ ///
+ internal static string tools_checkselected {
+ get {
+ return ResourceManager.GetString("tools_checkselected", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Feed eigenschappen.
+ ///
+ internal static string tools_feedprops {
+ get {
+ return ResourceManager.GetString("tools_feedprops", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Feed verwijderen.
+ ///
+ internal static string tools_removefeed {
+ get {
+ return ResourceManager.GetString("tools_removefeed", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Rooster.
+ ///
+ internal static string tools_scheduler {
+ get {
+ return ResourceManager.GetString("tools_scheduler", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Selecteer taal.
+ ///
+ internal static string tools_selectlang {
+ get {
+ return ResourceManager.GetString("tools_selectlang", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Er is een update beschikbaar..
+ ///
+ internal static string update_caption {
+ get {
+ return ResourceManager.GetString("update_caption", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Er is een nieuwe versie beschikbaar, wilt u updaten?.
+ ///
+ internal static string update_maintext {
+ get {
+ return ResourceManager.GetString("update_maintext", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/src/Resources/Languages/nl-nl.resx b/src/Resources/Languages/nl-nl.resx
new file mode 100644
index 0000000..f417061
--- /dev/null
+++ b/src/Resources/Languages/nl-nl.resx
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Dutch (Nederlands)
+
+
+ Schoonmaken
+
+
+ Downloaden
+
+
+ Bewerken
+
+
+ Bestand
+
+
+ Help
+
+
+ Logboek
+
+
+ Abonneren
+
+
+ Abonnementen
+
+
+ Gereedschap
+
+
+ Beeld
+
+
+ Nee
+
+
+ Ja
+
+
+ Er is een update beschikbaar.
+
+
+ Er is een nieuwe versie beschikbaar, wilt u updaten?
+
+
+ Selecteer alles
+
+
+ Venster sluiten
+
+
+ Sluit naar systeemvak
+
+
+ Exporteer feeds naar OPML
+
+
+ Importeer feeds uit OPML
+
+
+ Voorkeuren
+
+
+ Afsluiten
+
+
+ Toon venster
+
+
+ Download snelheid: {0}kB/s
+
+
+ Live Downloads: {0}
+
+
+ Voer Check uit
+
+
+ Over {0}
+
+
+ Controleer op updates
+
+
+ Meld een probleem
+
+
+ Feed toevoegen
+
+
+ Binnenhalen
+
+
+ Controleer alles
+
+
+ Selectievakje geselecteerd
+
+
+ Feed eigenschappen
+
+
+ Feed verwijderen
+
+
+ Rooster
+
+
+ Selecteer taal
+
+
\ No newline at end of file
diff --git a/src/packages.config b/src/packages.config
new file mode 100644
index 0000000..15d0373
--- /dev/null
+++ b/src/packages.config
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/submodules/OPMLCore.NET b/submodules/OPMLCore.NET
new file mode 160000
index 0000000..8d37cd0
--- /dev/null
+++ b/submodules/OPMLCore.NET
@@ -0,0 +1 @@
+Subproject commit 8d37cd062b3180fdcc3c92155f516335c5e68740