mirror of
https://github.com/SabreTools/MPF.git
synced 2026-07-02 17:24:48 +00:00
Remove magic strings from settings reading
This commit is contained in:
@@ -157,6 +157,7 @@
|
||||
- Combine remaining Core into Frontend
|
||||
- Remove Core library, fix build
|
||||
- Create Frontend.Tools namespace
|
||||
- Remove magic strings from settings reading
|
||||
|
||||
### 3.1.9a (2024-05-21)
|
||||
|
||||
|
||||
@@ -1208,7 +1208,7 @@ namespace MPF.ExecutionContexts.Aaru
|
||||
return;
|
||||
|
||||
// Set retry count
|
||||
int rereadCount = GetInt32Setting(options, "AaruRereadCount", 5);
|
||||
int rereadCount = GetInt32Setting(options, SettingConstants.RereadCount, 5);
|
||||
if (rereadCount > 0)
|
||||
{
|
||||
this[FlagStrings.RetryPassesLong] = true;
|
||||
@@ -1216,13 +1216,13 @@ namespace MPF.ExecutionContexts.Aaru
|
||||
}
|
||||
|
||||
// Set user-defined options
|
||||
if (GetBooleanSetting(options, "AaruEnableDebug", false))
|
||||
if (GetBooleanSetting(options, SettingConstants.EnableDebug, false))
|
||||
this[FlagStrings.DebugLong] = true;
|
||||
if (GetBooleanSetting(options, "AaruEnableVerbose", false))
|
||||
if (GetBooleanSetting(options, SettingConstants.EnableVerbose, false))
|
||||
this[FlagStrings.VerboseLong] = true;
|
||||
if (GetBooleanSetting(options, "AaruForceDumping", true))
|
||||
if (GetBooleanSetting(options, SettingConstants.ForceDumping, true))
|
||||
this[FlagStrings.ForceLong] = true;
|
||||
if (GetBooleanSetting(options, "AaruStripPersonalData", false))
|
||||
if (GetBooleanSetting(options, SettingConstants.StripPersonalData, false))
|
||||
this[FlagStrings.PrivateLong] = true;
|
||||
|
||||
// TODO: Look at dump-media formats and the like and see what options there are there to fill in defaults
|
||||
|
||||
15
MPF.ExecutionContexts/Aaru/SettingConstants.cs
Normal file
15
MPF.ExecutionContexts/Aaru/SettingConstants.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
namespace MPF.ExecutionContexts.Aaru
|
||||
{
|
||||
public static class SettingConstants
|
||||
{
|
||||
public const string EnableDebug = "AaruEnableDebug";
|
||||
|
||||
public const string EnableVerbose = "AaruEnableVerbose";
|
||||
|
||||
public const string ForceDumping = "AaruForceDumping";
|
||||
|
||||
public const string RereadCount = "AaruRereadCount";
|
||||
|
||||
public const string StripPersonalData = "AaruStripPersonalData";
|
||||
}
|
||||
}
|
||||
@@ -957,11 +957,11 @@ namespace MPF.ExecutionContexts.DiscImageCreator
|
||||
return;
|
||||
|
||||
// Set disable beep flag, if needed
|
||||
if (GetBooleanSetting(options, "DICQuietMode", false))
|
||||
if (GetBooleanSetting(options, SettingConstants.QuietMode, false))
|
||||
this[FlagStrings.DisableBeep] = true;
|
||||
|
||||
// Set the C2 reread count
|
||||
int cdRereadCount = GetInt32Setting(options, "DICRereadCount", 20);
|
||||
int cdRereadCount = GetInt32Setting(options, SettingConstants.RereadCount, 20);
|
||||
C2OpcodeValue[0] = cdRereadCount switch
|
||||
{
|
||||
-1 => null,
|
||||
@@ -970,7 +970,7 @@ namespace MPF.ExecutionContexts.DiscImageCreator
|
||||
};
|
||||
|
||||
// Set the DVD/HD-DVD/BD reread count
|
||||
int dvdRereadCount = GetInt32Setting(options, "DICDVDRereadCount", 10);
|
||||
int dvdRereadCount = GetInt32Setting(options, SettingConstants.DVDRereadCount, 10);
|
||||
DVDRereadValue = dvdRereadCount switch
|
||||
{
|
||||
-1 => null,
|
||||
@@ -983,9 +983,9 @@ namespace MPF.ExecutionContexts.DiscImageCreator
|
||||
{
|
||||
case MediaType.CDROM:
|
||||
this[FlagStrings.C2Opcode] = true;
|
||||
this[FlagStrings.MultiSectorRead] = GetBooleanSetting(options, "DICMultiSectorRead", false);
|
||||
this[FlagStrings.MultiSectorRead] = GetBooleanSetting(options, SettingConstants.MultiSectorRead, false);
|
||||
if (this[FlagStrings.MultiSectorRead] == true)
|
||||
this.MultiSectorReadValue = GetInt32Setting(options, "DICMultiSectorReadValue", 0);
|
||||
this.MultiSectorReadValue = GetInt32Setting(options, SettingConstants.MultiSectorReadValue, 0);
|
||||
|
||||
switch (this.System)
|
||||
{
|
||||
@@ -993,8 +993,8 @@ namespace MPF.ExecutionContexts.DiscImageCreator
|
||||
case RedumpSystem.IBMPCcompatible:
|
||||
this[FlagStrings.NoFixSubQSecuROM] = true;
|
||||
this[FlagStrings.ScanFileProtect] = true;
|
||||
this[FlagStrings.ScanSectorProtect] = GetBooleanSetting(options, "DICParanoidMode", false);
|
||||
this[FlagStrings.SubchannelReadLevel] = GetBooleanSetting(options, "DICParanoidMode", false);
|
||||
this[FlagStrings.ScanSectorProtect] = GetBooleanSetting(options, SettingConstants.ParanoidMode, false);
|
||||
this[FlagStrings.SubchannelReadLevel] = GetBooleanSetting(options, SettingConstants.ParanoidMode, false);
|
||||
if (this[FlagStrings.SubchannelReadLevel] == true)
|
||||
SubchannelReadLevelValue = 2;
|
||||
|
||||
@@ -1016,15 +1016,15 @@ namespace MPF.ExecutionContexts.DiscImageCreator
|
||||
}
|
||||
break;
|
||||
case MediaType.DVD:
|
||||
this[FlagStrings.CopyrightManagementInformation] = GetBooleanSetting(options, "DICUseCMIFlag", false);
|
||||
this[FlagStrings.ScanFileProtect] = GetBooleanSetting(options, "DICParanoidMode", false);
|
||||
this[FlagStrings.CopyrightManagementInformation] = GetBooleanSetting(options, SettingConstants.UseCMIFlag, false);
|
||||
this[FlagStrings.ScanFileProtect] = GetBooleanSetting(options, SettingConstants.ParanoidMode, false);
|
||||
this[FlagStrings.DVDReread] = true;
|
||||
break;
|
||||
case MediaType.GDROM:
|
||||
this[FlagStrings.C2Opcode] = true;
|
||||
break;
|
||||
case MediaType.HDDVD:
|
||||
this[FlagStrings.CopyrightManagementInformation] = GetBooleanSetting(options, "DICUseCMIFlag", false);
|
||||
this[FlagStrings.CopyrightManagementInformation] = GetBooleanSetting(options, SettingConstants.UseCMIFlag, false);
|
||||
this[FlagStrings.DVDReread] = true;
|
||||
break;
|
||||
case MediaType.BluRay:
|
||||
|
||||
19
MPF.ExecutionContexts/DiscImageCreator/SettingConstants.cs
Normal file
19
MPF.ExecutionContexts/DiscImageCreator/SettingConstants.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
namespace MPF.ExecutionContexts.DiscImageCreator
|
||||
{
|
||||
public static class SettingConstants
|
||||
{
|
||||
public const string DVDRereadCount = "DICDVDRereadCount";
|
||||
|
||||
public const string MultiSectorRead = "DICMultiSectorRead";
|
||||
|
||||
public const string MultiSectorReadValue = "DICMultiSectorReadValue";
|
||||
|
||||
public const string ParanoidMode = "DICParanoidMode";
|
||||
|
||||
public const string QuietMode = "DICQuietMode";
|
||||
|
||||
public const string RereadCount = "DICRereadCount";
|
||||
|
||||
public const string UseCMIFlag = "DICUseCMIFlag";
|
||||
}
|
||||
}
|
||||
@@ -579,26 +579,26 @@ namespace MPF.ExecutionContexts.Redumper
|
||||
SpeedValue = driveSpeed;
|
||||
|
||||
// Set user-defined options
|
||||
if (GetBooleanSetting(options, "RedumperEnableVerbose", true))
|
||||
if (GetBooleanSetting(options, SettingConstants.EnableVerbose, true))
|
||||
this[FlagStrings.Verbose] = true;
|
||||
if (GetBooleanSetting(options, "RedumperEnableDebug", false))
|
||||
if (GetBooleanSetting(options, SettingConstants.EnableDebug, false))
|
||||
this[FlagStrings.Debug] = true;
|
||||
|
||||
string? readMethod = GetStringSetting(options, "RedumperReadMethod", "NONE");
|
||||
string? readMethod = GetStringSetting(options, SettingConstants.ReadMethod, "NONE");
|
||||
if (!string.IsNullOrEmpty(readMethod) && readMethod != "NONE")
|
||||
{
|
||||
this[FlagStrings.DriveReadMethod] = true;
|
||||
DriveReadMethodValue = readMethod;
|
||||
}
|
||||
|
||||
string? sectorOrder = GetStringSetting(options, "RedumperSectorOrder", "NONE");
|
||||
string? sectorOrder = GetStringSetting(options, SettingConstants.SectorOrder, "NONE");
|
||||
if (!string.IsNullOrEmpty(sectorOrder) && sectorOrder != "NONE")
|
||||
{
|
||||
this[FlagStrings.DriveSectorOrder] = true;
|
||||
DriveSectorOrderValue = sectorOrder;
|
||||
}
|
||||
|
||||
if (GetBooleanSetting(options, "RedumperUseGenericDriveType", false))
|
||||
if (GetBooleanSetting(options, SettingConstants.UseGenericDriveType, false))
|
||||
{
|
||||
this[FlagStrings.DriveType] = true;
|
||||
DriveTypeValue = "GENERIC";
|
||||
@@ -623,12 +623,12 @@ namespace MPF.ExecutionContexts.Redumper
|
||||
}
|
||||
|
||||
this[FlagStrings.Retries] = true;
|
||||
RetriesValue = GetInt32Setting(options, "RedumperRereadCount", 20);
|
||||
RetriesValue = GetInt32Setting(options, SettingConstants.RereadCount, 20);
|
||||
|
||||
if (GetBooleanSetting(options, "RedumperEnableLeadinRetry", false))
|
||||
if (GetBooleanSetting(options, SettingConstants.EnableLeadinRetry, false))
|
||||
{
|
||||
this[FlagStrings.PlextorLeadinRetries] = true;
|
||||
PlextorLeadinRetriesValue = GetInt32Setting(options, "RedumperLeadinRetryCount", 4);
|
||||
PlextorLeadinRetriesValue = GetInt32Setting(options, SettingConstants.LeadinRetryCount, 4);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
21
MPF.ExecutionContexts/Redumper/SettingConstants.cs
Normal file
21
MPF.ExecutionContexts/Redumper/SettingConstants.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
namespace MPF.ExecutionContexts.Redumper
|
||||
{
|
||||
public static class SettingConstants
|
||||
{
|
||||
public const string EnableDebug = "RedumperEnableDebug";
|
||||
|
||||
public const string EnableLeadinRetry = "RedumperEnableLeadinRetry";
|
||||
|
||||
public const string EnableVerbose = "RedumperEnableVerbose";
|
||||
|
||||
public const string LeadinRetryCount = "RedumperLeadinRetryCount";
|
||||
|
||||
public const string ReadMethod = "RedumperReadMethod";
|
||||
|
||||
public const string RereadCount = "RedumperRereadCount";
|
||||
|
||||
public const string SectorOrder = "RedumperSectorOrder";
|
||||
|
||||
public const string UseGenericDriveType = "RedumperUseGenericDriveType";
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,8 @@
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.RedumpLib.Data;
|
||||
using AaruSettings = MPF.ExecutionContexts.Aaru.SettingConstants;
|
||||
using DICSettings = MPF.ExecutionContexts.DiscImageCreator.SettingConstants;
|
||||
using RedumperSettings = MPF.ExecutionContexts.Redumper.SettingConstants;
|
||||
|
||||
namespace MPF.Frontend
|
||||
{
|
||||
@@ -181,8 +184,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public bool AaruEnableDebug
|
||||
{
|
||||
get { return GetBooleanSetting(Settings, "AaruEnableDebug", false); }
|
||||
set { Settings["AaruEnableDebug"] = value.ToString(); }
|
||||
get { return GetBooleanSetting(Settings, AaruSettings.EnableDebug, false); }
|
||||
set { Settings[AaruSettings.EnableDebug] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -190,8 +193,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public bool AaruEnableVerbose
|
||||
{
|
||||
get { return GetBooleanSetting(Settings, "AaruEnableVerbose", false); }
|
||||
set { Settings["AaruEnableVerbose"] = value.ToString(); }
|
||||
get { return GetBooleanSetting(Settings, AaruSettings.EnableVerbose, false); }
|
||||
set { Settings[AaruSettings.EnableVerbose] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -199,8 +202,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public bool AaruForceDumping
|
||||
{
|
||||
get { return GetBooleanSetting(Settings, "AaruForceDumping", true); }
|
||||
set { Settings["AaruForceDumping"] = value.ToString(); }
|
||||
get { return GetBooleanSetting(Settings, AaruSettings.ForceDumping, true); }
|
||||
set { Settings[AaruSettings.ForceDumping] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -208,8 +211,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public int AaruRereadCount
|
||||
{
|
||||
get { return GetInt32Setting(Settings, "AaruRereadCount", 5); }
|
||||
set { Settings["AaruRereadCount"] = value.ToString(); }
|
||||
get { return GetInt32Setting(Settings, AaruSettings.RereadCount, 5); }
|
||||
set { Settings[AaruSettings.RereadCount] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -217,8 +220,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public bool AaruStripPersonalData
|
||||
{
|
||||
get { return GetBooleanSetting(Settings, "AaruStripPersonalData", false); }
|
||||
set { Settings["AaruStripPersonalData"] = value.ToString(); }
|
||||
get { return GetBooleanSetting(Settings, AaruSettings.StripPersonalData, false); }
|
||||
set { Settings[AaruSettings.StripPersonalData] = value.ToString(); }
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -230,8 +233,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public bool DICMultiSectorRead
|
||||
{
|
||||
get { return GetBooleanSetting(Settings, "DICMultiSectorRead", false); }
|
||||
set { Settings["DICMultiSectorRead"] = value.ToString(); }
|
||||
get { return GetBooleanSetting(Settings, DICSettings.MultiSectorRead, false); }
|
||||
set { Settings[DICSettings.MultiSectorRead] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -239,8 +242,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public int DICMultiSectorReadValue
|
||||
{
|
||||
get { return GetInt32Setting(Settings, "DICMultiSectorReadValue", 0); }
|
||||
set { Settings["DICMultiSectorReadValue"] = value.ToString(); }
|
||||
get { return GetInt32Setting(Settings, DICSettings.MultiSectorReadValue, 0); }
|
||||
set { Settings[DICSettings.MultiSectorReadValue] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -253,8 +256,8 @@ namespace MPF.Frontend
|
||||
/// </remarks>
|
||||
public bool DICParanoidMode
|
||||
{
|
||||
get { return GetBooleanSetting(Settings, "DICParanoidMode", false); }
|
||||
set { Settings["DICParanoidMode"] = value.ToString(); }
|
||||
get { return GetBooleanSetting(Settings, DICSettings.ParanoidMode, false); }
|
||||
set { Settings[DICSettings.ParanoidMode] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -262,8 +265,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public bool DICQuietMode
|
||||
{
|
||||
get { return GetBooleanSetting(Settings, "DICQuietMode", false); }
|
||||
set { Settings["DICQuietMode"] = value.ToString(); }
|
||||
get { return GetBooleanSetting(Settings, DICSettings.QuietMode, false); }
|
||||
set { Settings[DICSettings.QuietMode] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -271,8 +274,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public int DICRereadCount
|
||||
{
|
||||
get { return GetInt32Setting(Settings, "DICRereadCount", 20); }
|
||||
set { Settings["DICRereadCount"] = value.ToString(); }
|
||||
get { return GetInt32Setting(Settings, DICSettings.RereadCount, 20); }
|
||||
set { Settings[DICSettings.RereadCount] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -280,8 +283,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public int DICDVDRereadCount
|
||||
{
|
||||
get { return GetInt32Setting(Settings, "DICDVDRereadCount", 10); }
|
||||
set { Settings["DICDVDRereadCount"] = value.ToString(); }
|
||||
get { return GetInt32Setting(Settings, DICSettings.DVDRereadCount, 10); }
|
||||
set { Settings[DICSettings.DVDRereadCount] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -289,8 +292,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public bool DICUseCMIFlag
|
||||
{
|
||||
get { return GetBooleanSetting(Settings, "DICUseCMIFlag", false); }
|
||||
set { Settings["DICUseCMIFlag"] = value.ToString(); }
|
||||
get { return GetBooleanSetting(Settings, DICSettings.UseCMIFlag, false); }
|
||||
set { Settings[DICSettings.UseCMIFlag] = value.ToString(); }
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -302,8 +305,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public bool RedumperEnableDebug
|
||||
{
|
||||
get { return GetBooleanSetting(Settings, "RedumperEnableDebug", false); }
|
||||
set { Settings["RedumperEnableDebug"] = value.ToString(); }
|
||||
get { return GetBooleanSetting(Settings, RedumperSettings.EnableDebug, false); }
|
||||
set { Settings[RedumperSettings.EnableDebug] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -311,8 +314,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public bool RedumperEnableLeadinRetry
|
||||
{
|
||||
get { return GetBooleanSetting(Settings, "RedumperEnableLeadinRetry", false); }
|
||||
set { Settings["RedumperEnableLeadinRetry"] = value.ToString(); }
|
||||
get { return GetBooleanSetting(Settings, RedumperSettings.EnableLeadinRetry, false); }
|
||||
set { Settings[RedumperSettings.EnableLeadinRetry] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -320,8 +323,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public bool RedumperEnableVerbose
|
||||
{
|
||||
get { return GetBooleanSetting(Settings, "RedumperEnableVerbose", true); }
|
||||
set { Settings["RedumperEnableVerbose"] = value.ToString(); }
|
||||
get { return GetBooleanSetting(Settings, RedumperSettings.EnableVerbose, true); }
|
||||
set { Settings[RedumperSettings.EnableVerbose] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -329,8 +332,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public int RedumperLeadinRetryCount
|
||||
{
|
||||
get { return GetInt32Setting(Settings, "RedumperLeadinRetryCount", 4); }
|
||||
set { Settings["RedumperLeadinRetryCount"] = value.ToString(); }
|
||||
get { return GetInt32Setting(Settings, RedumperSettings.LeadinRetryCount, 4); }
|
||||
set { Settings[RedumperSettings.LeadinRetryCount] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -347,8 +350,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public bool RedumperUseGenericDriveType
|
||||
{
|
||||
get { return GetBooleanSetting(Settings, "RedumperUseGenericDriveType", false); }
|
||||
set { Settings["RedumperUseGenericDriveType"] = value.ToString(); }
|
||||
get { return GetBooleanSetting(Settings, RedumperSettings.UseGenericDriveType, false); }
|
||||
set { Settings[RedumperSettings.UseGenericDriveType] = value.ToString(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -358,12 +361,12 @@ namespace MPF.Frontend
|
||||
{
|
||||
get
|
||||
{
|
||||
var valueString = GetStringSetting(Settings, "RedumperReadMethod", RedumperReadMethod.NONE.ToString());
|
||||
var valueString = GetStringSetting(Settings, RedumperSettings.ReadMethod, RedumperReadMethod.NONE.ToString());
|
||||
return ToRedumperReadMethod(valueString);
|
||||
}
|
||||
set
|
||||
{
|
||||
Settings["RedumperReadMethod"] = value.ToString();
|
||||
Settings[RedumperSettings.ReadMethod] = value.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -374,12 +377,12 @@ namespace MPF.Frontend
|
||||
{
|
||||
get
|
||||
{
|
||||
var valueString = GetStringSetting(Settings, "RedumperSectorOrder", RedumperSectorOrder.NONE.ToString());
|
||||
var valueString = GetStringSetting(Settings, RedumperSettings.SectorOrder, RedumperSectorOrder.NONE.ToString());
|
||||
return ToRedumperSectorOrder(valueString);
|
||||
}
|
||||
set
|
||||
{
|
||||
Settings["RedumperSectorOrder"] = value.ToString();
|
||||
Settings[RedumperSettings.SectorOrder] = value.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -388,8 +391,8 @@ namespace MPF.Frontend
|
||||
/// </summary>
|
||||
public int RedumperRereadCount
|
||||
{
|
||||
get { return GetInt32Setting(Settings, "RedumperRereadCount", 20); }
|
||||
set { Settings["RedumperRereadCount"] = value.ToString(); }
|
||||
get { return GetInt32Setting(Settings, RedumperSettings.RereadCount, 20); }
|
||||
set { Settings[RedumperSettings.RereadCount] = value.ToString(); }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user