mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 11:14:25 +00:00
Add Sentry to catch exceptions.
This commit is contained in:
@@ -54,4 +54,9 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Aaru.Generators\Aaru.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Sentry">
|
||||
<HintPath>..\..\..\..\.nuget\packages\sentry\5.14.1\lib\net9.0\Sentry.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -30,7 +30,9 @@
|
||||
// Copyright © 2011-2025 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Checksums;
|
||||
|
||||
@@ -62,10 +64,12 @@ public static partial class Native
|
||||
{
|
||||
version = get_acn_version();
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
_supported = false;
|
||||
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -55,4 +55,9 @@
|
||||
<LastGenOutput>Localization.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Sentry">
|
||||
<HintPath>..\..\..\..\.nuget\packages\sentry\5.14.1\lib\net9.0\Sentry.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -42,6 +42,7 @@ using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.InteropServices.Marshalling;
|
||||
using System.Security.Principal;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.CommonTypes.Interop;
|
||||
|
||||
@@ -86,8 +87,10 @@ public static partial class DetectOS
|
||||
{
|
||||
isAdmin = false;
|
||||
}
|
||||
catch(Exception)
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
isAdmin = false;
|
||||
}
|
||||
finally
|
||||
@@ -237,7 +240,7 @@ public static partial class DetectOS
|
||||
/// <returns>Current operating system version</returns>
|
||||
public static string GetVersion()
|
||||
{
|
||||
var environ = Environment.OSVersion.Version.ToString();
|
||||
string environ = Environment.OSVersion.Version.ToString();
|
||||
|
||||
switch(GetRealPlatformID())
|
||||
{
|
||||
|
||||
@@ -36,6 +36,7 @@ using System.IO;
|
||||
using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.CommonTypes;
|
||||
|
||||
@@ -273,9 +274,10 @@ public class PluginRegister
|
||||
else
|
||||
noFilter = filter;
|
||||
}
|
||||
catch(IOException)
|
||||
catch(IOException ex)
|
||||
{
|
||||
// Ignore and continue
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -72,4 +72,9 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Aaru.Helpers\Aaru.Helpers.csproj"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Sentry">
|
||||
<HintPath>..\..\..\..\.nuget\packages\sentry\5.14.1\lib\net9.0\Sentry.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -30,7 +30,9 @@
|
||||
// Copyright © 2011-2025 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Compression;
|
||||
|
||||
@@ -62,8 +64,10 @@ public static partial class Native
|
||||
{
|
||||
version = AARU_get_acn_version();
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
_supported = false;
|
||||
|
||||
return false;
|
||||
|
||||
@@ -74,6 +74,9 @@
|
||||
<PackageReference Include="System.Runtime.InteropServices"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Sentry">
|
||||
<HintPath>..\..\..\..\.nuget\packages\sentry\5.14.1\lib\net9.0\Sentry.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Spectre.Console.Json">
|
||||
<HintPath>..\..\..\..\.nuget\packages\spectre.console.json\0.50.0\lib\net9.0\Spectre.Console.Json.dll</HintPath>
|
||||
</Reference>
|
||||
|
||||
@@ -30,9 +30,11 @@
|
||||
// Copyright © 2011-2025 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
using System;
|
||||
using Aaru.CommonTypes;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Core;
|
||||
|
||||
@@ -67,18 +69,19 @@ public static class ArchiveFormat
|
||||
|
||||
break;
|
||||
}
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
// Not recognized
|
||||
return format;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,10 +30,12 @@
|
||||
// Copyright © 2011-2025 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.IO;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Core;
|
||||
|
||||
@@ -150,8 +152,10 @@ public sealed class DataFile
|
||||
outputFs.Write(data, 0, data.Length);
|
||||
outputFs.Close();
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
AaruLogging.Exception(ex, Localization.Core.Unable_to_write_file_0, filename);
|
||||
AaruLogging.Error(Localization.Core.Unable_to_write_file_0, filename);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ using Aaru.Decoders.SCSI.MMC;
|
||||
using Aaru.Devices;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace Aaru.Core.Devices.Report;
|
||||
@@ -514,12 +515,10 @@ public sealed partial class DeviceReport
|
||||
int.Parse(ssecond),
|
||||
DateTimeKind.Utc);
|
||||
}
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
}
|
||||
}
|
||||
|
||||
@@ -947,8 +946,8 @@ public sealed partial class DeviceReport
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadSpareAreaInformation);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadSpareAreaInformation);
|
||||
|
||||
mediaTest.DvdSaiData = buffer;
|
||||
|
||||
@@ -993,8 +992,8 @@ public sealed partial class DeviceReport
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadSpareAreaInformation);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadSpareAreaInformation);
|
||||
|
||||
mediaTest.BluSaiData = buffer;
|
||||
}
|
||||
@@ -1055,9 +1054,7 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadRecordablePFI);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.CanReadRecordablePFI);
|
||||
|
||||
mediaTest.EmbossedPfiData = buffer;
|
||||
}
|
||||
@@ -1142,9 +1139,7 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadLayerCapacity);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.CanReadLayerCapacity);
|
||||
|
||||
mediaTest.DvdLayerData = buffer;
|
||||
}
|
||||
@@ -1172,9 +1167,7 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadDiscInformation);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.CanReadDiscInformation);
|
||||
|
||||
mediaTest.BluDiData = buffer;
|
||||
|
||||
@@ -1418,9 +1411,7 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsReadCd);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsReadCd);
|
||||
|
||||
mediaTest.ReadCdFullData = buffer;
|
||||
|
||||
@@ -1445,9 +1436,7 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsReadCdMsf);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsReadCdMsf);
|
||||
|
||||
mediaTest.ReadCdMsfFullData = buffer;
|
||||
}
|
||||
@@ -1475,9 +1464,7 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsReadCd);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsReadCd);
|
||||
|
||||
mediaTest.ReadCdData = buffer;
|
||||
|
||||
@@ -1502,9 +1489,7 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsReadCdMsf);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsReadCdMsf);
|
||||
|
||||
mediaTest.ReadCdMsfData = buffer;
|
||||
|
||||
@@ -1530,9 +1515,7 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsReadCdRaw);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsReadCdRaw);
|
||||
|
||||
mediaTest.ReadCdFullData = buffer;
|
||||
|
||||
@@ -1557,9 +1540,7 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsReadCdMsfRaw);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsReadCdMsfRaw);
|
||||
|
||||
mediaTest.ReadCdMsfFullData = buffer;
|
||||
}
|
||||
@@ -1734,9 +1715,7 @@ public sealed partial class DeviceReport
|
||||
}
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadLeadOut);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.CanReadLeadOut);
|
||||
|
||||
mediaTest.LeadOutData = buffer;
|
||||
}
|
||||
@@ -1790,8 +1769,8 @@ public sealed partial class DeviceReport
|
||||
}
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadC2Pointers);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadC2Pointers);
|
||||
|
||||
mediaTest.C2PointersData = buffer;
|
||||
}
|
||||
@@ -1819,8 +1798,8 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadPQSubchannel);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadPQSubchannel);
|
||||
|
||||
mediaTest.PQSubchannelData = buffer;
|
||||
|
||||
@@ -1842,8 +1821,8 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadRWSubchannel);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadRWSubchannel);
|
||||
|
||||
mediaTest.RWSubchannelData = buffer;
|
||||
|
||||
@@ -1870,8 +1849,8 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadCorrectedSubchannel);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadCorrectedSubchannel);
|
||||
|
||||
mediaTest.CorrectedSubchannelData = buffer;
|
||||
}
|
||||
@@ -1928,8 +1907,8 @@ public sealed partial class DeviceReport
|
||||
}
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadPQSubchannelWithC2);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadPQSubchannelWithC2);
|
||||
|
||||
mediaTest.PQSubchannelWithC2Data = buffer;
|
||||
|
||||
@@ -1971,8 +1950,8 @@ public sealed partial class DeviceReport
|
||||
}
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadRWSubchannelWithC2);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadRWSubchannelWithC2);
|
||||
|
||||
mediaTest.RWSubchannelWithC2Data = buffer;
|
||||
|
||||
@@ -2014,8 +1993,8 @@ public sealed partial class DeviceReport
|
||||
}
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadCorrectedSubchannelWithC2);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadCorrectedSubchannelWithC2);
|
||||
|
||||
mediaTest.CorrectedSubchannelWithC2Data = buffer;
|
||||
}
|
||||
@@ -2070,8 +2049,8 @@ public sealed partial class DeviceReport
|
||||
}
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadC2Pointers);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadC2Pointers);
|
||||
|
||||
mediaTest.C2PointersData = buffer;
|
||||
}
|
||||
@@ -2099,8 +2078,8 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadPQSubchannel);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadPQSubchannel);
|
||||
|
||||
mediaTest.PQSubchannelData = buffer;
|
||||
|
||||
@@ -2122,8 +2101,8 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadRWSubchannel);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadRWSubchannel);
|
||||
|
||||
mediaTest.RWSubchannelData = buffer;
|
||||
|
||||
@@ -2150,8 +2129,8 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadCorrectedSubchannel);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadCorrectedSubchannel);
|
||||
|
||||
mediaTest.CorrectedSubchannelData = buffer;
|
||||
}
|
||||
@@ -2207,8 +2186,8 @@ public sealed partial class DeviceReport
|
||||
}
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadPQSubchannelWithC2);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadPQSubchannelWithC2);
|
||||
|
||||
mediaTest.PQSubchannelWithC2Data = buffer;
|
||||
|
||||
@@ -2250,8 +2229,8 @@ public sealed partial class DeviceReport
|
||||
}
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadRWSubchannelWithC2);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadRWSubchannelWithC2);
|
||||
|
||||
mediaTest.RWSubchannelWithC2Data = buffer;
|
||||
|
||||
@@ -2298,8 +2277,8 @@ public sealed partial class DeviceReport
|
||||
}
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadCorrectedSubchannelWithC2);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadCorrectedSubchannelWithC2);
|
||||
|
||||
mediaTest.CorrectedSubchannelWithC2Data = buffer;
|
||||
}
|
||||
@@ -2354,9 +2333,7 @@ public sealed partial class DeviceReport
|
||||
}
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadC2Pointers);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.CanReadC2Pointers);
|
||||
|
||||
mediaTest.C2PointersData = buffer;
|
||||
}
|
||||
@@ -2383,8 +2360,8 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadPQSubchannel);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadPQSubchannel);
|
||||
|
||||
mediaTest.PQSubchannelData = buffer;
|
||||
|
||||
@@ -2406,8 +2383,8 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadRWSubchannel);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadRWSubchannel);
|
||||
|
||||
mediaTest.RWSubchannelData = buffer;
|
||||
|
||||
@@ -2434,8 +2411,8 @@ public sealed partial class DeviceReport
|
||||
out _);
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadCorrectedSubchannel);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadCorrectedSubchannel);
|
||||
|
||||
mediaTest.CorrectedSubchannelData = buffer;
|
||||
}
|
||||
@@ -2491,8 +2468,8 @@ public sealed partial class DeviceReport
|
||||
}
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadPQSubchannelWithC2);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadPQSubchannelWithC2);
|
||||
|
||||
mediaTest.PQSubchannelWithC2Data = buffer;
|
||||
|
||||
@@ -2534,8 +2511,8 @@ public sealed partial class DeviceReport
|
||||
}
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadRWSubchannelWithC2);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadRWSubchannelWithC2);
|
||||
|
||||
mediaTest.RWSubchannelWithC2Data = buffer;
|
||||
|
||||
@@ -2577,8 +2554,8 @@ public sealed partial class DeviceReport
|
||||
}
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadCorrectedSubchannelWithC2);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadCorrectedSubchannelWithC2);
|
||||
|
||||
mediaTest.CorrectedSubchannelWithC2Data = buffer;
|
||||
}
|
||||
@@ -2603,8 +2580,8 @@ public sealed partial class DeviceReport
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsPlextorReadCDDA);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsPlextorReadCDDA);
|
||||
|
||||
mediaTest.PlextorReadCddaData = buffer;
|
||||
}
|
||||
@@ -2627,8 +2604,8 @@ public sealed partial class DeviceReport
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsPioneerReadCDDA);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsPioneerReadCDDA);
|
||||
|
||||
mediaTest.PioneerReadCddaData = buffer;
|
||||
|
||||
@@ -2648,8 +2625,8 @@ public sealed partial class DeviceReport
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsPioneerReadCDDAMSF);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsPioneerReadCDDAMSF);
|
||||
|
||||
mediaTest.PioneerReadCddaMsfData = buffer;
|
||||
}
|
||||
@@ -2664,9 +2641,7 @@ public sealed partial class DeviceReport
|
||||
!_dev.NecReadCdDa(out buffer, out senseBuffer, 16, 1, _dev.Timeout, out _);
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsNECReadCDDA);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsNECReadCDDA);
|
||||
|
||||
mediaTest.NecReadCddaData = buffer;
|
||||
}
|
||||
@@ -2727,9 +2702,7 @@ public sealed partial class DeviceReport
|
||||
!_dev.PlextorReadRawDvd(out buffer, out senseBuffer, 16, 1, _dev.Timeout, out _);
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsPlextorReadRawDVD);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsPlextorReadRawDVD);
|
||||
|
||||
if(mediaTest.SupportsPlextorReadRawDVD == true)
|
||||
mediaTest.SupportsPlextorReadRawDVD = !ArrayHelpers.ArrayIsNullOrEmpty(buffer);
|
||||
@@ -2747,9 +2720,7 @@ public sealed partial class DeviceReport
|
||||
!_dev.HlDtStReadRawDvd(out buffer, out senseBuffer, 16, 1, _dev.Timeout, out _, 0xffff, false);
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsHLDTSTReadRawDVD);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsHLDTSTReadRawDVD);
|
||||
|
||||
if(mediaTest.SupportsHLDTSTReadRawDVD == true)
|
||||
mediaTest.SupportsHLDTSTReadRawDVD = !ArrayHelpers.ArrayIsNullOrEmpty(buffer);
|
||||
@@ -2767,9 +2738,7 @@ public sealed partial class DeviceReport
|
||||
!_dev.LiteOnReadRawDvd(out buffer, out senseBuffer, 16, 1, _dev.Timeout, out _, 0xffff, false);
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.SupportsLiteOnReadRawDVD);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.SupportsLiteOnReadRawDVD);
|
||||
|
||||
if(mediaTest.SupportsLiteOnReadRawDVD == true)
|
||||
mediaTest.SupportsLiteOnReadRawDVD = !ArrayHelpers.ArrayIsNullOrEmpty(buffer);
|
||||
@@ -3035,9 +3004,7 @@ public sealed partial class DeviceReport
|
||||
mediaTest.ReadF1_06LeadOutData = senseBuffer;
|
||||
}
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadF1_06LeadOut);
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME, Localization.Core.Sense_equals_0, !mediaTest.CanReadF1_06LeadOut);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -3067,7 +3034,7 @@ public sealed partial class DeviceReport
|
||||
if(!decodedToc.TrackDescriptors.Any(t => t.SessionNumber > 1))
|
||||
{
|
||||
AaruLogging.Error(Localization.Core
|
||||
.Could_not_find_second_session_Have_you_inserted_the_correct_type_of_disc);
|
||||
.Could_not_find_second_session_Have_you_inserted_the_correct_type_of_disc);
|
||||
|
||||
return null;
|
||||
}
|
||||
@@ -3081,22 +3048,22 @@ public sealed partial class DeviceReport
|
||||
if(firstSessionLeadOutTrack.SessionNumber == 0 || secondSessionFirstTrack.SessionNumber == 0)
|
||||
{
|
||||
AaruLogging.Error(Localization.Core
|
||||
.Could_not_find_second_session_Have_you_inserted_the_correct_type_of_disc);
|
||||
.Could_not_find_second_session_Have_you_inserted_the_correct_type_of_disc);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.First_session_Lead_Out_starts_at_0_1_2,
|
||||
firstSessionLeadOutTrack.PMIN,
|
||||
firstSessionLeadOutTrack.PSEC,
|
||||
firstSessionLeadOutTrack.PFRAME);
|
||||
Localization.Core.First_session_Lead_Out_starts_at_0_1_2,
|
||||
firstSessionLeadOutTrack.PMIN,
|
||||
firstSessionLeadOutTrack.PSEC,
|
||||
firstSessionLeadOutTrack.PFRAME);
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Second_session_starts_at_0_1_2,
|
||||
secondSessionFirstTrack.PMIN,
|
||||
secondSessionFirstTrack.PSEC,
|
||||
secondSessionFirstTrack.PFRAME);
|
||||
Localization.Core.Second_session_starts_at_0_1_2,
|
||||
secondSessionFirstTrack.PMIN,
|
||||
secondSessionFirstTrack.PSEC,
|
||||
secondSessionFirstTrack.PFRAME);
|
||||
|
||||
// Skip Lead-Out pre-gap
|
||||
uint firstSessionLeadOutLba = (uint)(firstSessionLeadOutTrack.PMIN * 60 * 75 +
|
||||
@@ -3172,8 +3139,8 @@ public sealed partial class DeviceReport
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadingIntersessionLeadOut);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadingIntersessionLeadOut);
|
||||
|
||||
mediaTest.IntersessionLeadOutData = buffer;
|
||||
|
||||
@@ -3239,8 +3206,8 @@ public sealed partial class DeviceReport
|
||||
});
|
||||
|
||||
AaruLogging.Debug(SCSI_MODULE_NAME,
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadingIntersessionLeadIn);
|
||||
Localization.Core.Sense_equals_0,
|
||||
!mediaTest.CanReadingIntersessionLeadIn);
|
||||
|
||||
mediaTest.IntersessionLeadInData = buffer;
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ using System;
|
||||
using Aaru.CommonTypes;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Core;
|
||||
|
||||
@@ -70,10 +71,9 @@ public static class ImageFormat
|
||||
|
||||
break;
|
||||
}
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,10 +96,9 @@ public static class ImageFormat
|
||||
|
||||
break;
|
||||
}
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,18 +121,19 @@ public static class ImageFormat
|
||||
|
||||
break;
|
||||
}
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
// Still not recognized
|
||||
return imageFormat;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Humanizer;
|
||||
using Humanizer.Bytes;
|
||||
using Sentry;
|
||||
using Spectre.Console;
|
||||
using Spectre.Console.Json;
|
||||
using DDS = Aaru.Decoders.DVD.DDS;
|
||||
@@ -905,9 +906,9 @@ public static class ImageInfo
|
||||
AaruLogging.WriteLine();
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
try
|
||||
@@ -989,9 +990,9 @@ public static class ImageInfo
|
||||
|
||||
AnsiConsole.Write(table);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
@@ -35,6 +35,7 @@ using System.IO;
|
||||
using Aaru.CommonTypes.Interop;
|
||||
using Aaru.Devices;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Core.Logging;
|
||||
|
||||
@@ -60,9 +61,10 @@ public static class DeviceLog
|
||||
{
|
||||
args[i] = Path.GetFileName(args[i]);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// Do nothing
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@ using Aaru.Decoders.Sega;
|
||||
using Aaru.Devices;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using DMI = Aaru.Decoders.Xbox.DMI;
|
||||
using Sector = Aaru.Decoders.CD.Sector;
|
||||
|
||||
@@ -1636,8 +1637,10 @@ public static class MMC
|
||||
|
||||
isoSector = rootMs.ToArray();
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1697,8 +1700,10 @@ public static class MMC
|
||||
|
||||
isoSector = pcdMs.ToArray();
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2151,8 +2156,10 @@ public static class MMC
|
||||
|
||||
isoSector = rootMs.ToArray();
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2275,8 +2282,10 @@ public static class MMC
|
||||
isoSector = ngcdMs.ToArray();
|
||||
iplTxt = Encoding.ASCII.GetString(isoSector);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
iplTxt = null;
|
||||
}
|
||||
|
||||
@@ -2363,8 +2372,10 @@ public static class MMC
|
||||
{
|
||||
_ = Convert.ToUInt32(split[2], 16);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
correctNeoGeoCd = false;
|
||||
|
||||
break;
|
||||
@@ -2414,8 +2425,10 @@ public static class MMC
|
||||
|
||||
isoSector = vcdMs.ToArray();
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2528,8 +2541,10 @@ public static class MMC
|
||||
|
||||
isoSector = pcdMs.ToArray();
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2638,8 +2653,10 @@ public static class MMC
|
||||
isoSector = ps1Ms.ToArray();
|
||||
ps1Txt = Encoding.ASCII.GetString(isoSector);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
ps1Txt = null;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ using Aaru.Database.Models;
|
||||
using Aaru.Dto;
|
||||
using Aaru.Logging;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Sentry;
|
||||
using Spectre.Console;
|
||||
using CdOffset = Aaru.Database.Models.CdOffset;
|
||||
using Version = Aaru.CommonTypes.Metadata.Version;
|
||||
@@ -91,14 +92,16 @@ public static class Remote
|
||||
await reader.ReadToEndAsync();
|
||||
data.Close();
|
||||
}
|
||||
catch(WebException)
|
||||
catch(WebException ex)
|
||||
{
|
||||
// Can't connect to the server, do nothing
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
// ReSharper disable once RedundantCatchClause
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
#if DEBUG
|
||||
if(Debugger.IsAttached) throw;
|
||||
#endif
|
||||
@@ -179,8 +182,7 @@ public static class Remote
|
||||
|
||||
if(!response.IsSuccessStatusCode)
|
||||
{
|
||||
AaruLogging.Error(Localization.Core.Error_0_when_trying_to_get_updated_entities,
|
||||
response.StatusCode);
|
||||
AaruLogging.Error(Localization.Core.Error_0_when_trying_to_get_updated_entities, response.StatusCode);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@ using Aaru.Filters;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Images;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using Directory = System.IO.Directory;
|
||||
using File = System.IO.File;
|
||||
using MediaType = Aaru.CommonTypes.Metadata.MediaType;
|
||||
@@ -506,8 +507,8 @@ public sealed partial class Sidecar
|
||||
if(errno != ErrorNumber.NoError)
|
||||
{
|
||||
AaruLogging.Error(string.Format(Localization.Core.Error_0_reading_sector_1,
|
||||
errno,
|
||||
tapePartition.FirstBlock + doneSectors));
|
||||
errno,
|
||||
tapePartition.FirstBlock + doneSectors));
|
||||
|
||||
EndProgress2();
|
||||
|
||||
@@ -526,8 +527,8 @@ public sealed partial class Sidecar
|
||||
if(errno != ErrorNumber.NoError)
|
||||
{
|
||||
AaruLogging.Error(string.Format(Localization.Core.Error_0_reading_sector_1,
|
||||
errno,
|
||||
tapePartition.FirstBlock + doneSectors));
|
||||
errno,
|
||||
tapePartition.FirstBlock + doneSectors));
|
||||
|
||||
EndProgress2();
|
||||
|
||||
@@ -606,8 +607,8 @@ public sealed partial class Sidecar
|
||||
if(errno != ErrorNumber.NoError)
|
||||
{
|
||||
AaruLogging.Error(string.Format(Localization.Core.Error_0_reading_sector_1,
|
||||
errno,
|
||||
tapeFile.FirstBlock + doneSectors));
|
||||
errno,
|
||||
tapeFile.FirstBlock + doneSectors));
|
||||
|
||||
EndProgress2();
|
||||
|
||||
@@ -629,8 +630,8 @@ public sealed partial class Sidecar
|
||||
if(errno != ErrorNumber.NoError)
|
||||
{
|
||||
AaruLogging.Error(string.Format(Localization.Core.Error_0_reading_sector_1,
|
||||
errno,
|
||||
tapeFile.FirstBlock + doneSectors));
|
||||
errno,
|
||||
tapeFile.FirstBlock + doneSectors));
|
||||
|
||||
EndProgress2();
|
||||
|
||||
@@ -727,11 +728,9 @@ public sealed partial class Sidecar
|
||||
Statistics.AddFilesystem(fsMetadata.Type);
|
||||
}
|
||||
}
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch(Exception ex)
|
||||
{
|
||||
//AaruLogging.DebugWriteLine(MODULE_NAME, "Plugin {0} crashed", _plugin.Name);
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -789,11 +788,9 @@ public sealed partial class Sidecar
|
||||
Statistics.AddFilesystem(fsMetadata.Type);
|
||||
}
|
||||
}
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch(Exception ex)
|
||||
{
|
||||
//AaruLogging.DebugWriteLine(MODULE_NAME, "Plugin {0} crashed", _plugin.Name);
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1046,18 +1043,16 @@ public sealed partial class Sidecar
|
||||
}
|
||||
else
|
||||
{
|
||||
AaruLogging.Error(Localization.Core
|
||||
.SCP_image_do_not_same_number_tracks_0_disk_image_1_ignoring,
|
||||
scpImage.Header.end + 1,
|
||||
image.Info.Cylinders);
|
||||
AaruLogging.Error(Localization.Core.SCP_image_do_not_same_number_tracks_0_disk_image_1_ignoring,
|
||||
scpImage.Header.end + 1,
|
||||
image.Info.Cylinders);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AaruLogging.Error(Localization.Core
|
||||
.SCP_image_do_not_same_number_heads_0_disk_image_1_ignoring,
|
||||
2,
|
||||
image.Info.Heads);
|
||||
AaruLogging.Error(Localization.Core.SCP_image_do_not_same_number_heads_0_disk_image_1_ignoring,
|
||||
2,
|
||||
image.Info.Heads);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1158,17 +1153,16 @@ public sealed partial class Sidecar
|
||||
else
|
||||
{
|
||||
AaruLogging.Error(Localization.Core
|
||||
.KryoFlux_image_do_not_same_number_tracks_0_disk_image_1_ignoring,
|
||||
kfImage.Info.Cylinders,
|
||||
image.Info.Cylinders);
|
||||
.KryoFlux_image_do_not_same_number_tracks_0_disk_image_1_ignoring,
|
||||
kfImage.Info.Cylinders,
|
||||
image.Info.Cylinders);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AaruLogging.Error(Localization.Core
|
||||
.KryoFlux_image_do_not_same_number_heads_0_disk_image_1_ignoring,
|
||||
kfImage.Info.Heads,
|
||||
image.Info.Heads);
|
||||
AaruLogging.Error(Localization.Core.KryoFlux_image_do_not_same_number_heads_0_disk_image_1_ignoring,
|
||||
kfImage.Info.Heads,
|
||||
image.Info.Heads);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1249,18 +1243,16 @@ public sealed partial class Sidecar
|
||||
}
|
||||
else
|
||||
{
|
||||
AaruLogging.Error(Localization.Core
|
||||
.DiscFerret_image_do_not_same_number_tracks_0_disk_image_1_ignoring,
|
||||
dfiImage.Info.Cylinders,
|
||||
image.Info.Cylinders);
|
||||
AaruLogging.Error(Localization.Core.DiscFerret_image_do_not_same_number_tracks_0_disk_image_1_ignoring,
|
||||
dfiImage.Info.Cylinders,
|
||||
image.Info.Cylinders);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AaruLogging.Error(Localization.Core
|
||||
.DiscFerret_image_do_not_same_number_heads_0_disk_image_1_ignoring,
|
||||
dfiImage.Info.Heads,
|
||||
image.Info.Heads);
|
||||
AaruLogging.Error(Localization.Core.DiscFerret_image_do_not_same_number_heads_0_disk_image_1_ignoring,
|
||||
dfiImage.Info.Heads,
|
||||
image.Info.Heads);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -41,6 +41,7 @@ using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Decoders.CD;
|
||||
using Aaru.Decoders.DVD;
|
||||
using Sentry;
|
||||
using DMI = Aaru.Decoders.Xbox.DMI;
|
||||
using Dump = Aaru.Core.Devices.Dumping.Dump;
|
||||
using Partition = Aaru.CommonTypes.Partition;
|
||||
@@ -222,8 +223,10 @@ public sealed partial class Sidecar
|
||||
List<Session> sessions = image.Sessions;
|
||||
sidecar.OpticalDiscs[0].Sessions = (uint)(sessions?.Count ?? 1);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
sidecar.OpticalDiscs[0].Sessions = 1;
|
||||
}
|
||||
|
||||
@@ -568,11 +571,9 @@ public sealed partial class Sidecar
|
||||
_ => dskType
|
||||
};
|
||||
}
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch(Exception ex)
|
||||
{
|
||||
//AaruLogging.DebugWriteLine(MODULE_NAME, "Plugin {0} crashed", _plugin.Name);
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -646,11 +647,9 @@ public sealed partial class Sidecar
|
||||
_ => dskType
|
||||
};
|
||||
}
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch(Exception ex)
|
||||
{
|
||||
//AaruLogging.DebugWriteLine(MODULE_NAME, "Plugin {0} crashed", _plugin.Name);
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ using Aaru.Database.Models;
|
||||
using Aaru.Logging;
|
||||
using Microsoft.Data.Sqlite;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Sentry;
|
||||
using Device = Aaru.Devices.Device;
|
||||
using MediaType = Aaru.CommonTypes.MediaType;
|
||||
using OperatingSystem = Aaru.Database.Models.OperatingSystem;
|
||||
@@ -300,18 +301,21 @@ public static class Statistics
|
||||
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
catch(WebException)
|
||||
catch(WebException ex)
|
||||
{
|
||||
// Can't connect to the server, do nothing
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
catch(DbUpdateConcurrencyException)
|
||||
catch(DbUpdateConcurrencyException ex)
|
||||
{
|
||||
// Ignore db concurrency errors
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
// ReSharper disable once RedundantCatchClause
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
#if DEBUG
|
||||
_submitStatsLock = false;
|
||||
|
||||
|
||||
@@ -63,6 +63,9 @@
|
||||
<PackageReference Include="System.ComponentModel.Annotations"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Sentry">
|
||||
<HintPath>..\..\..\..\.nuget\packages\sentry\5.14.1\lib\net9.0\Sentry.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Spectre.Console">
|
||||
<HintPath>..\..\..\..\.nuget\packages\spectre.console\0.50.0\lib\net9.0\Spectre.Console.dll</HintPath>
|
||||
</Reference>
|
||||
|
||||
@@ -37,6 +37,7 @@ using System.Text;
|
||||
using Aaru.CommonTypes.Structs.Devices.SCSI;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Localization;
|
||||
using Sentry;
|
||||
|
||||
// ReSharper disable MemberCanBePrivate.Global
|
||||
// ReSharper disable UnusedType.Global
|
||||
@@ -4209,12 +4210,10 @@ public static class Features
|
||||
sb.AppendFormat($"[slateblue1]{Localization.Drive_firmware_is_dated_0}[/]", $"[yellow3]{fwDate}[/]")
|
||||
.AppendLine();
|
||||
}
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using Aaru.Localization;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using Marshal = Aaru.Helpers.Marshal;
|
||||
|
||||
namespace Aaru.Decoders.Sega;
|
||||
@@ -61,12 +62,12 @@ public static class CD
|
||||
IPBin ipbin = Marshal.ByteArrayToStructureLittleEndian<IPBin>(ipbin_sector);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"segacd_ipbin.volume_name = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.volume_name));
|
||||
"segacd_ipbin.volume_name = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.volume_name));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"segacd_ipbin.system_name = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.system_name));
|
||||
"segacd_ipbin.system_name = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.system_name));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, "segacd_ipbin.volume_version = \"{0:X}\"", ipbin.volume_version);
|
||||
|
||||
@@ -89,36 +90,36 @@ public static class CD
|
||||
AaruLogging.Debug(MODULE_NAME, "segacd_ipbin.sp_work_ram_size = {0}", ipbin.sp_work_ram_size);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"segacd_ipbin.release_date = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.release_date));
|
||||
"segacd_ipbin.release_date = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.release_date));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"segacd_ipbin.release_date2 = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.release_date2));
|
||||
"segacd_ipbin.release_date2 = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.release_date2));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"segacd_ipbin.developer_code = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.developer_code));
|
||||
"segacd_ipbin.developer_code = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.developer_code));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"segacd_ipbin.domestic_title = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.domestic_title));
|
||||
"segacd_ipbin.domestic_title = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.domestic_title));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"segacd_ipbin.overseas_title = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.overseas_title));
|
||||
"segacd_ipbin.overseas_title = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.overseas_title));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"segacd_ipbin.product_code = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.product_code));
|
||||
"segacd_ipbin.product_code = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.product_code));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"segacd_ipbin.peripherals = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.peripherals));
|
||||
"segacd_ipbin.peripherals = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.peripherals));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"segacd_ipbin.region_codes = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.region_codes));
|
||||
"segacd_ipbin.region_codes = \"{0}\"",
|
||||
Encoding.ASCII.GetString(ipbin.region_codes));
|
||||
|
||||
string id = Encoding.ASCII.GetString(ipbin.SegaHardwareID);
|
||||
|
||||
@@ -154,12 +155,10 @@ public static class CD
|
||||
{
|
||||
ipbindate = DateTime.ParseExact(Encoding.ASCII.GetString(ipbin.release_date2), "yyyy.MMM", provider);
|
||||
}
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -49,4 +49,9 @@
|
||||
<LastGenOutput>Localization.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Sentry">
|
||||
<HintPath>..\..\..\..\.nuget\packages\sentry\5.14.1\lib\net9.0\Sentry.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -39,6 +39,7 @@ using Aaru.CommonTypes.Structs.Devices.SCSI;
|
||||
using Aaru.Decoders.SCSI;
|
||||
using Aaru.Decoders.SCSI.MMC;
|
||||
using Aaru.Helpers;
|
||||
using Sentry;
|
||||
using Inquiry = Aaru.CommonTypes.Structs.Devices.SCSI.Inquiry;
|
||||
|
||||
namespace Aaru.Devices;
|
||||
@@ -65,8 +66,10 @@ public partial class Device
|
||||
{
|
||||
aaruUri = new Uri(devicePath);
|
||||
}
|
||||
catch(Exception)
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
aaruUri = null;
|
||||
}
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using Aaru.CommonTypes.Interop;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Devices;
|
||||
|
||||
@@ -132,8 +133,11 @@ public partial class Device
|
||||
|
||||
return remote.ListDevices();
|
||||
}
|
||||
catch(Exception)
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
AaruLogging.Exception(ex, Localization.Error_connecting_to_host);
|
||||
AaruLogging.Error(Localization.Error_connecting_to_host);
|
||||
|
||||
return [];
|
||||
|
||||
@@ -34,6 +34,7 @@ using System;
|
||||
using System.IO;
|
||||
using System.Runtime.Versioning;
|
||||
using System.Text;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Devices.Linux;
|
||||
|
||||
@@ -58,12 +59,14 @@ static class ListDevices
|
||||
udev = Extern.udev_new();
|
||||
hasUdev = udev != IntPtr.Zero;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
hasUdev = false;
|
||||
}
|
||||
|
||||
for(var i = 0; i < sysdevs.Length; i++)
|
||||
for(int i = 0; i < sysdevs.Length; i++)
|
||||
{
|
||||
devices[i] = new DeviceInfo
|
||||
{
|
||||
|
||||
@@ -36,6 +36,7 @@ using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interop;
|
||||
using Aaru.CommonTypes.Structs.Devices.SCSI;
|
||||
using Aaru.Decoders.SecureDigital;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Devices.Remote;
|
||||
|
||||
@@ -113,6 +114,8 @@ public sealed partial class Device : Devices.Device
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
if(ex is SocketException sockEx)
|
||||
errno = (ErrorNumber)(-1 * sockEx.ErrorCode);
|
||||
else
|
||||
|
||||
@@ -43,6 +43,7 @@ using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interop;
|
||||
using Aaru.Decoders.ATA;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using Marshal = Aaru.Helpers.Marshal;
|
||||
using Version = Aaru.CommonTypes.Interop.Version;
|
||||
|
||||
@@ -259,9 +260,8 @@ public class Remote : IDisposable
|
||||
|
||||
if(hdr.packetType != AaruPacketType.ResponseAmIRoot)
|
||||
{
|
||||
AaruLogging.Error(Localization
|
||||
.Remote_IsRoot_Expected_Am_I_Root_Response_Packet_got_packet_type_0,
|
||||
hdr.packetType);
|
||||
AaruLogging.Error(Localization.Remote_IsRoot_Expected_Am_I_Root_Response_Packet_got_packet_type_0,
|
||||
hdr.packetType);
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -297,9 +297,10 @@ public class Remote : IDisposable
|
||||
_socket.Shutdown(SocketShutdown.Both);
|
||||
_socket.Close();
|
||||
}
|
||||
catch(ObjectDisposedException)
|
||||
catch(ObjectDisposedException ex)
|
||||
{
|
||||
// Ignore if already disposed
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -355,8 +356,8 @@ public class Remote : IDisposable
|
||||
if(hdr.packetType != AaruPacketType.Nop)
|
||||
{
|
||||
AaruLogging.Error(Localization
|
||||
.Remote_ListDevices_Expected_List_Devices_Response_Packet_got_packet_type_0,
|
||||
hdr.packetType);
|
||||
.Remote_ListDevices_Expected_List_Devices_Response_Packet_got_packet_type_0,
|
||||
hdr.packetType);
|
||||
|
||||
return [];
|
||||
}
|
||||
@@ -474,9 +475,8 @@ public class Remote : IDisposable
|
||||
|
||||
if(hdr.packetType != AaruPacketType.Nop)
|
||||
{
|
||||
AaruLogging.Error(Localization
|
||||
.Remote_ListDevices_Expected_List_Devices_Response_Packet_got_packet_type_0,
|
||||
hdr.packetType);
|
||||
AaruLogging.Error(Localization.Remote_ListDevices_Expected_List_Devices_Response_Packet_got_packet_type_0,
|
||||
hdr.packetType);
|
||||
|
||||
lastError = -1;
|
||||
|
||||
@@ -802,8 +802,7 @@ public class Remote : IDisposable
|
||||
|
||||
if(hdr.packetType != AaruPacketType.ResponseAtaLba28)
|
||||
{
|
||||
AaruLogging.Error(Localization.Expected_ATA_LBA28_Response_Packet_got_packet_type_0,
|
||||
hdr.packetType);
|
||||
AaruLogging.Error(Localization.Expected_ATA_LBA28_Response_Packet_got_packet_type_0, hdr.packetType);
|
||||
|
||||
return -1;
|
||||
}
|
||||
@@ -909,8 +908,7 @@ public class Remote : IDisposable
|
||||
|
||||
if(hdr.packetType != AaruPacketType.ResponseAtaLba48)
|
||||
{
|
||||
AaruLogging.Error(Localization.Expected_ATA_LBA48_Response_Packet_got_packet_type_0,
|
||||
hdr.packetType);
|
||||
AaruLogging.Error(Localization.Expected_ATA_LBA48_Response_Packet_got_packet_type_0, hdr.packetType);
|
||||
|
||||
return -1;
|
||||
}
|
||||
@@ -1103,8 +1101,7 @@ public class Remote : IDisposable
|
||||
|
||||
if(hdr.packetType != AaruPacketType.ResponseGetType)
|
||||
{
|
||||
AaruLogging.Error(Localization.Expected_Device_Type_Response_Packet_got_packet_type_0,
|
||||
hdr.packetType);
|
||||
AaruLogging.Error(Localization.Expected_Device_Type_Response_Packet_got_packet_type_0, hdr.packetType);
|
||||
|
||||
return DeviceType.Unknown;
|
||||
}
|
||||
@@ -1182,8 +1179,7 @@ public class Remote : IDisposable
|
||||
|
||||
if(hdr.packetType != AaruPacketType.ResponseGetSdhciRegisters)
|
||||
{
|
||||
AaruLogging.Error(Localization.Expected_Device_Type_Response_Packet_got_packet_type_0,
|
||||
hdr.packetType);
|
||||
AaruLogging.Error(Localization.Expected_Device_Type_Response_Packet_got_packet_type_0, hdr.packetType);
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -1308,8 +1304,7 @@ public class Remote : IDisposable
|
||||
|
||||
if(hdr.packetType != AaruPacketType.ResponseGetUsbData)
|
||||
{
|
||||
AaruLogging.Error(Localization.Expected_USB_Data_Response_Packet_got_packet_type_0,
|
||||
hdr.packetType);
|
||||
AaruLogging.Error(Localization.Expected_USB_Data_Response_Packet_got_packet_type_0, hdr.packetType);
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -1400,8 +1395,7 @@ public class Remote : IDisposable
|
||||
|
||||
if(hdr.packetType != AaruPacketType.ResponseGetFireWireData)
|
||||
{
|
||||
AaruLogging.Error(Localization.Expected_FireWire_Data_Response_Packet_got_packet_type_0,
|
||||
hdr.packetType);
|
||||
AaruLogging.Error(Localization.Expected_FireWire_Data_Response_Packet_got_packet_type_0, hdr.packetType);
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -1481,8 +1475,7 @@ public class Remote : IDisposable
|
||||
|
||||
if(hdr.packetType != AaruPacketType.ResponseGetPcmciaData)
|
||||
{
|
||||
AaruLogging.Error(Localization.Expected_PCMCIA_Data_Response_Packet_got_packet_type_0,
|
||||
hdr.packetType);
|
||||
AaruLogging.Error(Localization.Expected_PCMCIA_Data_Response_Packet_got_packet_type_0, hdr.packetType);
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -1550,9 +1543,10 @@ public class Remote : IDisposable
|
||||
{
|
||||
_socket.Send(buf, SocketFlags.None);
|
||||
}
|
||||
catch(ObjectDisposedException)
|
||||
catch(ObjectDisposedException ex)
|
||||
{
|
||||
// Ignore if already disposed
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1657,7 +1651,7 @@ public class Remote : IDisposable
|
||||
if(hdr.packetType != AaruPacketType.ResponseMultiSdhci)
|
||||
{
|
||||
AaruLogging.Error(Localization.Expected_multi_MMC_SD_command_Response_Packet_got_packet_type_0,
|
||||
hdr.packetType);
|
||||
hdr.packetType);
|
||||
|
||||
return -1;
|
||||
}
|
||||
@@ -1677,8 +1671,8 @@ public class Remote : IDisposable
|
||||
if(res.cmd_count != (ulong)commands.Length)
|
||||
{
|
||||
AaruLogging.Error(Localization.Expected_the_response_to_0_SD_MMC_commands_but_got_1_responses,
|
||||
commands.Length,
|
||||
res.cmd_count);
|
||||
commands.Length,
|
||||
res.cmd_count);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -26,12 +26,14 @@
|
||||
// Copyright © 2011-2025 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Text;
|
||||
using Aaru.CommonTypes.AaruMetadata;
|
||||
using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Helpers;
|
||||
using Sentry;
|
||||
using Partition = Aaru.CommonTypes.Partition;
|
||||
|
||||
namespace Aaru.Filesystems;
|
||||
@@ -58,8 +60,10 @@ public sealed partial class APFS
|
||||
{
|
||||
nxSb = Marshal.ByteArrayToStructureLittleEndian<ContainerSuperBlock>(sector);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -86,8 +90,10 @@ public sealed partial class APFS
|
||||
{
|
||||
nxSb = Marshal.ByteArrayToStructureLittleEndian<ContainerSuperBlock>(sector);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -68,4 +68,9 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Aaru.Generators\Aaru.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Sentry">
|
||||
<HintPath>..\..\..\..\.nuget\packages\sentry\5.14.1\lib\net9.0\Sentry.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -30,12 +30,14 @@
|
||||
// Copyright © 2011-2025 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
using Aaru.CommonTypes.AaruMetadata;
|
||||
using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using Partition = Aaru.CommonTypes.Partition;
|
||||
|
||||
namespace Aaru.Filesystems;
|
||||
@@ -66,8 +68,10 @@ public sealed partial class BTRFS
|
||||
{
|
||||
btrfsSb = Marshal.ByteArrayToStructureLittleEndian<SuperBlock>(sector);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Filesystems;
|
||||
|
||||
@@ -68,7 +69,7 @@ public sealed partial class CPM
|
||||
sectorIds = new int[def.sectorsPerTrack]
|
||||
};
|
||||
|
||||
for(var i = 0; i < def.sectorsPerTrack; i++) def.side1.sectorIds[i] = i + 1;
|
||||
for(int i = 0; i < def.sectorsPerTrack; i++) def.side1.sectorIds[i] = i + 1;
|
||||
}
|
||||
|
||||
if(def.sides != 2 || def.side2 != null) continue;
|
||||
@@ -80,14 +81,16 @@ public sealed partial class CPM
|
||||
sectorIds = new int[def.sectorsPerTrack]
|
||||
};
|
||||
|
||||
for(var i = 0; i < def.sectorsPerTrack; i++) def.side2.sectorIds[i] = i + 1;
|
||||
for(int i = 0; i < def.sectorsPerTrack; i++) def.side2.sectorIds[i] = i + 1;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ using System.Text;
|
||||
using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Helpers;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Filesystems;
|
||||
|
||||
@@ -106,19 +107,19 @@ public sealed partial class CPM
|
||||
{
|
||||
if(directory == null) return false;
|
||||
|
||||
var fileCount = 0;
|
||||
int fileCount = 0;
|
||||
|
||||
for(var off = 0; off < directory.Length; off += 32)
|
||||
for(int off = 0; off < directory.Length; off += 32)
|
||||
{
|
||||
DirectoryEntry entry = Marshal.ByteArrayToStructureLittleEndian<DirectoryEntry>(directory, off, 32);
|
||||
|
||||
if((entry.statusUser & 0x7F) < 0x20)
|
||||
{
|
||||
for(var f = 0; f < 8; f++)
|
||||
for(int f = 0; f < 8; f++)
|
||||
if(entry.filename[f] < 0x20 && entry.filename[f] != 0x00)
|
||||
return false;
|
||||
|
||||
for(var e = 0; e < 3; e++)
|
||||
for(int e = 0; e < 3; e++)
|
||||
if(entry.extension[e] < 0x20 && entry.extension[e] != 0x00)
|
||||
return false;
|
||||
|
||||
@@ -130,11 +131,11 @@ public sealed partial class CPM
|
||||
{
|
||||
case 0x20:
|
||||
{
|
||||
for(var f = 0; f < 8; f++)
|
||||
for(int f = 0; f < 8; f++)
|
||||
if(entry.filename[f] < 0x20 && entry.filename[f] != 0x00)
|
||||
return false;
|
||||
|
||||
for(var e = 0; e < 3; e++)
|
||||
for(int e = 0; e < 3; e++)
|
||||
if(entry.extension[e] < 0x20 && entry.extension[e] != 0x00)
|
||||
return false;
|
||||
|
||||
@@ -160,8 +161,10 @@ public sealed partial class CPM
|
||||
|
||||
return fileCount > 0;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using Partition = Aaru.CommonTypes.Partition;
|
||||
|
||||
namespace Aaru.Filesystems;
|
||||
@@ -971,8 +972,8 @@ public sealed partial class CPM
|
||||
0)
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization
|
||||
.Dont_know_how_to_handle_COLUMBIA_ordering_not_proceeding_with_this_definition);
|
||||
Localization
|
||||
.Dont_know_how_to_handle_COLUMBIA_ordering_not_proceeding_with_this_definition);
|
||||
|
||||
continue;
|
||||
}
|
||||
@@ -982,17 +983,16 @@ public sealed partial class CPM
|
||||
0)
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization
|
||||
.Don_know_how_to_handle_EAGLE_ordering_not_proceeding_with_this_definition);
|
||||
Localization
|
||||
.Don_know_how_to_handle_EAGLE_ordering_not_proceeding_with_this_definition);
|
||||
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization
|
||||
.Unknown_order_type_0_not_proceeding_with_this_definition,
|
||||
def.order);
|
||||
Localization.Unknown_order_type_0_not_proceeding_with_this_definition,
|
||||
def.order);
|
||||
|
||||
continue;
|
||||
}
|
||||
@@ -1019,8 +1019,8 @@ public sealed partial class CPM
|
||||
if(def.evenOdd)
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization
|
||||
.Definition_contains_EVEN_ODD_field_with_unknown_meaning_detection_may_be_wrong);
|
||||
Localization
|
||||
.Definition_contains_EVEN_ODD_field_with_unknown_meaning_detection_may_be_wrong);
|
||||
}
|
||||
|
||||
// Complement of the directory bytes if needed
|
||||
@@ -1033,8 +1033,8 @@ public sealed partial class CPM
|
||||
if(CheckDir(directory))
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Definition_0_has_a_correct_directory,
|
||||
def.comment);
|
||||
Localization.Definition_0_has_a_correct_directory,
|
||||
def.comment);
|
||||
|
||||
// Build a Disc Parameter Block
|
||||
_workingDefinition = def;
|
||||
@@ -1127,8 +1127,10 @@ public sealed partial class CPM
|
||||
|
||||
return false;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
//throw ex;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using Partition = Aaru.CommonTypes.Partition;
|
||||
|
||||
namespace Aaru.Filesystems;
|
||||
@@ -90,8 +91,10 @@ public sealed partial class FFSPlugin
|
||||
|
||||
return false;
|
||||
}
|
||||
catch(Exception)
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
using System;
|
||||
using Aaru.Helpers;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Filesystems;
|
||||
|
||||
@@ -59,8 +60,10 @@ public sealed partial class ISO9660
|
||||
|
||||
return TimeZoneInfo.ConvertTimeToUtc(date, TimeZoneInfo.FindSystemTimeZoneById("GMT"));
|
||||
}
|
||||
catch(Exception)
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
// ISO says timestamp can be unspecified
|
||||
return null;
|
||||
}
|
||||
@@ -80,8 +83,10 @@ public sealed partial class ISO9660
|
||||
|
||||
return TimeZoneInfo.ConvertTimeToUtc(date, TimeZoneInfo.FindSystemTimeZoneById("GMT"));
|
||||
}
|
||||
catch(Exception)
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
// ISO says timestamp can be unspecified, suppose same for High Sierra
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Decoders.Sega;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using FileSystemInfo = Aaru.CommonTypes.Structs.FileSystemInfo;
|
||||
using Partition = Aaru.CommonTypes.Partition;
|
||||
|
||||
@@ -208,7 +209,7 @@ public sealed partial class ISO9660
|
||||
else
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Found_unknown_supplementary_volume_descriptor);
|
||||
Localization.Found_unknown_supplementary_volume_descriptor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -352,8 +353,8 @@ public sealed partial class ISO9660
|
||||
if(_pathTable?.Length > 1 && rootLocation != _pathTable[0].Extent)
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization
|
||||
.Path_table_and_PVD_do_not_point_to_the_same_location_for_the_root_directory);
|
||||
Localization
|
||||
.Path_table_and_PVD_do_not_point_to_the_same_location_for_the_root_directory);
|
||||
|
||||
errno = ReadSector(rootLocation, out byte[] firstRootSector);
|
||||
|
||||
@@ -379,8 +380,7 @@ public sealed partial class ISO9660
|
||||
if(pvdWrongRoot)
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization
|
||||
.PVD_does_not_point_to_correct_root_directory_checking_path_table);
|
||||
Localization.PVD_does_not_point_to_correct_root_directory_checking_path_table);
|
||||
|
||||
bool pathTableWrongRoot = false;
|
||||
|
||||
@@ -462,8 +462,10 @@ public sealed partial class ISO9660
|
||||
{
|
||||
ReadSingleExtent(rootSize, rootLocation, out byte[] _);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return ErrorNumber.InvalidArgument;
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ using Aaru.CommonTypes.AaruMetadata;
|
||||
using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Helpers;
|
||||
using Sentry;
|
||||
using Partition = Aaru.CommonTypes.Partition;
|
||||
|
||||
namespace Aaru.Filesystems;
|
||||
@@ -83,13 +84,15 @@ public sealed partial class PCFX
|
||||
try
|
||||
{
|
||||
date = encoding.GetString(header.date);
|
||||
var year = int.Parse(date[..4]);
|
||||
var month = int.Parse(date.Substring(4, 2));
|
||||
var day = int.Parse(date.Substring(6, 2));
|
||||
int year = int.Parse(date[..4]);
|
||||
int month = int.Parse(date.Substring(4, 2));
|
||||
int day = int.Parse(date.Substring(6, 2));
|
||||
dateTime = new DateTime(year, month, day);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
date = null;
|
||||
}
|
||||
|
||||
|
||||
@@ -427,4 +427,9 @@
|
||||
<Link>LICENSE</Link>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Sentry">
|
||||
<HintPath>..\..\..\..\.nuget\packages\sentry\5.14.1\lib\net9.0\Sentry.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -26,10 +26,12 @@
|
||||
// Copyright © 2011-2025 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
using Avalonia;
|
||||
using Avalonia.Dialogs;
|
||||
using Avalonia.ReactiveUI;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Gui;
|
||||
|
||||
@@ -37,9 +39,42 @@ public static class Main
|
||||
{
|
||||
public static int Start(string[] args)
|
||||
{
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
SentrySdk.Init(options =>
|
||||
{
|
||||
// A Sentry Data Source Name (DSN) is required.
|
||||
// See https://docs.sentry.io/product/sentry-basics/dsn-explainer/
|
||||
// You can set it in the SENTRY_DSN environment variable, or you can set it in code here.
|
||||
options.Dsn = "https://153a04fb97b78bb57a8013b8b30db04f@sentry.claunia.com/8";
|
||||
|
||||
return BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);
|
||||
// When debug is enabled, the Sentry client will emit detailed debugging information to the console.
|
||||
// This might be helpful, or might interfere with the normal operation of your application.
|
||||
// We enable it here for demonstration purposes when first trying Sentry.
|
||||
// You shouldn't do this in your applications unless you're troubleshooting issues with Sentry.
|
||||
//options.Debug = true;
|
||||
|
||||
// This option is recommended. It enables Sentry's "Release Health" feature.
|
||||
options.AutoSessionTracking = true;
|
||||
|
||||
// Set TracesSampleRate to 1.0 to capture 100%
|
||||
// of transactions for tracing.
|
||||
// We recommend adjusting this value in production.
|
||||
options.TracesSampleRate = 1.0;
|
||||
|
||||
options.IsGlobalModeEnabled = true;
|
||||
});
|
||||
|
||||
try
|
||||
{
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
|
||||
return BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Avalonia configuration, don't remove; also used by visual designer.
|
||||
|
||||
@@ -56,6 +56,7 @@ using Avalonia.Platform;
|
||||
using Humanizer;
|
||||
using Humanizer.Bytes;
|
||||
using ReactiveUI;
|
||||
using Sentry;
|
||||
using Inquiry = Aaru.CommonTypes.Structs.Devices.SCSI.Inquiry;
|
||||
using Session = Aaru.CommonTypes.Structs.Session;
|
||||
using Track = Aaru.CommonTypes.Structs.Track;
|
||||
@@ -313,7 +314,7 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
|
||||
if(dataLen + 2 != toc.Length)
|
||||
{
|
||||
var tmp = new byte[toc.Length + 2];
|
||||
byte[] tmp = new byte[toc.Length + 2];
|
||||
Array.Copy(toc, 0, tmp, 2, toc.Length);
|
||||
tmp[0] = (byte)((toc.Length & 0xFF00) >> 8);
|
||||
tmp[1] = (byte)(toc.Length & 0xFF);
|
||||
@@ -334,7 +335,7 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
|
||||
if(dataLen + 2 != fullToc.Length)
|
||||
{
|
||||
var tmp = new byte[fullToc.Length + 2];
|
||||
byte[] tmp = new byte[fullToc.Length + 2];
|
||||
Array.Copy(fullToc, 0, tmp, 2, fullToc.Length);
|
||||
tmp[0] = (byte)((fullToc.Length & 0xFF00) >> 8);
|
||||
tmp[1] = (byte)(fullToc.Length & 0xFF);
|
||||
@@ -355,7 +356,7 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
|
||||
if(dataLen + 2 != pma.Length)
|
||||
{
|
||||
var tmp = new byte[pma.Length + 2];
|
||||
byte[] tmp = new byte[pma.Length + 2];
|
||||
Array.Copy(pma, 0, tmp, 2, pma.Length);
|
||||
tmp[0] = (byte)((pma.Length & 0xFF00) >> 8);
|
||||
tmp[1] = (byte)(pma.Length & 0xFF);
|
||||
@@ -374,7 +375,7 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
|
||||
if(dataLen + 4 != atip.Length)
|
||||
{
|
||||
var tmp = new byte[atip.Length + 4];
|
||||
byte[] tmp = new byte[atip.Length + 4];
|
||||
Array.Copy(atip, 0, tmp, 4, atip.Length);
|
||||
tmp[0] = (byte)((atip.Length & 0xFF000000) >> 24);
|
||||
tmp[1] = (byte)((atip.Length & 0xFF0000) >> 16);
|
||||
@@ -397,7 +398,7 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
|
||||
if(dataLen + 4 != cdtext.Length)
|
||||
{
|
||||
var tmp = new byte[cdtext.Length + 4];
|
||||
byte[] tmp = new byte[cdtext.Length + 4];
|
||||
Array.Copy(cdtext, 0, tmp, 4, cdtext.Length);
|
||||
tmp[0] = (byte)((cdtext.Length & 0xFF000000) >> 24);
|
||||
tmp[1] = (byte)((cdtext.Length & 0xFF0000) >> 16);
|
||||
@@ -697,9 +698,9 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
foreach(Session session in opticalMediaImage.Sessions)
|
||||
Sessions.Add(session);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
try
|
||||
@@ -708,9 +709,10 @@ public sealed class ImageInfoViewModel : ViewModelBase
|
||||
foreach(Track track in opticalMediaImage.Tracks)
|
||||
Tracks.Add(track);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@ using JetBrains.Annotations;
|
||||
using MsBox.Avalonia;
|
||||
using MsBox.Avalonia.Enums;
|
||||
using ReactiveUI;
|
||||
using Sentry;
|
||||
using FileAttributes = Aaru.CommonTypes.Structs.FileAttributes;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Panels;
|
||||
@@ -89,10 +90,9 @@ public sealed class SubdirectoryViewModel
|
||||
|
||||
if(errno != ErrorNumber.NoError)
|
||||
{
|
||||
AaruLogging
|
||||
.Error(string.Format(UI.Error_0_trying_to_get_information_about_filesystem_entry_named_1,
|
||||
errno,
|
||||
dirent));
|
||||
AaruLogging.Error(string.Format(UI.Error_0_trying_to_get_information_about_filesystem_entry_named_1,
|
||||
errno,
|
||||
dirent));
|
||||
|
||||
continue;
|
||||
}
|
||||
@@ -359,34 +359,33 @@ public sealed class SubdirectoryViewModel
|
||||
fs.Write(outBuf, 0, outBuf.Length);
|
||||
fs.Close();
|
||||
var fi = new FileInfo(outputPath);
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
|
||||
try
|
||||
{
|
||||
if(file.Stat.CreationTimeUtc.HasValue) fi.CreationTimeUtc = file.Stat.CreationTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if(file.Stat.LastWriteTimeUtc.HasValue) fi.LastWriteTimeUtc = file.Stat.LastWriteTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if(file.Stat.AccessTimeUtc.HasValue) fi.LastAccessTimeUtc = file.Stat.AccessTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
}
|
||||
catch(IOException)
|
||||
{
|
||||
|
||||
@@ -45,6 +45,7 @@ using Aaru.Logging;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Threading;
|
||||
using ReactiveUI;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Windows;
|
||||
|
||||
@@ -123,9 +124,10 @@ public sealed class ImageChecksumViewModel : ViewModelBase
|
||||
{
|
||||
ChecksumTracksVisible = (inputFormat as IOpticalMediaImage)?.Tracks?.Count > 0;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
ChecksumTracksVisible = false;
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -404,8 +406,10 @@ public sealed class ImageChecksumViewModel : ViewModelBase
|
||||
{
|
||||
formatHasTracks = opticalMediaImage.Tracks?.Count > 0;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
formatHasTracks = false;
|
||||
}
|
||||
}
|
||||
@@ -494,9 +498,7 @@ public sealed class ImageChecksumViewModel : ViewModelBase
|
||||
|
||||
if(errno != ErrorNumber.NoError)
|
||||
{
|
||||
AaruLogging.Error(string.Format(Localization.Core.Error_0_reading_sector_1,
|
||||
errno,
|
||||
i));
|
||||
AaruLogging.Error(string.Format(Localization.Core.Error_0_reading_sector_1, errno, i));
|
||||
|
||||
_cancel = true;
|
||||
|
||||
@@ -508,10 +510,10 @@ public sealed class ImageChecksumViewModel : ViewModelBase
|
||||
}
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
UI.Track_0_starts_at_sector_1_and_ends_at_sector_2,
|
||||
currentTrack.Sequence,
|
||||
currentTrack.StartSector,
|
||||
currentTrack.EndSector);
|
||||
UI.Track_0_starts_at_sector_1_and_ends_at_sector_2,
|
||||
currentTrack.Sequence,
|
||||
currentTrack.StartSector,
|
||||
currentTrack.EndSector);
|
||||
|
||||
if(ChecksumTracksChecked) trackChecksum = new Checksum(enabledChecksums);
|
||||
|
||||
@@ -544,8 +546,8 @@ public sealed class ImageChecksumViewModel : ViewModelBase
|
||||
if(errno != ErrorNumber.NoError)
|
||||
{
|
||||
AaruLogging.Error(string.Format(Localization.Core.Error_0_reading_sector_1,
|
||||
errno,
|
||||
doneSectors));
|
||||
errno,
|
||||
doneSectors));
|
||||
|
||||
_cancel = true;
|
||||
|
||||
@@ -574,8 +576,8 @@ public sealed class ImageChecksumViewModel : ViewModelBase
|
||||
if(errno != ErrorNumber.NoError)
|
||||
{
|
||||
AaruLogging.Error(string.Format(Localization.Core.Error_0_reading_sector_1,
|
||||
errno,
|
||||
doneSectors));
|
||||
errno,
|
||||
doneSectors));
|
||||
|
||||
_cancel = true;
|
||||
|
||||
@@ -637,9 +639,7 @@ public sealed class ImageChecksumViewModel : ViewModelBase
|
||||
|
||||
if(errno != ErrorNumber.NoError)
|
||||
{
|
||||
AaruLogging.Error(string.Format(Localization.Core.Error_0_reading_sector_1,
|
||||
errno,
|
||||
i));
|
||||
AaruLogging.Error(string.Format(Localization.Core.Error_0_reading_sector_1, errno, i));
|
||||
|
||||
_cancel = true;
|
||||
|
||||
@@ -702,8 +702,8 @@ public sealed class ImageChecksumViewModel : ViewModelBase
|
||||
if(errno != ErrorNumber.NoError)
|
||||
{
|
||||
AaruLogging.Error(string.Format(Localization.Core.Error_0_reading_sector_1,
|
||||
errno,
|
||||
doneSectors));
|
||||
errno,
|
||||
doneSectors));
|
||||
|
||||
_cancel = true;
|
||||
|
||||
@@ -732,8 +732,8 @@ public sealed class ImageChecksumViewModel : ViewModelBase
|
||||
if(errno != ErrorNumber.NoError)
|
||||
{
|
||||
AaruLogging.Error(string.Format(Localization.Core.Error_0_reading_sector_1,
|
||||
errno,
|
||||
doneSectors));
|
||||
errno,
|
||||
doneSectors));
|
||||
|
||||
_cancel = true;
|
||||
|
||||
|
||||
@@ -58,6 +58,7 @@ using Avalonia.Threading;
|
||||
using MsBox.Avalonia;
|
||||
using MsBox.Avalonia.Enums;
|
||||
using ReactiveUI;
|
||||
using Sentry;
|
||||
using ImageInfo = Aaru.CommonTypes.Structs.ImageInfo;
|
||||
using Track = Aaru.CommonTypes.Structs.Track;
|
||||
using Version = Aaru.CommonTypes.Interop.Version;
|
||||
@@ -630,8 +631,10 @@ public sealed class ImageConvertViewModel : ViewModelBase
|
||||
{
|
||||
tracks = inputOptical?.Tracks;
|
||||
}
|
||||
catch(Exception)
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
tracks = null;
|
||||
}
|
||||
|
||||
@@ -2125,8 +2128,10 @@ public sealed class ImageConvertViewModel : ViewModelBase
|
||||
fs.Close();
|
||||
MetadataJsonText = result[0].Path.AbsolutePath;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
await MessageBoxManager
|
||||
.GetMessageBoxStandard(UI.Title_Error, UI.Incorrect_metadata_sidecar_file, icon: Icon.Error)
|
||||
.ShowWindowDialogAsync(_view);
|
||||
@@ -2181,8 +2186,10 @@ public sealed class ImageConvertViewModel : ViewModelBase
|
||||
.ShowWindowDialogAsync(_view);
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
await MessageBoxManager.GetMessageBoxStandard(UI.Title_Error, UI.Incorrect_resume_file, icon: Icon.Error)
|
||||
.ShowWindowDialogAsync(_view);
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
// Copyright © 2011-2025 Natalia Portillo
|
||||
// ****************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Diagnostics;
|
||||
@@ -47,6 +48,7 @@ using Avalonia.Threading;
|
||||
using Humanizer;
|
||||
using Humanizer.Localisation;
|
||||
using ReactiveUI;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Windows;
|
||||
|
||||
@@ -365,8 +367,10 @@ public sealed class ImageVerifyViewModel : ViewModelBase
|
||||
{
|
||||
formatHasTracks = inputOptical?.Tracks?.Count > 0;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
formatHasTracks = false;
|
||||
}
|
||||
|
||||
@@ -440,7 +444,7 @@ public sealed class ImageVerifyViewModel : ViewModelBase
|
||||
});
|
||||
|
||||
AaruLogging.Verbose(UI.Checking_disc_image_checksums_took_0,
|
||||
chkStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
|
||||
chkStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -612,7 +616,7 @@ public sealed class ImageVerifyViewModel : ViewModelBase
|
||||
}
|
||||
|
||||
AaruLogging.Verbose(UI.Checking_sector_checksums_took_0,
|
||||
chkStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
|
||||
chkStopwatch.Elapsed.Humanize(minUnit: TimeUnit.Second));
|
||||
|
||||
await Dispatcher.UIThread.InvokeAsync(() =>
|
||||
{
|
||||
|
||||
@@ -63,6 +63,7 @@ using JetBrains.Annotations;
|
||||
using MsBox.Avalonia;
|
||||
using MsBox.Avalonia.Enums;
|
||||
using ReactiveUI;
|
||||
using Sentry;
|
||||
using DeviceInfo = Aaru.Core.Devices.Info.DeviceInfo;
|
||||
using Dump = Aaru.Core.Devices.Dumping.Dump;
|
||||
using File = System.IO.File;
|
||||
@@ -535,8 +536,10 @@ public sealed class MediaDumpViewModel : ViewModelBase
|
||||
|
||||
fs.Close();
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
// ReSharper disable AssignmentIsFullyDiscarded
|
||||
_ = MessageBoxManager.
|
||||
|
||||
@@ -728,8 +731,10 @@ public sealed class MediaDumpViewModel : ViewModelBase
|
||||
sr.Close();
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
await MessageBoxManager
|
||||
.GetMessageBoxStandard(UI.Title_Error,
|
||||
UI.Incorrect_resume_file_cannot_use_it,
|
||||
|
||||
@@ -47,6 +47,7 @@ using Aaru.Settings;
|
||||
using Avalonia.Threading;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using ReactiveUI;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Gui.ViewModels.Windows;
|
||||
|
||||
@@ -134,9 +135,10 @@ public sealed class SplashWindowViewModel(SplashWindow view) : ViewModelBase
|
||||
ctx?.Database.CloseConnection();
|
||||
ctx?.Dispose();
|
||||
}
|
||||
catch(Exception)
|
||||
catch(Exception ex)
|
||||
{
|
||||
// Should not ever arrive here, but if it does, keep trying to replace it anyway
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
File.Delete(Settings.Settings.LocalDbPath);
|
||||
@@ -212,12 +214,14 @@ public sealed class SplashWindowViewModel(SplashWindow view) : ViewModelBase
|
||||
{
|
||||
File.Delete(Settings.Settings.MainDbPath);
|
||||
}
|
||||
catch(Exception)
|
||||
catch(Exception ex)
|
||||
{
|
||||
AaruLogging.Error(UI.Exception_trying_to_remove_old_database_version);
|
||||
|
||||
AaruLogging.Error(UI.Please_manually_remove_file_at_0, Settings.Settings.MainDbPath);
|
||||
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -63,4 +63,9 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Aaru.Generators\Aaru.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Sentry">
|
||||
<HintPath>..\..\..\..\.nuget\packages\sentry\5.14.1\lib\net9.0\Sentry.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -49,6 +49,7 @@ using Aaru.Filters;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Helpers.IO;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using DMI = Aaru.Decoders.Xbox.DMI;
|
||||
using Sector = Aaru.Decoders.CD.Sector;
|
||||
using Session = Aaru.CommonTypes.Structs.Session;
|
||||
@@ -104,9 +105,7 @@ public sealed partial class BlindWrite5
|
||||
for(int i = 0; i < _header.unknown6.Length; i++)
|
||||
AaruLogging.Debug(MODULE_NAME, "header.unknown6[{1}] = 0x{0:X2}", _header.unknown6[i], i);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"header.manufacturer = {0}",
|
||||
StringHandlers.CToString(_header.manufacturer));
|
||||
AaruLogging.Debug(MODULE_NAME, "header.manufacturer = {0}", StringHandlers.CToString(_header.manufacturer));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, "header.product = {0}", StringHandlers.CToString(_header.product));
|
||||
|
||||
@@ -131,11 +130,7 @@ public sealed partial class BlindWrite5
|
||||
var decoded2A = ModePage_2A.Decode(_mode2A);
|
||||
|
||||
if(decoded2A is not null)
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.mode_page_2A_0,
|
||||
Modes.PrettifyModePage_2A(decoded2A));
|
||||
}
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.mode_page_2A_0, Modes.PrettifyModePage_2A(decoded2A));
|
||||
else
|
||||
_mode2A = null;
|
||||
}
|
||||
@@ -231,8 +226,8 @@ public sealed partial class BlindWrite5
|
||||
stream.EnsureRead(_discInformation, 0, _discInformation.Length);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Disc_information_0,
|
||||
PrintHex.ByteArrayToHexArrayString(_discInformation, 40));
|
||||
Localization.Disc_information_0,
|
||||
PrintHex.ByteArrayToHexArrayString(_discInformation, 40));
|
||||
}
|
||||
else
|
||||
_discInformation = null;
|
||||
@@ -345,160 +340,160 @@ public sealed partial class BlindWrite5
|
||||
}
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].type = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].type);
|
||||
"session[{0}].track[{1}].type = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].type);
|
||||
|
||||
for(int i = 0; i < session.Tracks[tSeq].unknown1.Length; i++)
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].unknown1[{2}] = 0x{3:X2}",
|
||||
ses,
|
||||
tSeq,
|
||||
i,
|
||||
session.Tracks[tSeq].unknown1[i]);
|
||||
"session[{0}].track[{1}].unknown1[{2}] = 0x{3:X2}",
|
||||
ses,
|
||||
tSeq,
|
||||
i,
|
||||
session.Tracks[tSeq].unknown1[i]);
|
||||
}
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].unknown2 = 0x{2:X8}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].unknown2);
|
||||
"session[{0}].track[{1}].unknown2 = 0x{2:X8}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].unknown2);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].subchannel = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].subchannel);
|
||||
"session[{0}].track[{1}].subchannel = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].subchannel);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].unknown3 = 0x{2:X2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].unknown3);
|
||||
"session[{0}].track[{1}].unknown3 = 0x{2:X2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].unknown3);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].ctl = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].ctl);
|
||||
"session[{0}].track[{1}].ctl = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].ctl);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].adr = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].adr);
|
||||
"session[{0}].track[{1}].adr = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].adr);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].point = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].point);
|
||||
"session[{0}].track[{1}].point = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].point);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].unknown4 = 0x{2:X2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].tno);
|
||||
"session[{0}].track[{1}].unknown4 = 0x{2:X2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].tno);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].min = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].min);
|
||||
"session[{0}].track[{1}].min = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].min);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].sec = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].sec);
|
||||
"session[{0}].track[{1}].sec = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].sec);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].frame = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].frame);
|
||||
"session[{0}].track[{1}].frame = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].frame);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].zero = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].zero);
|
||||
"session[{0}].track[{1}].zero = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].zero);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].pmin = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].pmin);
|
||||
"session[{0}].track[{1}].pmin = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].pmin);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].psec = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].psec);
|
||||
"session[{0}].track[{1}].psec = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].psec);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].pframe = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].pframe);
|
||||
"session[{0}].track[{1}].pframe = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].pframe);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].unknown5 = 0x{2:X2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].unknown5);
|
||||
"session[{0}].track[{1}].unknown5 = 0x{2:X2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].unknown5);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].pregap = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].pregap);
|
||||
"session[{0}].track[{1}].pregap = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].pregap);
|
||||
|
||||
for(int i = 0; i < session.Tracks[tSeq].unknown6.Length; i++)
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].unknown6[{2}] = 0x{3:X8}",
|
||||
ses,
|
||||
tSeq,
|
||||
i,
|
||||
session.Tracks[tSeq].unknown6[i]);
|
||||
"session[{0}].track[{1}].unknown6[{2}] = 0x{3:X8}",
|
||||
ses,
|
||||
tSeq,
|
||||
i,
|
||||
session.Tracks[tSeq].unknown6[i]);
|
||||
}
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].startLba = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].startLba);
|
||||
"session[{0}].track[{1}].startLba = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].startLba);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].sectors = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].sectors);
|
||||
"session[{0}].track[{1}].sectors = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].sectors);
|
||||
|
||||
for(int i = 0; i < session.Tracks[tSeq].unknown7.Length; i++)
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].unknown7[{2}] = 0x{3:X8}",
|
||||
ses,
|
||||
tSeq,
|
||||
i,
|
||||
session.Tracks[tSeq].unknown7[i]);
|
||||
"session[{0}].track[{1}].unknown7[{2}] = 0x{3:X8}",
|
||||
ses,
|
||||
tSeq,
|
||||
i,
|
||||
session.Tracks[tSeq].unknown7[i]);
|
||||
}
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].session = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].session);
|
||||
"session[{0}].track[{1}].session = {2}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].session);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].unknown8 = 0x{2:X4}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].unknown8);
|
||||
"session[{0}].track[{1}].unknown8 = 0x{2:X4}",
|
||||
ses,
|
||||
tSeq,
|
||||
session.Tracks[tSeq].unknown8);
|
||||
|
||||
if(session.Tracks[tSeq].type is TrackType.Dvd or TrackType.NotData) continue;
|
||||
|
||||
@@ -506,11 +501,11 @@ public sealed partial class BlindWrite5
|
||||
for(int i = 0; i < session.Tracks[tSeq].unknown9.Length; i++)
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"session[{0}].track[{1}].unknown9[{2}] = 0x{3:X8}",
|
||||
ses,
|
||||
tSeq,
|
||||
i,
|
||||
session.Tracks[tSeq].unknown9[i]);
|
||||
"session[{0}].track[{1}].unknown9[{2}] = 0x{3:X8}",
|
||||
ses,
|
||||
tSeq,
|
||||
i,
|
||||
session.Tracks[tSeq].unknown9[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -533,7 +528,7 @@ public sealed partial class BlindWrite5
|
||||
else
|
||||
{
|
||||
AaruLogging.Error(Localization
|
||||
.BlindWrite5_image_ends_after_expected_position_Probably_new_version_with_different_data_Errors_may_occur);
|
||||
.BlindWrite5_image_ends_after_expected_position_Probably_new_version_with_different_data_Errors_may_occur);
|
||||
}
|
||||
|
||||
_filePaths = [];
|
||||
@@ -683,8 +678,7 @@ public sealed partial class BlindWrite5
|
||||
|
||||
break;
|
||||
default:
|
||||
AaruLogging.Error(Localization.BlindWrite5_found_unknown_subchannel_size_0,
|
||||
sectorSize - 2352);
|
||||
AaruLogging.Error(Localization.BlindWrite5_found_unknown_subchannel_size_0, sectorSize - 2352);
|
||||
|
||||
return ErrorNumber.NotSupported;
|
||||
}
|
||||
@@ -1044,8 +1038,10 @@ public sealed partial class BlindWrite5
|
||||
|
||||
splitStream.AddRange(basePath, $"{filename}.{extension}");
|
||||
}
|
||||
catch(Exception)
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
AaruLogging.Exception(ex, Localization.Could_not_find_image_for_track_0, trk.point);
|
||||
AaruLogging.Error(Localization.Could_not_find_image_for_track_0, trk.point);
|
||||
|
||||
return ErrorNumber.NoSuchFile;
|
||||
|
||||
@@ -43,6 +43,7 @@ using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.CommonTypes.Structs;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using Marshal = Aaru.Helpers.Marshal;
|
||||
|
||||
namespace Aaru.Images;
|
||||
@@ -212,8 +213,9 @@ public class Nintendo64 : IByteAddressableImage
|
||||
{
|
||||
encoding = Encoding.GetEncoding("shift_jis");
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
encoding = Encoding.ASCII;
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@ using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.CommonTypes.Structs;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using Marshal = Aaru.Helpers.Marshal;
|
||||
|
||||
namespace Aaru.Images;
|
||||
@@ -231,8 +232,9 @@ public class SegaMegaDrive : IByteAddressableImage
|
||||
{
|
||||
encoding = Encoding.GetEncoding("shift_jis");
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
encoding = Encoding.ASCII;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.CommonTypes.Structs;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using Marshal = Aaru.Helpers.Marshal;
|
||||
|
||||
namespace Aaru.Images;
|
||||
@@ -162,8 +163,9 @@ public class SuperNintendo : IByteAddressableImage
|
||||
{
|
||||
encoding = Encoding.GetEncoding("shift_jis");
|
||||
}
|
||||
catch(Exception)
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
encoding = Encoding.ASCII;
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Claunia.Encoding;
|
||||
using Claunia.RsrcFork;
|
||||
using Sentry;
|
||||
using Version = Resources.Version;
|
||||
|
||||
namespace Aaru.Images;
|
||||
@@ -247,12 +248,15 @@ public sealed partial class Dart
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(InvalidCastException) {}
|
||||
catch(InvalidCastException ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Image_application_0_version_1,
|
||||
_imageInfo.Application,
|
||||
_imageInfo.ApplicationVersion);
|
||||
Localization.Image_application_0_version_1,
|
||||
_imageInfo.Application,
|
||||
_imageInfo.ApplicationVersion);
|
||||
|
||||
_imageInfo.Sectors = (ulong)(header.srcSize * 2);
|
||||
_imageInfo.CreationTime = imageFilter.CreationTime;
|
||||
|
||||
@@ -40,6 +40,7 @@ using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Claunia.Encoding;
|
||||
using Claunia.RsrcFork;
|
||||
using Sentry;
|
||||
using Version = Resources.Version;
|
||||
|
||||
namespace Aaru.Images;
|
||||
@@ -121,9 +122,7 @@ public sealed partial class DiskCopy42
|
||||
header.FmtByte != kFmtNotStandard &&
|
||||
header.FmtByte != kMacOSXFmtByte)
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Unknown_tmp_header_fmtByte_equals_0_value,
|
||||
header.FmtByte);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Unknown_tmp_header_fmtByte_equals_0_value, header.FmtByte);
|
||||
|
||||
return ErrorNumber.NotSupported;
|
||||
}
|
||||
@@ -215,8 +214,7 @@ public sealed partial class DiskCopy42
|
||||
}
|
||||
else
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Lisa_Twiggy_detected_reversing_second_half_of_disk);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Lisa_Twiggy_detected_reversing_second_half_of_disk);
|
||||
|
||||
Array.Copy(data, 0, twiggyCache, 0, header.DataSize / 2);
|
||||
Array.Copy(tags, 0, twiggyCacheTags, 0, header.TagSize / 2);
|
||||
@@ -318,12 +316,15 @@ public sealed partial class DiskCopy42
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(InvalidCastException) {}
|
||||
catch(InvalidCastException ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Image_application_0_version_1,
|
||||
imageInfo.Application,
|
||||
imageInfo.ApplicationVersion);
|
||||
Localization.Image_application_0_version_1,
|
||||
imageInfo.Application,
|
||||
imageInfo.ApplicationVersion);
|
||||
|
||||
imageInfo.MetadataMediaType = MetadataMediaType.BlockMedia;
|
||||
AaruLogging.Verbose(Localization.DiskCopy_4_2_image_contains_a_disk_of_type_0, imageInfo.MediaType);
|
||||
|
||||
@@ -42,6 +42,7 @@ using Aaru.CommonTypes.Structs;
|
||||
using Aaru.Decoders.CD;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Images;
|
||||
|
||||
@@ -74,16 +75,16 @@ public sealed partial class Nero
|
||||
AaruLogging.Debug(MODULE_NAME, "imageStream.Length = {0}", _imageStream.Length);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"footerV1.ChunkID = 0x{0:X8} (\"{1}\")",
|
||||
footerV1.ChunkId,
|
||||
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(footerV1.ChunkId)));
|
||||
"footerV1.ChunkID = 0x{0:X8} (\"{1}\")",
|
||||
footerV1.ChunkId,
|
||||
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(footerV1.ChunkId)));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, "footerV1.FirstChunkOffset = {0}", footerV1.FirstChunkOffset);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"footerV2.ChunkID = 0x{0:X8} (\"{1}\")",
|
||||
footerV2.ChunkId,
|
||||
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(footerV2.ChunkId)));
|
||||
"footerV2.ChunkID = 0x{0:X8} (\"{1}\")",
|
||||
footerV2.ChunkId,
|
||||
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(footerV2.ChunkId)));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, "footerV2.FirstChunkOffset = {0}", footerV2.FirstChunkOffset);
|
||||
|
||||
@@ -129,9 +130,9 @@ public sealed partial class Nero
|
||||
uint chunkLength = BigEndianBitConverter.ToUInt32(chunkHeaderBuffer, 4);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"ChunkID = 0x{0:X8} (\"{1}\")",
|
||||
chunkId,
|
||||
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(chunkId)));
|
||||
"ChunkID = 0x{0:X8} (\"{1}\")",
|
||||
chunkId,
|
||||
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(chunkId)));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, "ChunkLength = {0}", chunkLength);
|
||||
|
||||
@@ -139,9 +140,7 @@ public sealed partial class Nero
|
||||
{
|
||||
case NERO_CUE_V1:
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Found_CUES_chunk_parsing_0_bytes,
|
||||
chunkLength);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Found_CUES_chunk_parsing_0_bytes, chunkLength);
|
||||
|
||||
var newCuesheetV1 = new CuesheetV1
|
||||
{
|
||||
@@ -167,40 +166,25 @@ public sealed partial class Nero
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Cuesheet_entry_0, i / 8 + 1);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Mode = {1:X2}",
|
||||
i / 8 + 1,
|
||||
entry.Mode);
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Mode = {1:X2}", i / 8 + 1, entry.Mode);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].TrackNumber = {1:X2}",
|
||||
i / 8 + 1,
|
||||
entry.TrackNumber);
|
||||
"\t _entry[{0}].TrackNumber = {1:X2}",
|
||||
i / 8 + 1,
|
||||
entry.TrackNumber);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].IndexNumber = {1:X2}",
|
||||
i / 8 + 1,
|
||||
entry.IndexNumber);
|
||||
"\t _entry[{0}].IndexNumber = {1:X2}",
|
||||
i / 8 + 1,
|
||||
entry.IndexNumber);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Dummy = {1:X4}",
|
||||
i / 8 + 1,
|
||||
entry.Dummy);
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Dummy = {1:X4}", i / 8 + 1, entry.Dummy);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Minute = {1:X2}",
|
||||
i / 8 + 1,
|
||||
entry.Minute);
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Minute = {1:X2}", i / 8 + 1, entry.Minute);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Second = {1:X2}",
|
||||
i / 8 + 1,
|
||||
entry.Second);
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Second = {1:X2}", i / 8 + 1, entry.Second);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Frame = {1:X2}",
|
||||
i / 8 + 1,
|
||||
entry.Frame);
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Frame = {1:X2}", i / 8 + 1, entry.Frame);
|
||||
|
||||
newCuesheetV1.Entries.Add(entry);
|
||||
}
|
||||
@@ -215,9 +199,7 @@ public sealed partial class Nero
|
||||
|
||||
case NERO_CUE_V2:
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Found_CUEX_chunk_parsing_0_bytes,
|
||||
chunkLength);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Found_CUEX_chunk_parsing_0_bytes, chunkLength);
|
||||
|
||||
var newCuesheetV2 = new CuesheetV2
|
||||
{
|
||||
@@ -240,30 +222,21 @@ public sealed partial class Nero
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Cuesheet_entry_0, i / 8 + 1);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Mode = 0x{1:X2}",
|
||||
i / 8 + 1,
|
||||
entry.Mode);
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Mode = 0x{1:X2}", i / 8 + 1, entry.Mode);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].TrackNumber = {1:X2}",
|
||||
i / 8 + 1,
|
||||
entry.TrackNumber);
|
||||
"\t _entry[{0}].TrackNumber = {1:X2}",
|
||||
i / 8 + 1,
|
||||
entry.TrackNumber);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].IndexNumber = {1:X2}",
|
||||
i / 8 + 1,
|
||||
entry.IndexNumber);
|
||||
"\t _entry[{0}].IndexNumber = {1:X2}",
|
||||
i / 8 + 1,
|
||||
entry.IndexNumber);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Dummy = {1:X2}",
|
||||
i / 8 + 1,
|
||||
entry.Dummy);
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Dummy = {1:X2}", i / 8 + 1, entry.Dummy);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].LBAStart = {1}",
|
||||
i / 8 + 1,
|
||||
entry.LbaStart);
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].LBAStart = {1}", i / 8 + 1, entry.LbaStart);
|
||||
|
||||
newCuesheetV2.Entries.Add(entry);
|
||||
}
|
||||
@@ -278,9 +251,7 @@ public sealed partial class Nero
|
||||
|
||||
case NERO_DAO_V1:
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Found_DAOI_chunk_parsing_0_bytes,
|
||||
chunkLength);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Found_DAOI_chunk_parsing_0_bytes, chunkLength);
|
||||
|
||||
_neroDaov1 = new DaoV1
|
||||
{
|
||||
@@ -298,13 +269,11 @@ public sealed partial class Nero
|
||||
_neroDaov1.LastTrack = tmpBuffer[21];
|
||||
_neroDaov1.Tracks = [];
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"neroDAOV1.ChunkSizeLe = {0} bytes",
|
||||
_neroDaov1.ChunkSizeLe);
|
||||
AaruLogging.Debug(MODULE_NAME, "neroDAOV1.ChunkSizeLe = {0} bytes", _neroDaov1.ChunkSizeLe);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"neroDAOV1.UPC = \"{0}\"",
|
||||
StringHandlers.CToString(_neroDaov1.Upc));
|
||||
"neroDAOV1.UPC = \"{0}\"",
|
||||
StringHandlers.CToString(_neroDaov1.Upc));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, "neroDAOV1.TocType = 0x{0:X4}", _neroDaov1.TocType);
|
||||
|
||||
@@ -350,40 +319,34 @@ public sealed partial class Nero
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Disc_At_Once_entry_0, i / 32 + 1);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].ISRC = \"{1}\"",
|
||||
i / 32 + 1,
|
||||
StringHandlers.CToString(entry.Isrc));
|
||||
"\t _entry[{0}].ISRC = \"{1}\"",
|
||||
i / 32 + 1,
|
||||
StringHandlers.CToString(entry.Isrc));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].SectorSize = {1}",
|
||||
i / 32 + 1,
|
||||
entry.SectorSize);
|
||||
"\t _entry[{0}].SectorSize = {1}",
|
||||
i / 32 + 1,
|
||||
entry.SectorSize);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Mode = {1} (0x{2:X4})",
|
||||
i / 32 + 1,
|
||||
(DaoMode)entry.Mode,
|
||||
entry.Mode);
|
||||
"\t _entry[{0}].Mode = {1} (0x{2:X4})",
|
||||
i / 32 + 1,
|
||||
(DaoMode)entry.Mode,
|
||||
entry.Mode);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Unknown = 0x{1:X4}",
|
||||
i / 32 + 1,
|
||||
entry.Unknown);
|
||||
"\t _entry[{0}].Unknown = 0x{1:X4}",
|
||||
i / 32 + 1,
|
||||
entry.Unknown);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Index0 = {1}", i / 32 + 1, entry.Index0);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Index1 = {1}", i / 32 + 1, entry.Index1);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Index0 = {1}",
|
||||
i / 32 + 1,
|
||||
entry.Index0);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Index1 = {1}",
|
||||
i / 32 + 1,
|
||||
entry.Index1);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].EndOfTrack = {1}",
|
||||
i / 32 + 1,
|
||||
entry.EndOfTrack);
|
||||
"\t _entry[{0}].EndOfTrack = {1}",
|
||||
i / 32 + 1,
|
||||
entry.EndOfTrack);
|
||||
|
||||
_neroDaov1.Tracks.Add(entry);
|
||||
|
||||
@@ -413,9 +376,7 @@ public sealed partial class Nero
|
||||
|
||||
case NERO_DAO_V2:
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Found_DAOX_chunk_parsing_0_bytes,
|
||||
chunkLength);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Found_DAOX_chunk_parsing_0_bytes, chunkLength);
|
||||
|
||||
_neroDaov2 = new DaoV2
|
||||
{
|
||||
@@ -435,13 +396,11 @@ public sealed partial class Nero
|
||||
|
||||
_upc = _neroDaov2.Upc;
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"neroDAOV2.ChunkSizeLe = {0} bytes",
|
||||
_neroDaov2.ChunkSizeLe);
|
||||
AaruLogging.Debug(MODULE_NAME, "neroDAOV2.ChunkSizeLe = {0} bytes", _neroDaov2.ChunkSizeLe);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"neroDAOV2.UPC = \"{0}\"",
|
||||
StringHandlers.CToString(_neroDaov2.Upc));
|
||||
"neroDAOV2.UPC = \"{0}\"",
|
||||
StringHandlers.CToString(_neroDaov2.Upc));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, "neroDAOV2.TocType = 0x{0:X4}", _neroDaov2.TocType);
|
||||
|
||||
@@ -485,40 +444,34 @@ public sealed partial class Nero
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Disc_At_Once_entry_0, i / 32 + 1);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].ISRC = \"{1}\"",
|
||||
i / 32 + 1,
|
||||
StringHandlers.CToString(entry.Isrc));
|
||||
"\t _entry[{0}].ISRC = \"{1}\"",
|
||||
i / 32 + 1,
|
||||
StringHandlers.CToString(entry.Isrc));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].SectorSize = {1}",
|
||||
i / 32 + 1,
|
||||
entry.SectorSize);
|
||||
"\t _entry[{0}].SectorSize = {1}",
|
||||
i / 32 + 1,
|
||||
entry.SectorSize);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Mode = {1} (0x{2:X4})",
|
||||
i / 32 + 1,
|
||||
(DaoMode)entry.Mode,
|
||||
entry.Mode);
|
||||
"\t _entry[{0}].Mode = {1} (0x{2:X4})",
|
||||
i / 32 + 1,
|
||||
(DaoMode)entry.Mode,
|
||||
entry.Mode);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Unknown = {1:X2}",
|
||||
i / 32 + 1,
|
||||
entry.Unknown);
|
||||
"\t _entry[{0}].Unknown = {1:X2}",
|
||||
i / 32 + 1,
|
||||
entry.Unknown);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Index0 = {1}", i / 32 + 1, entry.Index0);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Index1 = {1}", i / 32 + 1, entry.Index1);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Index0 = {1}",
|
||||
i / 32 + 1,
|
||||
entry.Index0);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Index1 = {1}",
|
||||
i / 32 + 1,
|
||||
entry.Index1);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].EndOfTrack = {1}",
|
||||
i / 32 + 1,
|
||||
entry.EndOfTrack);
|
||||
"\t _entry[{0}].EndOfTrack = {1}",
|
||||
i / 32 + 1,
|
||||
entry.EndOfTrack);
|
||||
|
||||
_neroDaov2.Tracks.Add(entry);
|
||||
|
||||
@@ -549,9 +502,7 @@ public sealed partial class Nero
|
||||
|
||||
case NERO_CDTEXT:
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Found_CDTX_chunk_parsing_0_bytes,
|
||||
chunkLength);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Found_CDTX_chunk_parsing_0_bytes, chunkLength);
|
||||
|
||||
_cdtxt = new CdText
|
||||
{
|
||||
@@ -578,34 +529,31 @@ public sealed partial class Nero
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.CD_TEXT_entry_0, i / 18 + 1);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].PackType = 0x{1:X2}",
|
||||
i / 18 + 1,
|
||||
entry.PackType);
|
||||
"\t _entry[{0}].PackType = 0x{1:X2}",
|
||||
i / 18 + 1,
|
||||
entry.PackType);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].TrackNumber = 0x{1:X2}",
|
||||
i / 18 + 1,
|
||||
entry.TrackNumber);
|
||||
"\t _entry[{0}].TrackNumber = 0x{1:X2}",
|
||||
i / 18 + 1,
|
||||
entry.TrackNumber);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].PackNumber = 0x{1:X2}",
|
||||
i / 18 + 1,
|
||||
entry.PackNumber);
|
||||
"\t _entry[{0}].PackNumber = 0x{1:X2}",
|
||||
i / 18 + 1,
|
||||
entry.PackNumber);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].BlockNumber = 0x{1:X2}",
|
||||
i / 18 + 1,
|
||||
entry.BlockNumber);
|
||||
"\t _entry[{0}].BlockNumber = 0x{1:X2}",
|
||||
i / 18 + 1,
|
||||
entry.BlockNumber);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Text = \"{1}\"",
|
||||
i / 18 + 1,
|
||||
StringHandlers.CToString(entry.Text));
|
||||
"\t _entry[{0}].Text = \"{1}\"",
|
||||
i / 18 + 1,
|
||||
StringHandlers.CToString(entry.Text));
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].CRC = 0x{1:X4}",
|
||||
i / 18 + 1,
|
||||
entry.Crc);
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].CRC = 0x{1:X4}", i / 18 + 1, entry.Crc);
|
||||
|
||||
_cdtxt.Packs.Add(entry);
|
||||
}
|
||||
@@ -615,9 +563,7 @@ public sealed partial class Nero
|
||||
|
||||
case NERO_TAO_V0:
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Found_TINF_chunk_parsing_0_bytes,
|
||||
chunkLength);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Found_TINF_chunk_parsing_0_bytes, chunkLength);
|
||||
|
||||
oldFormat = true;
|
||||
|
||||
@@ -641,21 +587,18 @@ public sealed partial class Nero
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Track_at_Once_entry_0, i / 20 + 1);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Offset = {1}",
|
||||
i / 20 + 1,
|
||||
entry.Offset);
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Offset = {1}", i / 20 + 1, entry.Offset);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Length = {1} bytes",
|
||||
i / 20 + 1,
|
||||
entry.Length);
|
||||
"\t _entry[{0}].Length = {1} bytes",
|
||||
i / 20 + 1,
|
||||
entry.Length);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Mode = {1} (0x{2:X4})",
|
||||
i / 20 + 1,
|
||||
(DaoMode)entry.Mode,
|
||||
entry.Mode);
|
||||
"\t _entry[{0}].Mode = {1} (0x{2:X4})",
|
||||
i / 20 + 1,
|
||||
(DaoMode)entry.Mode,
|
||||
entry.Mode);
|
||||
|
||||
_taoV0.Tracks.Add(entry);
|
||||
|
||||
@@ -688,9 +631,7 @@ public sealed partial class Nero
|
||||
|
||||
case NERO_TAO_V1:
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Found_ETNF_chunk_parsing_0_bytes,
|
||||
chunkLength);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Found_ETNF_chunk_parsing_0_bytes, chunkLength);
|
||||
|
||||
_taoV1 = new TaoV1
|
||||
{
|
||||
@@ -714,31 +655,25 @@ public sealed partial class Nero
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Track_at_Once_entry_0, i / 20 + 1);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Offset = {1}",
|
||||
i / 20 + 1,
|
||||
entry.Offset);
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Offset = {1}", i / 20 + 1, entry.Offset);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Length = {1} bytes",
|
||||
i / 20 + 1,
|
||||
entry.Length);
|
||||
"\t _entry[{0}].Length = {1} bytes",
|
||||
i / 20 + 1,
|
||||
entry.Length);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Mode = {1} (0x{2:X4})",
|
||||
i / 20 + 1,
|
||||
(DaoMode)entry.Mode,
|
||||
entry.Mode);
|
||||
"\t _entry[{0}].Mode = {1} (0x{2:X4})",
|
||||
i / 20 + 1,
|
||||
(DaoMode)entry.Mode,
|
||||
entry.Mode);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].StartLBA = {1}", i / 20 + 1, entry.StartLba);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].StartLBA = {1}",
|
||||
i / 20 + 1,
|
||||
entry.StartLba);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Unknown = 0x{1:X4}",
|
||||
i / 20 + 1,
|
||||
entry.Unknown);
|
||||
"\t _entry[{0}].Unknown = 0x{1:X4}",
|
||||
i / 20 + 1,
|
||||
entry.Unknown);
|
||||
|
||||
_taoV1.Tracks.Add(entry);
|
||||
|
||||
@@ -770,9 +705,7 @@ public sealed partial class Nero
|
||||
|
||||
case NERO_TAO_V2:
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Found_ETN2_chunk_parsing_0_bytes,
|
||||
chunkLength);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Found_ETN2_chunk_parsing_0_bytes, chunkLength);
|
||||
|
||||
_taoV2 = new TaoV2
|
||||
{
|
||||
@@ -797,36 +730,27 @@ public sealed partial class Nero
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Track_at_Once_entry_0, i / 32 + 1);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Offset = {1}",
|
||||
i / 32 + 1,
|
||||
entry.Offset);
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Offset = {1}", i / 32 + 1, entry.Offset);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Length = {1} bytes",
|
||||
i / 32 + 1,
|
||||
entry.Length);
|
||||
"\t _entry[{0}].Length = {1} bytes",
|
||||
i / 32 + 1,
|
||||
entry.Length);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Mode = {1} (0x{2:X4})",
|
||||
i / 32 + 1,
|
||||
(DaoMode)entry.Mode,
|
||||
entry.Mode);
|
||||
"\t _entry[{0}].Mode = {1} (0x{2:X4})",
|
||||
i / 32 + 1,
|
||||
(DaoMode)entry.Mode,
|
||||
entry.Mode);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].StartLBA = {1}", i / 32 + 1, entry.StartLba);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].StartLBA = {1}",
|
||||
i / 32 + 1,
|
||||
entry.StartLba);
|
||||
"\t _entry[{0}].Unknown = 0x{1:X4}",
|
||||
i / 32 + 1,
|
||||
entry.Unknown);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Unknown = 0x{1:X4}",
|
||||
i / 32 + 1,
|
||||
entry.Unknown);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t _entry[{0}].Sectors = {1}",
|
||||
i / 32 + 1,
|
||||
entry.Sectors);
|
||||
AaruLogging.Debug(MODULE_NAME, "\t _entry[{0}].Sectors = {1}", i / 32 + 1, entry.Sectors);
|
||||
|
||||
_taoV2.Tracks.Add(entry);
|
||||
|
||||
@@ -867,9 +791,7 @@ public sealed partial class Nero
|
||||
|
||||
case NERO_SESSION:
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Found_SINF_chunk_parsing_0_bytes,
|
||||
chunkLength);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Found_SINF_chunk_parsing_0_bytes, chunkLength);
|
||||
|
||||
byte[] tmpBuffer = new byte[4];
|
||||
_imageStream.EnsureRead(tmpBuffer, 0, 4);
|
||||
@@ -877,9 +799,9 @@ public sealed partial class Nero
|
||||
_neroSessions.Add(currentSession, sessionTracks);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t" + Localization.Session_0_has_1_tracks,
|
||||
currentSession,
|
||||
sessionTracks);
|
||||
"\t" + Localization.Session_0_has_1_tracks,
|
||||
currentSession,
|
||||
sessionTracks);
|
||||
|
||||
currentSession++;
|
||||
|
||||
@@ -888,9 +810,7 @@ public sealed partial class Nero
|
||||
|
||||
case NERO_DISC_TYPE:
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Found_MTYP_chunk_parsing_0_bytes,
|
||||
chunkLength);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Found_MTYP_chunk_parsing_0_bytes, chunkLength);
|
||||
|
||||
_mediaType = new MediaType
|
||||
{
|
||||
@@ -903,9 +823,9 @@ public sealed partial class Nero
|
||||
_mediaType.Type = BigEndianBitConverter.ToUInt32(tmpBuffer, 0);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\t" + Localization.Media_type_is_0_1,
|
||||
(NeroMediaTypes)_mediaType.Type,
|
||||
_mediaType.Type);
|
||||
"\t" + Localization.Media_type_is_0_1,
|
||||
(NeroMediaTypes)_mediaType.Type,
|
||||
_mediaType.Type);
|
||||
|
||||
_imageInfo.MediaType = NeroMediaTypeToMediaType((NeroMediaTypes)_mediaType.Type);
|
||||
|
||||
@@ -914,9 +834,7 @@ public sealed partial class Nero
|
||||
|
||||
case NERO_DISC_INFO:
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Found_DINF_chunk_parsing_0_bytes,
|
||||
chunkLength);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Found_DINF_chunk_parsing_0_bytes, chunkLength);
|
||||
|
||||
_discInfo = new DiscInformation
|
||||
{
|
||||
@@ -928,18 +846,14 @@ public sealed partial class Nero
|
||||
_imageStream.EnsureRead(tmpBuffer, 0, 4);
|
||||
_discInfo.Unknown = BigEndianBitConverter.ToUInt32(tmpBuffer, 0);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\tneroDiscInfo.Unknown = 0x{0:X4} ({0})",
|
||||
_discInfo.Unknown);
|
||||
AaruLogging.Debug(MODULE_NAME, "\tneroDiscInfo.Unknown = 0x{0:X4} ({0})", _discInfo.Unknown);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case NERO_RELOCATION:
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Found_RELO_chunk_parsing_0_bytes,
|
||||
chunkLength);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Found_RELO_chunk_parsing_0_bytes, chunkLength);
|
||||
|
||||
_relo = new ReloChunk
|
||||
{
|
||||
@@ -958,9 +872,7 @@ public sealed partial class Nero
|
||||
|
||||
case NERO_TOC:
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Found_TOCT_chunk_parsing_0_bytes,
|
||||
chunkLength);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Found_TOCT_chunk_parsing_0_bytes, chunkLength);
|
||||
|
||||
_toc = new TocChunk
|
||||
{
|
||||
@@ -996,8 +908,8 @@ public sealed partial class Nero
|
||||
default:
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
Localization.Unknown_chunk_ID_0_skipping,
|
||||
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(chunkId)));
|
||||
Localization.Unknown_chunk_ID_0_skipping,
|
||||
Encoding.ASCII.GetString(BigEndianBitConverter.GetBytes(chunkId)));
|
||||
|
||||
_imageStream.Seek(chunkLength, SeekOrigin.Current);
|
||||
|
||||
@@ -1006,8 +918,7 @@ public sealed partial class Nero
|
||||
}
|
||||
}
|
||||
|
||||
if(corruptedTrackMode)
|
||||
AaruLogging.Error(Localization.Inconsistent_track_mode_and_track_sector_size_found);
|
||||
if(corruptedTrackMode) AaruLogging.Error(Localization.Inconsistent_track_mode_and_track_sector_size_found);
|
||||
|
||||
_imageInfo.HasPartitions = true;
|
||||
_imageInfo.HasSessions = true;
|
||||
@@ -1072,11 +983,9 @@ public sealed partial class Nero
|
||||
{
|
||||
if(neroTrack.Offset >= (_imageNewFormat ? footerV2.FirstChunkOffset : footerV1.FirstChunkOffset))
|
||||
{
|
||||
AaruLogging.Error(Localization
|
||||
.This_image_contains_a_track_that_is_set_to_start_outside_the_file);
|
||||
AaruLogging.Error(Localization.This_image_contains_a_track_that_is_set_to_start_outside_the_file);
|
||||
|
||||
AaruLogging.Error(Localization
|
||||
.Breaking_track_processing_and_trying_recovery_of_information);
|
||||
AaruLogging.Error(Localization.Breaking_track_processing_and_trying_recovery_of_information);
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -1084,9 +993,7 @@ public sealed partial class Nero
|
||||
AaruLogging.Debug(MODULE_NAME, "\tcurrentSession = {0}", currentSession);
|
||||
AaruLogging.Debug(MODULE_NAME, "\tcurrentSessionMaxTrack = {0}", currentSessionMaxTrack);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
"\tcurrentSessionCurrentTrack = {0}",
|
||||
currentSessionCurrentTrack);
|
||||
AaruLogging.Debug(MODULE_NAME, "\tcurrentSessionCurrentTrack = {0}", currentSessionCurrentTrack);
|
||||
|
||||
var track = new Track();
|
||||
|
||||
@@ -1663,8 +1570,10 @@ public sealed partial class Nero
|
||||
|
||||
return ErrorNumber.NoError;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
AaruLogging.Exception(ex, Localization.Exception_occurred_opening_file);
|
||||
AaruLogging.Debug(MODULE_NAME, Localization.Exception_occurred_opening_file);
|
||||
|
||||
return ErrorNumber.UnexpectedException;
|
||||
|
||||
@@ -39,6 +39,7 @@ using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
|
||||
namespace Aaru.Images;
|
||||
|
||||
@@ -117,8 +118,8 @@ public sealed partial class Vhdx
|
||||
else if((_vRegs[i].flags & REGION_FLAGS_REQUIRED) == REGION_FLAGS_REQUIRED)
|
||||
{
|
||||
AaruLogging.Error(string.Format(Localization
|
||||
.Found_unsupported_and_required_region_Guid_0_not_proceeding_with_image,
|
||||
_vRegs[i].guid));
|
||||
.Found_unsupported_and_required_region_Guid_0_not_proceeding_with_image,
|
||||
_vRegs[i].guid));
|
||||
|
||||
return ErrorNumber.InvalidArgument;
|
||||
}
|
||||
@@ -168,8 +169,8 @@ public sealed partial class Vhdx
|
||||
else if((_vMets[i].flags & METADATA_FLAGS_REQUIRED) == METADATA_FLAGS_REQUIRED)
|
||||
{
|
||||
AaruLogging.Error(string.Format(Localization
|
||||
.Found_unsupported_and_required_metadata_Guid_0_not_proceeding_with_image,
|
||||
_vMets[i].itemId));
|
||||
.Found_unsupported_and_required_metadata_Guid_0_not_proceeding_with_image,
|
||||
_vMets[i].itemId));
|
||||
|
||||
return ErrorNumber.InvalidArgument;
|
||||
}
|
||||
@@ -256,8 +257,8 @@ public sealed partial class Vhdx
|
||||
if(_vParHdr.locatorType != _parentTypeVhdxGuid)
|
||||
{
|
||||
AaruLogging.Error(string.Format(Localization
|
||||
.Found_unsupported_and_required_parent_locator_type_0_not_proceeding_with_image,
|
||||
_vParHdr.locatorType));
|
||||
.Found_unsupported_and_required_parent_locator_type_0_not_proceeding_with_image,
|
||||
_vParHdr.locatorType));
|
||||
|
||||
return ErrorNumber.NotSupported;
|
||||
}
|
||||
@@ -312,8 +313,9 @@ public sealed partial class Vhdx
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
parentWorks = false;
|
||||
}
|
||||
|
||||
@@ -330,9 +332,10 @@ public sealed partial class Vhdx
|
||||
|
||||
break;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
else if(string.Compare(entryType, VOLUME_PATH_KEY, StringComparison.OrdinalIgnoreCase) == 0 ||
|
||||
@@ -354,9 +357,10 @@ public sealed partial class Vhdx
|
||||
|
||||
break;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -443,8 +447,8 @@ public sealed partial class Vhdx
|
||||
if((pt & BAT_FLAGS_MASK) != 0)
|
||||
{
|
||||
AaruLogging.Error(string.Format(Localization
|
||||
.Unsupported_sector_bitmap_block_flags_0_found_not_proceeding,
|
||||
pt & BAT_FLAGS_MASK));
|
||||
.Unsupported_sector_bitmap_block_flags_0_found_not_proceeding,
|
||||
pt & BAT_FLAGS_MASK));
|
||||
|
||||
return ErrorNumber.InvalidArgument;
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@ using Aaru.Decoders.SCSI;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Logging;
|
||||
using Schemas;
|
||||
using Sentry;
|
||||
using DMI = Aaru.Decoders.Xbox.DMI;
|
||||
using File = System.IO.File;
|
||||
using Inquiry = Aaru.CommonTypes.Structs.Devices.SCSI.Inquiry;
|
||||
@@ -422,7 +423,10 @@ public sealed partial class ZZZRawImage
|
||||
filter.GetDataForkStream().EnsureRead(data, 0, data.Length);
|
||||
_mediaTags.Add(sidecar.tag, data);
|
||||
}
|
||||
catch(IOException) {}
|
||||
catch(IOException ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
// If there are INQUIRY and IDENTIFY tags, it's ATAPI
|
||||
@@ -1202,9 +1206,10 @@ public sealed partial class ZZZRawImage
|
||||
sr.Close();
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// Do nothing.
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
_imageInfo.ReadableMediaTags = [.._mediaTags.Keys];
|
||||
|
||||
@@ -54,4 +54,9 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Aaru.Generators\Aaru.Generators.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Sentry">
|
||||
<HintPath>..\..\..\..\.nuget\packages\sentry\5.14.1\lib\net9.0\Sentry.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -39,6 +39,7 @@ using Aaru.CommonTypes;
|
||||
using Aaru.CommonTypes.Enums;
|
||||
using Aaru.CommonTypes.Interfaces;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using Marshal = Aaru.Helpers.Marshal;
|
||||
|
||||
namespace Aaru.Partitions;
|
||||
@@ -111,8 +112,10 @@ public sealed class GuidPartitionTable : IPartition
|
||||
{
|
||||
hdr = Marshal.ByteArrayToStructureLittleEndian<Header>(hdrBytes);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -169,12 +172,10 @@ public sealed class GuidPartitionTable : IPartition
|
||||
Array.Copy(entriesBytes, hdr.entriesSize * i, entryBytes, 0, hdr.entriesSize);
|
||||
entries.Add(Marshal.ByteArrayToStructureLittleEndian<Entry>(entryBytes));
|
||||
}
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
}
|
||||
|
||||
if(entries.Count == 0) return false;
|
||||
|
||||
@@ -42,4 +42,9 @@
|
||||
<PackageReference Include="Microsoft.Win32.Registry"/>
|
||||
<PackageReference Include="plist-cil"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Sentry">
|
||||
<HintPath>..\..\..\..\.nuget\packages\sentry\5.14.1\lib\net9.0\Sentry.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -40,6 +40,7 @@ using System.Xml.Serialization;
|
||||
using Aaru.CommonTypes.Interop;
|
||||
using Claunia.PropertyList;
|
||||
using Microsoft.Win32;
|
||||
using Sentry;
|
||||
using PlatformID = Aaru.CommonTypes.Interop.PlatformID;
|
||||
|
||||
namespace Aaru.Settings;
|
||||
@@ -129,7 +130,7 @@ public static class Settings
|
||||
PlatformID ptId = DetectOS.GetRealPlatformID();
|
||||
string homePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
|
||||
LocalDbPath = "local.db";
|
||||
var oldMainDbPath = "master.db";
|
||||
string oldMainDbPath = "master.db";
|
||||
MainDbPath = "main.db";
|
||||
|
||||
try
|
||||
@@ -244,8 +245,10 @@ public static class Settings
|
||||
|
||||
if(File.Exists(oldMainDbPath)) File.Move(oldMainDbPath, MainDbPath);
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
ReportsPath = null;
|
||||
}
|
||||
|
||||
@@ -497,8 +500,10 @@ public static class Settings
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
|
||||
prefsFs?.Close();
|
||||
prefsSr?.Close();
|
||||
SetDefaultSettings();
|
||||
@@ -662,12 +667,10 @@ public static class Settings
|
||||
break;
|
||||
}
|
||||
}
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
}
|
||||
|
||||
/// <summary>Sets default settings as all statistics, share everything</summary>
|
||||
|
||||
@@ -77,6 +77,8 @@
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite"/>
|
||||
<PackageReference Include="Sentry"/>
|
||||
<PackageReference Include="Sentry.Serilog"/>
|
||||
<PackageReference Include="Serilog"/>
|
||||
<PackageReference Include="Serilog.Sinks.File"/>
|
||||
<PackageReference Include="Serilog.Sinks.Spectre"/>
|
||||
|
||||
@@ -44,6 +44,7 @@ using Aaru.Core;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Localization;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using Spectre.Console;
|
||||
using Spectre.Console.Cli;
|
||||
|
||||
@@ -266,34 +267,34 @@ sealed class ArchiveExtractCommand : Command<ArchiveExtractCommand.Settings>
|
||||
});
|
||||
|
||||
var fi = new FileInfo(outputPath);
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
|
||||
try
|
||||
{
|
||||
if(stat.CreationTimeUtc.HasValue) fi.CreationTimeUtc = stat.CreationTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if(stat.LastWriteTimeUtc.HasValue) fi.LastWriteTimeUtc = stat.LastWriteTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if(stat.AccessTimeUtc.HasValue) fi.LastAccessTimeUtc = stat.AccessTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
|
||||
AaruLogging.WriteLine(UI.Written_0_bytes_of_file_1_to_2,
|
||||
uncompressedSize,
|
||||
Markup.Escape(fileName),
|
||||
@@ -326,10 +327,10 @@ sealed class ArchiveExtractCommand : Command<ArchiveExtractCommand.Settings>
|
||||
if(errno != ErrorNumber.NoError)
|
||||
{
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
UI.Error_0_reading_extended_attribute_1_for_archive_entry_2,
|
||||
errno,
|
||||
xattrName,
|
||||
i);
|
||||
UI.Error_0_reading_extended_attribute_1_for_archive_entry_2,
|
||||
errno,
|
||||
xattrName,
|
||||
i);
|
||||
|
||||
continue;
|
||||
}
|
||||
@@ -365,34 +366,34 @@ sealed class ArchiveExtractCommand : Command<ArchiveExtractCommand.Settings>
|
||||
outputFile.Close();
|
||||
|
||||
var fi = new FileInfo(outputPath);
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
|
||||
try
|
||||
{
|
||||
if(stat.CreationTimeUtc.HasValue) fi.CreationTimeUtc = stat.CreationTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if(stat.LastWriteTimeUtc.HasValue) fi.LastWriteTimeUtc = stat.LastWriteTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if(stat.AccessTimeUtc.HasValue) fi.LastAccessTimeUtc = stat.AccessTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
|
||||
AaruLogging.WriteLine(UI.Written_0_bytes_of_file_1_to_2,
|
||||
uncompressedSize,
|
||||
Markup.Escape(fileName),
|
||||
|
||||
@@ -44,6 +44,7 @@ using Aaru.Core;
|
||||
using Aaru.Localization;
|
||||
using Aaru.Logging;
|
||||
using JetBrains.Annotations;
|
||||
using Sentry;
|
||||
using Spectre.Console;
|
||||
using Spectre.Console.Cli;
|
||||
using FileAttributes = Aaru.CommonTypes.Structs.FileAttributes;
|
||||
@@ -179,15 +180,11 @@ sealed class ExtractFilesCommand : Command<ExtractFilesCommand.Settings>
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, UI.Correctly_opened_image_file);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
UI.Image_without_headers_is_0_bytes,
|
||||
imageFormat.Info.ImageSize);
|
||||
AaruLogging.Debug(MODULE_NAME, UI.Image_without_headers_is_0_bytes, imageFormat.Info.ImageSize);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME, UI.Image_has_0_sectors, imageFormat.Info.Sectors);
|
||||
|
||||
AaruLogging.Debug(MODULE_NAME,
|
||||
UI.Image_identifies_media_type_as_0,
|
||||
imageFormat.Info.MediaType);
|
||||
AaruLogging.Debug(MODULE_NAME, UI.Image_identifies_media_type_as_0, imageFormat.Info.MediaType);
|
||||
|
||||
Statistics.AddMediaFormat(imageFormat.Format);
|
||||
Statistics.AddMedia(imageFormat.Info.MediaType, false);
|
||||
@@ -385,34 +382,32 @@ sealed class ExtractFilesCommand : Command<ExtractFilesCommand.Settings>
|
||||
|
||||
var di = new DirectoryInfo(outputPath);
|
||||
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
try
|
||||
{
|
||||
if(stat.CreationTimeUtc.HasValue) di.CreationTimeUtc = stat.CreationTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if(stat.LastWriteTimeUtc.HasValue) di.LastWriteTimeUtc = stat.LastWriteTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if(stat.AccessTimeUtc.HasValue) di.LastAccessTimeUtc = stat.AccessTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
|
||||
continue;
|
||||
}
|
||||
@@ -491,14 +486,14 @@ sealed class ExtractFilesCommand : Command<ExtractFilesCommand.Settings>
|
||||
});
|
||||
|
||||
var fi = new FileInfo(outputPath);
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
|
||||
try
|
||||
{
|
||||
if(stat.CreationTimeUtc.HasValue) fi.CreationTimeUtc = stat.CreationTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
try
|
||||
@@ -506,20 +501,20 @@ sealed class ExtractFilesCommand : Command<ExtractFilesCommand.Settings>
|
||||
if(stat.LastWriteTimeUtc.HasValue)
|
||||
fi.LastWriteTimeUtc = stat.LastWriteTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if(stat.AccessTimeUtc.HasValue) fi.LastAccessTimeUtc = stat.AccessTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
|
||||
AaruLogging.WriteLine(UI.Written_0_bytes_of_xattr_1_from_file_2_to_3,
|
||||
xattrBuf.Length,
|
||||
xattr,
|
||||
@@ -618,34 +613,34 @@ sealed class ExtractFilesCommand : Command<ExtractFilesCommand.Settings>
|
||||
outputFile.Close();
|
||||
|
||||
var fi = new FileInfo(outputPath);
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
|
||||
try
|
||||
{
|
||||
if(stat.CreationTimeUtc.HasValue) fi.CreationTimeUtc = stat.CreationTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if(stat.LastWriteTimeUtc.HasValue) fi.LastWriteTimeUtc = stat.LastWriteTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if(stat.AccessTimeUtc.HasValue) fi.LastAccessTimeUtc = stat.AccessTimeUtc.Value;
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
|
||||
AaruLogging.WriteLine(UI.Written_0_bytes_of_file_1_to_2,
|
||||
position,
|
||||
Markup.Escape(entry),
|
||||
|
||||
@@ -43,6 +43,7 @@ using Aaru.Core;
|
||||
using Aaru.Helpers;
|
||||
using Aaru.Localization;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using Spectre.Console;
|
||||
using Spectre.Console.Cli;
|
||||
using ImageInfo = Aaru.CommonTypes.Structs.ImageInfo;
|
||||
@@ -116,9 +117,7 @@ sealed class CompareCommand : Command<CompareCommand.Settings>
|
||||
}
|
||||
|
||||
if(settings.Verbose)
|
||||
{
|
||||
AaruLogging.Verbose(UI.First_input_file_format_identified_by_0_1, input1Format.Name, input1Format.Id);
|
||||
}
|
||||
else
|
||||
AaruLogging.WriteLine(UI.First_input_file_format_identified_by_0, input1Format.Name);
|
||||
|
||||
@@ -130,9 +129,7 @@ sealed class CompareCommand : Command<CompareCommand.Settings>
|
||||
}
|
||||
|
||||
if(settings.Verbose)
|
||||
{
|
||||
AaruLogging.Verbose(UI.Second_input_file_format_identified_by_0_1, input2Format.Name, input2Format.Id);
|
||||
}
|
||||
else
|
||||
AaruLogging.WriteLine(UI.Second_input_file_format_identified_by_0, input2Format.Name);
|
||||
|
||||
@@ -473,12 +470,10 @@ sealed class CompareCommand : Command<CompareCommand.Settings>
|
||||
AppendFormat("Sector {0} has different sizes ({1} bytes in image 1, {2} in image 2) but are otherwise identical",
|
||||
sector, image1Sector.LongLength, image2Sector.LongLength).AppendLine();*/
|
||||
}
|
||||
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
// ignored
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@ using Aaru.Core.Logging;
|
||||
using Aaru.Localization;
|
||||
using Aaru.Logging;
|
||||
using Schemas;
|
||||
using Sentry;
|
||||
using Spectre.Console;
|
||||
using Spectre.Console.Cli;
|
||||
using Dump = Aaru.Core.Devices.Dumping.Dump;
|
||||
@@ -344,8 +345,9 @@ sealed class DumpMediaCommand : Command<DumpMediaCommand.Settings>
|
||||
sr.Close();
|
||||
}
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
AaruLogging.Error(UI.Incorrect_resume_file_not_continuing);
|
||||
|
||||
if(isResponse) continue;
|
||||
@@ -384,8 +386,9 @@ sealed class DumpMediaCommand : Command<DumpMediaCommand.Settings>
|
||||
|
||||
fs.Close();
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
AaruLogging.Error(UI.Incorrect_metadata_sidecar_file_not_continuing);
|
||||
|
||||
if(isResponse) continue;
|
||||
@@ -422,8 +425,9 @@ sealed class DumpMediaCommand : Command<DumpMediaCommand.Settings>
|
||||
|
||||
sr.Close();
|
||||
}
|
||||
catch
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
AaruLogging.Error(UI.Incorrect_metadata_sidecar_file_not_continuing);
|
||||
|
||||
if(isResponse) continue;
|
||||
|
||||
@@ -37,6 +37,7 @@ using System.ComponentModel;
|
||||
using Aaru.CommonTypes.Enums;
|
||||
using Aaru.Core;
|
||||
using Aaru.Logging;
|
||||
using Sentry;
|
||||
using Spectre.Console;
|
||||
using Spectre.Console.Cli;
|
||||
using Remote = Aaru.Devices.Remote.Remote;
|
||||
@@ -87,8 +88,9 @@ sealed class RemoteCommand : Command<RemoteCommand.Settings>
|
||||
AnsiConsole.Write(table);
|
||||
remote.Disconnect();
|
||||
}
|
||||
catch(Exception)
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
AaruLogging.Error("Error connecting to host.");
|
||||
|
||||
return (int)ErrorNumber.CannotOpenDevice;
|
||||
|
||||
@@ -35,12 +35,25 @@ public class LoggingInterceptor : ICommandInterceptor
|
||||
.Enrich.FromLogContext()
|
||||
.WriteTo.Logger(lc => lc.Filter
|
||||
.ByIncludingOnly(e =>
|
||||
e.Level is LogEventLevel
|
||||
.Debug
|
||||
e.Level is LogEventLevel.Debug
|
||||
or LogEventLevel.Verbose
|
||||
or LogEventLevel.Error)
|
||||
.WriteTo
|
||||
.Spectre(renderTextAsMarkup: true));
|
||||
.WriteTo.Spectre(renderTextAsMarkup: true)
|
||||
.WriteTo.Sentry(o =>
|
||||
{
|
||||
o.Dsn =
|
||||
"https://153a04fb97b78bb57a8013b8b30db04f@sentry.claunia.com/8";
|
||||
|
||||
// What to record as Sentry Breadcrumbs
|
||||
o.MinimumBreadcrumbLevel =
|
||||
LogEventLevel.Debug;
|
||||
|
||||
// What to send to Sentry as Events
|
||||
o.MinimumEventLevel = LogEventLevel.Error;
|
||||
|
||||
// If you already call SentrySdk.Init elsewhere:
|
||||
// o.InitializeSdk = false;
|
||||
}));
|
||||
|
||||
// If logfile is present, add file sink and redirect Spectre.Console output
|
||||
if(!string.IsNullOrWhiteSpace(global.LogFile))
|
||||
|
||||
556
Aaru/Main.cs
556
Aaru/Main.cs
@@ -52,6 +52,7 @@ using Aaru.Logging;
|
||||
using Aaru.Settings;
|
||||
using JetBrains.Annotations;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Sentry;
|
||||
using Serilog;
|
||||
using Spectre.Console;
|
||||
using Spectre.Console.Cli;
|
||||
@@ -68,11 +69,6 @@ class MainClass
|
||||
|
||||
public static async Task<int> Main([NotNull] string[] args)
|
||||
{
|
||||
IAnsiConsole stderrConsole = AnsiConsole.Create(new AnsiConsoleSettings
|
||||
{
|
||||
Out = new AnsiConsoleOutput(Console.Error)
|
||||
});
|
||||
|
||||
object[] attributes = typeof(MainClass).Assembly.GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
|
||||
_assemblyTitle = ((AssemblyTitleAttribute)attributes[0]).Title;
|
||||
attributes = typeof(MainClass).Assembly.GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
|
||||
@@ -86,334 +82,374 @@ class MainClass
|
||||
if(args.Length == 1 && args[0].Equals("gui", StringComparison.InvariantCultureIgnoreCase))
|
||||
return Gui.Main.Start(args);
|
||||
|
||||
AaruLogging.WriteLineEvent += (format, objects) =>
|
||||
SentrySdk.Init(options =>
|
||||
{
|
||||
if(objects is null)
|
||||
AnsiConsole.MarkupLine(format);
|
||||
else
|
||||
AnsiConsole.MarkupLine(format, objects);
|
||||
// A Sentry Data Source Name (DSN) is required.
|
||||
// See https://docs.sentry.io/product/sentry-basics/dsn-explainer/
|
||||
// You can set it in the SENTRY_DSN environment variable, or you can set it in code here.
|
||||
options.Dsn = "https://153a04fb97b78bb57a8013b8b30db04f@sentry.claunia.com/8";
|
||||
|
||||
// Format the string so we can remove the markup
|
||||
if(format is null) return;
|
||||
// When debug is enabled, the Sentry client will emit detailed debugging information to the console.
|
||||
// This might be helpful, or might interfere with the normal operation of your application.
|
||||
// We enable it here for demonstration purposes when first trying Sentry.
|
||||
// You shouldn't do this in your applications unless you're troubleshooting issues with Sentry.
|
||||
//options.Debug = true;
|
||||
|
||||
string formatted = objects is null ? format : string.Format(format, objects);
|
||||
formatted = Markup.Remove(formatted);
|
||||
Log.Information(formatted);
|
||||
};
|
||||
// This option is recommended. It enables Sentry's "Release Health" feature.
|
||||
options.AutoSessionTracking = true;
|
||||
|
||||
AaruLogging.WriteEvent += (format, objects) =>
|
||||
{
|
||||
if(objects is null)
|
||||
AnsiConsole.Markup(format);
|
||||
else
|
||||
AnsiConsole.Markup(format, objects);
|
||||
// Set TracesSampleRate to 1.0 to capture 100%
|
||||
// of transactions for tracing.
|
||||
// We recommend adjusting this value in production.
|
||||
options.TracesSampleRate = 1.0;
|
||||
|
||||
// Format the string so we can remove the markup
|
||||
if(format is null) return;
|
||||
|
||||
string formatted = objects is null ? format : string.Format(format, objects);
|
||||
formatted = Markup.Remove(formatted);
|
||||
Log.Information(formatted);
|
||||
};
|
||||
|
||||
AaruLogging.ErrorEvent += Log.Error;
|
||||
AaruLogging.VerboseEvent += Log.Verbose;
|
||||
AaruLogging.DebugEvent += (module, format, objects) => Log.Debug($"[blue]{module}[/] {format}", objects);
|
||||
AaruLogging.WriteExceptionEvent += Log.Error;
|
||||
AaruLogging.InformationEvent += Log.Information;
|
||||
|
||||
Settings.Settings.LoadSettings();
|
||||
|
||||
AaruContext ctx = null;
|
||||
options.IsGlobalModeEnabled = true;
|
||||
});
|
||||
|
||||
try
|
||||
{
|
||||
ctx = AaruContext.Create(Settings.Settings.LocalDbPath, false);
|
||||
await ctx.Database.MigrateAsync();
|
||||
}
|
||||
catch(NotSupportedException)
|
||||
{
|
||||
AaruLogging.WriteLineEvent += (format, objects) =>
|
||||
{
|
||||
if(objects is null)
|
||||
AnsiConsole.MarkupLine(format);
|
||||
else
|
||||
AnsiConsole.MarkupLine(format, objects);
|
||||
|
||||
// Format the string so we can remove the markup
|
||||
if(format is null) return;
|
||||
|
||||
string formatted = objects is null ? format : string.Format(format, objects);
|
||||
formatted = Markup.Remove(formatted);
|
||||
Log.Information(formatted);
|
||||
};
|
||||
|
||||
AaruLogging.WriteEvent += (format, objects) =>
|
||||
{
|
||||
if(objects is null)
|
||||
AnsiConsole.Markup(format);
|
||||
else
|
||||
AnsiConsole.Markup(format, objects);
|
||||
|
||||
// Format the string so we can remove the markup
|
||||
if(format is null) return;
|
||||
|
||||
string formatted = objects is null ? format : string.Format(format, objects);
|
||||
formatted = Markup.Remove(formatted);
|
||||
Log.Information(formatted);
|
||||
};
|
||||
|
||||
AaruLogging.ErrorEvent += Log.Error;
|
||||
AaruLogging.VerboseEvent += Log.Verbose;
|
||||
AaruLogging.DebugEvent += (module, format, objects) => Log.Debug($"[blue]{module}[/] {format}", objects);
|
||||
AaruLogging.WriteExceptionEvent += Log.Error;
|
||||
AaruLogging.InformationEvent += Log.Information;
|
||||
|
||||
Settings.Settings.LoadSettings();
|
||||
|
||||
AaruContext ctx = null;
|
||||
|
||||
try
|
||||
{
|
||||
if(ctx is not null)
|
||||
ctx = AaruContext.Create(Settings.Settings.LocalDbPath, false);
|
||||
await ctx.Database.MigrateAsync();
|
||||
}
|
||||
catch(NotSupportedException)
|
||||
{
|
||||
try
|
||||
{
|
||||
await ctx.Database.CloseConnectionAsync();
|
||||
await ctx.DisposeAsync();
|
||||
if(ctx is not null)
|
||||
{
|
||||
await ctx.Database.CloseConnectionAsync();
|
||||
await ctx.DisposeAsync();
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
// Should not ever arrive here, but if it does, keep trying to replace it anyway
|
||||
SentrySdk.CaptureException(ex);
|
||||
}
|
||||
}
|
||||
catch(Exception)
|
||||
{
|
||||
// Should not ever arrive here, but if it does, keep trying to replace it anyway
|
||||
}
|
||||
|
||||
File.Delete(Settings.Settings.LocalDbPath);
|
||||
ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
|
||||
await ctx.Database.EnsureCreatedAsync();
|
||||
File.Delete(Settings.Settings.LocalDbPath);
|
||||
ctx = AaruContext.Create(Settings.Settings.LocalDbPath);
|
||||
await ctx.Database.EnsureCreatedAsync();
|
||||
|
||||
await ctx.Database
|
||||
.ExecuteSqlRawAsync("CREATE TABLE IF NOT EXISTS \"__EFMigrationsHistory\" (\"MigrationId\" TEXT PRIMARY KEY, \"ProductVersion\" TEXT)");
|
||||
|
||||
foreach(string migration in await ctx.Database.GetPendingMigrationsAsync())
|
||||
{
|
||||
#pragma warning disable EF1002
|
||||
await ctx.Database
|
||||
.ExecuteSqlRawAsync($"INSERT INTO \"__EFMigrationsHistory\" (MigrationId, ProductVersion) VALUES ('{
|
||||
migration}', '0.0.0')");
|
||||
.ExecuteSqlRawAsync("CREATE TABLE IF NOT EXISTS \"__EFMigrationsHistory\" (\"MigrationId\" TEXT PRIMARY KEY, \"ProductVersion\" TEXT)");
|
||||
|
||||
foreach(string migration in await ctx.Database.GetPendingMigrationsAsync())
|
||||
{
|
||||
#pragma warning disable EF1002
|
||||
await ctx.Database
|
||||
.ExecuteSqlRawAsync($"INSERT INTO \"__EFMigrationsHistory\" (MigrationId, ProductVersion) VALUES ('{
|
||||
migration}', '0.0.0')");
|
||||
#pragma warning restore EF1002
|
||||
}
|
||||
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
|
||||
// Remove duplicates
|
||||
foreach(var duplicate in ctx.SeenDevices.AsEnumerable()
|
||||
.GroupBy(a => new
|
||||
{
|
||||
a.Manufacturer,
|
||||
a.Model,
|
||||
a.Revision,
|
||||
a.Bus
|
||||
})
|
||||
.Where(a => a.Count() > 1)
|
||||
.Distinct()
|
||||
.Select(a => a.Key))
|
||||
{
|
||||
ctx.RemoveRange(ctx.SeenDevices
|
||||
.Where(d => d.Manufacturer == duplicate.Manufacturer &&
|
||||
d.Model == duplicate.Model &&
|
||||
d.Revision == duplicate.Revision &&
|
||||
d.Bus == duplicate.Bus)
|
||||
.Skip(1));
|
||||
}
|
||||
|
||||
// Remove nulls
|
||||
ctx.RemoveRange(ctx.SeenDevices.Where(d => d.Manufacturer == null &&
|
||||
d.Model == null &&
|
||||
d.Revision == null));
|
||||
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
|
||||
// Remove duplicates
|
||||
foreach(var duplicate in ctx.SeenDevices.AsEnumerable()
|
||||
.GroupBy(a => new
|
||||
{
|
||||
a.Manufacturer,
|
||||
a.Model,
|
||||
a.Revision,
|
||||
a.Bus
|
||||
})
|
||||
.Where(a => a.Count() > 1)
|
||||
.Distinct()
|
||||
.Select(a => a.Key))
|
||||
{
|
||||
ctx.RemoveRange(ctx.SeenDevices
|
||||
.Where(d => d.Manufacturer == duplicate.Manufacturer &&
|
||||
d.Model == duplicate.Model &&
|
||||
d.Revision == duplicate.Revision &&
|
||||
d.Bus == duplicate.Bus)
|
||||
.Skip(1));
|
||||
}
|
||||
bool mainDbUpdate = false;
|
||||
|
||||
// Remove nulls
|
||||
ctx.RemoveRange(ctx.SeenDevices.Where(d => d.Manufacturer == null && d.Model == null && d.Revision == null));
|
||||
|
||||
await ctx.SaveChangesAsync();
|
||||
|
||||
bool mainDbUpdate = false;
|
||||
|
||||
if(!File.Exists(Settings.Settings.MainDbPath))
|
||||
{
|
||||
mainDbUpdate = true;
|
||||
await UpdateCommand.DoUpdateAsync(true);
|
||||
}
|
||||
|
||||
var mainContext = AaruContext.Create(Settings.Settings.MainDbPath, false);
|
||||
|
||||
if((await mainContext.Database.GetPendingMigrationsAsync()).Any())
|
||||
{
|
||||
AaruLogging.WriteLine(UI.New_database_version_updating);
|
||||
|
||||
try
|
||||
if(!File.Exists(Settings.Settings.MainDbPath))
|
||||
{
|
||||
File.Delete(Settings.Settings.MainDbPath);
|
||||
}
|
||||
catch(Exception)
|
||||
{
|
||||
AaruLogging.Error(UI.Exception_trying_to_remove_old_database_version);
|
||||
AaruLogging.Error(UI.Please_manually_remove_file_at_0, Settings.Settings.MainDbPath);
|
||||
|
||||
return (int)ErrorNumber.CannotRemoveDatabase;
|
||||
mainDbUpdate = true;
|
||||
await UpdateCommand.DoUpdateAsync(true);
|
||||
}
|
||||
|
||||
await mainContext.Database.CloseConnectionAsync();
|
||||
await mainContext.DisposeAsync();
|
||||
await UpdateCommand.DoUpdateAsync(true);
|
||||
}
|
||||
var mainContext = AaruContext.Create(Settings.Settings.MainDbPath, false);
|
||||
|
||||
// GDPR level compliance does not match and there are no arguments or the arguments are neither GUI neither configure.
|
||||
if(Settings.Settings.Current.GdprCompliance < DicSettings.GDPR_LEVEL &&
|
||||
(args.Length < 1 ||
|
||||
args.Length >= 1 &&
|
||||
!args[0].Equals("gui", StringComparison.InvariantCultureIgnoreCase) &&
|
||||
!args[0].Equals("configure", StringComparison.InvariantCultureIgnoreCase)))
|
||||
new ConfigureCommand().DoConfigure(true);
|
||||
if((await mainContext.Database.GetPendingMigrationsAsync()).Any())
|
||||
{
|
||||
AaruLogging.WriteLine(UI.New_database_version_updating);
|
||||
|
||||
Statistics.LoadStats();
|
||||
try
|
||||
{
|
||||
File.Delete(Settings.Settings.MainDbPath);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
AaruLogging.Error(UI.Exception_trying_to_remove_old_database_version);
|
||||
AaruLogging.Error(UI.Please_manually_remove_file_at_0, Settings.Settings.MainDbPath);
|
||||
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
return (int)ErrorNumber.CannotRemoveDatabase;
|
||||
}
|
||||
|
||||
// There are too many places that depend on this being inited to be sure all are covered, so init it here.
|
||||
PluginBase.Init();
|
||||
await mainContext.Database.CloseConnectionAsync();
|
||||
await mainContext.DisposeAsync();
|
||||
await UpdateCommand.DoUpdateAsync(true);
|
||||
}
|
||||
|
||||
var app = new CommandApp();
|
||||
// GDPR level compliance does not match and there are no arguments or the arguments are neither GUI neither configure.
|
||||
if(Settings.Settings.Current.GdprCompliance < DicSettings.GDPR_LEVEL &&
|
||||
(args.Length < 1 ||
|
||||
args.Length >= 1 &&
|
||||
!args[0].Equals("gui", StringComparison.InvariantCultureIgnoreCase) &&
|
||||
!args[0].Equals("configure", StringComparison.InvariantCultureIgnoreCase)))
|
||||
new ConfigureCommand().DoConfigure(true);
|
||||
|
||||
app.Configure(config =>
|
||||
{
|
||||
config.UseAssemblyInformationalVersion();
|
||||
Statistics.LoadStats();
|
||||
|
||||
config.AddBranch<ArchiveFamily>("archive",
|
||||
archive =>
|
||||
{
|
||||
archive.SetDescription(UI.Archive_Command_Family_Description);
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
|
||||
archive.AddCommand<ArchiveListCommand>("list")
|
||||
.WithAlias("l")
|
||||
.WithAlias("ls")
|
||||
.WithDescription(UI.Archive_List_Command_Description);
|
||||
// There are too many places that depend on this being inited to be sure all are covered, so init it here.
|
||||
PluginBase.Init();
|
||||
|
||||
archive.AddCommand<ArchiveExtractCommand>("extract")
|
||||
.WithAlias("x")
|
||||
.WithDescription(UI.Archive_Extract_Command_Description);
|
||||
var app = new CommandApp();
|
||||
|
||||
archive.AddCommand<ArchiveInfoCommand>("info")
|
||||
.WithAlias("i")
|
||||
.WithDescription(UI.Archive_Info_Command_Description);
|
||||
})
|
||||
.WithAlias("arc");
|
||||
app.Configure(config =>
|
||||
{
|
||||
config.UseAssemblyInformationalVersion();
|
||||
|
||||
config.AddBranch<DeviceFamily>("device",
|
||||
device =>
|
||||
{
|
||||
device.SetDescription(UI.Device_Command_Family_Description);
|
||||
config.AddBranch<ArchiveFamily>("archive",
|
||||
archive =>
|
||||
{
|
||||
archive.SetDescription(UI.Archive_Command_Family_Description);
|
||||
|
||||
device.AddCommand<DeviceReportCommand>("report")
|
||||
.WithDescription(UI.Device_Report_Command_Description);
|
||||
archive.AddCommand<ArchiveListCommand>("list")
|
||||
.WithAlias("l")
|
||||
.WithAlias("ls")
|
||||
.WithDescription(UI.Archive_List_Command_Description);
|
||||
|
||||
device.AddCommand<DeviceInfoCommand>("info")
|
||||
.WithAlias("i")
|
||||
.WithDescription(UI.Device_Info_Command_Description);
|
||||
archive.AddCommand<ArchiveExtractCommand>("extract")
|
||||
.WithAlias("x")
|
||||
.WithDescription(UI.Archive_Extract_Command_Description);
|
||||
|
||||
device.AddCommand<ListDevicesCommand>("list")
|
||||
.WithAlias("l")
|
||||
.WithAlias("ls")
|
||||
.WithDescription(UI.Device_List_Command_Description);
|
||||
})
|
||||
.WithAlias("dev");
|
||||
archive.AddCommand<ArchiveInfoCommand>("info")
|
||||
.WithAlias("i")
|
||||
.WithDescription(UI.Archive_Info_Command_Description);
|
||||
})
|
||||
.WithAlias("arc");
|
||||
|
||||
config.AddBranch<FilesystemFamily>("filesystem",
|
||||
fs =>
|
||||
config.AddBranch<DeviceFamily>("device",
|
||||
device =>
|
||||
{
|
||||
fs.SetDescription(UI.Filesystem_Command_Family_Description);
|
||||
device.SetDescription(UI.Device_Command_Family_Description);
|
||||
|
||||
fs.AddCommand<ExtractFilesCommand>("extract")
|
||||
.WithAlias("x")
|
||||
.WithDescription(UI.Filesystem_Extract_Command_Description);
|
||||
device.AddCommand<DeviceReportCommand>("report")
|
||||
.WithDescription(UI.Device_Report_Command_Description);
|
||||
|
||||
fs.AddCommand<FilesystemInfoCommand>("info")
|
||||
.WithAlias("i")
|
||||
.WithDescription(UI.Filesystem_Info_Command_Description);
|
||||
device.AddCommand<DeviceInfoCommand>("info")
|
||||
.WithAlias("i")
|
||||
.WithDescription(UI.Device_Info_Command_Description);
|
||||
|
||||
fs.AddCommand<LsCommand>("list")
|
||||
.WithAlias("ls")
|
||||
.WithDescription(UI.Filesystem_List_Command_Description);
|
||||
|
||||
fs.AddCommand<ListOptionsCommand>("options")
|
||||
.WithDescription(UI.Filesystem_Options_Command_Description);
|
||||
device.AddCommand<ListDevicesCommand>("list")
|
||||
.WithAlias("l")
|
||||
.WithAlias("ls")
|
||||
.WithDescription(UI.Device_List_Command_Description);
|
||||
})
|
||||
.WithAlias("fs")
|
||||
.WithAlias("fi");
|
||||
.WithAlias("dev");
|
||||
|
||||
config.AddBranch<ImageFamily>("image",
|
||||
image =>
|
||||
{
|
||||
image.SetDescription(UI.Image_Command_Family_Description);
|
||||
config.AddBranch<FilesystemFamily>("filesystem",
|
||||
fs =>
|
||||
{
|
||||
fs.SetDescription(UI.Filesystem_Command_Family_Description);
|
||||
|
||||
image.AddCommand<ChecksumCommand>("checksum")
|
||||
.WithAlias("chk")
|
||||
.WithDescription(UI.Image_Checksum_Command_Description);
|
||||
fs.AddCommand<ExtractFilesCommand>("extract")
|
||||
.WithAlias("x")
|
||||
.WithDescription(UI.Filesystem_Extract_Command_Description);
|
||||
|
||||
image.AddCommand<CompareCommand>("compare")
|
||||
.WithAlias("cmp")
|
||||
.WithDescription(UI.Image_Compare_Command_Description);
|
||||
fs.AddCommand<FilesystemInfoCommand>("info")
|
||||
.WithAlias("i")
|
||||
.WithDescription(UI.Filesystem_Info_Command_Description);
|
||||
|
||||
image.AddCommand<ConvertImageCommand>("convert")
|
||||
.WithAlias("cvt")
|
||||
.WithDescription(UI.Image_Convert_Command_Description);
|
||||
fs.AddCommand<LsCommand>("list")
|
||||
.WithAlias("ls")
|
||||
.WithDescription(UI.Filesystem_List_Command_Description);
|
||||
|
||||
image.AddCommand<CreateSidecarCommand>("create-sidecar")
|
||||
.WithAlias("cs")
|
||||
.WithDescription(UI.Image_Create_Sidecar_Command_Description);
|
||||
fs.AddCommand<ListOptionsCommand>("options")
|
||||
.WithDescription(UI.Filesystem_Options_Command_Description);
|
||||
})
|
||||
.WithAlias("fs")
|
||||
.WithAlias("fi");
|
||||
|
||||
image.AddCommand<DecodeCommand>("decode")
|
||||
.WithDescription(UI.Image_Decode_Command_Description);
|
||||
config.AddBranch<ImageFamily>("image",
|
||||
image =>
|
||||
{
|
||||
image.SetDescription(UI.Image_Command_Family_Description);
|
||||
|
||||
image.AddCommand<EntropyCommand>("entropy")
|
||||
.WithDescription(UI.Image_Entropy_Command_Description);
|
||||
image.AddCommand<ChecksumCommand>("checksum")
|
||||
.WithAlias("chk")
|
||||
.WithDescription(UI.Image_Checksum_Command_Description);
|
||||
|
||||
image.AddCommand<ImageInfoCommand>("info")
|
||||
.WithAlias("i")
|
||||
.WithDescription(UI.Image_Info_Command_Description);
|
||||
image.AddCommand<CompareCommand>("compare")
|
||||
.WithAlias("cmp")
|
||||
.WithDescription(UI.Image_Compare_Command_Description);
|
||||
|
||||
image.AddCommand<Commands.Image.ListOptionsCommand>("options")
|
||||
.WithDescription(UI.Image_Options_Command_Description);
|
||||
image.AddCommand<ConvertImageCommand>("convert")
|
||||
.WithAlias("cvt")
|
||||
.WithDescription(UI.Image_Convert_Command_Description);
|
||||
|
||||
image.AddCommand<PrintHexCommand>("print-hex")
|
||||
.WithAlias("ph")
|
||||
.WithDescription(UI.Image_Print_Command_Description);
|
||||
image.AddCommand<CreateSidecarCommand>("create-sidecar")
|
||||
.WithAlias("cs")
|
||||
.WithDescription(UI.Image_Create_Sidecar_Command_Description);
|
||||
|
||||
image.AddCommand<VerifyCommand>("verify")
|
||||
.WithAlias("v")
|
||||
.WithDescription(UI.Image_Verify_Command_Description);
|
||||
})
|
||||
.WithAlias("i")
|
||||
.WithAlias("img");
|
||||
image.AddCommand<DecodeCommand>("decode")
|
||||
.WithDescription(UI.Image_Decode_Command_Description);
|
||||
|
||||
config.AddBranch<MediaFamily>("media",
|
||||
media =>
|
||||
{
|
||||
media.SetDescription(UI.Media_Command_Family_Description);
|
||||
image.AddCommand<EntropyCommand>("entropy")
|
||||
.WithDescription(UI.Image_Entropy_Command_Description);
|
||||
|
||||
media.AddCommand<MediaInfoCommand>("info")
|
||||
.WithAlias("i")
|
||||
.WithDescription(UI.Media_Info_Command_Description);
|
||||
image.AddCommand<ImageInfoCommand>("info")
|
||||
.WithAlias("i")
|
||||
.WithDescription(UI.Image_Info_Command_Description);
|
||||
|
||||
media.AddCommand<MediaScanCommand>("scan")
|
||||
.WithAlias("s")
|
||||
.WithDescription(UI.Media_Scan_Command_Description);
|
||||
image.AddCommand<Commands.Image.ListOptionsCommand>("options")
|
||||
.WithDescription(UI.Image_Options_Command_Description);
|
||||
|
||||
media.AddCommand<DumpMediaCommand>("dump")
|
||||
.WithAlias("d")
|
||||
.WithDescription(UI.Media_Dump_Command_Description);
|
||||
})
|
||||
.WithAlias("m");
|
||||
image.AddCommand<PrintHexCommand>("print-hex")
|
||||
.WithAlias("ph")
|
||||
.WithDescription(UI.Image_Print_Command_Description);
|
||||
|
||||
config.AddBranch<DatabaseFamily>("database",
|
||||
db =>
|
||||
{
|
||||
db.SetDescription(UI.Database_Command_Family_Description);
|
||||
image.AddCommand<VerifyCommand>("verify")
|
||||
.WithAlias("v")
|
||||
.WithDescription(UI.Image_Verify_Command_Description);
|
||||
})
|
||||
.WithAlias("i")
|
||||
.WithAlias("img");
|
||||
|
||||
db.AddCommand<StatisticsCommand>("stats")
|
||||
.WithDescription(UI.Database_Stats_Command_Description);
|
||||
config.AddBranch<MediaFamily>("media",
|
||||
media =>
|
||||
{
|
||||
media.SetDescription(UI.Media_Command_Family_Description);
|
||||
|
||||
db.AddCommand<UpdateCommand>("update")
|
||||
.WithDescription(UI.Database_Update_Command_Description);
|
||||
})
|
||||
.WithAlias("db");
|
||||
media.AddCommand<MediaInfoCommand>("info")
|
||||
.WithAlias("i")
|
||||
.WithDescription(UI.Media_Info_Command_Description);
|
||||
|
||||
config.AddCommand<ConfigureCommand>("configure")
|
||||
.WithAlias("cfg")
|
||||
.WithDescription(UI.Configure_Command_Description);
|
||||
media.AddCommand<MediaScanCommand>("scan")
|
||||
.WithAlias("s")
|
||||
.WithDescription(UI.Media_Scan_Command_Description);
|
||||
|
||||
config.AddCommand<FormatsCommand>("formats")
|
||||
.WithAlias("fmt")
|
||||
.WithDescription(UI.List_Formats_Command_Description);
|
||||
media.AddCommand<DumpMediaCommand>("dump")
|
||||
.WithAlias("d")
|
||||
.WithDescription(UI.Media_Dump_Command_Description);
|
||||
})
|
||||
.WithAlias("m");
|
||||
|
||||
config.AddCommand<ListEncodingsCommand>("list-encodings")
|
||||
.WithAlias("le")
|
||||
.WithDescription(UI.List_Encodings_Command_Description);
|
||||
config.AddBranch<DatabaseFamily>("database",
|
||||
db =>
|
||||
{
|
||||
db.SetDescription(UI.Database_Command_Family_Description);
|
||||
|
||||
config.AddCommand<ListNamespacesCommand>("list-namespaces")
|
||||
.WithAlias("ln")
|
||||
.WithDescription(UI.List_Namespaces_Command_Description);
|
||||
db.AddCommand<StatisticsCommand>("stats")
|
||||
.WithDescription(UI.Database_Stats_Command_Description);
|
||||
|
||||
config.AddCommand<RemoteCommand>("remote").WithAlias("rem").WithDescription(UI.Remote_Command_Description);
|
||||
db.AddCommand<UpdateCommand>("update")
|
||||
.WithDescription(UI.Database_Update_Command_Description);
|
||||
})
|
||||
.WithAlias("db");
|
||||
|
||||
config.SetInterceptor(new LoggingInterceptor());
|
||||
config.SetInterceptor(new PausingInterceptor());
|
||||
});
|
||||
config.AddCommand<ConfigureCommand>("configure")
|
||||
.WithAlias("cfg")
|
||||
.WithDescription(UI.Configure_Command_Description);
|
||||
|
||||
int ret = await app.RunAsync(args);
|
||||
config.AddCommand<FormatsCommand>("formats")
|
||||
.WithAlias("fmt")
|
||||
.WithDescription(UI.List_Formats_Command_Description);
|
||||
|
||||
await Statistics.SaveStatsAsync();
|
||||
config.AddCommand<ListEncodingsCommand>("list-encodings")
|
||||
.WithAlias("le")
|
||||
.WithDescription(UI.List_Encodings_Command_Description);
|
||||
|
||||
if(!PauseBeforeExiting) return ret;
|
||||
config.AddCommand<ListNamespacesCommand>("list-namespaces")
|
||||
.WithAlias("ln")
|
||||
.WithDescription(UI.List_Namespaces_Command_Description);
|
||||
|
||||
AaruLogging.WriteLine(UI.Press_any_key_to_exit);
|
||||
Console.ReadKey();
|
||||
config.AddCommand<RemoteCommand>("remote")
|
||||
.WithAlias("rem")
|
||||
.WithDescription(UI.Remote_Command_Description);
|
||||
|
||||
return ret;
|
||||
config.SetInterceptor(new LoggingInterceptor());
|
||||
config.SetInterceptor(new PausingInterceptor());
|
||||
});
|
||||
|
||||
int ret = await app.RunAsync(args);
|
||||
|
||||
await Statistics.SaveStatsAsync();
|
||||
|
||||
if(!PauseBeforeExiting) return ret;
|
||||
|
||||
AaruLogging.WriteLine(UI.Press_any_key_to_exit);
|
||||
Console.ReadKey();
|
||||
|
||||
return ret;
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
SentrySdk.CaptureException(ex);
|
||||
AnsiConsole.WriteException(ex);
|
||||
|
||||
return (int)ErrorNumber.UnexpectedException;
|
||||
}
|
||||
}
|
||||
|
||||
internal static void PrintCopyright()
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
<PackageVersion Include="Roslynator.Analyzers" Version="4.14.0"/>
|
||||
<PackageVersion Include="Roslynator.CodeAnalysis.Analyzers" Version="4.14.0"/>
|
||||
<PackageVersion Include="Roslynator.Formatting.Analyzers" Version="4.14.0"/>
|
||||
<PackageVersion Include="Sentry" Version="5.14.1"/>
|
||||
<PackageVersion Include="Sentry.Serilog" Version="5.14.1"/>
|
||||
<PackageVersion Include="Serilog" Version="4.3.0"/>
|
||||
<PackageVersion Include="Serilog.Sinks.File" Version="7.0.0"/>
|
||||
<PackageVersion Include="Serilog.Sinks.Spectre" Version="0.5.0"/>
|
||||
|
||||
Reference in New Issue
Block a user