remove unused lambda captures
This commit is contained in:
@@ -49,7 +49,7 @@ void headless_application::InitializeCallbacks()
|
|||||||
{
|
{
|
||||||
EmuCallbacks callbacks = CreateCallbacks();
|
EmuCallbacks callbacks = CreateCallbacks();
|
||||||
|
|
||||||
callbacks.try_to_quit = [this](bool force_quit, std::function<void()> on_exit) -> bool
|
callbacks.try_to_quit = [](bool force_quit, std::function<void()> on_exit) -> bool
|
||||||
{
|
{
|
||||||
if (force_quit)
|
if (force_quit)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ void auto_pause_settings_dialog::ShowContextMenu(const QPoint &pos)
|
|||||||
OnEntryConfig(idx, true);
|
OnEntryConfig(idx, true);
|
||||||
});
|
});
|
||||||
connect(remove, &QAction::triggered, this, &auto_pause_settings_dialog::OnRemove);
|
connect(remove, &QAction::triggered, this, &auto_pause_settings_dialog::OnRemove);
|
||||||
connect(config, &QAction::triggered, this, [=, this]() {OnEntryConfig(row, false); });
|
connect(config, &QAction::triggered, this, [=]() {OnEntryConfig(row, false); });
|
||||||
|
|
||||||
myMenu.exec(m_pause_list->viewport()->mapToGlobal(pos));
|
myMenu.exec(m_pause_list->viewport()->mapToGlobal(pos));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ clans_settings_dialog::clans_settings_dialog(QWidget* parent)
|
|||||||
g_cfg_clans.save();
|
g_cfg_clans.save();
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(m_cbx_protocol, &QComboBox::currentIndexChanged, this, [this](int index)
|
connect(m_cbx_protocol, &QComboBox::currentIndexChanged, this, [](int index)
|
||||||
{
|
{
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -207,7 +207,7 @@ bool emu_settings::ValidateSettings(bool cleanup)
|
|||||||
bool is_clean = true;
|
bool is_clean = true;
|
||||||
|
|
||||||
std::function<void(int, YAML::Node&, std::vector<std::string>&, cfg::_base*)> search_level;
|
std::function<void(int, YAML::Node&, std::vector<std::string>&, cfg::_base*)> search_level;
|
||||||
search_level = [&search_level, &is_clean, &cleanup, this](int level, YAML::Node& yml_node, std::vector<std::string>& keys, cfg::_base* cfg_base)
|
search_level = [&search_level, &is_clean, &cleanup](int level, YAML::Node& yml_node, std::vector<std::string>& keys, cfg::_base* cfg_base)
|
||||||
{
|
{
|
||||||
if (!yml_node || !yml_node.IsMap())
|
if (!yml_node || !yml_node.IsMap())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -908,7 +908,7 @@ void game_list_actions::BatchActionBySerials(progress_dialog* pdlg, const std::s
|
|||||||
|
|
||||||
const int serials_size = ::narrow<int>(serials.size());
|
const int serials_size = ::narrow<int>(serials.size());
|
||||||
|
|
||||||
*iterate_over_serial = [=, this, index_ptr = index](int index)
|
*iterate_over_serial = [=, index_ptr = index](int index)
|
||||||
{
|
{
|
||||||
if (index == serials_size)
|
if (index == serials_size)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ game_list_grid::game_list_grid()
|
|||||||
Q_EMIT IconReady(game, item);
|
Q_EMIT IconReady(game, item);
|
||||||
};
|
};
|
||||||
|
|
||||||
connect(this, &game_list_grid::IconReady, this, [this](const game_info& game, const movie_item_base* item)
|
connect(this, &game_list_grid::IconReady, this, [](const game_info& game, const movie_item_base* item)
|
||||||
{
|
{
|
||||||
if (game && item && game->item == item) item->image_change_callback();
|
if (game && item && game->item == item) item->image_change_callback();
|
||||||
}, Qt::QueuedConnection); // The default 'AutoConnection' doesn't seem to work in this specific case...
|
}, Qt::QueuedConnection); // The default 'AutoConnection' doesn't seem to work in this specific case...
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ game_list_table::game_list_table(game_list_frame* frame, std::shared_ptr<persist
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(this, &game_list::IconReady, this, [this](const game_info& game, const movie_item_base* item)
|
connect(this, &game_list::IconReady, this, [](const game_info& game, const movie_item_base* item)
|
||||||
{
|
{
|
||||||
if (game && item && game->item == item) item->image_change_callback();
|
if (game && item && game->item == item) item->image_change_callback();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -793,7 +793,7 @@ f64 gs_frame::client_display_rate()
|
|||||||
{
|
{
|
||||||
f64 rate = 20.; // Minimum is 20
|
f64 rate = 20.; // Minimum is 20
|
||||||
|
|
||||||
Emu.BlockingCallFromMainThread([this, &rate]()
|
Emu.BlockingCallFromMainThread([&rate]()
|
||||||
{
|
{
|
||||||
const QList<QScreen*> screens = QGuiApplication::screens();
|
const QList<QScreen*> screens = QGuiApplication::screens();
|
||||||
|
|
||||||
|
|||||||
@@ -737,8 +737,8 @@ void gui_application::InitializeCallbacks()
|
|||||||
callbacks.get_msg_dialog = [this]() -> std::shared_ptr<MsgDialogBase> { return m_show_gui ? std::make_shared<msg_dialog_frame>() : nullptr; };
|
callbacks.get_msg_dialog = [this]() -> std::shared_ptr<MsgDialogBase> { return m_show_gui ? std::make_shared<msg_dialog_frame>() : nullptr; };
|
||||||
callbacks.get_osk_dialog = [this]() -> std::shared_ptr<OskDialogBase> { return m_show_gui ? std::make_shared<osk_dialog_frame>() : nullptr; };
|
callbacks.get_osk_dialog = [this]() -> std::shared_ptr<OskDialogBase> { return m_show_gui ? std::make_shared<osk_dialog_frame>() : nullptr; };
|
||||||
callbacks.get_save_dialog = []() -> std::unique_ptr<SaveDialogBase> { return std::make_unique<save_data_dialog>(); };
|
callbacks.get_save_dialog = []() -> std::unique_ptr<SaveDialogBase> { return std::make_unique<save_data_dialog>(); };
|
||||||
callbacks.get_sendmessage_dialog = [this]() -> std::shared_ptr<SendMessageDialogBase> { return std::make_shared<sendmessage_dialog_frame>(); };
|
callbacks.get_sendmessage_dialog = []() -> std::shared_ptr<SendMessageDialogBase> { return std::make_shared<sendmessage_dialog_frame>(); };
|
||||||
callbacks.get_recvmessage_dialog = [this]() -> std::shared_ptr<RecvMessageDialogBase> { return std::make_shared<recvmessage_dialog_frame>(); };
|
callbacks.get_recvmessage_dialog = []() -> std::shared_ptr<RecvMessageDialogBase> { return std::make_shared<recvmessage_dialog_frame>(); };
|
||||||
callbacks.get_trophy_notification_dialog = [this]() -> std::unique_ptr<TrophyNotificationBase> { return std::make_unique<trophy_notification_helper>(m_game_window); };
|
callbacks.get_trophy_notification_dialog = [this]() -> std::unique_ptr<TrophyNotificationBase> { return std::make_unique<trophy_notification_helper>(m_game_window); };
|
||||||
|
|
||||||
callbacks.on_run = [this](bool start_playtime) { OnEmulatorRun(start_playtime); };
|
callbacks.on_run = [this](bool start_playtime) { OnEmulatorRun(start_playtime); };
|
||||||
@@ -839,7 +839,7 @@ void gui_application::InitializeCallbacks()
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
callbacks.on_emulation_stop_no_response = [this](std::shared_ptr<atomic_t<bool>> closed_successfully, int seconds_waiting_already)
|
callbacks.on_emulation_stop_no_response = [](std::shared_ptr<atomic_t<bool>> closed_successfully, int seconds_waiting_already)
|
||||||
{
|
{
|
||||||
const std::string terminate_message = tr("Stopping emulator took too long."
|
const std::string terminate_message = tr("Stopping emulator took too long."
|
||||||
"\nSome thread has probably deadlocked. Aborting.").toStdString();
|
"\nSome thread has probably deadlocked. Aborting.").toStdString();
|
||||||
@@ -849,7 +849,7 @@ void gui_application::InitializeCallbacks()
|
|||||||
report_fatal_error(terminate_message);
|
report_fatal_error(terminate_message);
|
||||||
}
|
}
|
||||||
|
|
||||||
Emu.CallFromMainThread([this, closed_successfully, seconds_waiting_already, terminate_message]
|
Emu.CallFromMainThread([closed_successfully, seconds_waiting_already, terminate_message]
|
||||||
{
|
{
|
||||||
const auto seconds = std::make_shared<int>(seconds_waiting_already);
|
const auto seconds = std::make_shared<int>(seconds_waiting_already);
|
||||||
|
|
||||||
|
|||||||
@@ -316,7 +316,7 @@ void kernel_explorer::update()
|
|||||||
|
|
||||||
add_solid_node(find_node(root, additional_nodes::process_info), QString::fromStdString(fmt::format("Process Info, Sdk Version: 0x%08x, PPC SEG: %#x, SFO Category: %s (Fake: %s)", g_ps3_process_info.sdk_ver, g_ps3_process_info.ppc_seg, Emu.GetCat(), Emu.GetFakeCat())));
|
add_solid_node(find_node(root, additional_nodes::process_info), QString::fromStdString(fmt::format("Process Info, Sdk Version: 0x%08x, PPC SEG: %#x, SFO Category: %s (Fake: %s)", g_ps3_process_info.sdk_ver, g_ps3_process_info.ppc_seg, Emu.GetCat(), Emu.GetFakeCat())));
|
||||||
|
|
||||||
auto display_program_segments = [this](QTreeWidgetItem* tree, const ppu_module<lv2_obj>& m)
|
auto display_program_segments = [](QTreeWidgetItem* tree, const ppu_module<lv2_obj>& m)
|
||||||
{
|
{
|
||||||
for (usz i = 0; i < m.segs.size(); i++)
|
for (usz i = 0; i < m.segs.size(); i++)
|
||||||
{
|
{
|
||||||
@@ -661,7 +661,7 @@ void kernel_explorer::update()
|
|||||||
const s32 prio = ppu.prio.load().prio;
|
const s32 prio = ppu.prio.load().prio;
|
||||||
std::string prio_text = fmt::format("%4d", prio);
|
std::string prio_text = fmt::format("%4d", prio);
|
||||||
prio_text = fmt::replace_all(prio_text, " ", " ");
|
prio_text = fmt::replace_all(prio_text, " ", " ");
|
||||||
|
|
||||||
ppu_threads.emplace_back(prio, fmt::format(u8"PPU 0x%07x: PRIO: %s, “%s”Joiner: %s, Status: %s, State: %s, %s func: “%s”%s", id, prio_text, *ppu.ppu_tname.load(), ppu.joiner.load(), status, ppu.state.load()
|
ppu_threads.emplace_back(prio, fmt::format(u8"PPU 0x%07x: PRIO: %s, “%s”Joiner: %s, Status: %s, State: %s, %s func: “%s”%s", id, prio_text, *ppu.ppu_tname.load(), ppu.joiner.load(), status, ppu.state.load()
|
||||||
, ppu.ack_suspend ? "After" : (ppu.current_function ? "In" : "Last"), func ? func : "", get_wait_time_str(ppu.start_time)));
|
, ppu.ack_suspend ? "After" : (ppu.current_function ? "In" : "Last"), func ? func : "", get_wait_time_str(ppu.start_time)));
|
||||||
}, idm::unlocked);
|
}, idm::unlocked);
|
||||||
|
|||||||
@@ -1734,7 +1734,7 @@ void main_window::DecryptSPRXLibraries()
|
|||||||
dlg->set_button_enabled(QDialogButtonBox::StandardButton::Ok, text.size() - (text.indexOf('x') + 1) == 32);
|
dlg->set_button_enabled(QDialogButtonBox::StandardButton::Ok, text.size() - (text.indexOf('x') + 1) == 32);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(dlg, &QDialog::accepted, this, [this, iterate, dlg, mod_index, decrypter, repeat_count]()
|
connect(dlg, &QDialog::accepted, this, [iterate, dlg, mod_index, decrypter, repeat_count]()
|
||||||
{
|
{
|
||||||
std::string text = dlg->get_input_text().toStdString();
|
std::string text = dlg->get_input_text().toStdString();
|
||||||
|
|
||||||
@@ -3118,13 +3118,13 @@ void main_window::CreateConnects()
|
|||||||
m_game_list_frame->Refresh(true); // New user may have different games unlocked.
|
m_game_list_frame->Refresh(true); // New user may have different games unlocked.
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(ui->actionManage_Screenshots, &QAction::triggered, this, [this]
|
connect(ui->actionManage_Screenshots, &QAction::triggered, this, []
|
||||||
{
|
{
|
||||||
screenshot_manager_dialog* screenshot_manager = new screenshot_manager_dialog();
|
screenshot_manager_dialog* screenshot_manager = new screenshot_manager_dialog();
|
||||||
screenshot_manager->show();
|
screenshot_manager->show();
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(ui->actionManage_SoundEffects, &QAction::triggered, this, [this]
|
connect(ui->actionManage_SoundEffects, &QAction::triggered, this, []
|
||||||
{
|
{
|
||||||
sound_effect_manager_dialog* dlg = new sound_effect_manager_dialog();
|
sound_effect_manager_dialog* dlg = new sound_effect_manager_dialog();
|
||||||
dlg->show();
|
dlg->show();
|
||||||
@@ -3376,7 +3376,7 @@ void main_window::CreateConnects()
|
|||||||
welcome->open();
|
welcome->open();
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(ui->supportAct, &QAction::triggered, this, [this]
|
connect(ui->supportAct, &QAction::triggered, this, []
|
||||||
{
|
{
|
||||||
QDesktopServices::openUrl(QUrl("https://rpcs3.net/patreon"));
|
QDesktopServices::openUrl(QUrl("https://rpcs3.net/patreon"));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -575,7 +575,7 @@ void savestate_manager_dialog::ShowGameTableContextMenu(const QPoint& pos)
|
|||||||
if (!name.isEmpty())
|
if (!name.isEmpty())
|
||||||
{
|
{
|
||||||
QAction* copy_name = new QAction(tr("&Copy Name"), menu);
|
QAction* copy_name = new QAction(tr("&Copy Name"), menu);
|
||||||
connect(copy_name, &QAction::triggered, this, [this, name]()
|
connect(copy_name, &QAction::triggered, this, [name]()
|
||||||
{
|
{
|
||||||
QApplication::clipboard()->setText(name);
|
QApplication::clipboard()->setText(name);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -858,7 +858,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std
|
|||||||
ui->vulkansched->setEnabled(is_vulkan);
|
ui->vulkansched->setEnabled(is_vulkan);
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto apply_fsr_specific_options = [r_creator, this]()
|
const auto apply_fsr_specific_options = [this]()
|
||||||
{
|
{
|
||||||
const auto [text, value] = get_data(ui->outputScalingMode, ui->outputScalingMode->currentIndex());
|
const auto [text, value] = get_data(ui->outputScalingMode, ui->outputScalingMode->currentIndex());
|
||||||
const bool fsr_selected = static_cast<output_scaling_mode>(value) == output_scaling_mode::fsr;
|
const bool fsr_selected = static_cast<output_scaling_mode>(value) == output_scaling_mode::fsr;
|
||||||
@@ -2095,7 +2095,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std
|
|||||||
|
|
||||||
connect(ui->edit_button_game_window_title_format, &QAbstractButton::clicked, [get_game_window_title, set_game_window_title, this]()
|
connect(ui->edit_button_game_window_title_format, &QAbstractButton::clicked, [get_game_window_title, set_game_window_title, this]()
|
||||||
{
|
{
|
||||||
auto get_game_window_title_label = [get_game_window_title, set_game_window_title, this](const QString& format)
|
auto get_game_window_title_label = [get_game_window_title](const QString& format)
|
||||||
{
|
{
|
||||||
const QString game_window_title = get_game_window_title(format);
|
const QString game_window_title = get_game_window_title(format);
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ sound_effect_manager_dialog::sound_effect_manager_dialog(QWidget* parent)
|
|||||||
}
|
}
|
||||||
|
|
||||||
QPushButton* button = new QPushButton("", this);
|
QPushButton* button = new QPushButton("", this);
|
||||||
connect(button, &QAbstractButton::clicked, this, [this, button, sound, name]()
|
connect(button, &QAbstractButton::clicked, this, [this, sound, name]()
|
||||||
{
|
{
|
||||||
const std::string path = rsx::overlays::get_sound_filepath(sound);
|
const std::string path = rsx::overlays::get_sound_filepath(sound);
|
||||||
if (fs::is_file(path))
|
if (fs::is_file(path))
|
||||||
|
|||||||
@@ -392,7 +392,7 @@ trophy_manager_dialog::trophy_manager_dialog(std::shared_ptr<gui_settings> gui_s
|
|||||||
m_trophy_table->create_header_actions(m_trophy_column_acts,
|
m_trophy_table->create_header_actions(m_trophy_column_acts,
|
||||||
[this](int col) { return m_gui_settings->GetTrophylistColVisibility(static_cast<gui::trophy_list_columns>(col)); },
|
[this](int col) { return m_gui_settings->GetTrophylistColVisibility(static_cast<gui::trophy_list_columns>(col)); },
|
||||||
[this](int col, bool visible) { m_gui_settings->SetTrophylistColVisibility(static_cast<gui::trophy_list_columns>(col), visible); });
|
[this](int col, bool visible) { m_gui_settings->SetTrophylistColVisibility(static_cast<gui::trophy_list_columns>(col), visible); });
|
||||||
|
|
||||||
m_game_table->create_header_actions(m_game_column_acts,
|
m_game_table->create_header_actions(m_game_column_acts,
|
||||||
[this](int col) { return m_gui_settings->GetTrophyGamelistColVisibility(static_cast<gui::trophy_game_list_columns>(col)); },
|
[this](int col) { return m_gui_settings->GetTrophyGamelistColVisibility(static_cast<gui::trophy_game_list_columns>(col)); },
|
||||||
[this](int col, bool visible) { m_gui_settings->SetTrophyGamelistColVisibility(static_cast<gui::trophy_game_list_columns>(col), visible); });
|
[this](int col, bool visible) { m_gui_settings->SetTrophyGamelistColVisibility(static_cast<gui::trophy_game_list_columns>(col), visible); });
|
||||||
@@ -651,7 +651,7 @@ void trophy_manager_dialog::ResizeGameIcons()
|
|||||||
const int trophy_index = item->data(GameUserRole::GameIndex).toInt();
|
const int trophy_index = item->data(GameUserRole::GameIndex).toInt();
|
||||||
QString trophy_icon_path = QString::fromStdString(m_trophies_db[trophy_index]->path);
|
QString trophy_icon_path = QString::fromStdString(m_trophies_db[trophy_index]->path);
|
||||||
|
|
||||||
item->set_icon_load_func([this, icon_path = std::move(trophy_icon_path), localized_icon, trophy_index, cancel = item->icon_loading_aborted(), dpr](int index)
|
item->set_icon_load_func([this, icon_path = std::move(trophy_icon_path), localized_icon, cancel = item->icon_loading_aborted(), dpr](int index)
|
||||||
{
|
{
|
||||||
if (cancel && cancel->load())
|
if (cancel && cancel->load())
|
||||||
{
|
{
|
||||||
@@ -897,7 +897,7 @@ void trophy_manager_dialog::ShowTrophyTableContextMenu(const QPoint& pos)
|
|||||||
if (!name.isEmpty() && !desc.isEmpty())
|
if (!name.isEmpty() && !desc.isEmpty())
|
||||||
{
|
{
|
||||||
QAction* copy_both = new QAction(tr("&Copy Name + Description"), copy_menu);
|
QAction* copy_both = new QAction(tr("&Copy Name + Description"), copy_menu);
|
||||||
connect(copy_both, &QAction::triggered, this, [this, name, desc]()
|
connect(copy_both, &QAction::triggered, this, [name, desc]()
|
||||||
{
|
{
|
||||||
QApplication::clipboard()->setText(name % QStringLiteral("\n\n") % desc);
|
QApplication::clipboard()->setText(name % QStringLiteral("\n\n") % desc);
|
||||||
});
|
});
|
||||||
@@ -907,7 +907,7 @@ void trophy_manager_dialog::ShowTrophyTableContextMenu(const QPoint& pos)
|
|||||||
if (!name.isEmpty())
|
if (!name.isEmpty())
|
||||||
{
|
{
|
||||||
QAction* copy_name = new QAction(tr("&Copy Name"), copy_menu);
|
QAction* copy_name = new QAction(tr("&Copy Name"), copy_menu);
|
||||||
connect(copy_name, &QAction::triggered, this, [this, name]()
|
connect(copy_name, &QAction::triggered, this, [name]()
|
||||||
{
|
{
|
||||||
QApplication::clipboard()->setText(name);
|
QApplication::clipboard()->setText(name);
|
||||||
});
|
});
|
||||||
@@ -917,7 +917,7 @@ void trophy_manager_dialog::ShowTrophyTableContextMenu(const QPoint& pos)
|
|||||||
if (!desc.isEmpty())
|
if (!desc.isEmpty())
|
||||||
{
|
{
|
||||||
QAction* copy_desc = new QAction(tr("&Copy Description"), copy_menu);
|
QAction* copy_desc = new QAction(tr("&Copy Description"), copy_menu);
|
||||||
connect(copy_desc, &QAction::triggered, this, [this, desc]()
|
connect(copy_desc, &QAction::triggered, this, [desc]()
|
||||||
{
|
{
|
||||||
QApplication::clipboard()->setText(desc);
|
QApplication::clipboard()->setText(desc);
|
||||||
});
|
});
|
||||||
@@ -1038,7 +1038,7 @@ void trophy_manager_dialog::ShowGameTableContextMenu(const QPoint& pos)
|
|||||||
if (!name.isEmpty())
|
if (!name.isEmpty())
|
||||||
{
|
{
|
||||||
QAction* copy_name = new QAction(tr("&Copy Name"), menu);
|
QAction* copy_name = new QAction(tr("&Copy Name"), menu);
|
||||||
connect(copy_name, &QAction::triggered, this, [this, name]()
|
connect(copy_name, &QAction::triggered, this, [name]()
|
||||||
{
|
{
|
||||||
QApplication::clipboard()->setText(name);
|
QApplication::clipboard()->setText(name);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ vfs_dialog_path_widget::vfs_dialog_path_widget(const QString& name, const QStrin
|
|||||||
item->setCheckState(Qt::CheckState::Checked);
|
item->setCheckState(Qt::CheckState::Checked);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(m_dir_list, &QListWidget::currentRowChanged, this, [this, button_remove_dir](int row)
|
connect(m_dir_list, &QListWidget::currentRowChanged, this, [button_remove_dir](int row)
|
||||||
{
|
{
|
||||||
button_remove_dir->setEnabled(row > 0);
|
button_remove_dir->setEnabled(row > 0);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user