mirror of
https://github.com/ckaczor/FeedCenter.git
synced 2026-01-14 01:25:38 -05:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f3145d8811 | |||
| 9e2e7aabe8 | |||
| 7ee84f079b | |||
| 8f70003bef | |||
| 38f093dc5c | |||
| e5bdc80d10 | |||
| 260268194a | |||
| 8ecde89be0 | |||
| 845e80577c | |||
| 31a04b13e6 | |||
| 64d893ae0f | |||
| 0ddd38e3f2 | |||
| f5f78c8825 | |||
| 477185341e | |||
| 1db13fbe2e | |||
| c64ec21bd9 | |||
| 45009a31b9 |
@@ -1,22 +1,31 @@
|
|||||||
using FeedCenter.Data;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using FeedCenter.Data;
|
||||||
using FeedCenter.Options;
|
using FeedCenter.Options;
|
||||||
using Realms;
|
using Realms;
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace FeedCenter;
|
namespace FeedCenter;
|
||||||
|
|
||||||
public class FeedCenterEntities
|
public class FeedCenterEntities
|
||||||
{
|
{
|
||||||
public Realm RealmInstance { get; }
|
|
||||||
|
|
||||||
public RealmObservableCollection<Category> Categories { get; }
|
|
||||||
public RealmObservableCollection<Feed> Feeds { get; private set; }
|
|
||||||
public RealmObservableCollection<Setting> Settings { get; private set; }
|
|
||||||
|
|
||||||
public FeedCenterEntities()
|
public FeedCenterEntities()
|
||||||
{
|
{
|
||||||
var realmConfiguration = new RealmConfiguration($"{Database.DatabaseFile}");
|
var realmConfiguration = new RealmConfiguration($"{Database.DatabaseFile}")
|
||||||
|
{
|
||||||
|
SchemaVersion = 1,
|
||||||
|
MigrationCallback = (migration, oldSchemaVersion) =>
|
||||||
|
{
|
||||||
|
var newVersionFeeds = migration.NewRealm.All<Feed>();
|
||||||
|
|
||||||
|
foreach (var newVersionFeed in newVersionFeeds)
|
||||||
|
{
|
||||||
|
if (oldSchemaVersion == 0)
|
||||||
|
{
|
||||||
|
newVersionFeed.UserAgent = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
RealmInstance = Realm.GetInstance(realmConfiguration);
|
RealmInstance = Realm.GetInstance(realmConfiguration);
|
||||||
|
|
||||||
@@ -30,6 +39,17 @@ public class FeedCenterEntities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RealmObservableCollection<Category> Categories { get; }
|
||||||
|
|
||||||
|
public Category DefaultCategory
|
||||||
|
{
|
||||||
|
get { return Categories.First(c => c.IsDefault); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public RealmObservableCollection<Feed> Feeds { get; private set; }
|
||||||
|
private Realm RealmInstance { get; }
|
||||||
|
public RealmObservableCollection<Setting> Settings { get; private set; }
|
||||||
|
|
||||||
public void Refresh()
|
public void Refresh()
|
||||||
{
|
{
|
||||||
RealmInstance.Refresh();
|
RealmInstance.Refresh();
|
||||||
@@ -44,9 +64,4 @@ public class FeedCenterEntities
|
|||||||
{
|
{
|
||||||
return RealmInstance.BeginWrite();
|
return RealmInstance.BeginWrite();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Category DefaultCategory
|
|
||||||
{
|
|
||||||
get { return Categories.First(c => c.IsDefault); }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
<None Remove="Resources\Warning.ico" />
|
<None Remove="Resources\Warning.ico" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ChrisKaczor.ApplicationUpdate" Version="1.0.5" />
|
<PackageReference Include="ChrisKaczor.ApplicationUpdate" Version="1.0.7" />
|
||||||
<PackageReference Include="ChrisKaczor.GenericSettingsProvider" Version="1.0.4" />
|
<PackageReference Include="ChrisKaczor.GenericSettingsProvider" Version="1.0.4" />
|
||||||
<PackageReference Include="ChrisKaczor.InstalledBrowsers" Version="1.0.4" />
|
<PackageReference Include="ChrisKaczor.InstalledBrowsers" Version="1.0.4" />
|
||||||
<PackageReference Include="ChrisKaczor.Wpf.Application.SingleInstance" Version="1.0.5" />
|
<PackageReference Include="ChrisKaczor.Wpf.Application.SingleInstance" Version="1.0.5" />
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
<PackageReference Include="ChrisKaczor.Wpf.Controls.Toolbar" Version="1.0.3" />
|
<PackageReference Include="ChrisKaczor.Wpf.Controls.Toolbar" Version="1.0.3" />
|
||||||
<PackageReference Include="ChrisKaczor.Wpf.Validation" Version="1.0.4" />
|
<PackageReference Include="ChrisKaczor.Wpf.Validation" Version="1.0.4" />
|
||||||
<PackageReference Include="ChrisKaczor.Wpf.Windows.ControlBox" Version="1.0.3" />
|
<PackageReference Include="ChrisKaczor.Wpf.Windows.ControlBox" Version="1.0.3" />
|
||||||
<PackageReference Include="ChrisKaczor.Wpf.Windows.SnappingWindow" Version="1.0.3" />
|
<PackageReference Include="ChrisKaczor.Wpf.Windows.SnappingWindow" Version="1.0.4" />
|
||||||
<PackageReference Include="Dapper" Version="2.0.123" />
|
<PackageReference Include="Dapper" Version="2.0.123" />
|
||||||
<PackageReference Include="DebounceThrottle" Version="2.0.0" />
|
<PackageReference Include="DebounceThrottle" Version="2.0.0" />
|
||||||
<PackageReference Include="H.NotifyIcon.Wpf" Version="2.0.108" />
|
<PackageReference Include="H.NotifyIcon.Wpf" Version="2.0.108" />
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
<PackageReference Include="Microsoft.SqlServer.Compact" Version="4.0.8876.1" GeneratePathProperty="true">
|
<PackageReference Include="Microsoft.SqlServer.Compact" Version="4.0.8876.1" GeneratePathProperty="true">
|
||||||
<NoWarn>NU1701</NoWarn>
|
<NoWarn>NU1701</NoWarn>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.Windows.Compatibility" Version="7.0.1" />
|
<PackageReference Include="Microsoft.Windows.Compatibility" Version="7.0.6" />
|
||||||
<PackageReference Include="NameBasedGrid" Version="0.10.1">
|
<PackageReference Include="NameBasedGrid" Version="0.10.1">
|
||||||
<NoWarn>NU1701</NoWarn>
|
<NoWarn>NU1701</NoWarn>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
@@ -1,16 +1,7 @@
|
|||||||
using ChrisKaczor.ApplicationUpdate;
|
using System;
|
||||||
using FeedCenter.Data;
|
|
||||||
using FeedCenter.FeedParsers;
|
|
||||||
using FeedCenter.Properties;
|
|
||||||
using FeedCenter.Xml;
|
|
||||||
using JetBrains.Annotations;
|
|
||||||
using Realms;
|
|
||||||
using Serilog;
|
|
||||||
using System;
|
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
@@ -19,6 +10,15 @@ using System.Net.Http.Headers;
|
|||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ChrisKaczor.ApplicationUpdate;
|
||||||
|
using FeedCenter.Data;
|
||||||
|
using FeedCenter.FeedParsers;
|
||||||
|
using FeedCenter.Properties;
|
||||||
|
using FeedCenter.Xml;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
using Realms;
|
||||||
|
using Serilog;
|
||||||
|
|
||||||
namespace FeedCenter;
|
namespace FeedCenter;
|
||||||
|
|
||||||
@@ -98,9 +98,6 @@ public partial class Feed : RealmObject, INotifyDataErrorInfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[MapTo("Password")]
|
|
||||||
public string RawPassword { get; set; }
|
|
||||||
|
|
||||||
public string Password
|
public string Password
|
||||||
{
|
{
|
||||||
get => RawPassword;
|
get => RawPassword;
|
||||||
@@ -122,9 +119,15 @@ public partial class Feed : RealmObject, INotifyDataErrorInfo
|
|||||||
[MapTo("Name")]
|
[MapTo("Name")]
|
||||||
private string RawName { get; set; } = string.Empty;
|
private string RawName { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
[MapTo("Password")]
|
||||||
|
public string RawPassword { get; set; }
|
||||||
|
|
||||||
[MapTo("Source")]
|
[MapTo("Source")]
|
||||||
private string RawSource { get; set; } = string.Empty;
|
private string RawSource { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
[MapTo("Username")]
|
||||||
|
public string RawUsername { get; set; }
|
||||||
|
|
||||||
public string Source
|
public string Source
|
||||||
{
|
{
|
||||||
get => RawSource;
|
get => RawSource;
|
||||||
@@ -139,8 +142,7 @@ public partial class Feed : RealmObject, INotifyDataErrorInfo
|
|||||||
|
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
|
|
||||||
[MapTo("Username")]
|
public string UserAgent { get; set; }
|
||||||
public string RawUsername { get; set; }
|
|
||||||
|
|
||||||
public string Username
|
public string Username
|
||||||
{
|
{
|
||||||
@@ -200,6 +202,9 @@ public partial class Feed : RealmObject, INotifyDataErrorInfo
|
|||||||
case FeedReadResult.NotEnabled:
|
case FeedReadResult.NotEnabled:
|
||||||
case FeedReadResult.NotModified:
|
case FeedReadResult.NotModified:
|
||||||
|
|
||||||
|
// Reset status to success
|
||||||
|
LastReadResult = FeedReadResult.Success;
|
||||||
|
|
||||||
// Ignore
|
// Ignore
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -242,6 +247,17 @@ public partial class Feed : RealmObject, INotifyDataErrorInfo
|
|||||||
return new Tuple<FeedType, string>(feedType, retrieveResult.Item2);
|
return new Tuple<FeedType, string>(feedType, retrieveResult.Item2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GetUserAgent()
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrWhiteSpace(UserAgent))
|
||||||
|
return UserAgent;
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(Settings.Default.DefaultUserAgent))
|
||||||
|
return Settings.Default.DefaultUserAgent;
|
||||||
|
|
||||||
|
return "FeedCenter/" + UpdateCheck.LocalVersion;
|
||||||
|
}
|
||||||
|
|
||||||
private Tuple<FeedReadResult, string> RetrieveFeed()
|
private Tuple<FeedReadResult, string> RetrieveFeed()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -252,25 +268,38 @@ public partial class Feed : RealmObject, INotifyDataErrorInfo
|
|||||||
var clientHandler = new HttpClientHandler
|
var clientHandler = new HttpClientHandler
|
||||||
{
|
{
|
||||||
// Set that we'll accept compressed data
|
// Set that we'll accept compressed data
|
||||||
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
|
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate | DecompressionMethods.Brotli,
|
||||||
AllowAutoRedirect = true
|
AllowAutoRedirect = true
|
||||||
};
|
};
|
||||||
|
|
||||||
_httpClient = new HttpClient(clientHandler);
|
_httpClient = new HttpClient(clientHandler)
|
||||||
|
{
|
||||||
|
// Set a timeout
|
||||||
|
Timeout = TimeSpan.FromSeconds(10)
|
||||||
|
};
|
||||||
|
|
||||||
// Set a user agent string
|
_httpClient.DefaultRequestHeaders.Accept.ParseAdd("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
|
||||||
var userAgent = string.IsNullOrWhiteSpace(Settings.Default.DefaultUserAgent) ? "FeedCenter/" + UpdateCheck.LocalVersion : Settings.Default.DefaultUserAgent;
|
_httpClient.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate, br");
|
||||||
_httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(userAgent);
|
_httpClient.DefaultRequestHeaders.AcceptLanguage.ParseAdd("en-US,en;q=0.9");
|
||||||
|
_httpClient.DefaultRequestHeaders.CacheControl = CacheControlHeaderValue.Parse("max-age=0");
|
||||||
// Set a timeout
|
|
||||||
_httpClient.Timeout = TimeSpan.FromSeconds(10);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set a user agent string
|
||||||
|
var userAgent = GetUserAgent();
|
||||||
|
_httpClient.DefaultRequestHeaders.UserAgent.Clear();
|
||||||
|
_httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(userAgent);
|
||||||
|
|
||||||
// If we need to authenticate then set the credentials
|
// If we need to authenticate then set the credentials
|
||||||
_httpClient.DefaultRequestHeaders.Authorization = Authenticate ? new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Username}:{Password}"))) : null;
|
_httpClient.DefaultRequestHeaders.Authorization = Authenticate ? new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Username}:{Password}"))) : null;
|
||||||
|
|
||||||
|
_httpClient.DefaultRequestHeaders.IfModifiedSince = LastChecked;
|
||||||
|
|
||||||
// Attempt to get the response
|
// Attempt to get the response
|
||||||
var feedStream = _httpClient.GetStreamAsync(Source).Result;
|
var response = _httpClient.GetAsync(Source).Result;
|
||||||
|
|
||||||
|
response.EnsureSuccessStatusCode();
|
||||||
|
|
||||||
|
var feedStream = response.Content.ReadAsStream();
|
||||||
|
|
||||||
// Create the text reader
|
// Create the text reader
|
||||||
using StreamReader textReader = new XmlSanitizingStream(feedStream, Encoding.UTF8);
|
using StreamReader textReader = new XmlSanitizingStream(feedStream, Encoding.UTF8);
|
||||||
@@ -293,78 +322,28 @@ public partial class Feed : RealmObject, INotifyDataErrorInfo
|
|||||||
|
|
||||||
return Tuple.Create(FeedReadResult.Success, feedText);
|
return Tuple.Create(FeedReadResult.Success, feedText);
|
||||||
}
|
}
|
||||||
catch (IOException ioException)
|
catch (HttpRequestException httpRequestException)
|
||||||
{
|
{
|
||||||
Log.Logger.Error(ioException, "Exception");
|
if (httpRequestException.StatusCode == HttpStatusCode.NotModified)
|
||||||
|
{
|
||||||
|
return Tuple.Create(FeedReadResult.NotModified, string.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
return Tuple.Create(FeedReadResult.ConnectionFailed, string.Empty);
|
Log.Logger.Error(httpRequestException, "Exception");
|
||||||
|
|
||||||
|
return HandleHttpRequestException(httpRequestException);
|
||||||
}
|
}
|
||||||
catch (AggregateException aggregateException)
|
catch (AggregateException aggregateException)
|
||||||
{
|
{
|
||||||
Log.Logger.Error(aggregateException, "Exception");
|
Log.Logger.Error(aggregateException, "Exception");
|
||||||
|
|
||||||
var innerException = aggregateException.InnerException;
|
return aggregateException.InnerException switch
|
||||||
|
|
||||||
if (innerException is not HttpRequestException httpRequestException)
|
|
||||||
return Tuple.Create(FeedReadResult.UnknownError, string.Empty);
|
|
||||||
|
|
||||||
switch (httpRequestException.StatusCode)
|
|
||||||
{
|
{
|
||||||
case HttpStatusCode.ServiceUnavailable:
|
TaskCanceledException => Tuple.Create(FeedReadResult.Timeout, string.Empty),
|
||||||
return Tuple.Create(FeedReadResult.TemporarilyUnavailable, string.Empty);
|
HttpRequestException httpRequestException => HandleHttpRequestException(httpRequestException),
|
||||||
|
|
||||||
case HttpStatusCode.InternalServerError:
|
|
||||||
return Tuple.Create(FeedReadResult.ServerError, string.Empty);
|
|
||||||
|
|
||||||
case HttpStatusCode.NotModified:
|
|
||||||
return Tuple.Create(FeedReadResult.NotModified, string.Empty);
|
|
||||||
|
|
||||||
case HttpStatusCode.NotFound:
|
|
||||||
return Tuple.Create(FeedReadResult.NotFound, string.Empty);
|
|
||||||
|
|
||||||
case HttpStatusCode.Unauthorized:
|
|
||||||
case HttpStatusCode.Forbidden:
|
|
||||||
return Tuple.Create(FeedReadResult.Unauthorized, string.Empty);
|
|
||||||
|
|
||||||
case HttpStatusCode.Moved:
|
|
||||||
return Tuple.Create(FeedReadResult.Moved, string.Empty);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (httpRequestException.InnerException is not SocketException socketException)
|
|
||||||
return Tuple.Create(FeedReadResult.UnknownError, string.Empty);
|
|
||||||
|
|
||||||
return socketException.SocketErrorCode switch
|
|
||||||
{
|
|
||||||
SocketError.NoData => Tuple.Create(FeedReadResult.NoResponse, string.Empty),
|
|
||||||
SocketError.HostNotFound => Tuple.Create(FeedReadResult.NotFound, string.Empty),
|
|
||||||
_ => Tuple.Create(FeedReadResult.UnknownError, string.Empty)
|
_ => Tuple.Create(FeedReadResult.UnknownError, string.Empty)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
catch (WebException webException)
|
|
||||||
{
|
|
||||||
var result = FeedReadResult.UnknownError;
|
|
||||||
|
|
||||||
switch (webException.Status)
|
|
||||||
{
|
|
||||||
case WebExceptionStatus.ConnectFailure:
|
|
||||||
case WebExceptionStatus.NameResolutionFailure:
|
|
||||||
result = FeedReadResult.ConnectionFailed;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WebExceptionStatus.Timeout:
|
|
||||||
result = FeedReadResult.Timeout;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.Logger.Error(webException, "Exception");
|
|
||||||
|
|
||||||
if (result == FeedReadResult.UnknownError)
|
|
||||||
Debug.Print("Unknown error");
|
|
||||||
|
|
||||||
return Tuple.Create(result, string.Empty);
|
|
||||||
}
|
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
Log.Logger.Error(exception, "Exception");
|
Log.Logger.Error(exception, "Exception");
|
||||||
@@ -373,6 +352,45 @@ public partial class Feed : RealmObject, INotifyDataErrorInfo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Tuple<FeedReadResult, string> HandleHttpRequestException(HttpRequestException httpRequestException)
|
||||||
|
{
|
||||||
|
switch (httpRequestException.StatusCode)
|
||||||
|
{
|
||||||
|
case HttpStatusCode.TooManyRequests:
|
||||||
|
return Tuple.Create(FeedReadResult.TooManyRequests, string.Empty);
|
||||||
|
|
||||||
|
case HttpStatusCode.ServiceUnavailable:
|
||||||
|
return Tuple.Create(FeedReadResult.TemporarilyUnavailable, string.Empty);
|
||||||
|
|
||||||
|
case HttpStatusCode.InternalServerError:
|
||||||
|
return Tuple.Create(FeedReadResult.ServerError, string.Empty);
|
||||||
|
|
||||||
|
case HttpStatusCode.NotModified:
|
||||||
|
return Tuple.Create(FeedReadResult.NotModified, string.Empty);
|
||||||
|
|
||||||
|
case HttpStatusCode.NotFound:
|
||||||
|
return Tuple.Create(FeedReadResult.NotFound, string.Empty);
|
||||||
|
|
||||||
|
case HttpStatusCode.Unauthorized:
|
||||||
|
case HttpStatusCode.Forbidden:
|
||||||
|
return Tuple.Create(FeedReadResult.Unauthorized, string.Empty);
|
||||||
|
|
||||||
|
case HttpStatusCode.Moved:
|
||||||
|
case HttpStatusCode.Redirect:
|
||||||
|
return Tuple.Create(FeedReadResult.Moved, string.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (httpRequestException.InnerException is not SocketException socketException)
|
||||||
|
return Tuple.Create(FeedReadResult.UnknownError, string.Empty);
|
||||||
|
|
||||||
|
return socketException.SocketErrorCode switch
|
||||||
|
{
|
||||||
|
SocketError.NoData => Tuple.Create(FeedReadResult.NoResponse, string.Empty),
|
||||||
|
SocketError.HostNotFound => Tuple.Create(FeedReadResult.NotFound, string.Empty),
|
||||||
|
_ => Tuple.Create(FeedReadResult.UnknownError, string.Empty)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private FeedReadResult ReadFeed(bool forceRead)
|
private FeedReadResult ReadFeed(bool forceRead)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -392,12 +410,12 @@ public partial class Feed : RealmObject, INotifyDataErrorInfo
|
|||||||
return FeedReadResult.NotDue;
|
return FeedReadResult.NotDue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We're checking it now so update the time
|
|
||||||
LastChecked = DateTimeOffset.Now;
|
|
||||||
|
|
||||||
// Read the feed text
|
// Read the feed text
|
||||||
var retrieveResult = RetrieveFeed();
|
var retrieveResult = RetrieveFeed();
|
||||||
|
|
||||||
|
// We're checking it now so update the time
|
||||||
|
LastChecked = DateTimeOffset.Now;
|
||||||
|
|
||||||
// Get the information out of the async result
|
// Get the information out of the async result
|
||||||
var result = retrieveResult.Item1;
|
var result = retrieveResult.Item1;
|
||||||
var feedText = retrieveResult.Item2;
|
var feedText = retrieveResult.Item2;
|
||||||
|
|||||||
@@ -15,5 +15,6 @@ public enum FeedReadResult
|
|||||||
ConnectionFailed,
|
ConnectionFailed,
|
||||||
ServerError,
|
ServerError,
|
||||||
Moved,
|
Moved,
|
||||||
TemporarilyUnavailable
|
TemporarilyUnavailable,
|
||||||
|
TooManyRequests
|
||||||
}
|
}
|
||||||
@@ -178,7 +178,7 @@ public partial class MainWindow
|
|||||||
if (DateTime.Now - Settings.Default.LastVersionCheck >= Settings.Default.VersionCheckInterval)
|
if (DateTime.Now - Settings.Default.LastVersionCheck >= Settings.Default.VersionCheckInterval)
|
||||||
{
|
{
|
||||||
// Get the update information
|
// Get the update information
|
||||||
UpdateCheck.CheckForUpdate().Wait();
|
UpdateCheck.CheckForUpdate(Settings.Default.IncludePrerelease).Wait();
|
||||||
|
|
||||||
// Update the last check time
|
// Update the last check time
|
||||||
Settings.Default.LastVersionCheck = DateTime.Now;
|
Settings.Default.LastVersionCheck = DateTime.Now;
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ public partial class MainWindow : IDisposable
|
|||||||
|
|
||||||
// Check for update
|
// Check for update
|
||||||
if (Settings.Default.CheckVersionAtStartup)
|
if (Settings.Default.CheckVersionAtStartup)
|
||||||
await UpdateCheck.CheckForUpdate();
|
await UpdateCheck.CheckForUpdate(Settings.Default.IncludePrerelease);
|
||||||
|
|
||||||
// Show the link if updates are available
|
// Show the link if updates are available
|
||||||
if (UpdateCheck.UpdateAvailable)
|
if (UpdateCheck.UpdateAvailable)
|
||||||
|
|||||||
@@ -24,17 +24,18 @@ public partial class MainWindow
|
|||||||
{
|
{
|
||||||
StopTimer();
|
StopTimer();
|
||||||
|
|
||||||
_mainTimer.Dispose();
|
_mainTimer?.Dispose();
|
||||||
|
_mainTimer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StartTimer()
|
private void StartTimer()
|
||||||
{
|
{
|
||||||
_mainTimer.Start();
|
_mainTimer?.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StopTimer()
|
private void StopTimer()
|
||||||
{
|
{
|
||||||
_mainTimer.Stop();
|
_mainTimer?.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleMainTimerElapsed(object sender, EventArgs e)
|
private void HandleMainTimerElapsed(object sender, EventArgs e)
|
||||||
|
|||||||
@@ -166,6 +166,12 @@ public partial class MainWindow
|
|||||||
|
|
||||||
// Delete the feed
|
// Delete the feed
|
||||||
_database.SaveChanges(() => _database.Feeds.Remove(feedToDelete));
|
_database.SaveChanges(() => _database.Feeds.Remove(feedToDelete));
|
||||||
|
|
||||||
|
// Refresh the database to current settings
|
||||||
|
ResetDatabase();
|
||||||
|
|
||||||
|
// Re-initialize the feed display
|
||||||
|
DisplayFeed();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OpenAllFeedItemsOnSinglePage()
|
private void OpenAllFeedItemsOnSinglePage()
|
||||||
|
|||||||
@@ -34,6 +34,6 @@ public partial class MainWindow
|
|||||||
|
|
||||||
private void HandleNewVersionLinkClick(object sender, RoutedEventArgs e)
|
private void HandleNewVersionLinkClick(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
UpdateCheck.DisplayUpdateInformation(true);
|
UpdateCheck.DisplayUpdateInformation(true, Settings.Default.IncludePrerelease);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -49,14 +49,14 @@ public partial class MainWindow
|
|||||||
{
|
{
|
||||||
// Set the last window location
|
// Set the last window location
|
||||||
Settings.Default.WindowLocation = new Point(Left, Top);
|
Settings.Default.WindowLocation = new Point(Left, Top);
|
||||||
|
Settings.Default.Save();
|
||||||
|
|
||||||
// Set the last window size
|
// Set the last window size
|
||||||
Settings.Default.WindowSize = new Size(Width, Height);
|
Settings.Default.WindowSize = new Size(Width, Height);
|
||||||
|
Settings.Default.Save();
|
||||||
|
|
||||||
// Save the dock on the navigation tray
|
// Save the dock on the navigation tray
|
||||||
Settings.Default.ToolbarLocation = NameBasedGrid.NameBasedGrid.GetRow(NavigationToolbarTray) == "TopToolbarRow" ? Dock.Top : Dock.Bottom;
|
Settings.Default.ToolbarLocation = NameBasedGrid.NameBasedGrid.GetRow(NavigationToolbarTray) == "TopToolbarRow" ? Dock.Top : Dock.Bottom;
|
||||||
|
|
||||||
// Save settings
|
|
||||||
Settings.Default.Save();
|
Settings.Default.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using System;
|
using FeedCenter.Properties;
|
||||||
using FeedCenter.Properties;
|
|
||||||
using H.NotifyIcon;
|
using H.NotifyIcon;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
|
||||||
@@ -17,7 +16,7 @@ internal static class NotificationIcon
|
|||||||
_mainWindow = mainWindow;
|
_mainWindow = mainWindow;
|
||||||
|
|
||||||
// Create the notification icon
|
// Create the notification icon
|
||||||
_notificationIcon = new TaskbarIcon { Icon = Resources.Application, Id = Guid.Parse("2F4CE5CA-BC20-4D0D-80D0-45F13C6F4905") };
|
_notificationIcon = new TaskbarIcon { Icon = Resources.Application };
|
||||||
_notificationIcon.TrayMouseDoubleClick += HandleNotificationIconDoubleClick;
|
_notificationIcon.TrayMouseDoubleClick += HandleNotificationIconDoubleClick;
|
||||||
|
|
||||||
// Setup the menu
|
// Setup the menu
|
||||||
|
|||||||
@@ -94,6 +94,13 @@
|
|||||||
<ComboBoxItem Content="{x:Static properties:Resources.openAllMultipleToolbarButton}"
|
<ComboBoxItem Content="{x:Static properties:Resources.openAllMultipleToolbarButton}"
|
||||||
Tag="{x:Static feedCenter:MultipleOpenAction.IndividualPages}" />
|
Tag="{x:Static feedCenter:MultipleOpenAction.IndividualPages}" />
|
||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
<ComboBox Name="UserAgentComboBox"
|
||||||
|
mah:TextBoxHelper.UseFloatingWatermark="True"
|
||||||
|
mah:TextBoxHelper.Watermark="{x:Static properties:Resources.userAgentLabel}"
|
||||||
|
DisplayMemberPath="Caption"
|
||||||
|
ItemsSource="{Binding Source={x:Static options:UserAgentItem.UserAgents}}"
|
||||||
|
SelectedValuePath="UserAgent"
|
||||||
|
SelectedValue="{Binding Path=UserAgent, UpdateSourceTrigger=Explicit, ValidatesOnExceptions=true}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="{x:Static properties:Resources.authenticationTab}">
|
<TabItem Header="{x:Static properties:Resources.authenticationTab}">
|
||||||
|
|||||||
@@ -12,11 +12,9 @@
|
|||||||
d:DesignWidth="300">
|
d:DesignWidth="300">
|
||||||
<StackPanel options:Spacing.Vertical="10">
|
<StackPanel options:Spacing.Vertical="10">
|
||||||
<CheckBox Content="{x:Static properties:Resources.startWithWindowsCheckBox}"
|
<CheckBox Content="{x:Static properties:Resources.startWithWindowsCheckBox}"
|
||||||
Name="StartWithWindowsCheckBox"
|
|
||||||
IsChecked="{Binding Source={x:Static properties:Settings.Default}, Path=StartWithWindows}"
|
IsChecked="{Binding Source={x:Static properties:Settings.Default}, Path=StartWithWindows}"
|
||||||
Click="OnSaveSettings" />
|
Click="OnSaveSettings" />
|
||||||
<ComboBox Name="BrowserComboBox"
|
<ComboBox mah:TextBoxHelper.UseFloatingWatermark="True"
|
||||||
mah:TextBoxHelper.UseFloatingWatermark="True"
|
|
||||||
mah:TextBoxHelper.Watermark="{x:Static properties:Resources.defaultBrowserLabel}"
|
mah:TextBoxHelper.Watermark="{x:Static properties:Resources.defaultBrowserLabel}"
|
||||||
d:DataContext="{d:DesignInstance Type=installedBrowsers:InstalledBrowser}"
|
d:DataContext="{d:DesignInstance Type=installedBrowsers:InstalledBrowser}"
|
||||||
DisplayMemberPath="Name"
|
DisplayMemberPath="Name"
|
||||||
@@ -24,12 +22,11 @@
|
|||||||
SelectedValuePath="Key"
|
SelectedValuePath="Key"
|
||||||
SelectedValue="{Binding Source={x:Static properties:Settings.Default}, Path=Browser}"
|
SelectedValue="{Binding Source={x:Static properties:Settings.Default}, Path=Browser}"
|
||||||
SelectionChanged="OnSaveSettings" />
|
SelectionChanged="OnSaveSettings" />
|
||||||
<ComboBox Name="UserAgentComboBox"
|
<ComboBox mah:TextBoxHelper.UseFloatingWatermark="True"
|
||||||
mah:TextBoxHelper.UseFloatingWatermark="True"
|
|
||||||
mah:TextBoxHelper.Watermark="{x:Static properties:Resources.defaultUserAgentLabel}"
|
mah:TextBoxHelper.Watermark="{x:Static properties:Resources.defaultUserAgentLabel}"
|
||||||
d:DataContext="{d:DesignInstance Type=options:UserAgentItem}"
|
d:DataContext="{d:DesignInstance Type=options:UserAgentItem}"
|
||||||
DisplayMemberPath="Caption"
|
DisplayMemberPath="Caption"
|
||||||
ItemsSource="{Binding Source={x:Static options:UserAgentItem.UserAgents}}"
|
ItemsSource="{Binding Source={x:Static options:UserAgentItem.DefaultUserAgents}}"
|
||||||
SelectedValuePath="UserAgent"
|
SelectedValuePath="UserAgent"
|
||||||
SelectedValue="{Binding Source={x:Static properties:Settings.Default}, Path=DefaultUserAgent}"
|
SelectedValue="{Binding Source={x:Static properties:Settings.Default}, Path=DefaultUserAgent}"
|
||||||
SelectionChanged="OnSaveSettings" />
|
SelectionChanged="OnSaveSettings" />
|
||||||
|
|||||||
@@ -13,6 +13,10 @@
|
|||||||
Name="CheckVersionOnStartupCheckBox"
|
Name="CheckVersionOnStartupCheckBox"
|
||||||
IsChecked="{Binding Source={x:Static properties:Settings.Default}, Path=CheckVersionAtStartup}"
|
IsChecked="{Binding Source={x:Static properties:Settings.Default}, Path=CheckVersionAtStartup}"
|
||||||
Click="OnSaveSettings" />
|
Click="OnSaveSettings" />
|
||||||
|
<CheckBox Content="{x:Static properties:Resources.includePrereleaseCheckBox}"
|
||||||
|
Name="IncludePrereleaseCheckBox"
|
||||||
|
IsChecked="{Binding Source={x:Static properties:Settings.Default}, Path=IncludePrerelease}"
|
||||||
|
Click="OnSaveSettings" />
|
||||||
<Button Content="{x:Static properties:Resources.checkVersionNowButton}"
|
<Button Content="{x:Static properties:Resources.checkVersionNowButton}"
|
||||||
HorizontalAlignment="Left"
|
HorizontalAlignment="Left"
|
||||||
Click="HandleCheckVersionNowButtonClick" />
|
Click="HandleCheckVersionNowButtonClick" />
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ public partial class UpdateOptionsPanel
|
|||||||
|
|
||||||
private void HandleCheckVersionNowButtonClick(object sender, RoutedEventArgs e)
|
private void HandleCheckVersionNowButtonClick(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
UpdateCheck.DisplayUpdateInformation(true);
|
UpdateCheck.DisplayUpdateInformation(true, Settings.Default.IncludePrerelease);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnSaveSettings(object sender, RoutedEventArgs e)
|
private void OnSaveSettings(object sender, RoutedEventArgs e)
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using FeedCenter.Properties;
|
||||||
|
|
||||||
namespace FeedCenter.Options;
|
namespace FeedCenter.Options;
|
||||||
|
|
||||||
public class UserAgentItem
|
public class UserAgentItem
|
||||||
{
|
{
|
||||||
public string Caption { get; set; }
|
public string Caption { get; set; }
|
||||||
public string UserAgent { get; set; }
|
|
||||||
|
|
||||||
public static List<UserAgentItem> UserAgents => new()
|
public static List<UserAgentItem> DefaultUserAgents => new()
|
||||||
{
|
{
|
||||||
new UserAgentItem
|
new UserAgentItem
|
||||||
{
|
{
|
||||||
Caption = Properties.Resources.DefaultUserAgentCaption,
|
Caption = Properties.Resources.ApplicationUserAgentCaption,
|
||||||
UserAgent = string.Empty
|
UserAgent = string.Empty
|
||||||
},
|
},
|
||||||
new UserAgentItem
|
new UserAgentItem
|
||||||
@@ -30,4 +31,29 @@ public class UserAgentItem
|
|||||||
UserAgent = "curl/7.47.0"
|
UserAgent = "curl/7.47.0"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public string UserAgent { get; set; }
|
||||||
|
|
||||||
|
public static List<UserAgentItem> UserAgents
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var defaultUserAgents = DefaultUserAgents;
|
||||||
|
|
||||||
|
var applicationDefaultUserAgent = defaultUserAgents.First(dua => dua.UserAgent == Settings.Default.DefaultUserAgent);
|
||||||
|
|
||||||
|
var userAgents = new List<UserAgentItem>
|
||||||
|
{
|
||||||
|
new()
|
||||||
|
{
|
||||||
|
Caption = string.Format(Resources.DefaultUserAgentCaption, applicationDefaultUserAgent.Caption),
|
||||||
|
UserAgent = null
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
userAgents.AddRange(defaultUserAgents);
|
||||||
|
|
||||||
|
return userAgents;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
47
Application/Properties/Resources.Designer.cs
generated
47
Application/Properties/Resources.Designer.cs
generated
@@ -133,6 +133,15 @@ namespace FeedCenter.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Feed Center.
|
||||||
|
/// </summary>
|
||||||
|
public static string ApplicationUserAgentCaption {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ApplicationUserAgentCaption", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Password.
|
/// Looks up a localized string similar to Password.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -517,7 +526,7 @@ namespace FeedCenter.Properties {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Feed Center.
|
/// Looks up a localized string similar to Default ({0}).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static string DefaultUserAgentCaption {
|
public static string DefaultUserAgentCaption {
|
||||||
get {
|
get {
|
||||||
@@ -831,6 +840,15 @@ namespace FeedCenter.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Temporarily unavailable.
|
||||||
|
/// </summary>
|
||||||
|
public static string FeedReadResult_TemporarilyUnavailable {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("FeedReadResult_TemporarilyUnavailable", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Timeout.
|
/// Looks up a localized string similar to Timeout.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -840,6 +858,15 @@ namespace FeedCenter.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Too many requests.
|
||||||
|
/// </summary>
|
||||||
|
public static string FeedReadResult_TooManyRequests {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("FeedReadResult_TooManyRequests", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Not authorized.
|
/// Looks up a localized string similar to Not authorized.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -930,6 +957,15 @@ namespace FeedCenter.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Include _prerelease.
|
||||||
|
/// </summary>
|
||||||
|
public static string includePrereleaseCheckBox {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("includePrereleaseCheckBox", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Last Updated.
|
/// Looks up a localized string similar to Last Updated.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1461,6 +1497,15 @@ namespace FeedCenter.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to User agent.
|
||||||
|
/// </summary>
|
||||||
|
public static string userAgentLabel {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("userAgentLabel", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Version {0}.
|
/// Looks up a localized string similar to Version {0}.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -524,6 +524,9 @@
|
|||||||
<value>Category: {0}</value>
|
<value>Category: {0}</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DefaultUserAgentCaption" xml:space="preserve">
|
<data name="DefaultUserAgentCaption" xml:space="preserve">
|
||||||
|
<value>Default ({0})</value>
|
||||||
|
</data>
|
||||||
|
<data name="ApplicationUserAgentCaption" xml:space="preserve">
|
||||||
<value>Feed Center</value>
|
<value>Feed Center</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="defaultUserAgentLabel" xml:space="preserve">
|
<data name="defaultUserAgentLabel" xml:space="preserve">
|
||||||
@@ -549,4 +552,16 @@ All feeds currently in category "{0}" will be moved to the default category.</va
|
|||||||
<data name="ConfirmDeleteFeeds" xml:space="preserve">
|
<data name="ConfirmDeleteFeeds" xml:space="preserve">
|
||||||
<value>Are you sure you want to delete the selected feeds?</value>
|
<value>Are you sure you want to delete the selected feeds?</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="userAgentLabel" xml:space="preserve">
|
||||||
|
<value>User agent</value>
|
||||||
|
</data>
|
||||||
|
<data name="FeedReadResult_TemporarilyUnavailable" xml:space="preserve">
|
||||||
|
<value>Temporarily unavailable</value>
|
||||||
|
</data>
|
||||||
|
<data name="FeedReadResult_TooManyRequests" xml:space="preserve">
|
||||||
|
<value>Too many requests</value>
|
||||||
|
</data>
|
||||||
|
<data name="includePrereleaseCheckBox" xml:space="preserve">
|
||||||
|
<value>Include _prerelease</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
14
Application/Properties/Settings.Designer.cs
generated
14
Application/Properties/Settings.Designer.cs
generated
@@ -12,7 +12,7 @@ namespace FeedCenter.Properties {
|
|||||||
|
|
||||||
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0")]
|
||||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
@@ -302,5 +302,17 @@ namespace FeedCenter.Properties {
|
|||||||
return ((string)(this["DatabaseFile"]));
|
return ((string)(this["DatabaseFile"]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||||
|
public bool IncludePrerelease {
|
||||||
|
get {
|
||||||
|
return ((bool)(this["IncludePrerelease"]));
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this["IncludePrerelease"] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,5 +74,8 @@
|
|||||||
<Setting Name="DatabaseFile" Type="System.String" Scope="Application">
|
<Setting Name="DatabaseFile" Type="System.String" Scope="Application">
|
||||||
<Value Profile="(Default)">FeedCenter.realm</Value>
|
<Value Profile="(Default)">FeedCenter.realm</Value>
|
||||||
</Setting>
|
</Setting>
|
||||||
|
<Setting Name="IncludePrerelease" Type="System.Boolean" Scope="User">
|
||||||
|
<Value Profile="(Default)">False</Value>
|
||||||
|
</Setting>
|
||||||
</Settings>
|
</Settings>
|
||||||
</SettingsFile>
|
</SettingsFile>
|
||||||
@@ -36,6 +36,9 @@ public static class SettingsStore
|
|||||||
// Try to get the setting from the database that matches the name and version
|
// Try to get the setting from the database that matches the name and version
|
||||||
var setting = entities.Settings.FirstOrDefault(s => s.Name == name);
|
var setting = entities.Settings.FirstOrDefault(s => s.Name == name);
|
||||||
|
|
||||||
|
if (setting?.Value == value)
|
||||||
|
return;
|
||||||
|
|
||||||
entities.SaveChanges(() =>
|
entities.SaveChanges(() =>
|
||||||
{
|
{
|
||||||
// If there was no setting we need to create it
|
// If there was no setting we need to create it
|
||||||
|
|||||||
@@ -49,6 +49,9 @@
|
|||||||
<setting name="DefaultUserAgent" serializeAs="String">
|
<setting name="DefaultUserAgent" serializeAs="String">
|
||||||
<value />
|
<value />
|
||||||
</setting>
|
</setting>
|
||||||
|
<setting name="IncludePrerelease" serializeAs="String">
|
||||||
|
<value>False</value>
|
||||||
|
</setting>
|
||||||
</FeedCenter.Properties.Settings>
|
</FeedCenter.Properties.Settings>
|
||||||
</userSettings>
|
</userSettings>
|
||||||
<applicationSettings>
|
<applicationSettings>
|
||||||
|
|||||||
@@ -37,6 +37,10 @@
|
|||||||
<HintPath>$(WixExtDir)\WixNetFxExtension.dll</HintPath>
|
<HintPath>$(WixExtDir)\WixNetFxExtension.dll</HintPath>
|
||||||
<Name>WixNetFxExtension</Name>
|
<Name>WixNetFxExtension</Name>
|
||||||
</WixExtension>
|
</WixExtension>
|
||||||
|
<WixExtension Include="WixUtilExtension">
|
||||||
|
<HintPath>$(WixExtDir)\WixUtilExtension.dll</HintPath>
|
||||||
|
<Name>WixUtilExtension</Name>
|
||||||
|
</WixExtension>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Application\FeedCenter.csproj">
|
<ProjectReference Include="..\Application\FeedCenter.csproj">
|
||||||
@@ -66,12 +70,4 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<PostBuildEvent />
|
<PostBuildEvent />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<!--
|
|
||||||
To modify your build process, add your task inside one of the targets below and uncomment it.
|
|
||||||
Other similar extension points exist, see Wix.targets.
|
|
||||||
<Target Name="BeforeBuild">
|
|
||||||
</Target>
|
|
||||||
<Target Name="AfterBuild">
|
|
||||||
</Target>
|
|
||||||
-->
|
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
|
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
|
||||||
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
|
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
|
||||||
|
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
|
||||||
|
|
||||||
<?define ProductName="$(fileVersion.ProductName($(var.FeedCenter.TargetPath)))" ?>
|
<?define ProductName="$(fileVersion.ProductName($(var.FeedCenter.TargetPath)))" ?>
|
||||||
<?define CompanyName="$(fileVersion.CompanyName($(var.FeedCenter.TargetPath)))" ?>
|
<?define CompanyName="$(fileVersion.CompanyName($(var.FeedCenter.TargetPath)))" ?>
|
||||||
@@ -13,6 +14,18 @@
|
|||||||
UpgradeCode="5e5c13a5-635e-4310-a653-0f9760f46935"
|
UpgradeCode="5e5c13a5-635e-4310-a653-0f9760f46935"
|
||||||
Compressed="no">
|
Compressed="no">
|
||||||
|
|
||||||
|
<util:DirectorySearch Id="DotnetDesktopRuntimeSearch_x86"
|
||||||
|
Path="[ProgramFilesFolder]dotnet\shared\Microsoft.WindowsDesktop.App\7.0.5"
|
||||||
|
Result="exists"
|
||||||
|
Variable="DotnetDesktopRuntimeExists_x86"
|
||||||
|
Condition="NOT VersionNT64" />
|
||||||
|
|
||||||
|
<util:DirectorySearch Id="DotnetDesktopRuntimeSearch_x64"
|
||||||
|
Path="[ProgramFiles64Folder]dotnet\shared\Microsoft.WindowsDesktop.App\7.0.5"
|
||||||
|
Result="exists"
|
||||||
|
Variable="DotnetDesktopRuntimeExists_x64"
|
||||||
|
Condition="VersionNT64" />
|
||||||
|
|
||||||
<BootstrapperApplicationRef Id="WixExtendedBootstrapperApplication.HyperlinkLicense">
|
<BootstrapperApplicationRef Id="WixExtendedBootstrapperApplication.HyperlinkLicense">
|
||||||
<bal:WixExtendedBootstrapperApplication LicenseUrl=""
|
<bal:WixExtendedBootstrapperApplication LicenseUrl=""
|
||||||
SuppressOptionsUI="yes"
|
SuppressOptionsUI="yes"
|
||||||
@@ -28,9 +41,10 @@
|
|||||||
DisplayName=".NET 7.0 Desktop Runtime (x64)"
|
DisplayName=".NET 7.0 Desktop Runtime (x64)"
|
||||||
InstallCommand="/install /quiet"
|
InstallCommand="/install /quiet"
|
||||||
Permanent="yes"
|
Permanent="yes"
|
||||||
Compressed="no"
|
Compressed="no"
|
||||||
DownloadUrl="https://download.visualstudio.microsoft.com/download/pr/dffb1939-cef1-4db3-a579-5475a3061cdd/578b208733c914c7b7357f6baa4ecfd6/windowsdesktop-runtime-7.0.5-win-x64.exe"
|
DownloadUrl="https://download.visualstudio.microsoft.com/download/pr/dffb1939-cef1-4db3-a579-5475a3061cdd/578b208733c914c7b7357f6baa4ecfd6/windowsdesktop-runtime-7.0.5-win-x64.exe"
|
||||||
Name="windowsdesktop-runtime-7.0.5-win-x64.exe"
|
Name="windowsdesktop-runtime-7.0.5-win-x64.exe"
|
||||||
|
DetectCondition="DotnetDesktopRuntimeExists_x64 = 1"
|
||||||
InstallCondition='VersionNT64'>
|
InstallCondition='VersionNT64'>
|
||||||
<RemotePayload ProductName="Microsoft Windows Desktop Runtime - 7.0.5 (x64)"
|
<RemotePayload ProductName="Microsoft Windows Desktop Runtime - 7.0.5 (x64)"
|
||||||
Description="Microsoft Windows Desktop Runtime - 7.0.5 (x64)"
|
Description="Microsoft Windows Desktop Runtime - 7.0.5 (x64)"
|
||||||
@@ -42,9 +56,10 @@
|
|||||||
DisplayName=".NET 7.0 Desktop Runtime (x86)"
|
DisplayName=".NET 7.0 Desktop Runtime (x86)"
|
||||||
InstallCommand="/install /quiet"
|
InstallCommand="/install /quiet"
|
||||||
Permanent="yes"
|
Permanent="yes"
|
||||||
Compressed="no"
|
Compressed="no"
|
||||||
DownloadUrl="https://download.visualstudio.microsoft.com/download/pr/eb64dcd1-d277-4798-ada1-600805c9e2dc/fc73c843d66f3996e7ef22468f4902e6/windowsdesktop-runtime-7.0.5-win-x86.exe"
|
DownloadUrl="https://download.visualstudio.microsoft.com/download/pr/eb64dcd1-d277-4798-ada1-600805c9e2dc/fc73c843d66f3996e7ef22468f4902e6/windowsdesktop-runtime-7.0.5-win-x86.exe"
|
||||||
Name="windowsdesktop-runtime-7.0.5-win-x86.exe"
|
Name="windowsdesktop-runtime-7.0.5-win-x86.exe"
|
||||||
|
DetectCondition="DotnetDesktopRuntimeExists_x86 = 1"
|
||||||
InstallCondition='NOT VersionNT64'>
|
InstallCondition='NOT VersionNT64'>
|
||||||
<RemotePayload ProductName="Microsoft Windows Desktop Runtime - 7.0.5 (x86)"
|
<RemotePayload ProductName="Microsoft Windows Desktop Runtime - 7.0.5 (x86)"
|
||||||
Description="Microsoft Windows Desktop Runtime - 7.0.5 (x86)"
|
Description="Microsoft Windows Desktop Runtime - 7.0.5 (x86)"
|
||||||
|
|||||||
110
FeedCenter.sln
110
FeedCenter.sln
@@ -18,32 +18,32 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution", "Solution", "{14
|
|||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug - With Setup|Any CPU = Debug - With Setup|Any CPU
|
Debug (No Installer)|Any CPU = Debug (No Installer)|Any CPU
|
||||||
Debug - With Setup|Mixed Platforms = Debug - With Setup|Mixed Platforms
|
Debug (No Installer)|Mixed Platforms = Debug (No Installer)|Mixed Platforms
|
||||||
Debug - With Setup|x64 = Debug - With Setup|x64
|
Debug (No Installer)|x64 = Debug (No Installer)|x64
|
||||||
Debug - With Setup|x86 = Debug - With Setup|x86
|
Debug (No Installer)|x86 = Debug (No Installer)|x86
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
Debug|Mixed Platforms = Debug|Mixed Platforms
|
Debug|Mixed Platforms = Debug|Mixed Platforms
|
||||||
Debug|x64 = Debug|x64
|
Debug|x64 = Debug|x64
|
||||||
Debug|x86 = Debug|x86
|
Debug|x86 = Debug|x86
|
||||||
Release - With Setup|Any CPU = Release - With Setup|Any CPU
|
Release (No Installer)|Any CPU = Release (No Installer)|Any CPU
|
||||||
Release - With Setup|Mixed Platforms = Release - With Setup|Mixed Platforms
|
Release (No Installer)|Mixed Platforms = Release (No Installer)|Mixed Platforms
|
||||||
Release - With Setup|x64 = Release - With Setup|x64
|
Release (No Installer)|x64 = Release (No Installer)|x64
|
||||||
Release - With Setup|x86 = Release - With Setup|x86
|
Release (No Installer)|x86 = Release (No Installer)|x86
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
Release|Mixed Platforms = Release|Mixed Platforms
|
Release|Mixed Platforms = Release|Mixed Platforms
|
||||||
Release|x64 = Release|x64
|
Release|x64 = Release|x64
|
||||||
Release|x86 = Release|x86
|
Release|x86 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug - With Setup|Any CPU.ActiveCfg = Debug|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug (No Installer)|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug - With Setup|Any CPU.Build.0 = Debug|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug (No Installer)|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug (No Installer)|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug (No Installer)|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug - With Setup|x64.ActiveCfg = Debug|x64
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug (No Installer)|x64.ActiveCfg = Debug|x64
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug - With Setup|x64.Build.0 = Debug|x64
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug (No Installer)|x64.Build.0 = Debug|x64
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug - With Setup|x86.ActiveCfg = Debug|x86
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug (No Installer)|x86.ActiveCfg = Debug|x86
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug - With Setup|x86.Build.0 = Debug|x86
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug (No Installer)|x86.Build.0 = Debug|x86
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||||
@@ -52,69 +52,69 @@ Global
|
|||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug|x64.Build.0 = Debug|x64
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug|x64.Build.0 = Debug|x64
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug|x86.ActiveCfg = Debug|x86
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug|x86.Build.0 = Debug|x86
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Debug|x86.Build.0 = Debug|x86
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release - With Setup|Any CPU.ActiveCfg = Release|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release (No Installer)|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release - With Setup|Any CPU.Build.0 = Release|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release (No Installer)|Any CPU.Build.0 = Release|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release (No Installer)|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release - With Setup|Mixed Platforms.Build.0 = Release|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release (No Installer)|Mixed Platforms.Build.0 = Release|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release - With Setup|x64.ActiveCfg = Release|x86
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release (No Installer)|x64.ActiveCfg = Release|x86
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release - With Setup|x86.ActiveCfg = Release|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release (No Installer)|x86.ActiveCfg = Release|x86
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release - With Setup|x86.Build.0 = Release|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release (No Installer)|x86.Build.0 = Release|x86
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release|Any CPU.Build.0 = Release|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release|x64.ActiveCfg = Release|x86
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release|x64.ActiveCfg = Release|x86
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release|x86.ActiveCfg = Release|x86
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release|x86.Build.0 = Release|x86
|
{BD3D12F2-DE23-4466-83B1-1EB617A877A4}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug - With Setup|Any CPU.ActiveCfg = Debug|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug (No Installer)|Any CPU.ActiveCfg = Debug|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug - With Setup|Any CPU.Build.0 = Debug|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug (No Installer)|Mixed Platforms.ActiveCfg = Debug|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug (No Installer)|x64.ActiveCfg = Debug|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug (No Installer)|x64.Build.0 = Debug|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug - With Setup|x64.ActiveCfg = Debug|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug (No Installer)|x86.ActiveCfg = Debug|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug - With Setup|x64.Build.0 = Debug|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug (No Installer)|x86.Build.0 = Debug|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug - With Setup|x86.ActiveCfg = Debug|x86
|
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug - With Setup|x86.Build.0 = Debug|x86
|
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug|Any CPU.ActiveCfg = Debug|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||||
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug|Any CPU.Build.0 = Debug|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
|
||||||
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug|Mixed Platforms.Build.0 = Debug|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug|x64.ActiveCfg = Debug|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug|x64.ActiveCfg = Debug|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug|x64.Build.0 = Debug|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug|x64.Build.0 = Debug|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug|x86.ActiveCfg = Debug|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug|x86.Build.0 = Debug|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Debug|x86.Build.0 = Debug|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release - With Setup|Any CPU.ActiveCfg = Release|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release (No Installer)|Any CPU.ActiveCfg = Release|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release - With Setup|Any CPU.Build.0 = Release|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release (No Installer)|Mixed Platforms.ActiveCfg = Release|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release (No Installer)|x64.ActiveCfg = Release|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release - With Setup|Mixed Platforms.Build.0 = Release|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release (No Installer)|x86.ActiveCfg = Release|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release - With Setup|x64.ActiveCfg = Release|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release (No Installer)|x86.Build.0 = Release|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release - With Setup|x86.ActiveCfg = Release|x86
|
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release - With Setup|x86.Build.0 = Release|x86
|
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release|Any CPU.ActiveCfg = Release|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release|Any CPU.ActiveCfg = Release|x86
|
||||||
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release|Any CPU.Build.0 = Release|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release|Mixed Platforms.ActiveCfg = Release|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release|Mixed Platforms.ActiveCfg = Release|x86
|
||||||
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release|Mixed Platforms.Build.0 = Release|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release|x64.ActiveCfg = Release|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release|x64.ActiveCfg = Release|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release|x86.ActiveCfg = Release|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release|x86.ActiveCfg = Release|x86
|
||||||
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release|x86.Build.0 = Release|x86
|
{DFB3FE30-18EA-4216-8D92-11DF9C8D50F1}.Release|x86.Build.0 = Release|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug - With Setup|Any CPU.ActiveCfg = Debug|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug (No Installer)|Any CPU.ActiveCfg = Debug|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug - With Setup|Any CPU.Build.0 = Debug|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug (No Installer)|Mixed Platforms.ActiveCfg = Debug|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug - With Setup|Mixed Platforms.ActiveCfg = Debug|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug (No Installer)|x64.ActiveCfg = Debug|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug - With Setup|Mixed Platforms.Build.0 = Debug|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug (No Installer)|x64.Build.0 = Debug|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug - With Setup|x64.ActiveCfg = Debug|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug (No Installer)|x86.ActiveCfg = Debug|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug - With Setup|x64.Build.0 = Debug|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug (No Installer)|x86.Build.0 = Debug|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug - With Setup|x86.ActiveCfg = Debug|x86
|
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug - With Setup|x86.Build.0 = Debug|x86
|
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug|Any CPU.ActiveCfg = Debug|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||||
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug|Any CPU.Build.0 = Debug|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
|
||||||
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug|Mixed Platforms.Build.0 = Debug|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug|x64.ActiveCfg = Debug|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug|x64.ActiveCfg = Debug|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug|x64.Build.0 = Debug|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug|x64.Build.0 = Debug|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug|x86.ActiveCfg = Debug|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug|x86.Build.0 = Debug|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Debug|x86.Build.0 = Debug|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release - With Setup|Any CPU.ActiveCfg = Release|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release (No Installer)|Any CPU.ActiveCfg = Release|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release - With Setup|Any CPU.Build.0 = Release|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release (No Installer)|Mixed Platforms.ActiveCfg = Release|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release - With Setup|Mixed Platforms.ActiveCfg = Release|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release (No Installer)|x64.ActiveCfg = Release|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release - With Setup|Mixed Platforms.Build.0 = Release|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release (No Installer)|x86.ActiveCfg = Release|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release - With Setup|x64.ActiveCfg = Release|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release (No Installer)|x86.Build.0 = Release|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release - With Setup|x86.ActiveCfg = Release|x86
|
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release - With Setup|x86.Build.0 = Release|x86
|
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|Any CPU.ActiveCfg = Release|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|Any CPU.ActiveCfg = Release|x86
|
||||||
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|Any CPU.Build.0 = Release|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|Mixed Platforms.ActiveCfg = Release|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|Mixed Platforms.ActiveCfg = Release|x86
|
||||||
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|Mixed Platforms.Build.0 = Release|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|x64.ActiveCfg = Release|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|x64.ActiveCfg = Release|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|x86.ActiveCfg = Release|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|x86.ActiveCfg = Release|x86
|
||||||
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|x86.Build.0 = Release|x86
|
{5E5C13A5-635E-4310-A653-0F9760F46935}.Release|x86.Build.0 = Release|x86
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
version: 1.1.0.{build}
|
version: 1.1.0.{build}
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- main
|
||||||
pull_requests:
|
pull_requests:
|
||||||
do_not_increment_build_number: true
|
do_not_increment_build_number: true
|
||||||
skip_tags: true
|
skip_tags: true
|
||||||
image: Visual Studio 2022
|
image: Visual Studio 2022
|
||||||
configuration: Release - With Setup
|
configuration: Release
|
||||||
platform: x86
|
platform: x86
|
||||||
assembly_info:
|
assembly_info:
|
||||||
patch: true
|
patch: true
|
||||||
@@ -20,5 +23,4 @@ deploy:
|
|||||||
- provider: Environment
|
- provider: Environment
|
||||||
name: GitHub
|
name: GitHub
|
||||||
before_build:
|
before_build:
|
||||||
- cmd: nuget restore
|
- cmd: nuget restore
|
||||||
- cmd: nuget restore Application\FeedCenter.csproj
|
|
||||||
Reference in New Issue
Block a user