Init Commit

master
exsersewo 4 years ago
parent c60a2c2682
commit ee6c67b154
  1. 4
      .gitmodules
  2. 364
      src/.gitignore
  3. 1
      src/.gitkeep
  4. 4
      src/.gitmodules
  5. 14
      src/App.config
  6. 26
      src/AppProps.cs
  7. 224
      src/Cordial.csproj
  8. 41
      src/Cordial.sln
  9. 225
      src/External/MessageBoxManager.cs
  10. 875
      src/Form1.Designer.cs
  11. 396
      src/Form1.cs
  12. 728
      src/Form1.resx
  13. 82
      src/LocaleManager.cs
  14. 108
      src/Log.cs
  15. 81
      src/Models/Configuration.cs
  16. 21
      src/Models/GithubStruct.cs
  17. 10
      src/Models/Podcast.cs
  18. 10
      src/Models/PodcastStatus.cs
  19. 20
      src/Models/RSSFeed.cs
  20. 22
      src/Program.cs
  21. 38
      src/Properties/AssemblyInfo.cs
  22. 93
      src/Properties/DataSources/Podcast.datasource
  23. 70
      src/Properties/Resources.Designer.cs
  24. 117
      src/Properties/Resources.resx
  25. 29
      src/Properties/Settings.Designer.cs
  26. 7
      src/Properties/Settings.settings
  27. BIN
      src/Resources/Icon/lime.ico
  28. 405
      src/Resources/Languages/en-gb.Designer.cs
  29. 234
      src/Resources/Languages/en-gb.resx
  30. 396
      src/Resources/Languages/nl-nl.Designer.cs
  31. 231
      src/Resources/Languages/nl-nl.resx
  32. 17
      src/packages.config
  33. 1
      submodules/OPMLCore.NET

4
.gitmodules vendored

@ -0,0 +1,4 @@
[submodule "submodules/OPMLCore.NET"]
path = submodules/OPMLCore.NET
url = https://github.com/fnya/OPMLCore.NET
branch = master

364
src/.gitignore vendored

@ -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/*

4
src/.gitmodules vendored

@ -0,0 +1,4 @@
[submodule "submodules/OPMLCore.NET"]
path = submodules/OPMLCore.NET
url = https://github.com/fnya/OPMLCore.NET
branch = master

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

@ -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<GithubStruct> OpenSourceProjects = new List<GithubStruct>
{
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")
};
}
}

@ -0,0 +1,224 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{7385FD85-EE39-4DB2-9853-7AD2736FAB18}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>Cordial</RootNamespace>
<AssemblyName>Cordial</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<IsWebBootstrapper>false</IsWebBootstrapper>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>0.1.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'PreRelease|AnyCPU'">
<OutputPath>bin\PreRelease\</OutputPath>
<DefineConstants>TRACE;PRERELEASE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'PreRelease Debug|AnyCPU'">
<OutputPath>bin\PreRelease Debug\</OutputPath>
<DefineConstants>TRACE;PRERELEASE; DEBUG</DefineConstants>
<Optimize>false</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<StartupObject>Cordial.Program</StartupObject>
</PropertyGroup>
<ItemGroup>
<Reference Include="Argotic.Common, Version=2008.0.2.0, Culture=neutral, PublicKeyToken=84b2ce808fb02469, processorArchitecture=MSIL">
<HintPath>packages\Argotic.Common.2008.0.2.0\lib\Net35\Argotic.Common.dll</HintPath>
</Reference>
<Reference Include="Argotic.Core, Version=2008.0.2.0, Culture=neutral, PublicKeyToken=84b2ce808fb02469, processorArchitecture=MSIL">
<HintPath>packages\Argotic.Core.2008.0.2.0\lib\Net35\Argotic.Core.dll</HintPath>
</Reference>
<Reference Include="Argotic.Extensions, Version=2008.0.2.0, Culture=neutral, PublicKeyToken=84b2ce808fb02469, processorArchitecture=MSIL">
<HintPath>packages\Argotic.Extensions.2008.0.2.0\lib\Net35\Argotic.Extensions.dll</HintPath>
</Reference>
<Reference Include="Argotic.Web, Version=2008.0.2.0, Culture=neutral, PublicKeyToken=84b2ce808fb02469, processorArchitecture=MSIL">
<HintPath>packages\Argotic.Web.2008.0.2.0\lib\Net35\Argotic.Web.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="Octokit, Version=0.48.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>packages\Octokit.0.48.0\lib\net46\Octokit.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Text.Encodings.Web, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Text.Encodings.Web.5.0.0\lib\net461\System.Text.Encodings.Web.dll</HintPath>
</Reference>
<Reference Include="System.Text.Json, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Text.Json.5.0.0\lib\net461\System.Text.Json.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AppProps.cs" />
<Compile Include="External\MessageBoxManager.cs" />
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Log.cs" />
<Compile Include="Models\Configuration.cs" />
<Compile Include="Models\GithubStruct.cs" />
<Compile Include="Models\Podcast.cs" />
<Compile Include="Models\PodcastStatus.cs" />
<Compile Include="Models\RSSFeed.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Resources\Languages\en-gb.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>en-gb.resx</DependentUpon>
</Compile>
<Compile Include="Resources\Languages\nl-nl.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>nl-nl.resx</DependentUpon>
</Compile>
<Compile Include="LocaleManager.cs">
<Generator>ResXFileCodeGenerator</Generator>
</Compile>
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<EmbeddedResource Include="Resources\Languages\en-gb.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>en-gb.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Resources\Languages\nl-nl.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>nl-nl.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\DataSources\Podcast.datasource" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="submodules\OPMLCore.NET\src\OPMLCore.NET\OPMLCore.NET.csproj">
<Project>{e015f989-878b-4ff6-a9d2-724abbe9a959}</Project>
<Name>OPMLCore.NET</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Folder Include="Resources\Icon\" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.7.2">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.7.2 %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>XCOPY "$(SolutionDir)\Resources" "$(TargetDir)\Resources\" /S /Y
RD /S /Q "$(TargetDir)\Resources\Icon"
DEL "$(TargetDir)\Resources\Languages\*.cs"</PostBuildEvent>
</PropertyGroup>
<PropertyGroup>
<PreBuildEvent>RD /S /Q "$(TargetDir)\Resources\"</PreBuildEvent>
</PropertyGroup>
</Project>

@ -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

@ -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;
/// <summary>
/// OK text
/// </summary>
public static string OK = "&OK";
/// <summary>
/// Cancel text
/// </summary>
public static string Cancel = "&Cancel";
/// <summary>
/// Abort text
/// </summary>
public static string Abort = "&Abort";
/// <summary>
/// Retry text
/// </summary>
public static string Retry = "&Retry";
/// <summary>
/// Ignore text
/// </summary>
public static string Ignore = "&Ignore";
/// <summary>
/// Yes text
/// </summary>
public static string Yes = "&Yes";
/// <summary>
/// No text
/// </summary>
public static string No = "&No";
static MessageBoxManager()
{
hookProc = new HookProc(MessageBoxHookProc);
enumProc = new EnumChildProc(MessageBoxEnumProc);
hHook = IntPtr.Zero;
}
/// <summary>
/// Enables MessageBoxManager functionality
/// </summary>
/// <remarks>
/// MessageBoxManager functionality is enabled on current thread only.
/// Each thread that needs MessageBoxManager functionality has to call this method.
/// </remarks>
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());
}
/// <summary>
/// Disables MessageBoxManager functionality
/// </summary>
/// <remarks>
/// Disables MessageBoxManager functionality on current thread only.
/// </remarks>
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;
}
}
}

875
src/Form1.Designer.cs generated

@ -0,0 +1,875 @@

namespace Cordial
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

@ -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<RSSFeed> Feeds;
string downloadDestination;
List<Podcast> 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<Podcast>();
}
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)
{
}
}
}
}

@ -0,0 +1,728 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="dataGridView1.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="podcastBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1319, 17</value>
</metadata>
<metadata name="fileMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="statusStrip2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>722, 17</value>
</metadata>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>287, 17</value>
</metadata>
<metadata name="notificationIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>424, 17</value>
</metadata>
<metadata name="notificationMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1346, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="notificationIcon.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
AABJRU5ErkJggg==
</value>
</data>
<metadata name="opmlFileOpen.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>859, 17</value>
</metadata>
<metadata name="opmlFileSave.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1026, 17</value>
</metadata>
</root>

@ -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<string, ResourceManager> locales = new Dictionary<string, ResourceManager>();
private static Dictionary<string, string> localehumannames = new Dictionary<string, string>();
public Dictionary<string, ResourceManager> Locales { get => locales; }
public Dictionary<string, string> 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;
}
}
}

@ -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;
}
}
}

@ -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<RSSFeed> Podcasts { get; set; } = new List<RSSFeed>();
public static Configuration GenerateConfiguration(string dest, IEnumerable<RSSFeed> 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<Configuration>(data, new JsonSerializerOptions
{
WriteIndented = true
});
Log.Info($"Loaded configuration from: {location}");
return config;
}
}
}

@ -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))
{
}
}
}

@ -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; }
}
}

@ -0,0 +1,10 @@
namespace Cordial.Models
{
public enum PodcastStatus
{
NewlySubscribed = 0,
Subscribed = 1,
Downloading = 2,
Syncing = 3
}
}

@ -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)) { }
}
}

@ -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
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}

@ -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")]

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is automatically generated by Visual Studio .Net. It is
used to store generic object data source configuration information.
Renaming the file extension or editing the content of this file may
cause the file to be unrecognizable by the program.
-->
<GenericObjectDataSource DisplayName="Podcast" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
<Children>
<GenericObjectDataSource DisplayName="Location" Version="1.0">
<TypeInfo>System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</TypeInfo>
<TypeUISetting>
<PropertyUISettings>
<PropertyUISetting Name="Podcast.Location">
<ControlSettings>
<ControlSetting ArtifactName="Microsoft:System.Windows.Forms:Form">
<BindableControlInfo Name="Details" Type="Microsoft.VSDesigner.Data.DataForm.Windows.DetailView" />
</ControlSetting>
</ControlSettings>
</PropertyUISetting>
<PropertyUISetting Name="AbsoluteUri">
<ControlSettings>
<ControlSetting ArtifactName="Microsoft:System.Windows.Forms:Form">
<BindableControlInfo Name="Label" Type="System.Windows.Forms.Label" AssemblyName="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</ControlSetting>
</ControlSettings>
</PropertyUISetting>
<PropertyUISetting Name="AbsolutePath">
<ControlSettings>
<ControlSetting ArtifactName="Microsoft:System.Windows.Forms:Form">
<BindableControlInfo Name="[None]" Type="Microsoft.VSDesigner.Data.BindManager.NoneControlPlaceHolder" />
</ControlSetting>
</ControlSettings>
</PropertyUISetting>
<PropertyUISetting Name="Scheme">
<ControlSettings>
<ControlSetting ArtifactName="Microsoft:System.Windows.Forms:Form">
<BindableControlInfo Name="[None]" Type="Microsoft.VSDesigner.Data.BindManager.NoneControlPlaceHolder" />
</ControlSetting>
</ControlSettings>
</PropertyUISetting>
<PropertyUISetting Name="UserEscaped">
<ControlSettings>
<ControlSetting ArtifactName="Microsoft:System.Windows.Forms:Form">
<BindableControlInfo Name="[None]" Type="Microsoft.VSDesigner.Data.BindManager.NoneControlPlaceHolder" />
</ControlSetting>
</ControlSettings>
</PropertyUISetting>
<PropertyUISetting Name="UserInfo">
<ControlSettings>
<ControlSetting ArtifactName="Microsoft:System.Windows.Forms:Form">
<BindableControlInfo Name="[None]" Type="Microsoft.VSDesigner.Data.BindManager.NoneControlPlaceHolder" />
</ControlSetting>
</ControlSettings>
</PropertyUISetting>
<PropertyUISetting Name="Query">
<ControlSettings>
<ControlSetting ArtifactName="Microsoft:System.Windows.Forms:Form">
<BindableControlInfo Name="[None]" Type="Microsoft.VSDesigner.Data.BindManager.NoneControlPlaceHolder" />
</ControlSetting>
</ControlSettings>
</PropertyUISetting>
</PropertyUISettings>
</TypeUISetting>
</GenericObjectDataSource>
</Children>
<TypeInfo>Cordial.Podcast, Cordial, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
<TypeUISetting>
<PropertyUISettings>
<PropertyUISetting Name="Status">
<ControlSettings>
<ControlSetting ArtifactName="Microsoft:System.Windows.Forms:Form">
<BindableControlInfo Name="Label" Type="System.Windows.Forms.Label" AssemblyName="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</ControlSetting>
</ControlSettings>
</PropertyUISetting>
<PropertyUISetting Name="Name">
<ControlSettings>
<ControlSetting ArtifactName="Microsoft:System.Windows.Forms:Form">
<BindableControlInfo Name="Label" Type="System.Windows.Forms.Label" AssemblyName="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</ControlSetting>
</ControlSettings>
</PropertyUISetting>
<PropertyUISetting Name="MB">
<ControlSettings>
<ControlSetting ArtifactName="Microsoft:System.Windows.Forms:Form">
<BindableControlInfo Name="Label" Type="System.Windows.Forms.Label" AssemblyName="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</ControlSetting>
</ControlSettings>
</PropertyUISetting>
</PropertyUISettings>
</TypeUISetting>
</GenericObjectDataSource>

@ -0,0 +1,70 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Cordial.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// 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()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[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;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

@ -0,0 +1,29 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------
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;
}
}
}
}

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

@ -0,0 +1,405 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Cordial.Resources.Languages {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// 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() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[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;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Select All.
/// </summary>
internal static string edit_selectall {
get {
return ResourceManager.GetString("edit_selectall", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Close Window.
/// </summary>
internal static string file_close {
get {
return ResourceManager.GetString("file_close", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Close to Notification Tray.
/// </summary>
internal static string file_closetotray {
get {
return ResourceManager.GetString("file_closetotray", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Export feeds as ompl.
/// </summary>
internal static string file_exportopml {
get {
return ResourceManager.GetString("file_exportopml", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Import feeds from opml....
/// </summary>
internal static string file_importopml {
get {
return ResourceManager.GetString("file_importopml", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Preferences....
/// </summary>
internal static string file_preferences {
get {
return ResourceManager.GetString("file_preferences", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Quit.
/// </summary>
internal static string file_quit {
get {
return ResourceManager.GetString("file_quit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Show Window.
/// </summary>
internal static string file_showwindow {
get {
return ResourceManager.GetString("file_showwindow", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Cleanup.
/// </summary>
internal static string generic_cleanup {
get {
return ResourceManager.GetString("generic_cleanup", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Download.
/// </summary>
internal static string generic_download {
get {
return ResourceManager.GetString("generic_download", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Downloads.
/// </summary>
internal static string generic_downloads {
get {
return ResourceManager.GetString("generic_downloads", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Download speed: {0}kB/s.
/// </summary>
internal static string generic_downloadspeed {
get {
return ResourceManager.GetString("generic_downloadspeed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Edit.
/// </summary>
internal static string generic_edit {
get {
return ResourceManager.GetString("generic_edit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to File.
/// </summary>
internal static string generic_file {
get {
return ResourceManager.GetString("generic_file", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Help.
/// </summary>
internal static string generic_help {
get {
return ResourceManager.GetString("generic_help", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Live Downloads: {0}.
/// </summary>
internal static string generic_livedownloads {
get {
return ResourceManager.GetString("generic_livedownloads", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Log.
/// </summary>
internal static string generic_log {
get {
return ResourceManager.GetString("generic_log", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No.
/// </summary>
internal static string generic_no {
get {
return ResourceManager.GetString("generic_no", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Run Check.
/// </summary>
internal static string generic_runcheck {
get {
return ResourceManager.GetString("generic_runcheck", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Subscribe.
/// </summary>
internal static string generic_subscribe {
get {
return ResourceManager.GetString("generic_subscribe", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Subscriptions.
/// </summary>
internal static string generic_subscriptions {
get {
return ResourceManager.GetString("generic_subscriptions", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Tools.
/// </summary>
internal static string generic_tools {
get {
return ResourceManager.GetString("generic_tools", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to View.
/// </summary>
internal static string generic_view {
get {
return ResourceManager.GetString("generic_view", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Yes.
/// </summary>
internal static string generic_yes {
get {
return ResourceManager.GetString("generic_yes", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to About.
/// </summary>
internal static string help_about {
get {
return ResourceManager.GetString("help_about", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Check for updates....
/// </summary>
internal static string help_checkupdates {
get {
return ResourceManager.GetString("help_checkupdates", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Report a problem.
/// </summary>
internal static string help_reportproblem {
get {
return ResourceManager.GetString("help_reportproblem", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to English (Great Britain).
/// </summary>
internal static string human_name {
get {
return ResourceManager.GetString("human_name", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Add Feed.
/// </summary>
internal static string tools_addfeed {
get {
return ResourceManager.GetString("tools_addfeed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Catch-up.
/// </summary>
internal static string tools_catchup {
get {
return ResourceManager.GetString("tools_catchup", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Check All.
/// </summary>
internal static string tools_checkall {
get {
return ResourceManager.GetString("tools_checkall", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Check Selected.
/// </summary>
internal static string tools_checkselected {
get {
return ResourceManager.GetString("tools_checkselected", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Feed Properties.
/// </summary>
internal static string tools_feedprops {
get {
return ResourceManager.GetString("tools_feedprops", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Remove Feed.
/// </summary>
internal static string tools_removefeed {
get {
return ResourceManager.GetString("tools_removefeed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Scheduler.
/// </summary>
internal static string tools_scheduler {
get {
return ResourceManager.GetString("tools_scheduler", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Select Language.
/// </summary>
internal static string tools_selectlang {
get {
return ResourceManager.GetString("tools_selectlang", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to An update is available.
/// </summary>
internal static string update_caption {
get {
return ResourceManager.GetString("update_caption", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to There&apos;s a new version available, do you wish to update?.
/// </summary>
internal static string update_maintext {
get {
return ResourceManager.GetString("update_maintext", resourceCulture);
}
}
}
}

@ -0,0 +1,234 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="human_name" xml:space="preserve">
<value>English (Great Britain)</value>
</data>
<data name="generic_cleanup" xml:space="preserve">
<value>Cleanup</value>
</data>
<data name="generic_download" xml:space="preserve">
<value>Download</value>
</data>
<data name="generic_downloads" xml:space="preserve">
<value>Downloads</value>
</data>
<data name="generic_edit" xml:space="preserve">
<value>Edit</value>
</data>
<data name="generic_file" xml:space="preserve">
<value>File</value>
</data>
<data name="generic_help" xml:space="preserve">
<value>Help</value>
</data>
<data name="generic_log" xml:space="preserve">
<value>Log</value>
</data>
<data name="generic_subscribe" xml:space="preserve">
<value>Subscribe</value>
</data>
<data name="generic_subscriptions" xml:space="preserve">
<value>Subscriptions</value>
</data>
<data name="generic_tools" xml:space="preserve">
<value>Tools</value>
</data>
<data name="generic_view" xml:space="preserve">
<value>View</value>
</data>
<data name="edit_selectall" xml:space="preserve">
<value>Select All</value>
</data>
<data name="file_close" xml:space="preserve">
<value>Close Window</value>
</data>
<data name="file_exportopml" xml:space="preserve">
<value>Export feeds as ompl</value>
</data>
<data name="file_importopml" xml:space="preserve">
<value>Import feeds from opml...</value>
</data>
<data name="file_preferences" xml:space="preserve">
<value>Preferences...</value>
</data>
<data name="file_quit" xml:space="preserve">
<value>Quit</value>
</data>
<data name="generic_downloadspeed" xml:space="preserve">
<value>Download speed: {0}kB/s</value>
</data>
<data name="generic_livedownloads" xml:space="preserve">
<value>Live Downloads: {0}</value>
</data>
<data name="help_about" xml:space="preserve">
<value>About</value>
</data>
<data name="help_checkupdates" xml:space="preserve">
<value>Check for updates...</value>
</data>
<data name="help_reportproblem" xml:space="preserve">
<value>Report a problem</value>
</data>
<data name="tools_addfeed" xml:space="preserve">
<value>Add Feed</value>
</data>
<data name="tools_catchup" xml:space="preserve">
<value>Catch-up</value>
</data>
<data name="tools_checkall" xml:space="preserve">
<value>Check All</value>
</data>
<data name="tools_checkselected" xml:space="preserve">
<value>Check Selected</value>
</data>
<data name="tools_feedprops" xml:space="preserve">
<value>Feed Properties</value>
</data>
<data name="tools_removefeed" xml:space="preserve">
<value>Remove Feed</value>
</data>
<data name="tools_scheduler" xml:space="preserve">
<value>Scheduler</value>
</data>
<data name="tools_selectlang" xml:space="preserve">
<value>Select Language</value>
</data>
<data name="file_showwindow" xml:space="preserve">
<value>Show Window</value>
</data>
<data name="generic_runcheck" xml:space="preserve">
<value>Run Check</value>
</data>
<data name="file_closetotray" xml:space="preserve">
<value>Close to Notification Tray</value>
</data>
<data name="generic_no" xml:space="preserve">
<value>No</value>
</data>
<data name="generic_yes" xml:space="preserve">
<value>Yes</value>
</data>
<data name="update_caption" xml:space="preserve">
<value>An update is available</value>
</data>
<data name="update_maintext" xml:space="preserve">
<value>There's a new version available, do you wish to update?</value>
</data>
</root>

@ -0,0 +1,396 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Cordial.Resources.Languages {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// 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() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[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;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Selecteer alles.
/// </summary>
internal static string edit_selectall {
get {
return ResourceManager.GetString("edit_selectall", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Venster sluiten.
/// </summary>
internal static string file_close {
get {
return ResourceManager.GetString("file_close", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Sluit naar systeemvak.
/// </summary>
internal static string file_closetotray {
get {
return ResourceManager.GetString("file_closetotray", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Exporteer feeds naar OPML.
/// </summary>
internal static string file_exportopml {
get {
return ResourceManager.GetString("file_exportopml", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Importeer feeds uit OPML.
/// </summary>
internal static string file_importopml {
get {
return ResourceManager.GetString("file_importopml", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Voorkeuren.
/// </summary>
internal static string file_preferences {
get {
return ResourceManager.GetString("file_preferences", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Afsluiten.
/// </summary>
internal static string file_quit {
get {
return ResourceManager.GetString("file_quit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Toon venster.
/// </summary>
internal static string file_showwindow {
get {
return ResourceManager.GetString("file_showwindow", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Schoonmaken.
/// </summary>
internal static string generic_cleanup {
get {
return ResourceManager.GetString("generic_cleanup", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Downloaden.
/// </summary>
internal static string generic_download {
get {
return ResourceManager.GetString("generic_download", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Download snelheid: {0}kB/s.
/// </summary>
internal static string generic_downloadspeed {
get {
return ResourceManager.GetString("generic_downloadspeed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Bewerken.
/// </summary>
internal static string generic_edit {
get {
return ResourceManager.GetString("generic_edit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Bestand.
/// </summary>
internal static string generic_file {
get {
return ResourceManager.GetString("generic_file", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Help.
/// </summary>
internal static string generic_help {
get {
return ResourceManager.GetString("generic_help", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Live Downloads: {0}.
/// </summary>
internal static string generic_livedownloads {
get {
return ResourceManager.GetString("generic_livedownloads", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Logboek.
/// </summary>
internal static string generic_log {
get {
return ResourceManager.GetString("generic_log", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Nee.
/// </summary>
internal static string generic_no {
get {
return ResourceManager.GetString("generic_no", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Voer Check uit.
/// </summary>
internal static string generic_runcheck {
get {
return ResourceManager.GetString("generic_runcheck", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Abonneren.
/// </summary>
internal static string generic_subscribe {
get {
return ResourceManager.GetString("generic_subscribe", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Abonnementen.
/// </summary>
internal static string generic_subscriptions {
get {
return ResourceManager.GetString("generic_subscriptions", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Gereedschap.
/// </summary>
internal static string generic_tools {
get {
return ResourceManager.GetString("generic_tools", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Beeld.
/// </summary>
internal static string generic_view {
get {
return ResourceManager.GetString("generic_view", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Ja.
/// </summary>
internal static string generic_yes {
get {
return ResourceManager.GetString("generic_yes", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Over {0}.
/// </summary>
internal static string help_about {
get {
return ResourceManager.GetString("help_about", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Controleer op updates.
/// </summary>
internal static string help_checkupdates {
get {
return ResourceManager.GetString("help_checkupdates", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Meld een probleem.
/// </summary>
internal static string help_reportproblem {
get {
return ResourceManager.GetString("help_reportproblem", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Dutch (Nederlands).
/// </summary>
internal static string human_name {
get {
return ResourceManager.GetString("human_name", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Feed toevoegen.
/// </summary>
internal static string tools_addfeed {
get {
return ResourceManager.GetString("tools_addfeed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Binnenhalen.
/// </summary>
internal static string tools_catchup {
get {
return ResourceManager.GetString("tools_catchup", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Controleer alles.
/// </summary>
internal static string tools_checkall {
get {
return ResourceManager.GetString("tools_checkall", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Selectievakje geselecteerd.
/// </summary>
internal static string tools_checkselected {
get {
return ResourceManager.GetString("tools_checkselected", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Feed eigenschappen.
/// </summary>
internal static string tools_feedprops {
get {
return ResourceManager.GetString("tools_feedprops", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Feed verwijderen.
/// </summary>
internal static string tools_removefeed {
get {
return ResourceManager.GetString("tools_removefeed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Rooster.
/// </summary>
internal static string tools_scheduler {
get {
return ResourceManager.GetString("tools_scheduler", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Selecteer taal.
/// </summary>
internal static string tools_selectlang {
get {
return ResourceManager.GetString("tools_selectlang", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Er is een update beschikbaar..
/// </summary>
internal static string update_caption {
get {
return ResourceManager.GetString("update_caption", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Er is een nieuwe versie beschikbaar, wilt u updaten?.
/// </summary>
internal static string update_maintext {
get {
return ResourceManager.GetString("update_maintext", resourceCulture);
}
}
}
}

@ -0,0 +1,231 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="human_name" xml:space="preserve">
<value>Dutch (Nederlands)</value>
</data>
<data name="generic_cleanup" xml:space="preserve">
<value>Schoonmaken</value>
</data>
<data name="generic_download" xml:space="preserve">
<value>Downloaden</value>
</data>
<data name="generic_edit" xml:space="preserve">
<value>Bewerken</value>
</data>
<data name="generic_file" xml:space="preserve">
<value>Bestand</value>
</data>
<data name="generic_help" xml:space="preserve">
<value>Help</value>
</data>
<data name="generic_log" xml:space="preserve">
<value>Logboek</value>
</data>
<data name="generic_subscribe" xml:space="preserve">
<value>Abonneren</value>
</data>
<data name="generic_subscriptions" xml:space="preserve">
<value>Abonnementen</value>
</data>
<data name="generic_tools" xml:space="preserve">
<value>Gereedschap</value>
</data>
<data name="generic_view" xml:space="preserve">
<value>Beeld</value>
</data>
<data name="generic_no" xml:space="preserve">
<value>Nee</value>
</data>
<data name="generic_yes" xml:space="preserve">
<value>Ja</value>
</data>
<data name="update_caption" xml:space="preserve">
<value>Er is een update beschikbaar.</value>
</data>
<data name="update_maintext" xml:space="preserve">
<value>Er is een nieuwe versie beschikbaar, wilt u updaten?</value>
</data>
<data name="edit_selectall" xml:space="preserve">
<value>Selecteer alles</value>
</data>
<data name="file_close" xml:space="preserve">
<value>Venster sluiten</value>
</data>
<data name="file_closetotray" xml:space="preserve">
<value>Sluit naar systeemvak</value>
</data>
<data name="file_exportopml" xml:space="preserve">
<value>Exporteer feeds naar OPML</value>
</data>
<data name="file_importopml" xml:space="preserve">
<value>Importeer feeds uit OPML</value>
</data>
<data name="file_preferences" xml:space="preserve">
<value>Voorkeuren</value>
</data>
<data name="file_quit" xml:space="preserve">
<value>Afsluiten</value>
</data>
<data name="file_showwindow" xml:space="preserve">
<value>Toon venster</value>
</data>
<data name="generic_downloadspeed" xml:space="preserve">
<value>Download snelheid: {0}kB/s</value>
</data>
<data name="generic_livedownloads" xml:space="preserve">
<value>Live Downloads: {0}</value>
</data>
<data name="generic_runcheck" xml:space="preserve">
<value>Voer Check uit</value>
</data>
<data name="help_about" xml:space="preserve">
<value>Over {0}</value>
</data>
<data name="help_checkupdates" xml:space="preserve">
<value>Controleer op updates</value>
</data>
<data name="help_reportproblem" xml:space="preserve">
<value>Meld een probleem</value>
</data>
<data name="tools_addfeed" xml:space="preserve">
<value>Feed toevoegen</value>
</data>
<data name="tools_catchup" xml:space="preserve">
<value>Binnenhalen</value>
</data>
<data name="tools_checkall" xml:space="preserve">
<value>Controleer alles</value>
</data>
<data name="tools_checkselected" xml:space="preserve">
<value>Selectievakje geselecteerd</value>
</data>
<data name="tools_feedprops" xml:space="preserve">
<value>Feed eigenschappen</value>
</data>
<data name="tools_removefeed" xml:space="preserve">
<value>Feed verwijderen</value>
</data>
<data name="tools_scheduler" xml:space="preserve">
<value>Rooster</value>
</data>
<data name="tools_selectlang" xml:space="preserve">
<value>Selecteer taal</value>
</data>
</root>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Argotic.Common" version="2008.0.2.0" targetFramework="net472" />
<package id="Argotic.Core" version="2008.0.2.0" targetFramework="net472" />
<package id="Argotic.Extensions" version="2008.0.2.0" targetFramework="net472" />
<package id="Argotic.Web" version="2008.0.2.0" targetFramework="net472" />
<package id="Microsoft.Bcl.AsyncInterfaces" version="5.0.0" targetFramework="net472" />
<package id="Octokit" version="0.48.0" targetFramework="net472" />
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
<package id="System.Memory" version="4.5.4" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="5.0.0" targetFramework="net472" />
<package id="System.Text.Encodings.Web" version="5.0.0" targetFramework="net472" />
<package id="System.Text.Json" version="5.0.0" targetFramework="net472" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
</packages>

@ -0,0 +1 @@
Subproject commit 8d37cd062b3180fdcc3c92155f516335c5e68740
Loading…
Cancel
Save