mirror of
https://github.com/ckaczor/FeedCenter.git
synced 2026-01-13 17:22:48 -05:00
Some cleanup
This commit is contained in:
@@ -62,12 +62,8 @@ namespace FeedCenter
|
|||||||
|
|
||||||
// Set the callbacks into the provider
|
// Set the callbacks into the provider
|
||||||
genericProvider.OpenDataStore = SettingsStore.OpenDataStore;
|
genericProvider.OpenDataStore = SettingsStore.OpenDataStore;
|
||||||
genericProvider.CloseDataStore = SettingsStore.CloseDataStore;
|
|
||||||
genericProvider.GetSettingValue = SettingsStore.GetSettingValue;
|
genericProvider.GetSettingValue = SettingsStore.GetSettingValue;
|
||||||
genericProvider.SetSettingValue = SettingsStore.SetSettingValue;
|
genericProvider.SetSettingValue = SettingsStore.SetSettingValue;
|
||||||
genericProvider.DeleteSettingsForVersion = SettingsStore.DeleteSettingsForVersion;
|
|
||||||
genericProvider.GetVersionList = SettingsStore.GetVersionList;
|
|
||||||
genericProvider.DeleteOldVersionsOnUpgrade = !IsDebugBuild;
|
|
||||||
|
|
||||||
Log.Logger = new LoggerConfiguration()
|
Log.Logger = new LoggerConfiguration()
|
||||||
.Enrich.WithThreadId()
|
.Enrich.WithThreadId()
|
||||||
|
|||||||
@@ -125,7 +125,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ChrisKaczor.ApplicationUpdate" Version="1.0.2" />
|
<PackageReference Include="ChrisKaczor.ApplicationUpdate" Version="1.0.2" />
|
||||||
<PackageReference Include="ChrisKaczor.GenericSettingsProvider" Version="1.0.2" />
|
<PackageReference Include="ChrisKaczor.GenericSettingsProvider" Version="1.0.3" />
|
||||||
<PackageReference Include="ChrisKaczor.InstalledBrowsers" Version="1.0.2" />
|
<PackageReference Include="ChrisKaczor.InstalledBrowsers" Version="1.0.2" />
|
||||||
<PackageReference Include="ChrisKaczor.Wpf.Application.SingleInstance" Version="1.0.4" />
|
<PackageReference Include="ChrisKaczor.Wpf.Application.SingleInstance" Version="1.0.4" />
|
||||||
<PackageReference Include="ChrisKaczor.Wpf.Application.StartWithWindows" Version="1.0.2" />
|
<PackageReference Include="ChrisKaczor.Wpf.Application.StartWithWindows" Version="1.0.2" />
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ namespace FeedCenter
|
|||||||
|
|
||||||
var feed = (Feed) FeedDataGrid.SelectedItem;
|
var feed = (Feed) FeedDataGrid.SelectedItem;
|
||||||
|
|
||||||
_database.SaveChanges(() => feed.Read(_database, true));
|
_database.SaveChanges(() => feed.Read(true));
|
||||||
|
|
||||||
var selectedIndex = FeedDataGrid.SelectedIndex;
|
var selectedIndex = FeedDataGrid.SelectedIndex;
|
||||||
|
|
||||||
|
|||||||
@@ -104,19 +104,13 @@ namespace FeedCenter.FeedParsers
|
|||||||
{
|
{
|
||||||
var feedType = DetectFeedType(feedText);
|
var feedType = DetectFeedType(feedText);
|
||||||
|
|
||||||
switch (feedType)
|
return feedType switch
|
||||||
{
|
{
|
||||||
case FeedType.Rss:
|
FeedType.Rss => new RssParser(feed),
|
||||||
return new RssParser(feed);
|
FeedType.Rdf => new RdfParser(feed),
|
||||||
|
FeedType.Atom => new AtomParser(feed),
|
||||||
case FeedType.Rdf:
|
_ => throw new ArgumentException($"Feed type {feedType} is not supported")
|
||||||
return new RdfParser(feed);
|
};
|
||||||
|
|
||||||
case FeedType.Atom:
|
|
||||||
return new AtomParser(feed);
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new ArgumentException($"Feed type {feedType} is not supported");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static FeedType DetectFeedType(string feedText)
|
public static FeedType DetectFeedType(string feedText)
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ namespace FeedCenter
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public class Feed : RealmObject
|
public partial class Feed : RealmObject
|
||||||
{
|
{
|
||||||
[PrimaryKey]
|
[PrimaryKey]
|
||||||
[MapTo("ID")]
|
[MapTo("ID")]
|
||||||
@@ -140,11 +140,11 @@ namespace FeedCenter
|
|||||||
|
|
||||||
#region Reading
|
#region Reading
|
||||||
|
|
||||||
public FeedReadResult Read(FeedCenterEntities database, bool forceRead = false)
|
public FeedReadResult Read(bool forceRead = false)
|
||||||
{
|
{
|
||||||
Log.Logger.Information("Reading feed: {0}", Source);
|
Log.Logger.Information("Reading feed: {0}", Source);
|
||||||
|
|
||||||
var result = ReadFeed(database, forceRead);
|
var result = ReadFeed(forceRead);
|
||||||
|
|
||||||
// Handle the result
|
// Handle the result
|
||||||
switch (result)
|
switch (result)
|
||||||
@@ -224,7 +224,7 @@ namespace FeedCenter
|
|||||||
feedText = feedText.Replace(" ", " ");
|
feedText = feedText.Replace(" ", " ");
|
||||||
|
|
||||||
// Find ampersands that aren't properly escaped and replace them with escaped versions
|
// Find ampersands that aren't properly escaped and replace them with escaped versions
|
||||||
var r = new Regex("&(?!(?:[a-z]+|#[0-9]+|#x[0-9a-f]+);)");
|
var r = UnescapedAmpersandRegex();
|
||||||
feedText = r.Replace(feedText, "&");
|
feedText = r.Replace(feedText, "&");
|
||||||
|
|
||||||
return Tuple.Create(FeedReadResult.Success, feedText);
|
return Tuple.Create(FeedReadResult.Success, feedText);
|
||||||
@@ -291,7 +291,7 @@ namespace FeedCenter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private FeedReadResult ReadFeed(FeedCenterEntities database, bool forceRead)
|
private FeedReadResult ReadFeed(bool forceRead)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -364,6 +364,9 @@ namespace FeedCenter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[GeneratedRegex("&(?!(?:[a-z]+|#[0-9]+|#x[0-9a-f]+);)")]
|
||||||
|
private static partial Regex UnescapedAmpersandRegex();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
using System;
|
using FeedCenter.Options;
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using FeedCenter.Options;
|
|
||||||
using Realms;
|
using Realms;
|
||||||
|
using System;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace FeedCenter
|
namespace FeedCenter
|
||||||
{
|
{
|
||||||
public class FeedItem : RealmObject
|
public partial class FeedItem : RealmObject
|
||||||
{
|
{
|
||||||
[PrimaryKey]
|
[PrimaryKey]
|
||||||
[MapTo("ID")]
|
[MapTo("ID")]
|
||||||
@@ -30,22 +30,20 @@ namespace FeedCenter
|
|||||||
return new FeedItem { Id = System.Guid.NewGuid() };
|
return new FeedItem { Id = System.Guid.NewGuid() };
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Methods
|
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
var title = Title;
|
var title = Title;
|
||||||
|
|
||||||
switch (Properties.Settings.Default.MultipleLineDisplay)
|
switch (Properties.Settings.Default.MultipleLineDisplay)
|
||||||
{
|
{
|
||||||
case Options.MultipleLineDisplay.SingleLine:
|
case MultipleLineDisplay.SingleLine:
|
||||||
|
|
||||||
// Strip any newlines from the title
|
// Strip any newlines from the title
|
||||||
title = Regex.Replace(title, @"\n", " ");
|
title = NewlineRegex().Replace(title, " ");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Options.MultipleLineDisplay.FirstLine:
|
case MultipleLineDisplay.FirstLine:
|
||||||
|
|
||||||
// Find the first newline
|
// Find the first newline
|
||||||
var newlineIndex = title.IndexOf("\n", StringComparison.Ordinal);
|
var newlineIndex = title.IndexOf("\n", StringComparison.Ordinal);
|
||||||
@@ -62,10 +60,10 @@ namespace FeedCenter
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Condense multiple spaces to one space
|
// Condense multiple spaces to one space
|
||||||
title = Regex.Replace(title, @"[ ]{2,}", " ");
|
title = MultipleSpaceRegex().Replace(title, " ");
|
||||||
|
|
||||||
// Condense tabs to one space
|
// Condense tabs to one space
|
||||||
title = Regex.Replace(title, @"\t", " ");
|
title = TabRegex().Replace(title, " ");
|
||||||
|
|
||||||
// If the title is blank then put in the "no title" title
|
// If the title is blank then put in the "no title" title
|
||||||
if (title.Length == 0)
|
if (title.Length == 0)
|
||||||
@@ -74,20 +72,13 @@ namespace FeedCenter
|
|||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
//public void ProcessActions(IEnumerable<FeedAction> feedActions)
|
[GeneratedRegex("\\n")]
|
||||||
//{
|
private static partial Regex NewlineRegex();
|
||||||
// foreach (FeedAction feedAction in feedActions)
|
|
||||||
// {
|
|
||||||
// switch (feedAction.Field)
|
|
||||||
// {
|
|
||||||
// case 1:
|
|
||||||
|
|
||||||
// Title = Regex.Replace(Title, feedAction.Search, feedAction.Replace);
|
[GeneratedRegex("[ ]{2,}")]
|
||||||
// break;
|
private static partial Regex MultipleSpaceRegex();
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
#endregion
|
[GeneratedRegex("\\t")]
|
||||||
|
private static partial Regex TabRegex();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -26,7 +26,7 @@ namespace FeedCenter
|
|||||||
var endPosition = commandLine.IndexOf(" ", startPosition, StringComparison.Ordinal);
|
var endPosition = commandLine.IndexOf(" ", startPosition, StringComparison.Ordinal);
|
||||||
|
|
||||||
// Extract the feed URL
|
// Extract the feed URL
|
||||||
var feedUrl = commandLine.Substring(startPosition, endPosition - startPosition);
|
var feedUrl = commandLine[startPosition..endPosition];
|
||||||
|
|
||||||
// Add the HTTP protocol by default
|
// Add the HTTP protocol by default
|
||||||
feedUrl = "http://" + feedUrl;
|
feedUrl = "http://" + feedUrl;
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ namespace FeedCenter
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Read the feed for the first time
|
// Read the feed for the first time
|
||||||
var feedReadResult = feed.Read(_database);
|
var feedReadResult = feed.Read();
|
||||||
|
|
||||||
// See if we read the feed okay
|
// See if we read the feed okay
|
||||||
if (feedReadResult == FeedReadResult.Success)
|
if (feedReadResult == FeedReadResult.Success)
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ namespace FeedCenter
|
|||||||
foreach (var feed in feedsToRead)
|
foreach (var feed in feedsToRead)
|
||||||
{
|
{
|
||||||
// Read the feed
|
// Read the feed
|
||||||
database.SaveChanges(() => feed.Read(database, workerInput.ForceRead));
|
database.SaveChanges(() => feed.Read(workerInput.ForceRead));
|
||||||
|
|
||||||
// Increment progress
|
// Increment progress
|
||||||
currentProgress += 1;
|
currentProgress += 1;
|
||||||
|
|||||||
@@ -131,9 +131,8 @@ namespace FeedCenter
|
|||||||
break;
|
break;
|
||||||
case Dock.Left:
|
case Dock.Left:
|
||||||
case Dock.Right:
|
case Dock.Right:
|
||||||
throw new NotSupportedException();
|
|
||||||
default:
|
default:
|
||||||
throw new ArgumentOutOfRangeException(nameof(Settings.Default.ToolbarLocation));
|
throw new NotSupportedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -153,8 +152,8 @@ namespace FeedCenter
|
|||||||
_database.Refresh();
|
_database.Refresh();
|
||||||
|
|
||||||
_feedList = _currentCategory == null
|
_feedList = _currentCategory == null
|
||||||
? _database.Feeds
|
? _database.Feeds.ToList()
|
||||||
: _database.Feeds.Where(feed => feed.Category.Id == _currentCategory.Id);
|
: _database.Feeds.Where(feed => feed.Category.Id == _currentCategory.Id).ToList();
|
||||||
|
|
||||||
UpdateToolbarButtonState();
|
UpdateToolbarButtonState();
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ public class CheckedListItem<T> : INotifyPropertyChanged
|
|||||||
{
|
{
|
||||||
_item = value;
|
_item = value;
|
||||||
|
|
||||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Item"));
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Item)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ public class CheckedListItem<T> : INotifyPropertyChanged
|
|||||||
{
|
{
|
||||||
_isChecked = value;
|
_isChecked = value;
|
||||||
|
|
||||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("IsChecked"));
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsChecked)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
using FeedCenter.Data;
|
using FeedCenter.Data;
|
||||||
using FeedCenter.Options;
|
using FeedCenter.Options;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace FeedCenter
|
namespace FeedCenter
|
||||||
@@ -18,11 +17,7 @@ namespace FeedCenter
|
|||||||
return Database.Entities;
|
return Database.Entities;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CloseDataStore(object dataStore)
|
public static string GetSettingValue(object dataStore, string name, Version _)
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string GetSettingValue(object dataStore, string name, Version version)
|
|
||||||
{
|
{
|
||||||
var entities = (FeedCenterEntities) dataStore;
|
var entities = (FeedCenterEntities) dataStore;
|
||||||
|
|
||||||
@@ -31,7 +26,7 @@ namespace FeedCenter
|
|||||||
return setting?.Value;
|
return setting?.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SetSettingValue(object dataStore, string name, Version version, string value)
|
public static void SetSettingValue(object dataStore, string name, Version _, string value)
|
||||||
{
|
{
|
||||||
var entities = (FeedCenterEntities) dataStore;
|
var entities = (FeedCenterEntities) dataStore;
|
||||||
|
|
||||||
@@ -57,11 +52,5 @@ namespace FeedCenter
|
|||||||
setting.Value = value;
|
setting.Value = value;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Version> GetVersionList(object dataStore) => null;
|
|
||||||
|
|
||||||
public static void DeleteSettingsForVersion(object dataStore, Version version)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -193,5 +193,7 @@ public partial class SplashWindow : IDisposable
|
|||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
_backgroundWorker?.Dispose();
|
_backgroundWorker?.Dispose();
|
||||||
|
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -48,28 +48,26 @@ public class XmlSanitizingStream : StreamReader
|
|||||||
character <= 0x8 ||
|
character <= 0x8 ||
|
||||||
character == 0xB ||
|
character == 0xB ||
|
||||||
character == 0xC ||
|
character == 0xC ||
|
||||||
(character >= 0xE && character <= 0x1F) ||
|
character is >= 0xE and <= 0x1F ||
|
||||||
(character >= 0x7F && character <= 0x84) ||
|
character is >= 0x7F and <= 0x84 ||
|
||||||
(character >= 0x86 && character <= 0x9F) ||
|
character is >= 0x86 and <= 0x9F ||
|
||||||
character > 0x10FFFF
|
character > 0x10FFFF
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
case "1.0": // http://www.w3.org/TR/REC-xml/#charsets
|
case "1.0": // http://www.w3.org/TR/REC-xml/#charsets
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
(
|
character == 0x9 /* == '\t' == 9 */ ||
|
||||||
character == 0x9 /* == '\t' == 9 */ ||
|
character == 0xA /* == '\n' == 10 */ ||
|
||||||
character == 0xA /* == '\n' == 10 */ ||
|
character == 0xD /* == '\r' == 13 */ ||
|
||||||
character == 0xD /* == '\r' == 13 */ ||
|
character is >= 0x20 and <= 0xD7FF ||
|
||||||
(character >= 0x20 && character <= 0xD7FF) ||
|
character is >= 0xE000 and <= 0xFFFD ||
|
||||||
(character >= 0xE000 && character <= 0xFFFD) ||
|
character is >= 0x10000 and <= 0x10FFFF;
|
||||||
(character >= 0x10000 && character <= 0x10FFFF)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
throw new ArgumentOutOfRangeException
|
throw new ArgumentOutOfRangeException
|
||||||
("xmlVersion", string.Format("'{0}' is not a valid XML version.", xmlVersion));
|
(nameof(xmlVersion), @$"'{xmlVersion}' is not a valid XML version.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -133,28 +131,28 @@ public class XmlSanitizingStream : StreamReader
|
|||||||
#region Read*() method overrides
|
#region Read*() method overrides
|
||||||
|
|
||||||
// The following methods are exact copies of the methods in TextReader,
|
// The following methods are exact copies of the methods in TextReader,
|
||||||
// extracting by disassembling it in Refelctor
|
// extracting by disassembling it in Reflector
|
||||||
|
|
||||||
public override int Read(char[] buffer, int index, int count)
|
public override int Read(char[] buffer, int index, int count)
|
||||||
{
|
{
|
||||||
if (buffer == null)
|
if (buffer == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException("buffer");
|
throw new ArgumentNullException(nameof(buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentOutOfRangeException("index");
|
throw new ArgumentOutOfRangeException(nameof(index));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count < 0)
|
if (count < 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentOutOfRangeException("count");
|
throw new ArgumentOutOfRangeException(nameof(count));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((buffer.Length - index) < count)
|
if (buffer.Length - index < count)
|
||||||
{
|
{
|
||||||
throw new ArgumentException();
|
throw new ArgumentOutOfRangeException(nameof(buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
var num = 0;
|
var num = 0;
|
||||||
@@ -179,7 +177,7 @@ public class XmlSanitizingStream : StreamReader
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
num2 += num = Read(buffer, index + num2, count - num2);
|
num2 += num = Read(buffer, index + num2, count - num2);
|
||||||
} while ((num > 0) && (num2 < count));
|
} while (num > 0 && num2 < count);
|
||||||
|
|
||||||
return num2;
|
return num2;
|
||||||
}
|
}
|
||||||
@@ -193,16 +191,11 @@ public class XmlSanitizingStream : StreamReader
|
|||||||
switch (num)
|
switch (num)
|
||||||
{
|
{
|
||||||
case -1:
|
case -1:
|
||||||
if (builder.Length > 0)
|
return builder.Length > 0 ? builder.ToString() : null;
|
||||||
{
|
|
||||||
return builder.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
|
|
||||||
case 13:
|
case 13:
|
||||||
case 10:
|
case 10:
|
||||||
if ((num == 13) && (Peek() == 10))
|
if (num == 13 && Peek() == 10)
|
||||||
{
|
{
|
||||||
Read();
|
Read();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user