diff --git a/DiscImageChef.Core/Remote.cs b/DiscImageChef.Core/Remote.cs
index 23fd27da4..eb75b26f2 100644
--- a/DiscImageChef.Core/Remote.cs
+++ b/DiscImageChef.Core/Remote.cs
@@ -36,6 +36,7 @@ using System.Net;
using System.Threading;
using System.Xml.Serialization;
using DiscImageChef.CommonTypes.Metadata;
+using Newtonsoft.Json;
using Version = DiscImageChef.CommonTypes.Metadata.Version;
namespace DiscImageChef.Core
@@ -99,5 +100,66 @@ namespace DiscImageChef.Core
});
submitThread.Start();
}
+
+ ///
+ /// Submits a device report
+ ///
+ /// Device report
+ public static void SubmitReportV2(DeviceReportV2 report)
+ {
+ Thread submitThread = new Thread(() =>
+ {
+ try
+ {
+ #if DEBUG
+ System.Console.WriteLine("Uploading device report");
+ #else
+ DiscImageChef.Console.DicConsole.DebugWriteLine("Submit stats", "Uploading device report");
+ #endif
+
+ MemoryStream xmlStream = new MemoryStream();
+ StreamWriter jsonSw = new StreamWriter(xmlStream);
+
+ jsonSw.Write(JsonConvert.SerializeObject(report, Formatting.Indented,
+ new JsonSerializerSettings
+ {
+ NullValueHandling = NullValueHandling.Ignore
+ }));
+ jsonSw.Close();
+ xmlStream.Seek(0, SeekOrigin.Begin);
+ WebRequest request = WebRequest.Create("http://discimagechef.claunia.com/api/uploadreportv2");
+ ((HttpWebRequest)request).UserAgent = $"DiscImageChef {typeof(Version).Assembly.GetName().Version}";
+ request.Method = "POST";
+ request.ContentLength = xmlStream.Length;
+ request.ContentType = "application/json";
+ Stream reqStream = request.GetRequestStream();
+ xmlStream.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();
+ xmlStream.Close();
+ }
+ catch(WebException)
+ {
+ // Can't connect to the server, do nothing
+ }
+ // ReSharper disable once RedundantCatchClause
+ catch
+ {
+ #if DEBUG
+ throw;
+ #endif
+ }
+ });
+ submitThread.Start();
+ }
}
}
\ No newline at end of file
diff --git a/DiscImageChef/Commands/DeviceReport.cs b/DiscImageChef/Commands/DeviceReport.cs
index 3e8e6b4d6..8fd8bc704 100644
--- a/DiscImageChef/Commands/DeviceReport.cs
+++ b/DiscImageChef/Commands/DeviceReport.cs
@@ -58,7 +58,8 @@ namespace DiscImageChef.Commands
if(!DetectOS.IsAdmin)
{
- DicConsole.ErrorWriteLine("Because of the commands sent to a device, device report must be run with administrative privileges.");
+ DicConsole
+ .ErrorWriteLine("Because of the commands sent to a device, device report must be run with administrative privileges.");
DicConsole.ErrorWriteLine("Not continuing.");
return;
}
@@ -925,7 +926,7 @@ namespace DiscImageChef.Commands
}
// TODO:
- //if(Settings.Settings.Current.ShareReports) Remote.SubmitReport(report);
+ if(Settings.Settings.Current.ShareReports) Remote.SubmitReportV2(report);
}
}
}
\ No newline at end of file