Fix statistics uploading.

This commit is contained in:
2019-01-05 16:58:13 +00:00
parent ffb7f95e58
commit bbedcfe843

View File

@@ -458,6 +458,11 @@ namespace DiscImageChef.Core
Thread submitThread = new Thread(() => Thread submitThread = new Thread(() =>
{ {
DicContext ctx = DicContext.Create(Settings.Settings.LocalDbPath); DicContext ctx = DicContext.Create(Settings.Settings.LocalDbPath);
try
{
if(submitStatsLock) return;
submitStatsLock = true;
if(ctx.Commands.Any(c => !c.Synchronized) || ctx.Filesystems.Any(c => !c.Synchronized) || if(ctx.Commands.Any(c => !c.Synchronized) || ctx.Filesystems.Any(c => !c.Synchronized) ||
ctx.Filters.Any(c => !c.Synchronized) || ctx.MediaFormats.Any(c => !c.Synchronized) || ctx.Filters.Any(c => !c.Synchronized) || ctx.MediaFormats.Any(c => !c.Synchronized) ||
@@ -470,7 +475,8 @@ namespace DiscImageChef.Core
if(ctx.Commands.Any(c => !c.Synchronized)) if(ctx.Commands.Any(c => !c.Synchronized))
{ {
dto.Commands = new List<NameValueStats>(); dto.Commands = new List<NameValueStats>();
foreach(string nvs in ctx.Commands.Where(c => !c.Synchronized).Select(c => c.Name).Distinct()) foreach(string nvs in
ctx.Commands.Where(c => !c.Synchronized).Select(c => c.Name).Distinct())
dto.Commands.Add(new NameValueStats dto.Commands.Add(new NameValueStats
{ {
name = nvs, name = nvs,
@@ -482,8 +488,8 @@ namespace DiscImageChef.Core
if(ctx.Filesystems.Any(c => !c.Synchronized)) if(ctx.Filesystems.Any(c => !c.Synchronized))
{ {
dto.Filesystems = new List<NameValueStats>(); dto.Filesystems = new List<NameValueStats>();
foreach(string nvs in ctx.Filesystems.Where(c => !c.Synchronized).Select(c => c.Name).Distinct() foreach(string nvs in
) ctx.Filesystems.Where(c => !c.Synchronized).Select(c => c.Name).Distinct())
dto.Filesystems.Add(new NameValueStats dto.Filesystems.Add(new NameValueStats
{ {
name = nvs, name = nvs,
@@ -495,18 +501,21 @@ namespace DiscImageChef.Core
if(ctx.Filters.Any(c => !c.Synchronized)) if(ctx.Filters.Any(c => !c.Synchronized))
{ {
dto.Filters = new List<NameValueStats>(); dto.Filters = new List<NameValueStats>();
foreach(string nvs in ctx.Filters.Where(c => !c.Synchronized).Select(c => c.Name).Distinct()) foreach(string nvs in ctx.Filters.Where(c => !c.Synchronized).Select(c => c.Name).Distinct()
)
dto.Filters.Add(new NameValueStats dto.Filters.Add(new NameValueStats
{ {
name = nvs, name = nvs,
Value = ctx.Filters.LongCount(c => !c.Synchronized && c.Name == nvs) Value = ctx.Filters.LongCount(c => !c.Synchronized &&
c.Name == nvs)
}); });
} }
if(ctx.MediaFormats.Any(c => !c.Synchronized)) if(ctx.MediaFormats.Any(c => !c.Synchronized))
{ {
dto.MediaFormats = new List<NameValueStats>(); dto.MediaFormats = new List<NameValueStats>();
foreach(string nvs in ctx.Commands.Where(c => !c.Synchronized).Select(c => c.Name).Distinct()) foreach(string nvs in
ctx.Commands.Where(c => !c.Synchronized).Select(c => c.Name).Distinct())
dto.MediaFormats.Add(new NameValueStats dto.MediaFormats.Add(new NameValueStats
{ {
name = nvs, name = nvs,
@@ -518,7 +527,8 @@ namespace DiscImageChef.Core
if(ctx.Partitions.Any(c => !c.Synchronized)) if(ctx.Partitions.Any(c => !c.Synchronized))
{ {
dto.Partitions = new List<NameValueStats>(); dto.Partitions = new List<NameValueStats>();
foreach(string nvs in ctx.Partitions.Where(c => !c.Synchronized).Select(c => c.Name).Distinct()) foreach(string nvs in
ctx.Partitions.Where(c => !c.Synchronized).Select(c => c.Name).Distinct())
dto.Partitions.Add(new NameValueStats dto.Partitions.Add(new NameValueStats
{ {
name = nvs, name = nvs,
@@ -530,7 +540,8 @@ namespace DiscImageChef.Core
if(ctx.Versions.Any(c => !c.Synchronized)) if(ctx.Versions.Any(c => !c.Synchronized))
{ {
dto.Versions = new List<NameValueStats>(); dto.Versions = new List<NameValueStats>();
foreach(string nvs in ctx.Versions.Where(c => !c.Synchronized).Select(c => c.Value).Distinct()) foreach(string nvs in
ctx.Versions.Where(c => !c.Synchronized).Select(c => c.Value).Distinct())
dto.Versions.Add(new NameValueStats dto.Versions.Add(new NameValueStats
{ {
name = nvs, name = nvs,
@@ -542,7 +553,8 @@ namespace DiscImageChef.Core
if(ctx.Medias.Any(c => !c.Synchronized)) if(ctx.Medias.Any(c => !c.Synchronized))
{ {
dto.Medias = new List<MediaStats>(); dto.Medias = new List<MediaStats>();
foreach(string media in ctx.Medias.Where(c => !c.Synchronized).Select(c => c.Type).Distinct()) foreach(string media in ctx.Medias.Where(c => !c.Synchronized).Select(c => c.Type)
.Distinct())
{ {
if(ctx.Medias.Any(c => !c.Synchronized && c.Type == media && c.Real)) if(ctx.Medias.Any(c => !c.Synchronized && c.Type == media && c.Real))
dto.Medias.Add(new MediaStats dto.Medias.Add(new MediaStats
@@ -580,11 +592,12 @@ namespace DiscImageChef.Core
if(ctx.OperatingSystems.Any(c => !c.Synchronized)) if(ctx.OperatingSystems.Any(c => !c.Synchronized))
{ {
dto.OperatingSystems = new List<OsStats>(); dto.OperatingSystems = new List<OsStats>();
foreach(string osName in ctx.OperatingSystems.Where(c => !c.Synchronized).Select(c => c.Name) foreach(string osName in ctx.OperatingSystems.Where(c => !c.Synchronized)
.Distinct()) .Select(c => c.Name).Distinct())
{ {
foreach(string osVersion in foreach(string osVersion in ctx
ctx.OperatingSystems.Where(c => !c.Synchronized && c.Name == osName) .OperatingSystems
.Where(c => !c.Synchronized && c.Name == osName)
.Select(c => c.Version).Distinct()) .Select(c => c.Version).Distinct())
dto.OperatingSystems.Add(new OsStats dto.OperatingSystems.Add(new OsStats
{ {
@@ -602,8 +615,6 @@ namespace DiscImageChef.Core
} }
} }
try
{
#if DEBUG #if DEBUG
System.Console.WriteLine("Uploading statistics"); System.Console.WriteLine("Uploading statistics");
#else #else
@@ -784,6 +795,9 @@ namespace DiscImageChef.Core
osVersion)); osVersion));
} }
} }
ctx.SaveChanges();
}
} }
catch(WebException) catch(WebException)
{ {
@@ -793,14 +807,11 @@ namespace DiscImageChef.Core
catch catch
{ {
#if DEBUG #if DEBUG
submitStatsLock = false;
if(Debugger.IsAttached) throw; if(Debugger.IsAttached) throw;
#endif #endif
} }
}
if(submitStatsLock) return;
submitStatsLock = true;
IEnumerable<string> statsFiles = IEnumerable<string> statsFiles =
Directory.EnumerateFiles(Settings.Settings.StatsPath, "PartialStats_*.xml", Directory.EnumerateFiles(Settings.Settings.StatsPath, "PartialStats_*.xml",