mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
Use correct path for database.
This commit is contained in:
2
.idea/.idea.DiscImageChef/.idea/contentModel.xml
generated
2
.idea/.idea.DiscImageChef/.idea/contentModel.xml
generated
@@ -56,7 +56,6 @@
|
|||||||
<e p="Settings.StyleCop" t="Include" />
|
<e p="Settings.StyleCop" t="Include" />
|
||||||
<e p="StyleCop.Cache" t="Include" />
|
<e p="StyleCop.Cache" t="Include" />
|
||||||
<e p="bin" t="ExcludeRecursive" />
|
<e p="bin" t="ExcludeRecursive" />
|
||||||
<e p="discimagechef.db" t="Include" />
|
|
||||||
<e p="obj" t="ExcludeRecursive">
|
<e p="obj" t="ExcludeRecursive">
|
||||||
<e p="Debug" t="Include">
|
<e p="Debug" t="Include">
|
||||||
<e p="net461" t="Include">
|
<e p="net461" t="Include">
|
||||||
@@ -1147,7 +1146,6 @@
|
|||||||
<e p="DiscImageChef.EntityFramework.csproj" t="IncludeRecursive" />
|
<e p="DiscImageChef.EntityFramework.csproj" t="IncludeRecursive" />
|
||||||
<e p="Program.cs" t="Include" />
|
<e p="Program.cs" t="Include" />
|
||||||
<e p="bin" t="ExcludeRecursive" />
|
<e p="bin" t="ExcludeRecursive" />
|
||||||
<e p="discimagechef.db" t="Include" />
|
|
||||||
<e p="obj" t="ExcludeRecursive">
|
<e p="obj" t="ExcludeRecursive">
|
||||||
<e p="Debug" t="Include">
|
<e p="Debug" t="Include">
|
||||||
<e p="netcoreapp2.1" t="Include">
|
<e p="netcoreapp2.1" t="Include">
|
||||||
|
|||||||
@@ -60,13 +60,13 @@ namespace DiscImageChef.Core
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
static bool submitStatsLock;
|
static bool submitStatsLock;
|
||||||
|
|
||||||
static DicContext ctx = new DicContext();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Loads saved statistics from disk
|
/// Loads saved statistics from disk
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static void LoadStats()
|
public static void LoadStats()
|
||||||
{
|
{
|
||||||
|
DicContext ctx = DicContext.Create(Settings.Settings.DbPath);
|
||||||
|
|
||||||
if(File.Exists(Path.Combine(Settings.Settings.StatsPath, "Statistics.xml")))
|
if(File.Exists(Path.Combine(Settings.Settings.StatsPath, "Statistics.xml")))
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -431,10 +431,12 @@ namespace DiscImageChef.Core
|
|||||||
Version = DetectOS.GetVersion(),
|
Version = DetectOS.GetVersion(),
|
||||||
Count = 1
|
Count = 1
|
||||||
});
|
});
|
||||||
|
|
||||||
ctx.Versions.Add(new Version
|
ctx.Versions.Add(new Version
|
||||||
{
|
{
|
||||||
Value = CommonTypes.Interop.Version.GetVersion(), Synchronized = false, Count = 1
|
Value = CommonTypes.Interop.Version.GetVersion(), Synchronized = false, Count = 1
|
||||||
});
|
});
|
||||||
|
ctx.SaveChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -442,6 +444,7 @@ namespace DiscImageChef.Core
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void SaveStats()
|
public static void SaveStats()
|
||||||
{
|
{
|
||||||
|
DicContext ctx = DicContext.Create(Settings.Settings.DbPath);
|
||||||
ctx.SaveChanges();
|
ctx.SaveChanges();
|
||||||
if(Settings.Settings.Current.Stats != null && Settings.Settings.Current.Stats.ShareStats) SubmitStats();
|
if(Settings.Settings.Current.Stats != null && Settings.Settings.Current.Stats.ShareStats) SubmitStats();
|
||||||
}
|
}
|
||||||
@@ -453,384 +456,348 @@ namespace DiscImageChef.Core
|
|||||||
{
|
{
|
||||||
Thread submitThread = new Thread(() =>
|
Thread submitThread = new Thread(() =>
|
||||||
{
|
{
|
||||||
lock(ctx)
|
DicContext ctx = DicContext.Create(Settings.Settings.DbPath);
|
||||||
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) ||
|
if(ctx.Commands.Any(c => !c.Synchronized) || ctx.Filesystems.Any(c => !c.Synchronized) ||
|
||||||
ctx.Partitions.Any(c => !c.Synchronized) || ctx.Medias.Any(c => !c.Synchronized) ||
|
ctx.Filters.Any(c => !c.Synchronized) || ctx.MediaFormats.Any(c => !c.Synchronized) ||
|
||||||
ctx.SeenDevices.Any(c => !c.Synchronized) || ctx.OperatingSystems.Any(c => !c.Synchronized) ||
|
ctx.Partitions.Any(c => !c.Synchronized) || ctx.Medias.Any(c => !c.Synchronized) ||
|
||||||
ctx.Versions.Any(c => !c.Synchronized))
|
ctx.SeenDevices.Any(c => !c.Synchronized) || ctx.OperatingSystems.Any(c => !c.Synchronized) ||
|
||||||
|
ctx.Versions.Any(c => !c.Synchronized))
|
||||||
|
{
|
||||||
|
StatsDto dto = new StatsDto();
|
||||||
|
|
||||||
|
if(ctx.Commands.Any(c => !c.Synchronized))
|
||||||
{
|
{
|
||||||
StatsDto dto = new StatsDto();
|
dto.Commands = new List<NameValueStats>();
|
||||||
|
foreach(string nvs in ctx.Commands.Where(c => !c.Synchronized).Select(c => c.Name).Distinct())
|
||||||
|
dto.Commands.Add(new NameValueStats
|
||||||
|
{
|
||||||
|
name = nvs,
|
||||||
|
Value = ctx.Commands.LongCount(c => !c.Synchronized &&
|
||||||
|
c.Name == nvs)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ctx.Filesystems.Any(c => !c.Synchronized))
|
||||||
|
{
|
||||||
|
dto.Filesystems = new List<NameValueStats>();
|
||||||
|
foreach(string nvs in ctx.Filesystems.Where(c => !c.Synchronized).Select(c => c.Name).Distinct()
|
||||||
|
)
|
||||||
|
dto.Filesystems.Add(new NameValueStats
|
||||||
|
{
|
||||||
|
name = nvs,
|
||||||
|
Value = ctx.Filesystems.LongCount(c => !c.Synchronized &&
|
||||||
|
c.Name == nvs)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ctx.Filters.Any(c => !c.Synchronized))
|
||||||
|
{
|
||||||
|
dto.Filters = new List<NameValueStats>();
|
||||||
|
foreach(string nvs in ctx.Filters.Where(c => !c.Synchronized).Select(c => c.Name).Distinct())
|
||||||
|
dto.Filters.Add(new NameValueStats
|
||||||
|
{
|
||||||
|
name = nvs,
|
||||||
|
Value = ctx.Filters.LongCount(c => !c.Synchronized && c.Name == nvs)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ctx.MediaFormats.Any(c => !c.Synchronized))
|
||||||
|
{
|
||||||
|
dto.MediaFormats = new List<NameValueStats>();
|
||||||
|
foreach(string nvs in ctx.Commands.Where(c => !c.Synchronized).Select(c => c.Name).Distinct())
|
||||||
|
dto.MediaFormats.Add(new NameValueStats
|
||||||
|
{
|
||||||
|
name = nvs,
|
||||||
|
Value = ctx.MediaFormats.LongCount(c => !c.Synchronized &&
|
||||||
|
c.Name == nvs)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ctx.Partitions.Any(c => !c.Synchronized))
|
||||||
|
{
|
||||||
|
dto.Partitions = new List<NameValueStats>();
|
||||||
|
foreach(string nvs in ctx.Partitions.Where(c => !c.Synchronized).Select(c => c.Name).Distinct())
|
||||||
|
dto.Partitions.Add(new NameValueStats
|
||||||
|
{
|
||||||
|
name = nvs,
|
||||||
|
Value = ctx.Partitions.LongCount(c => !c.Synchronized &&
|
||||||
|
c.Name == nvs)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ctx.Versions.Any(c => !c.Synchronized))
|
||||||
|
{
|
||||||
|
dto.Versions = new List<NameValueStats>();
|
||||||
|
foreach(string nvs in ctx.Versions.Where(c => !c.Synchronized).Select(c => c.Value).Distinct())
|
||||||
|
dto.Versions.Add(new NameValueStats
|
||||||
|
{
|
||||||
|
name = nvs,
|
||||||
|
Value = ctx.Versions.LongCount(c => !c.Synchronized &&
|
||||||
|
c.Value == nvs)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ctx.Medias.Any(c => !c.Synchronized))
|
||||||
|
{
|
||||||
|
dto.Medias = new List<MediaStats>();
|
||||||
|
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))
|
||||||
|
dto.Medias.Add(new MediaStats
|
||||||
|
{
|
||||||
|
real = true,
|
||||||
|
type = media,
|
||||||
|
Value = ctx.Medias.LongCount(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
|
||||||
|
{
|
||||||
|
real = false,
|
||||||
|
type = media,
|
||||||
|
Value = ctx.Medias.LongCount(c => !c.Synchronized &&
|
||||||
|
c.Type == media && !c.Real)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ctx.SeenDevices.Any(c => !c.Synchronized))
|
||||||
|
{
|
||||||
|
dto.Devices = new List<DeviceStats>();
|
||||||
|
foreach(DeviceStat device in ctx.SeenDevices.Where(c => !c.Synchronized))
|
||||||
|
dto.Devices.Add(new DeviceStats
|
||||||
|
{
|
||||||
|
Bus = device.Bus,
|
||||||
|
Manufacturer = device.Manufacturer,
|
||||||
|
ManufacturerSpecified = !(device.Manufacturer is null),
|
||||||
|
Model = device.Model,
|
||||||
|
Revision = device.Revision
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ctx.OperatingSystems.Any(c => !c.Synchronized))
|
||||||
|
{
|
||||||
|
dto.OperatingSystems = new List<OsStats>();
|
||||||
|
foreach(string osName in ctx.OperatingSystems.Where(c => !c.Synchronized).Select(c => c.Name)
|
||||||
|
.Distinct())
|
||||||
|
{
|
||||||
|
foreach(string osVersion in
|
||||||
|
ctx.OperatingSystems.Where(c => !c.Synchronized && c.Name == osName)
|
||||||
|
.Select(c => c.Version).Distinct())
|
||||||
|
dto.OperatingSystems.Add(new OsStats
|
||||||
|
{
|
||||||
|
name = osName,
|
||||||
|
version = osVersion,
|
||||||
|
Value =
|
||||||
|
ctx.OperatingSystems.LongCount(c =>
|
||||||
|
!c
|
||||||
|
.Synchronized &&
|
||||||
|
c.Name ==
|
||||||
|
osName &&
|
||||||
|
c.Version ==
|
||||||
|
osVersion)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
System.Console.WriteLine("Uploading statistics");
|
||||||
|
#else
|
||||||
|
DiscImageChef.Console.DicConsole.DebugWriteLine("Submit stats", "Uploading statistics");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
MemoryStream jsonStream = new MemoryStream();
|
||||||
|
StreamWriter jsonSw = new StreamWriter(jsonStream);
|
||||||
|
|
||||||
|
jsonSw.Write(JsonConvert.SerializeObject(dto, Formatting.Indented,
|
||||||
|
new JsonSerializerSettings
|
||||||
|
{
|
||||||
|
NullValueHandling = NullValueHandling.Ignore
|
||||||
|
}));
|
||||||
|
jsonStream.Seek(0, SeekOrigin.Begin);
|
||||||
|
WebRequest request = WebRequest.Create("http://discimagechef.claunia.com/api/uploadstatsv2");
|
||||||
|
((HttpWebRequest)request).UserAgent =
|
||||||
|
$"DiscImageChef {typeof(Version).Assembly.GetName().Version}";
|
||||||
|
request.Method = "POST";
|
||||||
|
request.ContentLength = jsonStream.Length;
|
||||||
|
request.ContentType = "application/json";
|
||||||
|
Stream reqStream = request.GetRequestStream();
|
||||||
|
jsonStream.CopyTo(reqStream);
|
||||||
|
reqStream.Close();
|
||||||
|
WebResponse response = request.GetResponse();
|
||||||
|
|
||||||
|
if(((HttpWebResponse)response).StatusCode != HttpStatusCode.OK) return;
|
||||||
|
|
||||||
|
Stream data = response.GetResponseStream();
|
||||||
|
StreamReader reader = new StreamReader(data ?? throw new InvalidOperationException());
|
||||||
|
|
||||||
|
reader.ReadToEnd();
|
||||||
|
data.Close();
|
||||||
|
response.Close();
|
||||||
|
jsonSw.Close();
|
||||||
|
jsonStream.Close();
|
||||||
|
|
||||||
if(ctx.Commands.Any(c => !c.Synchronized))
|
if(ctx.Commands.Any(c => !c.Synchronized))
|
||||||
{
|
foreach(string nvs in ctx.Commands.Where(c => !c.Synchronized).Select(c => c.Name)
|
||||||
dto.Commands = new List<NameValueStats>();
|
.Distinct())
|
||||||
foreach(string nvs in
|
{
|
||||||
ctx.Commands.Where(c => !c.Synchronized).Select(c => c.Name).Distinct())
|
Command existing = ctx.Commands.FirstOrDefault(c => c.Synchronized && c.Name == nvs) ??
|
||||||
dto.Commands.Add(new NameValueStats
|
new Command {Name = nvs, Synchronized = true};
|
||||||
{
|
|
||||||
name = nvs,
|
existing.Count += (ulong)ctx.Commands.LongCount(c => !c.Synchronized && c.Name == nvs);
|
||||||
Value = ctx.Commands.LongCount(c => !c.Synchronized &&
|
ctx.Commands.Update(existing);
|
||||||
c.Name == nvs)
|
ctx.Commands.RemoveRange(ctx.Commands.Where(c => !c.Synchronized && c.Name == nvs));
|
||||||
});
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(ctx.Filesystems.Any(c => !c.Synchronized))
|
if(ctx.Filesystems.Any(c => !c.Synchronized))
|
||||||
{
|
foreach(string nvs in ctx.Filesystems.Where(c => !c.Synchronized).Select(c => c.Name)
|
||||||
dto.Filesystems = new List<NameValueStats>();
|
.Distinct())
|
||||||
foreach(string nvs in
|
{
|
||||||
ctx.Filesystems.Where(c => !c.Synchronized).Select(c => c.Name).Distinct())
|
Filesystem existing =
|
||||||
dto.Filesystems.Add(new NameValueStats
|
ctx.Filesystems.FirstOrDefault(c => c.Synchronized && c.Name == nvs) ??
|
||||||
{
|
new Filesystem {Name = nvs, Synchronized = true};
|
||||||
name = nvs,
|
|
||||||
Value = ctx.Filesystems.LongCount(c => !c.Synchronized &&
|
existing.Count +=
|
||||||
c.Name == nvs)
|
(ulong)ctx.Filesystems.LongCount(c => !c.Synchronized && c.Name == nvs);
|
||||||
});
|
ctx.Filesystems.Update(existing);
|
||||||
}
|
ctx.Filesystems.RemoveRange(ctx.Filesystems.Where(c => !c.Synchronized &&
|
||||||
|
c.Name == nvs));
|
||||||
|
}
|
||||||
|
|
||||||
if(ctx.Filters.Any(c => !c.Synchronized))
|
if(ctx.Filters.Any(c => !c.Synchronized))
|
||||||
{
|
|
||||||
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
|
{
|
||||||
{
|
Filter existing = ctx.Filters.FirstOrDefault(c => c.Synchronized && c.Name == nvs) ??
|
||||||
name = nvs,
|
new Filter {Name = nvs, Synchronized = true};
|
||||||
Value = ctx.Filters.LongCount(c => !c.Synchronized &&
|
|
||||||
c.Name == nvs)
|
existing.Count += (ulong)ctx.Filters.LongCount(c => !c.Synchronized && c.Name == nvs);
|
||||||
});
|
ctx.Filters.Update(existing);
|
||||||
}
|
ctx.Filters.RemoveRange(ctx.Filters.Where(c => !c.Synchronized && c.Name == nvs));
|
||||||
|
}
|
||||||
|
|
||||||
if(ctx.MediaFormats.Any(c => !c.Synchronized))
|
if(ctx.MediaFormats.Any(c => !c.Synchronized))
|
||||||
{
|
foreach(string nvs in ctx.MediaFormats.Where(c => !c.Synchronized).Select(c => c.Name)
|
||||||
dto.MediaFormats = new List<NameValueStats>();
|
.Distinct())
|
||||||
foreach(string nvs in
|
{
|
||||||
ctx.Commands.Where(c => !c.Synchronized).Select(c => c.Name).Distinct())
|
MediaFormat existing =
|
||||||
dto.MediaFormats.Add(new NameValueStats
|
ctx.MediaFormats.FirstOrDefault(c => c.Synchronized && c.Name == nvs) ??
|
||||||
{
|
new MediaFormat {Name = nvs, Synchronized = true};
|
||||||
name = nvs,
|
|
||||||
Value = ctx.MediaFormats.LongCount(c => !c.Synchronized &&
|
existing.Count +=
|
||||||
c.Name == nvs)
|
(ulong)ctx.MediaFormats.LongCount(c => !c.Synchronized && c.Name == nvs);
|
||||||
});
|
ctx.MediaFormats.Update(existing);
|
||||||
}
|
ctx.MediaFormats.RemoveRange(ctx.MediaFormats.Where(c => !c.Synchronized &&
|
||||||
|
c.Name == nvs));
|
||||||
|
}
|
||||||
|
|
||||||
if(ctx.Partitions.Any(c => !c.Synchronized))
|
if(ctx.Partitions.Any(c => !c.Synchronized))
|
||||||
{
|
foreach(string nvs in ctx.Partitions.Where(c => !c.Synchronized).Select(c => c.Name)
|
||||||
dto.Partitions = new List<NameValueStats>();
|
.Distinct())
|
||||||
foreach(string nvs in
|
{
|
||||||
ctx.Partitions.Where(c => !c.Synchronized).Select(c => c.Name).Distinct())
|
Partition existing =
|
||||||
dto.Partitions.Add(new NameValueStats
|
ctx.Partitions.FirstOrDefault(c => c.Synchronized && c.Name == nvs) ??
|
||||||
{
|
new Partition {Name = nvs, Synchronized = true};
|
||||||
name = nvs,
|
|
||||||
Value = ctx.Partitions.LongCount(c => !c.Synchronized &&
|
existing.Count +=
|
||||||
c.Name == nvs)
|
(ulong)ctx.Partitions.LongCount(c => !c.Synchronized && c.Name == nvs);
|
||||||
});
|
ctx.Partitions.Update(existing);
|
||||||
}
|
ctx.Partitions.RemoveRange(ctx.Partitions.Where(c => !c.Synchronized && c.Name == nvs));
|
||||||
|
}
|
||||||
|
|
||||||
if(ctx.Versions.Any(c => !c.Synchronized))
|
if(ctx.Versions.Any(c => !c.Synchronized))
|
||||||
{
|
foreach(string nvs in ctx.Versions.Where(c => !c.Synchronized).Select(c => c.Value)
|
||||||
dto.Versions = new List<NameValueStats>();
|
.Distinct())
|
||||||
foreach(string nvs in
|
{
|
||||||
ctx.Versions.Where(c => !c.Synchronized).Select(c => c.Value).Distinct())
|
Version existing = ctx.Versions.FirstOrDefault(c => c.Synchronized && c.Value == nvs) ??
|
||||||
dto.Versions.Add(new NameValueStats
|
new Version {Value = nvs, Synchronized = true};
|
||||||
{
|
|
||||||
name = nvs,
|
existing.Count += (ulong)ctx.Versions.LongCount(c => !c.Synchronized && c.Value == nvs);
|
||||||
Value = ctx.Versions.LongCount(c => !c.Synchronized &&
|
ctx.Versions.Update(existing);
|
||||||
c.Value == nvs)
|
ctx.Versions.RemoveRange(ctx.Versions.Where(c => !c.Synchronized && c.Value == nvs));
|
||||||
});
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(ctx.Medias.Any(c => !c.Synchronized))
|
if(ctx.Medias.Any(c => !c.Synchronized))
|
||||||
{
|
|
||||||
dto.Medias = new List<MediaStats>();
|
|
||||||
foreach(string media in ctx.Medias.Where(c => !c.Synchronized).Select(c => c.Type)
|
foreach(string media in ctx.Medias.Where(c => !c.Synchronized).Select(c => c.Type)
|
||||||
.Distinct())
|
.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
|
{
|
||||||
{
|
Database.Models.Media existing =
|
||||||
real = true,
|
ctx.Medias.FirstOrDefault(c => c.Synchronized && c.Type == media && c.Real) ??
|
||||||
type = media,
|
new Database.Models.Media {Synchronized = true, Type = media, Real = true};
|
||||||
Value = ctx.Medias.LongCount(c => !c.Synchronized &&
|
|
||||||
c.Type == media && c.Real)
|
existing.Count +=
|
||||||
});
|
(ulong)ctx.Medias.LongCount(c => !c.Synchronized && c.Type == media && c.Real);
|
||||||
if(ctx.Medias.Any(c => !c.Synchronized && c.Type == media && !c.Real))
|
ctx.Medias.Update(existing);
|
||||||
dto.Medias.Add(new MediaStats
|
ctx.Medias.RemoveRange(ctx.Medias.Where(c => !c.Synchronized && c.Type == media &&
|
||||||
{
|
c.Real));
|
||||||
real = false,
|
}
|
||||||
type = media,
|
|
||||||
Value = ctx.Medias.LongCount(c => !c.Synchronized &&
|
if(!ctx.Medias.Any(c => !c.Synchronized && c.Type == media && !c.Real)) continue;
|
||||||
c.Type == media && !c.Real)
|
|
||||||
});
|
{
|
||||||
|
Database.Models.Media existing =
|
||||||
|
ctx.Medias.FirstOrDefault(c => c.Synchronized && c.Type == media && !c.Real) ??
|
||||||
|
new Database.Models.Media {Synchronized = true, Type = media, Real = false};
|
||||||
|
|
||||||
|
existing.Count +=
|
||||||
|
(ulong)ctx.Medias.LongCount(c => !c.Synchronized && c.Type == media && !c.Real);
|
||||||
|
ctx.Medias.Update(existing);
|
||||||
|
ctx.Medias.RemoveRange(ctx.Medias.Where(c => !c.Synchronized && c.Type == media &&
|
||||||
|
!c.Real));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(ctx.SeenDevices.Any(c => !c.Synchronized))
|
if(ctx.SeenDevices.Any(c => !c.Synchronized))
|
||||||
{
|
|
||||||
dto.Devices = new List<DeviceStats>();
|
|
||||||
foreach(DeviceStat device in ctx.SeenDevices.Where(c => !c.Synchronized))
|
foreach(DeviceStat device in ctx.SeenDevices.Where(c => !c.Synchronized))
|
||||||
dto.Devices.Add(new DeviceStats
|
{
|
||||||
{
|
device.Synchronized = true;
|
||||||
Bus = device.Bus,
|
ctx.Update(device);
|
||||||
Manufacturer = device.Manufacturer,
|
}
|
||||||
ManufacturerSpecified = !(device.Manufacturer is null),
|
|
||||||
Model = device.Model,
|
|
||||||
Revision = device.Revision
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ctx.OperatingSystems.Any(c => !c.Synchronized))
|
if(ctx.OperatingSystems.Any(c => !c.Synchronized))
|
||||||
{
|
|
||||||
dto.OperatingSystems = new List<OsStats>();
|
|
||||||
foreach(string osName in ctx.OperatingSystems.Where(c => !c.Synchronized)
|
foreach(string osName in ctx.OperatingSystems.Where(c => !c.Synchronized)
|
||||||
.Select(c => c.Name).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
|
||||||
.Select(c => c.Version).Distinct())
|
.Where(c => !c.Synchronized && c.Name == osName)
|
||||||
dto.OperatingSystems.Add(new OsStats
|
.Select(c => c.Version).Distinct())
|
||||||
{
|
{
|
||||||
name = osName,
|
OperatingSystem existing =
|
||||||
version = osVersion,
|
ctx.OperatingSystems.FirstOrDefault(c => c.Synchronized && c.Name == osName &&
|
||||||
Value =
|
c.Version ==
|
||||||
ctx.OperatingSystems.LongCount(c =>
|
osVersion) ??
|
||||||
!c
|
new OperatingSystem {Synchronized = true, Version = osVersion, Name = osName};
|
||||||
.Synchronized &&
|
|
||||||
c.Name ==
|
existing.Count +=
|
||||||
osName &&
|
(ulong)ctx.OperatingSystems.LongCount(c => !c.Synchronized &&
|
||||||
c.Version ==
|
c.Name == osName &&
|
||||||
osVersion)
|
c.Version == osVersion);
|
||||||
});
|
ctx.OperatingSystems.Update(existing);
|
||||||
|
ctx.OperatingSystems.RemoveRange(ctx.OperatingSystems.Where(c => !c.Synchronized &&
|
||||||
|
c.Name == osName &&
|
||||||
|
c.Version ==
|
||||||
|
osVersion));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
System.Console.WriteLine("Uploading statistics");
|
|
||||||
#else
|
|
||||||
DiscImageChef.Console.DicConsole.DebugWriteLine("Submit stats", "Uploading statistics");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
MemoryStream jsonStream = new MemoryStream();
|
|
||||||
StreamWriter jsonSw = new StreamWriter(jsonStream);
|
|
||||||
|
|
||||||
jsonSw.Write(JsonConvert.SerializeObject(dto, Formatting.Indented,
|
|
||||||
new JsonSerializerSettings
|
|
||||||
{
|
|
||||||
NullValueHandling =
|
|
||||||
NullValueHandling.Ignore
|
|
||||||
}));
|
|
||||||
jsonStream.Seek(0, SeekOrigin.Begin);
|
|
||||||
WebRequest request =
|
|
||||||
WebRequest.Create("http://discimagechef.claunia.com/api/uploadstatsv2");
|
|
||||||
((HttpWebRequest)request).UserAgent =
|
|
||||||
$"DiscImageChef {typeof(Version).Assembly.GetName().Version}";
|
|
||||||
request.Method = "POST";
|
|
||||||
request.ContentLength = jsonStream.Length;
|
|
||||||
request.ContentType = "application/json";
|
|
||||||
Stream reqStream = request.GetRequestStream();
|
|
||||||
jsonStream.CopyTo(reqStream);
|
|
||||||
reqStream.Close();
|
|
||||||
WebResponse response = request.GetResponse();
|
|
||||||
|
|
||||||
if(((HttpWebResponse)response).StatusCode != HttpStatusCode.OK) return;
|
|
||||||
|
|
||||||
Stream data = response.GetResponseStream();
|
|
||||||
StreamReader reader = new StreamReader(data ?? throw new InvalidOperationException());
|
|
||||||
|
|
||||||
reader.ReadToEnd();
|
|
||||||
data.Close();
|
|
||||||
response.Close();
|
|
||||||
jsonSw.Close();
|
|
||||||
jsonStream.Close();
|
|
||||||
|
|
||||||
if(ctx.Commands.Any(c => !c.Synchronized))
|
|
||||||
foreach(string nvs in ctx
|
|
||||||
.Commands.Where(c => !c.Synchronized).Select(c => c.Name)
|
|
||||||
.Distinct())
|
|
||||||
{
|
|
||||||
Command existing =
|
|
||||||
ctx.Commands.FirstOrDefault(c => c.Synchronized && c.Name == nvs) ??
|
|
||||||
new Command {Name = nvs, Synchronized = true};
|
|
||||||
|
|
||||||
existing.Count +=
|
|
||||||
(ulong)ctx.Commands.LongCount(c => !c.Synchronized && c.Name == nvs);
|
|
||||||
ctx.Commands.Update(existing);
|
|
||||||
ctx.Commands.RemoveRange(ctx.Commands.Where(c => !c.Synchronized && c.Name == nvs));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ctx.Filesystems.Any(c => !c.Synchronized))
|
|
||||||
foreach(string nvs in ctx
|
|
||||||
.Filesystems.Where(c => !c.Synchronized).Select(c => c.Name)
|
|
||||||
.Distinct())
|
|
||||||
{
|
|
||||||
Filesystem existing =
|
|
||||||
ctx.Filesystems.FirstOrDefault(c => c.Synchronized && c.Name == nvs) ??
|
|
||||||
new Filesystem {Name = nvs, Synchronized = true};
|
|
||||||
|
|
||||||
existing.Count +=
|
|
||||||
(ulong)ctx.Filesystems.LongCount(c => !c.Synchronized && c.Name == nvs);
|
|
||||||
ctx.Filesystems.Update(existing);
|
|
||||||
ctx.Filesystems.RemoveRange(ctx.Filesystems.Where(c => !c.Synchronized &&
|
|
||||||
c.Name == nvs));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ctx.Filters.Any(c => !c.Synchronized))
|
|
||||||
foreach(string nvs in ctx
|
|
||||||
.Filters.Where(c => !c.Synchronized).Select(c => c.Name)
|
|
||||||
.Distinct())
|
|
||||||
{
|
|
||||||
Filter existing =
|
|
||||||
ctx.Filters.FirstOrDefault(c => c.Synchronized && c.Name == nvs) ??
|
|
||||||
new Filter {Name = nvs, Synchronized = true};
|
|
||||||
|
|
||||||
existing.Count +=
|
|
||||||
(ulong)ctx.Filters.LongCount(c => !c.Synchronized && c.Name == nvs);
|
|
||||||
ctx.Filters.Update(existing);
|
|
||||||
ctx.Filters.RemoveRange(ctx.Filters.Where(c => !c.Synchronized && c.Name == nvs));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ctx.MediaFormats.Any(c => !c.Synchronized))
|
|
||||||
foreach(string nvs in ctx
|
|
||||||
.MediaFormats.Where(c => !c.Synchronized).Select(c => c.Name)
|
|
||||||
.Distinct())
|
|
||||||
{
|
|
||||||
MediaFormat existing =
|
|
||||||
ctx.MediaFormats.FirstOrDefault(c => c.Synchronized && c.Name == nvs) ??
|
|
||||||
new MediaFormat {Name = nvs, Synchronized = true};
|
|
||||||
|
|
||||||
existing.Count +=
|
|
||||||
(ulong)ctx.MediaFormats.LongCount(c => !c.Synchronized && c.Name == nvs);
|
|
||||||
ctx.MediaFormats.Update(existing);
|
|
||||||
ctx.MediaFormats.RemoveRange(ctx.MediaFormats.Where(c => !c.Synchronized &&
|
|
||||||
c.Name == nvs));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ctx.Partitions.Any(c => !c.Synchronized))
|
|
||||||
foreach(string nvs in ctx
|
|
||||||
.Partitions.Where(c => !c.Synchronized).Select(c => c.Name)
|
|
||||||
.Distinct())
|
|
||||||
{
|
|
||||||
Partition existing =
|
|
||||||
ctx.Partitions.FirstOrDefault(c => c.Synchronized && c.Name == nvs) ??
|
|
||||||
new Partition {Name = nvs, Synchronized = true};
|
|
||||||
|
|
||||||
existing.Count +=
|
|
||||||
(ulong)ctx.Partitions.LongCount(c => !c.Synchronized && c.Name == nvs);
|
|
||||||
ctx.Partitions.Update(existing);
|
|
||||||
ctx.Partitions.RemoveRange(ctx.Partitions.Where(c => !c.Synchronized &&
|
|
||||||
c.Name == nvs));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ctx.Versions.Any(c => !c.Synchronized))
|
|
||||||
foreach(string nvs in ctx
|
|
||||||
.Versions.Where(c => !c.Synchronized).Select(c => c.Value)
|
|
||||||
.Distinct())
|
|
||||||
{
|
|
||||||
Version existing =
|
|
||||||
ctx.Versions.FirstOrDefault(c => c.Synchronized && c.Value == nvs) ??
|
|
||||||
new Version {Value = nvs, Synchronized = true};
|
|
||||||
|
|
||||||
existing.Count +=
|
|
||||||
(ulong)ctx.Versions.LongCount(c => !c.Synchronized && c.Value == nvs);
|
|
||||||
ctx.Versions.Update(existing);
|
|
||||||
ctx.Versions.RemoveRange(ctx.Versions.Where(c => !c.Synchronized &&
|
|
||||||
c.Value == nvs));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ctx.Medias.Any(c => !c.Synchronized))
|
|
||||||
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))
|
|
||||||
{
|
|
||||||
Database.Models.Media existing =
|
|
||||||
ctx.Medias.FirstOrDefault(c => c.Synchronized && c.Type == media &&
|
|
||||||
c.Real) ?? new Database.Models.Media
|
|
||||||
{
|
|
||||||
Synchronized = true, Type = media, Real = true
|
|
||||||
};
|
|
||||||
|
|
||||||
existing.Count +=
|
|
||||||
(ulong)ctx.Medias.LongCount(c => !c.Synchronized && c.Type == media &&
|
|
||||||
c.Real);
|
|
||||||
ctx.Medias.Update(existing);
|
|
||||||
ctx.Medias.RemoveRange(ctx.Medias.Where(c => !c.Synchronized &&
|
|
||||||
c.Type == media && c.Real));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!ctx.Medias.Any(c => !c.Synchronized && c.Type == media && !c.Real)) continue;
|
|
||||||
|
|
||||||
{
|
|
||||||
Database.Models.Media existing =
|
|
||||||
ctx.Medias.FirstOrDefault(c => c.Synchronized && c.Type == media &&
|
|
||||||
!c.Real) ?? new Database.Models.Media
|
|
||||||
{
|
|
||||||
Synchronized = true, Type = media, Real = false
|
|
||||||
};
|
|
||||||
|
|
||||||
existing.Count +=
|
|
||||||
(ulong)ctx.Medias.LongCount(c => !c.Synchronized && c.Type == media &&
|
|
||||||
!c.Real);
|
|
||||||
ctx.Medias.Update(existing);
|
|
||||||
ctx.Medias.RemoveRange(ctx.Medias.Where(c => !c.Synchronized &&
|
|
||||||
c.Type == media && !c.Real));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ctx.SeenDevices.Any(c => !c.Synchronized))
|
|
||||||
foreach(DeviceStat device in ctx.SeenDevices.Where(c => !c.Synchronized))
|
|
||||||
{
|
|
||||||
device.Synchronized = true;
|
|
||||||
ctx.Update(device);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ctx.OperatingSystems.Any(c => !c.Synchronized))
|
|
||||||
foreach(string osName in ctx.OperatingSystems.Where(c => !c.Synchronized)
|
|
||||||
.Select(c => c.Name).Distinct())
|
|
||||||
{
|
|
||||||
foreach(string osVersion in ctx
|
|
||||||
.OperatingSystems
|
|
||||||
.Where(c => !c.Synchronized && c.Name == osName)
|
|
||||||
.Select(c => c.Version).Distinct())
|
|
||||||
{
|
|
||||||
OperatingSystem existing =
|
|
||||||
ctx.OperatingSystems.FirstOrDefault(c => c.Synchronized &&
|
|
||||||
c.Name == osName &&
|
|
||||||
c.Version == osVersion) ??
|
|
||||||
new OperatingSystem
|
|
||||||
{
|
|
||||||
Synchronized = true, Version = osVersion, Name = osName
|
|
||||||
};
|
|
||||||
|
|
||||||
existing.Count +=
|
|
||||||
(ulong)ctx.OperatingSystems.LongCount(c => !c.Synchronized &&
|
|
||||||
c.Name == osName &&
|
|
||||||
c.Version == osVersion);
|
|
||||||
ctx.OperatingSystems.Update(existing);
|
|
||||||
ctx.OperatingSystems.RemoveRange(ctx.OperatingSystems.Where(c =>
|
|
||||||
!c
|
|
||||||
.Synchronized &&
|
|
||||||
c.Name ==
|
|
||||||
osName &&
|
|
||||||
c.Version ==
|
|
||||||
osVersion));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(WebException)
|
|
||||||
{
|
|
||||||
// Can't connect to the server, do nothing
|
|
||||||
}
|
|
||||||
// ReSharper disable once RedundantCatchClause
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
if(Debugger.IsAttached) throw;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
catch(WebException)
|
||||||
|
{
|
||||||
|
// Can't connect to the server, do nothing
|
||||||
|
}
|
||||||
|
// ReSharper disable once RedundantCatchClause
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
if(Debugger.IsAttached) throw;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(submitStatsLock) return;
|
if(submitStatsLock) return;
|
||||||
|
|
||||||
@@ -911,7 +878,9 @@ namespace DiscImageChef.Core
|
|||||||
|
|
||||||
if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.DeviceStats) return;
|
if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.DeviceStats) return;
|
||||||
|
|
||||||
|
DicContext ctx = DicContext.Create(Settings.Settings.DbPath);
|
||||||
ctx.Commands.Add(new Command {Name = command, Synchronized = false, Count = 1});
|
ctx.Commands.Add(new Command {Name = command, Synchronized = false, Count = 1});
|
||||||
|
ctx.SaveChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -924,7 +893,9 @@ namespace DiscImageChef.Core
|
|||||||
|
|
||||||
if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.FilesystemStats) return;
|
if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.FilesystemStats) return;
|
||||||
|
|
||||||
|
DicContext ctx = DicContext.Create(Settings.Settings.DbPath);
|
||||||
ctx.Filesystems.Add(new Filesystem {Name = filesystem, Synchronized = false, Count = 1});
|
ctx.Filesystems.Add(new Filesystem {Name = filesystem, Synchronized = false, Count = 1});
|
||||||
|
ctx.SaveChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -937,7 +908,9 @@ namespace DiscImageChef.Core
|
|||||||
|
|
||||||
if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.PartitionStats) return;
|
if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.PartitionStats) return;
|
||||||
|
|
||||||
|
DicContext ctx = DicContext.Create(Settings.Settings.DbPath);
|
||||||
ctx.Partitions.Add(new Partition {Name = partition, Synchronized = false, Count = 1});
|
ctx.Partitions.Add(new Partition {Name = partition, Synchronized = false, Count = 1});
|
||||||
|
ctx.SaveChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -950,7 +923,9 @@ namespace DiscImageChef.Core
|
|||||||
|
|
||||||
if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.FilterStats) return;
|
if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.FilterStats) return;
|
||||||
|
|
||||||
|
DicContext ctx = DicContext.Create(Settings.Settings.DbPath);
|
||||||
ctx.Filters.Add(new Filter {Name = filter, Synchronized = false, Count = 1});
|
ctx.Filters.Add(new Filter {Name = filter, Synchronized = false, Count = 1});
|
||||||
|
ctx.SaveChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -963,7 +938,9 @@ namespace DiscImageChef.Core
|
|||||||
|
|
||||||
if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.MediaImageStats) return;
|
if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.MediaImageStats) return;
|
||||||
|
|
||||||
|
DicContext ctx = DicContext.Create(Settings.Settings.DbPath);
|
||||||
ctx.MediaFormats.Add(new MediaFormat {Name = format, Synchronized = false, Count = 1});
|
ctx.MediaFormats.Add(new MediaFormat {Name = format, Synchronized = false, Count = 1});
|
||||||
|
ctx.SaveChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -979,6 +956,7 @@ namespace DiscImageChef.Core
|
|||||||
else if(dev.IsFireWire) deviceBus = "FireWire";
|
else if(dev.IsFireWire) deviceBus = "FireWire";
|
||||||
else deviceBus = dev.Type.ToString();
|
else deviceBus = dev.Type.ToString();
|
||||||
|
|
||||||
|
DicContext ctx = DicContext.Create(Settings.Settings.DbPath);
|
||||||
ctx.SeenDevices.Add(new DeviceStat
|
ctx.SeenDevices.Add(new DeviceStat
|
||||||
{
|
{
|
||||||
Bus = deviceBus,
|
Bus = deviceBus,
|
||||||
@@ -987,6 +965,7 @@ namespace DiscImageChef.Core
|
|||||||
Revision = dev.Revision,
|
Revision = dev.Revision,
|
||||||
Synchronized = false
|
Synchronized = false
|
||||||
});
|
});
|
||||||
|
ctx.SaveChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -998,10 +977,12 @@ namespace DiscImageChef.Core
|
|||||||
{
|
{
|
||||||
if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.MediaStats) return;
|
if(Settings.Settings.Current.Stats == null || !Settings.Settings.Current.Stats.MediaStats) return;
|
||||||
|
|
||||||
|
DicContext ctx = DicContext.Create(Settings.Settings.DbPath);
|
||||||
ctx.Medias.Add(new Database.Models.Media
|
ctx.Medias.Add(new Database.Models.Media
|
||||||
{
|
{
|
||||||
Real = real, Synchronized = false, Type = type.ToString(), Count = 1
|
Real = real, Synchronized = false, Type = type.ToString(), Count = 1
|
||||||
});
|
});
|
||||||
|
ctx.SaveChanges();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -37,8 +37,7 @@ namespace DiscImageChef.Database
|
|||||||
{
|
{
|
||||||
public sealed class DicContext : DbContext
|
public sealed class DicContext : DbContext
|
||||||
{
|
{
|
||||||
// Note: If table does not appear check that last migration has been REALLY added to the project
|
public DicContext(DbContextOptions options) : base(options)
|
||||||
public DicContext()
|
|
||||||
{
|
{
|
||||||
Database.Migrate();
|
Database.Migrate();
|
||||||
}
|
}
|
||||||
@@ -57,10 +56,13 @@ namespace DiscImageChef.Database
|
|||||||
public DbSet<UsbVendor> UsbVendors { get; set; }
|
public DbSet<UsbVendor> UsbVendors { get; set; }
|
||||||
public DbSet<UsbProduct> UsbProducts { get; set; }
|
public DbSet<UsbProduct> UsbProducts { get; set; }
|
||||||
public DbSet<CdOffset> CdOffsets { get; set; }
|
public DbSet<CdOffset> CdOffsets { get; set; }
|
||||||
|
// Note: If table does not appear check that last migration has been REALLY added to the project
|
||||||
|
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
public static DicContext Create(string dbPath)
|
||||||
{
|
{
|
||||||
optionsBuilder.UseSqlite("Data Source=discimagechef.db");
|
DbContextOptionsBuilder optionsBuilder = new DbContextOptionsBuilder();
|
||||||
|
optionsBuilder.UseSqlite($"Data Source={dbPath}");
|
||||||
|
return new DicContext(optionsBuilder.Options);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -41,13 +41,11 @@ namespace DiscImageChef.Gui.Dialogs
|
|||||||
{
|
{
|
||||||
public class dlgStatistics : Dialog
|
public class dlgStatistics : Dialog
|
||||||
{
|
{
|
||||||
DicContext ctx;
|
|
||||||
|
|
||||||
public dlgStatistics()
|
public dlgStatistics()
|
||||||
{
|
{
|
||||||
XamlReader.Load(this);
|
XamlReader.Load(this);
|
||||||
|
|
||||||
ctx = new DicContext();
|
DicContext ctx = DicContext.Create(Settings.Settings.DbPath);
|
||||||
|
|
||||||
if(ctx.Commands.Any())
|
if(ctx.Commands.Any())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -597,7 +597,7 @@ namespace DiscImageChef.Gui.Forms
|
|||||||
|
|
||||||
protected void OnMenuStatistics(object sender, EventArgs e)
|
protected void OnMenuStatistics(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
DicContext ctx = new DicContext();
|
DicContext ctx = DicContext.Create(Settings.Settings.DbPath);
|
||||||
|
|
||||||
if(!ctx.Commands.Any() && !ctx.Filesystems.Any() && !ctx.Filters.Any() && !ctx.MediaFormats.Any() &&
|
if(!ctx.Commands.Any() && !ctx.Filesystems.Any() && !ctx.Filters.Any() && !ctx.MediaFormats.Any() &&
|
||||||
!ctx.Medias.Any() && !ctx.Partitions.Any() && !ctx.SeenDevices.Any())
|
!ctx.Medias.Any() && !ctx.Partitions.Any() && !ctx.SeenDevices.Any())
|
||||||
|
|||||||
@@ -155,6 +155,8 @@ namespace DiscImageChef.Settings
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static string StatsPath { get; private set; }
|
public static string StatsPath { get; private set; }
|
||||||
|
|
||||||
|
public static string DbPath { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Loads settings
|
/// Loads settings
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -163,6 +165,7 @@ namespace DiscImageChef.Settings
|
|||||||
Current = new DicSettings();
|
Current = new DicSettings();
|
||||||
PlatformID ptId = DetectOS.GetRealPlatformID();
|
PlatformID ptId = DetectOS.GetRealPlatformID();
|
||||||
string homePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
|
string homePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
|
||||||
|
DbPath = "discimagechef.db";
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -180,6 +183,8 @@ namespace DiscImageChef.Settings
|
|||||||
string dicPath = Path.Combine(appSupportPath, "DiscImageChef");
|
string dicPath = Path.Combine(appSupportPath, "DiscImageChef");
|
||||||
if(!Directory.Exists(dicPath)) Directory.CreateDirectory(dicPath);
|
if(!Directory.Exists(dicPath)) Directory.CreateDirectory(dicPath);
|
||||||
|
|
||||||
|
DbPath = Path.Combine(dicPath, DbPath);
|
||||||
|
|
||||||
ReportsPath = Path.Combine(dicPath, "Reports");
|
ReportsPath = Path.Combine(dicPath, "Reports");
|
||||||
if(!Directory.Exists(ReportsPath)) Directory.CreateDirectory(ReportsPath);
|
if(!Directory.Exists(ReportsPath)) Directory.CreateDirectory(ReportsPath);
|
||||||
|
|
||||||
@@ -202,6 +207,8 @@ namespace DiscImageChef.Settings
|
|||||||
string dicPath = Path.Combine(appSupportPath, "DiscImageChef");
|
string dicPath = Path.Combine(appSupportPath, "DiscImageChef");
|
||||||
if(!Directory.Exists(dicPath)) Directory.CreateDirectory(dicPath);
|
if(!Directory.Exists(dicPath)) Directory.CreateDirectory(dicPath);
|
||||||
|
|
||||||
|
DbPath = Path.Combine(dicPath, DbPath);
|
||||||
|
|
||||||
ReportsPath = Path.Combine(dicPath, "Reports");
|
ReportsPath = Path.Combine(dicPath, "Reports");
|
||||||
if(!Directory.Exists(ReportsPath)) Directory.CreateDirectory(ReportsPath);
|
if(!Directory.Exists(ReportsPath)) Directory.CreateDirectory(ReportsPath);
|
||||||
|
|
||||||
@@ -227,6 +234,8 @@ namespace DiscImageChef.Settings
|
|||||||
|
|
||||||
if(!Directory.Exists(dicPath)) Directory.CreateDirectory(dicPath);
|
if(!Directory.Exists(dicPath)) Directory.CreateDirectory(dicPath);
|
||||||
|
|
||||||
|
DbPath = Path.Combine(dicPath, DbPath);
|
||||||
|
|
||||||
ReportsPath = Path.Combine(dicPath, "Reports");
|
ReportsPath = Path.Combine(dicPath, "Reports");
|
||||||
if(!Directory.Exists(ReportsPath)) Directory.CreateDirectory(ReportsPath);
|
if(!Directory.Exists(ReportsPath)) Directory.CreateDirectory(ReportsPath);
|
||||||
|
|
||||||
|
|||||||
@@ -924,7 +924,7 @@ namespace DiscImageChef.Commands
|
|||||||
|
|
||||||
Core.Statistics.AddCommand("device-report");
|
Core.Statistics.AddCommand("device-report");
|
||||||
|
|
||||||
using(DicContext ctx = new DicContext())
|
using(DicContext ctx = DicContext.Create(Settings.Settings.DbPath))
|
||||||
{
|
{
|
||||||
ctx.Reports.Add(new Report(report));
|
ctx.Reports.Add(new Report(report));
|
||||||
ctx.SaveChanges();
|
ctx.SaveChanges();
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace DiscImageChef.Commands
|
|||||||
{
|
{
|
||||||
internal static void ShowStats()
|
internal static void ShowStats()
|
||||||
{
|
{
|
||||||
DicContext ctx = new DicContext();
|
DicContext ctx = DicContext.Create(Settings.Settings.DbPath);
|
||||||
|
|
||||||
if(!ctx.Commands.Any() && !ctx.Filesystems.Any() && !ctx.Filters.Any() && !ctx.MediaFormats.Any() &&
|
if(!ctx.Commands.Any() && !ctx.Filesystems.Any() && !ctx.Filters.Any() && !ctx.MediaFormats.Any() &&
|
||||||
!ctx.Medias.Any() && !ctx.Partitions.Any() && !ctx.SeenDevices.Any())
|
!ctx.Medias.Any() && !ctx.Partitions.Any() && !ctx.SeenDevices.Any())
|
||||||
|
|||||||
@@ -55,11 +55,12 @@ namespace DiscImageChef
|
|||||||
DicConsole.WriteEvent += System.Console.Write;
|
DicConsole.WriteEvent += System.Console.Write;
|
||||||
DicConsole.ErrorWriteLineEvent += System.Console.Error.WriteLine;
|
DicConsole.ErrorWriteLineEvent += System.Console.Error.WriteLine;
|
||||||
|
|
||||||
DicContext ctx = new DicContext();
|
Settings.Settings.LoadSettings();
|
||||||
|
|
||||||
|
DicContext ctx = DicContext.Create(Settings.Settings.DbPath);
|
||||||
ctx.Database.Migrate();
|
ctx.Database.Migrate();
|
||||||
ctx.SaveChanges();
|
ctx.SaveChanges();
|
||||||
|
|
||||||
Settings.Settings.LoadSettings();
|
|
||||||
if((args.Length < 1 || args[0].ToLowerInvariant() != "gui") &&
|
if((args.Length < 1 || args[0].ToLowerInvariant() != "gui") &&
|
||||||
Settings.Settings.Current.GdprCompliance < DicSettings.GdprLevel) Configure.DoConfigure(true);
|
Settings.Settings.Current.GdprCompliance < DicSettings.GdprLevel) Configure.DoConfigure(true);
|
||||||
Statistics.LoadStats();
|
Statistics.LoadStats();
|
||||||
|
|||||||
Reference in New Issue
Block a user