mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-18 09:19:17 +01:00
* Split NoDisc settings in two distinct options to prevent confusion.
* Hide DM config v2 settings when using config v1
This commit is contained in:
parent
6ed3f4e59f
commit
07e916bf5c
@ -2,8 +2,8 @@
|
|||||||
<app version="1">
|
<app version="1">
|
||||||
<name> USB Loader GX</name>
|
<name> USB Loader GX</name>
|
||||||
<coder>USB Loader GX Team</coder>
|
<coder>USB Loader GX Team</coder>
|
||||||
<version>3.0 r1198</version>
|
<version>3.0 r1199</version>
|
||||||
<release_date>201207201652</release_date>
|
<release_date>201207211037</release_date>
|
||||||
<!-- // remove this line to enable arguments
|
<!-- // remove this line to enable arguments
|
||||||
<arguments>
|
<arguments>
|
||||||
<arg>--ios=250</arg>
|
<arg>--ios=250</arg>
|
||||||
|
@ -35,25 +35,25 @@ enum DMLConfig
|
|||||||
DML_CFG_CHEAT_PATH = (1<<6),
|
DML_CFG_CHEAT_PATH = (1<<6),
|
||||||
DML_CFG_ACTIVITY_LED = (1<<7),
|
DML_CFG_ACTIVITY_LED = (1<<7),
|
||||||
DML_CFG_PADHOOK = (1<<8),
|
DML_CFG_PADHOOK = (1<<8),
|
||||||
DML_CFG_NODISC = (1<<9), // unused since DML v1.0, removed in v2.1
|
DML_CFG_NODISC = (1<<9), // unused since DML v1.0, removed in v2.1
|
||||||
DML_CFG_FORCE_WIDE = (1<<9), // DM v2.1+, Config v02
|
DML_CFG_FORCE_WIDE = (1<<9), // DM v2.1+, Config v02
|
||||||
DML_CFG_BOOT_DISC = (1<<10),
|
DML_CFG_BOOT_DISC = (1<<10),
|
||||||
// DML_CFG_BOOT_DOL = (1<<11), // unused since DML v1.0, removed in v2.1
|
// DML_CFG_BOOT_DOL = (1<<11), // unused since DML v1.0, removed in v2.1
|
||||||
DML_CFG_BOOT_DISC2 = (1<<11), // DM v2.1+, Config v02
|
DML_CFG_BOOT_DISC2 = (1<<11), // DM v2.1+, Config v02
|
||||||
DML_CFG_NODISC2 = (1<<12) // added back in DM v2.2 update2 (r20)
|
DML_CFG_NODISC2 = (1<<12) // added back in DM v2.2 update2 (r20)
|
||||||
};
|
};
|
||||||
|
|
||||||
enum DMLVideoModes
|
enum DMLVideoModes
|
||||||
{
|
{
|
||||||
DML_VID_DML_AUTO = (0<<16),
|
DML_VID_DML_AUTO = (0<<16),
|
||||||
DML_VID_FORCE = (1<<16),
|
DML_VID_FORCE = (1<<16),
|
||||||
DML_VID_NONE = (2<<16),
|
DML_VID_NONE = (2<<16),
|
||||||
|
|
||||||
DML_VID_FORCE_PAL50 = (1<<0),
|
DML_VID_FORCE_PAL50 = (1<<0),
|
||||||
DML_VID_FORCE_PAL60 = (1<<1),
|
DML_VID_FORCE_PAL60 = (1<<1),
|
||||||
DML_VID_FORCE_NTSC = (1<<2),
|
DML_VID_FORCE_NTSC = (1<<2),
|
||||||
DML_VID_FORCE_PROG = (1<<3),
|
DML_VID_FORCE_PROG = (1<<3),
|
||||||
DML_VID_PROG_PATCH = (1<<4)
|
DML_VID_PROG_PATCH = (1<<4)
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -211,6 +211,7 @@ bool CGameSettings::Save()
|
|||||||
fprintf(f, "DMLActivityLED:%d; ", GameList[i].DMLActivityLED);
|
fprintf(f, "DMLActivityLED:%d; ", GameList[i].DMLActivityLED);
|
||||||
fprintf(f, "DMLPADHOOK:%d; ", GameList[i].DMLPADHOOK);
|
fprintf(f, "DMLPADHOOK:%d; ", GameList[i].DMLPADHOOK);
|
||||||
fprintf(f, "DMLNoDisc:%d; ", GameList[i].DMLNoDisc);
|
fprintf(f, "DMLNoDisc:%d; ", GameList[i].DMLNoDisc);
|
||||||
|
fprintf(f, "DMLNoDisc2:%d; ", GameList[i].DMLNoDisc2);
|
||||||
fprintf(f, "DMLWidescreen:%d; ", GameList[i].DMLWidescreen);
|
fprintf(f, "DMLWidescreen:%d; ", GameList[i].DMLWidescreen);
|
||||||
fprintf(f, "DMLDebug:%d; ", GameList[i].DMLDebug);
|
fprintf(f, "DMLDebug:%d; ", GameList[i].DMLDebug);
|
||||||
fprintf(f, "DEVOMCEmulation:%d; ", GameList[i].DEVOMCEmulation);
|
fprintf(f, "DEVOMCEmulation:%d; ", GameList[i].DEVOMCEmulation);
|
||||||
@ -354,6 +355,11 @@ bool CGameSettings::SetSetting(GameCFG & game, const char *name, const char *val
|
|||||||
game.DMLNoDisc = atoi(value);
|
game.DMLNoDisc = atoi(value);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if(strcmp(name, "DMLNoDisc2") == 0)
|
||||||
|
{
|
||||||
|
game.DMLNoDisc2 = atoi(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
else if(strcmp(name, "DMLWidescreen") == 0)
|
else if(strcmp(name, "DMLWidescreen") == 0)
|
||||||
{
|
{
|
||||||
game.DMLWidescreen = atoi(value);
|
game.DMLWidescreen = atoi(value);
|
||||||
@ -495,6 +501,7 @@ void CGameSettings::SetDefault(GameCFG &game)
|
|||||||
game.DMLActivityLED = INHERIT;
|
game.DMLActivityLED = INHERIT;
|
||||||
game.DMLPADHOOK = INHERIT;
|
game.DMLPADHOOK = INHERIT;
|
||||||
game.DMLNoDisc = INHERIT;
|
game.DMLNoDisc = INHERIT;
|
||||||
|
game.DMLNoDisc2 = INHERIT;
|
||||||
game.DMLWidescreen = INHERIT;
|
game.DMLWidescreen = INHERIT;
|
||||||
game.DMLDebug = INHERIT;
|
game.DMLDebug = INHERIT;
|
||||||
game.DEVOMCEmulation = INHERIT;
|
game.DEVOMCEmulation = INHERIT;
|
||||||
|
@ -35,6 +35,7 @@ typedef struct _GameCFG
|
|||||||
short DMLActivityLED;
|
short DMLActivityLED;
|
||||||
short DMLPADHOOK;
|
short DMLPADHOOK;
|
||||||
short DMLNoDisc;
|
short DMLNoDisc;
|
||||||
|
short DMLNoDisc2;
|
||||||
short DMLWidescreen;
|
short DMLWidescreen;
|
||||||
short DMLDebug;
|
short DMLDebug;
|
||||||
short DEVOMCEmulation;
|
short DEVOMCEmulation;
|
||||||
@ -68,6 +69,7 @@ typedef struct _GameCFG
|
|||||||
this->DMLActivityLED = game.DMLActivityLED;
|
this->DMLActivityLED = game.DMLActivityLED;
|
||||||
this->DMLPADHOOK = game.DMLPADHOOK;
|
this->DMLPADHOOK = game.DMLPADHOOK;
|
||||||
this->DMLNoDisc = game.DMLNoDisc;
|
this->DMLNoDisc = game.DMLNoDisc;
|
||||||
|
this->DMLNoDisc2 = game.DMLNoDisc2;
|
||||||
this->DMLWidescreen = game.DMLWidescreen;
|
this->DMLWidescreen = game.DMLWidescreen;
|
||||||
this->DMLDebug = game.DMLDebug;
|
this->DMLDebug = game.DMLDebug;
|
||||||
this->DEVOMCEmulation = game.DEVOMCEmulation;
|
this->DEVOMCEmulation = game.DEVOMCEmulation;
|
||||||
|
@ -173,6 +173,7 @@ void CSettings::SetDefault()
|
|||||||
DMLActivityLED = OFF;
|
DMLActivityLED = OFF;
|
||||||
DMLPADHOOK = OFF;
|
DMLPADHOOK = OFF;
|
||||||
DMLNoDisc = OFF;
|
DMLNoDisc = OFF;
|
||||||
|
DMLNoDisc2 = OFF;
|
||||||
DMLWidescreen = OFF;
|
DMLWidescreen = OFF;
|
||||||
DMLDebug = OFF;
|
DMLDebug = OFF;
|
||||||
DEVOMCEmulation = OFF;
|
DEVOMCEmulation = OFF;
|
||||||
@ -397,6 +398,7 @@ bool CSettings::Save()
|
|||||||
fprintf(file, "DMLActivityLED = %d\n", DMLActivityLED);
|
fprintf(file, "DMLActivityLED = %d\n", DMLActivityLED);
|
||||||
fprintf(file, "DMLPADHOOK = %d\n", DMLPADHOOK);
|
fprintf(file, "DMLPADHOOK = %d\n", DMLPADHOOK);
|
||||||
fprintf(file, "DMLNoDisc = %d\n", DMLNoDisc);
|
fprintf(file, "DMLNoDisc = %d\n", DMLNoDisc);
|
||||||
|
fprintf(file, "DMLNoDisc2 = %d\n", DMLNoDisc2);
|
||||||
fprintf(file, "DMLWidescreen = %d\n", DMLWidescreen);
|
fprintf(file, "DMLWidescreen = %d\n", DMLWidescreen);
|
||||||
fprintf(file, "DMLDebug = %d\n", DMLDebug);
|
fprintf(file, "DMLDebug = %d\n", DMLDebug);
|
||||||
fprintf(file, "DEVOMCEmulation = %d\n", DEVOMCEmulation);
|
fprintf(file, "DEVOMCEmulation = %d\n", DEVOMCEmulation);
|
||||||
@ -819,6 +821,11 @@ bool CSettings::SetSetting(char *name, char *value)
|
|||||||
DMLNoDisc = atoi(value);
|
DMLNoDisc = atoi(value);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(name, "DMLNoDisc2") == 0)
|
||||||
|
{
|
||||||
|
DMLNoDisc2 = atoi(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
else if (strcmp(name, "DMLWidescreen") == 0)
|
else if (strcmp(name, "DMLWidescreen") == 0)
|
||||||
{
|
{
|
||||||
DMLWidescreen = atoi(value);
|
DMLWidescreen = atoi(value);
|
||||||
|
@ -175,6 +175,7 @@ class CSettings
|
|||||||
short DMLActivityLED;
|
short DMLActivityLED;
|
||||||
short DMLPADHOOK;
|
short DMLPADHOOK;
|
||||||
short DMLNoDisc;
|
short DMLNoDisc;
|
||||||
|
short DMLNoDisc2;
|
||||||
short DMLWidescreen;
|
short DMLWidescreen;
|
||||||
short DMLDebug;
|
short DMLDebug;
|
||||||
short DEVOMCEmulation;
|
short DEVOMCEmulation;
|
||||||
|
@ -157,7 +157,10 @@ void GCGameLoadSM::SetOptionNames()
|
|||||||
Options->SetName(Idx++, "%s", tr( "DML LED Activity" ));
|
Options->SetName(Idx++, "%s", tr( "DML LED Activity" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "DML PAD Hook" ));
|
Options->SetName(Idx++, "%s", tr( "DML PAD Hook" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "DML No Disc" ));
|
Options->SetName(Idx++, "%s", tr( "DML No Disc" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "DML Force Widescreen" ));
|
if(Settings.DMLConfigVersion > 1)
|
||||||
|
Options->SetName(Idx++, "%s", tr( "DML No Disc+" ));
|
||||||
|
if(Settings.DMLConfigVersion > 1)
|
||||||
|
Options->SetName(Idx++, "%s", tr( "DML Force Widescreen" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "DML Debug" ));
|
Options->SetName(Idx++, "%s", tr( "DML Debug" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "DEVO MemCard Emulation" ));
|
Options->SetName(Idx++, "%s", tr( "DEVO MemCard Emulation" ));
|
||||||
}
|
}
|
||||||
@ -228,11 +231,23 @@ void GCGameLoadSM::SetOptionValues()
|
|||||||
else
|
else
|
||||||
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.DMLNoDisc]));
|
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.DMLNoDisc]));
|
||||||
|
|
||||||
|
//! Settings: DML Extended No Disc
|
||||||
|
if(Settings.DMLConfigVersion > 1)
|
||||||
|
{
|
||||||
|
if(GameConfig.DMLNoDisc2 == INHERIT)
|
||||||
|
Options->SetValue(Idx++, tr("Use global"));
|
||||||
|
else
|
||||||
|
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.DMLNoDisc2]));
|
||||||
|
}
|
||||||
|
|
||||||
//! Settings: DML Force Widescreen
|
//! Settings: DML Force Widescreen
|
||||||
if(GameConfig.DMLWidescreen == INHERIT)
|
if(Settings.DMLConfigVersion > 1)
|
||||||
Options->SetValue(Idx++, tr("Use global"));
|
{
|
||||||
else
|
if(GameConfig.DMLWidescreen == INHERIT)
|
||||||
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.DMLWidescreen]));
|
Options->SetValue(Idx++, tr("Use global"));
|
||||||
|
else
|
||||||
|
Options->SetValue(Idx++, "%s", tr(OnOffText[GameConfig.DMLWidescreen]));
|
||||||
|
}
|
||||||
|
|
||||||
//! Settings: DML Debug
|
//! Settings: DML Debug
|
||||||
if(GameConfig.DMLDebug == INHERIT)
|
if(GameConfig.DMLDebug == INHERIT)
|
||||||
@ -344,8 +359,14 @@ int GCGameLoadSM::GetMenuInternal()
|
|||||||
if (++GameConfig.DMLNoDisc >= MAX_ON_OFF) GameConfig.DMLNoDisc = INHERIT;
|
if (++GameConfig.DMLNoDisc >= MAX_ON_OFF) GameConfig.DMLNoDisc = INHERIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! Settings: DML Extended No Disc
|
||||||
|
else if (Settings.DMLConfigVersion > 1 && ret == ++Idx)
|
||||||
|
{
|
||||||
|
if (++GameConfig.DMLNoDisc2 >= MAX_ON_OFF) GameConfig.DMLNoDisc2 = INHERIT;
|
||||||
|
}
|
||||||
|
|
||||||
//! Settings: DML Force Widescreen
|
//! Settings: DML Force Widescreen
|
||||||
else if (ret == ++Idx)
|
else if (Settings.DMLConfigVersion > 1 && ret == ++Idx)
|
||||||
{
|
{
|
||||||
if (++GameConfig.DMLWidescreen >= MAX_ON_OFF) GameConfig.DMLWidescreen = INHERIT;
|
if (++GameConfig.DMLWidescreen >= MAX_ON_OFF) GameConfig.DMLWidescreen = INHERIT;
|
||||||
}
|
}
|
||||||
|
@ -173,6 +173,7 @@ LoaderSettings::LoaderSettings()
|
|||||||
Options->SetName(Idx++, "%s", tr( "DML LED Activity" ));
|
Options->SetName(Idx++, "%s", tr( "DML LED Activity" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "DML PAD Hook" ));
|
Options->SetName(Idx++, "%s", tr( "DML PAD Hook" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "DML No Disc" ));
|
Options->SetName(Idx++, "%s", tr( "DML No Disc" ));
|
||||||
|
Options->SetName(Idx++, "%s", tr( "DML No Disc+" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "DML Force Widescreen" ));
|
Options->SetName(Idx++, "%s", tr( "DML Force Widescreen" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "DML Debug" ));
|
Options->SetName(Idx++, "%s", tr( "DML Debug" ));
|
||||||
Options->SetName(Idx++, "%s", tr( "DEVO MemCard Emulation" ));
|
Options->SetName(Idx++, "%s", tr( "DEVO MemCard Emulation" ));
|
||||||
@ -284,6 +285,9 @@ void LoaderSettings::SetOptionValues()
|
|||||||
//! Settings: DML No Disc
|
//! Settings: DML No Disc
|
||||||
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.DMLNoDisc]));
|
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.DMLNoDisc]));
|
||||||
|
|
||||||
|
//! Settings: DML Extended No Disc
|
||||||
|
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.DMLNoDisc2]));
|
||||||
|
|
||||||
//! Settings: DML Force Widescreen
|
//! Settings: DML Force Widescreen
|
||||||
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.DMLWidescreen]));
|
Options->SetValue(Idx++, "%s", tr(OnOffText[Settings.DMLWidescreen]));
|
||||||
|
|
||||||
@ -477,6 +481,12 @@ int LoaderSettings::GetMenuInternal()
|
|||||||
if (++Settings.DMLNoDisc >= MAX_ON_OFF) Settings.DMLNoDisc = 0;
|
if (++Settings.DMLNoDisc >= MAX_ON_OFF) Settings.DMLNoDisc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! Settings: DML Extended No Disc
|
||||||
|
else if (ret == ++Idx)
|
||||||
|
{
|
||||||
|
if (++Settings.DMLNoDisc2 >= MAX_ON_OFF) Settings.DMLNoDisc2 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
//! Settings: DML Force Widescreen
|
//! Settings: DML Force Widescreen
|
||||||
else if (ret == ++Idx)
|
else if (ret == ++Idx)
|
||||||
{
|
{
|
||||||
|
@ -82,6 +82,7 @@ int GameBooter::BootGCMode(struct discHdr *gameHdr)
|
|||||||
u8 dmlActivityLEDChoice = game_cfg->DMLActivityLED == INHERIT ? Settings.DMLActivityLED : game_cfg->DMLActivityLED;
|
u8 dmlActivityLEDChoice = game_cfg->DMLActivityLED == INHERIT ? Settings.DMLActivityLED : game_cfg->DMLActivityLED;
|
||||||
u8 dmlPADHookChoice = game_cfg->DMLPADHOOK == INHERIT ? Settings.DMLPADHOOK : game_cfg->DMLPADHOOK;
|
u8 dmlPADHookChoice = game_cfg->DMLPADHOOK == INHERIT ? Settings.DMLPADHOOK : game_cfg->DMLPADHOOK;
|
||||||
u8 dmlNoDiscChoice = game_cfg->DMLNoDisc == INHERIT ? Settings.DMLNoDisc : game_cfg->DMLNoDisc;
|
u8 dmlNoDiscChoice = game_cfg->DMLNoDisc == INHERIT ? Settings.DMLNoDisc : game_cfg->DMLNoDisc;
|
||||||
|
u8 dmlNoDisc2Choice = game_cfg->DMLNoDisc2 == INHERIT ? Settings.DMLNoDisc2 : game_cfg->DMLNoDisc2;
|
||||||
u8 dmlWidescreenChoice = game_cfg->DMLWidescreen == INHERIT ? Settings.DMLWidescreen : game_cfg->DMLWidescreen;
|
u8 dmlWidescreenChoice = game_cfg->DMLWidescreen == INHERIT ? Settings.DMLWidescreen : game_cfg->DMLWidescreen;
|
||||||
u8 dmlDebugChoice = game_cfg->DMLDebug == INHERIT ? Settings.DMLDebug : game_cfg->DMLDebug;
|
u8 dmlDebugChoice = game_cfg->DMLDebug == INHERIT ? Settings.DMLDebug : game_cfg->DMLDebug;
|
||||||
u8 devoMCEmulation = game_cfg->DEVOMCEmulation == INHERIT ? Settings.DEVOMCEmulation : game_cfg->DEVOMCEmulation;
|
u8 devoMCEmulation = game_cfg->DEVOMCEmulation == INHERIT ? Settings.DEVOMCEmulation : game_cfg->DEVOMCEmulation;
|
||||||
@ -289,7 +290,7 @@ int GameBooter::BootGCMode(struct discHdr *gameHdr)
|
|||||||
WindowPrompt(tr("Warning:"), tr("The Force Widescreen setting requires DIOS MIOS v2.2 or more. This setting will be ignored."), tr("OK"));
|
WindowPrompt(tr("Warning:"), tr("The Force Widescreen setting requires DIOS MIOS v2.2 or more. This setting will be ignored."), tr("OK"));
|
||||||
dmlWidescreenChoice = OFF;
|
dmlWidescreenChoice = OFF;
|
||||||
}
|
}
|
||||||
if(dmlNoDiscChoice && dmlConfigVersionChoice < 2) // DML NoDisc setting : removed in DM 1.0, config v1. Used as ForceWidescreen in DM v2.1 with cfg v1. Added back in DM 2.2 update2 Config v2
|
if(dmlNoDiscChoice) // DML NoDisc setting : removed in DM 1.0, config v1. Used as ForceWidescreen in DM v2.1 with cfg v1. Added back in DM 2.2 update2 Config v2
|
||||||
{
|
{
|
||||||
WindowPrompt(tr("Warning:"), tr("The No Disc setting is not used anymore by DIOS MIOS (Lite). Now you need to place a disc in your drive."), tr("OK"));
|
WindowPrompt(tr("Warning:"), tr("The No Disc setting is not used anymore by DIOS MIOS (Lite). Now you need to place a disc in your drive."), tr("OK"));
|
||||||
}
|
}
|
||||||
@ -324,14 +325,12 @@ int GameBooter::BootGCMode(struct discHdr *gameHdr)
|
|||||||
{
|
{
|
||||||
dml_config->Config |= DML_CFG_GAME_PATH;
|
dml_config->Config |= DML_CFG_GAME_PATH;
|
||||||
strncpy(dml_config->GamePath, gamePath, sizeof(dml_config->GamePath));
|
strncpy(dml_config->GamePath, gamePath, sizeof(dml_config->GamePath));
|
||||||
// use no disc patch
|
// NoDisc patch
|
||||||
if(dmlNoDiscChoice)
|
if(dmlNoDiscChoice && dmlConfigVersionChoice < 2)
|
||||||
{
|
dml_config->Config |= DML_CFG_NODISC; // used by v2.1 as ForceWidescreen setting
|
||||||
if(dmlConfigVersionChoice < 2)
|
// Extended NoDisc patch
|
||||||
dml_config->Config |= DML_CFG_NODISC; // used by v2.1 as ForceWidescreen setting
|
if(dmlNoDisc2Choice && dmlConfigVersionChoice > 1)
|
||||||
else
|
dml_config->Config |= DML_CFG_NODISC2; // used by v2.2 update2+ as an Extended NoDisc patching
|
||||||
dml_config->Config |= DML_CFG_NODISC2; // used by v2.2 update2+ as NoDisc setting
|
|
||||||
}
|
|
||||||
|
|
||||||
gprintf("DML: Loading game %s\n", dml_config->GamePath);
|
gprintf("DML: Loading game %s\n", dml_config->GamePath);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user