mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Rename GncSxInstances->list to instance_list, which at least emacs doesn't hilight as a (potential)keyword.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@15835 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
d2f7b84a4e
commit
49640205d3
@ -337,8 +337,6 @@ gnc_sx_instance_get_variables(GncSxInstance *inst)
|
|||||||
{
|
{
|
||||||
GList *vars = NULL;
|
GList *vars = NULL;
|
||||||
g_hash_table_foreach(inst->variable_bindings, _build_list_from_hash_elts, &vars);
|
g_hash_table_foreach(inst->variable_bindings, _build_list_from_hash_elts, &vars);
|
||||||
// @@fixme sort by name
|
|
||||||
// @@fixme make sure the returned list is freed by callers.
|
|
||||||
return vars;
|
return vars;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -373,7 +371,7 @@ _gnc_sx_gen_instances(gpointer *data, gpointer user_data)
|
|||||||
seq_num = gnc_sx_get_instance_count(sx, postponed->data);
|
seq_num = gnc_sx_get_instance_count(sx, postponed->data);
|
||||||
inst = gnc_sx_instance_new(instances, SX_INSTANCE_STATE_POSTPONED, &inst_date, postponed->data, seq_num);
|
inst = gnc_sx_instance_new(instances, SX_INSTANCE_STATE_POSTPONED, &inst_date, postponed->data, seq_num);
|
||||||
//inst->temporal_state = postponed->data;
|
//inst->temporal_state = postponed->data;
|
||||||
instances->list = g_list_append(instances->list, inst);
|
instances->instance_list = g_list_append(instances->instance_list, inst);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -388,7 +386,7 @@ _gnc_sx_gen_instances(gpointer *data, gpointer user_data)
|
|||||||
int seq_num;
|
int seq_num;
|
||||||
seq_num = gnc_sx_get_instance_count(sx, sequence_ctx);
|
seq_num = gnc_sx_get_instance_count(sx, sequence_ctx);
|
||||||
inst = gnc_sx_instance_new(instances, SX_INSTANCE_STATE_TO_CREATE, &cur_date, sequence_ctx, seq_num);
|
inst = gnc_sx_instance_new(instances, SX_INSTANCE_STATE_TO_CREATE, &cur_date, sequence_ctx, seq_num);
|
||||||
instances->list = g_list_append(instances->list, inst);
|
instances->instance_list = g_list_append(instances->instance_list, inst);
|
||||||
gnc_sx_incr_temporal_state(sx, sequence_ctx);
|
gnc_sx_incr_temporal_state(sx, sequence_ctx);
|
||||||
cur_date = xaccSchedXactionGetInstanceAfter(sx, &cur_date, sequence_ctx);
|
cur_date = xaccSchedXactionGetInstanceAfter(sx, &cur_date, sequence_ctx);
|
||||||
}
|
}
|
||||||
@ -400,7 +398,7 @@ _gnc_sx_gen_instances(gpointer *data, gpointer user_data)
|
|||||||
int seq_num;
|
int seq_num;
|
||||||
seq_num = gnc_sx_get_instance_count(sx, sequence_ctx);
|
seq_num = gnc_sx_get_instance_count(sx, sequence_ctx);
|
||||||
inst = gnc_sx_instance_new(instances, SX_INSTANCE_STATE_REMINDER, &cur_date, sequence_ctx, seq_num);
|
inst = gnc_sx_instance_new(instances, SX_INSTANCE_STATE_REMINDER, &cur_date, sequence_ctx, seq_num);
|
||||||
instances->list = g_list_append(instances->list, inst);
|
instances->instance_list = g_list_append(instances->instance_list, inst);
|
||||||
gnc_sx_incr_temporal_state(sx, sequence_ctx);
|
gnc_sx_incr_temporal_state(sx, sequence_ctx);
|
||||||
cur_date = xaccSchedXactionGetInstanceAfter(sx, &cur_date, sequence_ctx);
|
cur_date = xaccSchedXactionGetInstanceAfter(sx, &cur_date, sequence_ctx);
|
||||||
}
|
}
|
||||||
@ -515,13 +513,13 @@ gnc_sx_instances_free(GncSxInstances *instances)
|
|||||||
// variable_names
|
// variable_names
|
||||||
// sx = null
|
// sx = null
|
||||||
|
|
||||||
for (instance_iter = instances->list; instance_iter != NULL; instance_iter = instance_iter->next)
|
for (instance_iter = instances->instance_list; instance_iter != NULL; instance_iter = instance_iter->next)
|
||||||
{
|
{
|
||||||
GncSxInstance *inst = (GncSxInstance*)instance_iter->data;
|
GncSxInstance *inst = (GncSxInstance*)instance_iter->data;
|
||||||
gnc_sx_instance_free(inst);
|
gnc_sx_instance_free(inst);
|
||||||
}
|
}
|
||||||
g_list_free(instances->list);
|
g_list_free(instances->instance_list);
|
||||||
instances->list = NULL;
|
instances->instance_list = NULL;
|
||||||
|
|
||||||
g_free(instances);
|
g_free(instances);
|
||||||
}
|
}
|
||||||
@ -739,8 +737,8 @@ gnc_sx_instance_model_update_sx_instances(GncSxInstanceModel *model, SchedXactio
|
|||||||
// step through the lists pairwise, and retain the existing
|
// step through the lists pairwise, and retain the existing
|
||||||
// instance if the dates align, as soon as they don't stop and
|
// instance if the dates align, as soon as they don't stop and
|
||||||
// cleanup.
|
// cleanup.
|
||||||
existing_iter = existing->list;
|
existing_iter = existing->instance_list;
|
||||||
new_iter = new_instances->list;
|
new_iter = new_instances->instance_list;
|
||||||
for (; existing_iter != NULL && new_iter != NULL; existing_iter = existing_iter->next, new_iter = new_iter->next)
|
for (; existing_iter != NULL && new_iter != NULL; existing_iter = existing_iter->next, new_iter = new_iter->next)
|
||||||
{
|
{
|
||||||
GncSxInstance *existing_inst, *new_inst;
|
GncSxInstance *existing_inst, *new_inst;
|
||||||
@ -759,7 +757,7 @@ gnc_sx_instance_model_update_sx_instances(GncSxInstanceModel *model, SchedXactio
|
|||||||
if (existing_remain)
|
if (existing_remain)
|
||||||
{
|
{
|
||||||
// delete excess
|
// delete excess
|
||||||
gnc_g_list_cut(&existing->list, existing_iter);
|
gnc_g_list_cut(&existing->instance_list, existing_iter);
|
||||||
g_list_foreach(existing_iter, (GFunc)gnc_sx_instance_free, NULL);
|
g_list_foreach(existing_iter, (GFunc)gnc_sx_instance_free, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -767,13 +765,13 @@ gnc_sx_instance_model_update_sx_instances(GncSxInstanceModel *model, SchedXactio
|
|||||||
{
|
{
|
||||||
// append new
|
// append new
|
||||||
GList *new_iter_iter;
|
GList *new_iter_iter;
|
||||||
gnc_g_list_cut(&new_instances->list, new_iter);
|
gnc_g_list_cut(&new_instances->instance_list, new_iter);
|
||||||
|
|
||||||
for (new_iter_iter = new_iter; new_iter_iter != NULL; new_iter_iter = new_iter_iter->next)
|
for (new_iter_iter = new_iter; new_iter_iter != NULL; new_iter_iter = new_iter_iter->next)
|
||||||
{
|
{
|
||||||
GncSxInstance *inst = (GncSxInstance*)new_iter_iter->data;
|
GncSxInstance *inst = (GncSxInstance*)new_iter_iter->data;
|
||||||
inst->parent = existing;
|
inst->parent = existing;
|
||||||
existing->list = g_list_append(existing->list, new_iter_iter->data);
|
existing->instance_list = g_list_append(existing->instance_list, new_iter_iter->data);
|
||||||
}
|
}
|
||||||
g_list_free(new_iter);
|
g_list_free(new_iter);
|
||||||
}
|
}
|
||||||
@ -801,7 +799,7 @@ gnc_sx_instance_model_update_sx_instances(GncSxInstanceModel *model, SchedXactio
|
|||||||
existing->variable_names = new_instances->variable_names;
|
existing->variable_names = new_instances->variable_names;
|
||||||
new_instances->variable_names = NULL;
|
new_instances->variable_names = NULL;
|
||||||
|
|
||||||
for (inst_iter = existing->list; inst_iter != NULL; inst_iter = inst_iter->next)
|
for (inst_iter = existing->instance_list; inst_iter != NULL; inst_iter = inst_iter->next)
|
||||||
{
|
{
|
||||||
GList *var_iter;
|
GList *var_iter;
|
||||||
GncSxInstance *inst = (GncSxInstance*)inst_iter->data;
|
GncSxInstance *inst = (GncSxInstance*)inst_iter->data;
|
||||||
@ -888,10 +886,10 @@ _get_template_split_account(GncSxInstance *instance, Split *template_split, Acco
|
|||||||
NULL);
|
NULL);
|
||||||
if (kvp_val == NULL)
|
if (kvp_val == NULL)
|
||||||
{
|
{
|
||||||
// @@fixme: this should be more of an assert...
|
|
||||||
GString *err = g_string_new("");
|
GString *err = g_string_new("");
|
||||||
g_string_printf(err, "Null account kvp value for SX [%s], cancelling creation.",
|
g_string_printf(err, "Null account kvp value for SX [%s], cancelling creation.",
|
||||||
xaccSchedXactionGetName(instance->parent->sx));
|
xaccSchedXactionGetName(instance->parent->sx));
|
||||||
|
g_critical("%s", err->str);
|
||||||
*creation_errors = g_list_append(*creation_errors, err);
|
*creation_errors = g_list_append(*creation_errors, err);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -1176,14 +1174,14 @@ gnc_sx_instance_model_effect_change(GncSxInstanceModel *model,
|
|||||||
// If there are no instances, then skip; specifically, skip
|
// If there are no instances, then skip; specifically, skip
|
||||||
// re-setting SchedXaction fields, which will dirty the book
|
// re-setting SchedXaction fields, which will dirty the book
|
||||||
// spuriously.
|
// spuriously.
|
||||||
if (g_list_length(instances->list) == 0)
|
if (g_list_length(instances->instance_list) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
last_occur_date = xaccSchedXactionGetLastOccurDate(instances->sx);
|
last_occur_date = xaccSchedXactionGetLastOccurDate(instances->sx);
|
||||||
instance_count = gnc_sx_get_instance_count(instances->sx, NULL);
|
instance_count = gnc_sx_get_instance_count(instances->sx, NULL);
|
||||||
remain_occur_count = xaccSchedXactionGetRemOccur(instances->sx);
|
remain_occur_count = xaccSchedXactionGetRemOccur(instances->sx);
|
||||||
|
|
||||||
for (instance_iter = instances->list; instance_iter != NULL; instance_iter = instance_iter->next)
|
for (instance_iter = instances->instance_list; instance_iter != NULL; instance_iter = instance_iter->next)
|
||||||
{
|
{
|
||||||
GncSxInstance *inst = (GncSxInstance*)instance_iter->data;
|
GncSxInstance *inst = (GncSxInstance*)instance_iter->data;
|
||||||
gboolean sx_is_auto_create;
|
gboolean sx_is_auto_create;
|
||||||
@ -1255,7 +1253,7 @@ gnc_sx_instance_model_change_instance_state(GncSxInstanceModel *model,
|
|||||||
// ensure 'remind' constraints are met:
|
// ensure 'remind' constraints are met:
|
||||||
{
|
{
|
||||||
GList *inst_iter;
|
GList *inst_iter;
|
||||||
inst_iter = g_list_find(instance->parent->list, instance);
|
inst_iter = g_list_find(instance->parent->instance_list, instance);
|
||||||
g_assert(inst_iter != NULL);
|
g_assert(inst_iter != NULL);
|
||||||
if (instance->state != SX_INSTANCE_STATE_REMINDER)
|
if (instance->state != SX_INSTANCE_STATE_REMINDER)
|
||||||
{
|
{
|
||||||
@ -1312,7 +1310,7 @@ gnc_sx_instance_model_check_variables(GncSxInstanceModel *model)
|
|||||||
for (sx_iter = model->sx_instance_list; sx_iter != NULL; sx_iter = sx_iter->next)
|
for (sx_iter = model->sx_instance_list; sx_iter != NULL; sx_iter = sx_iter->next)
|
||||||
{
|
{
|
||||||
GncSxInstances *instances = (GncSxInstances*)sx_iter->data;
|
GncSxInstances *instances = (GncSxInstances*)sx_iter->data;
|
||||||
for (inst_iter = instances->list; inst_iter != NULL; inst_iter = inst_iter->next)
|
for (inst_iter = instances->instance_list; inst_iter != NULL; inst_iter = inst_iter->next)
|
||||||
{
|
{
|
||||||
GncSxInstance *inst = (GncSxInstance*)inst_iter->data;
|
GncSxInstance *inst = (GncSxInstance*)inst_iter->data;
|
||||||
|
|
||||||
@ -1357,7 +1355,7 @@ gnc_sx_instance_model_summarize(GncSxInstanceModel *model, GncSxSummary *summary
|
|||||||
GncSxInstances *instances = (GncSxInstances*)sx_iter->data;
|
GncSxInstances *instances = (GncSxInstances*)sx_iter->data;
|
||||||
gboolean sx_is_auto_create = FALSE, sx_notify = FALSE;
|
gboolean sx_is_auto_create = FALSE, sx_notify = FALSE;
|
||||||
xaccSchedXactionGetAutoCreate(instances->sx, &sx_is_auto_create, &sx_notify);
|
xaccSchedXactionGetAutoCreate(instances->sx, &sx_is_auto_create, &sx_notify);
|
||||||
for (inst_iter = instances->list; inst_iter != NULL; inst_iter = inst_iter->next)
|
for (inst_iter = instances->instance_list; inst_iter != NULL; inst_iter = inst_iter->next)
|
||||||
{
|
{
|
||||||
GncSxInstance *inst = (GncSxInstance*)inst_iter->data;
|
GncSxInstance *inst = (GncSxInstance*)inst_iter->data;
|
||||||
summary->num_instances++;
|
summary->num_instances++;
|
||||||
|
@ -75,7 +75,7 @@ typedef struct _GncSxInstances
|
|||||||
GDate next_instance_date;
|
GDate next_instance_date;
|
||||||
|
|
||||||
/** GList<GncSxInstance*> **/
|
/** GList<GncSxInstance*> **/
|
||||||
GList *list; /* @fixme: s/list/?/ */
|
GList *instance_list;
|
||||||
} GncSxInstances;
|
} GncSxInstances;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
@ -126,7 +126,7 @@ GncSxInstanceModel* gnc_sx_get_instances(GDate *range_end, gboolean include_disa
|
|||||||
void gnc_sx_instance_model_update_sx_instances(GncSxInstanceModel *model, SchedXaction *sx);
|
void gnc_sx_instance_model_update_sx_instances(GncSxInstanceModel *model, SchedXaction *sx);
|
||||||
void gnc_sx_instance_model_remove_sx_instances(GncSxInstanceModel *model, SchedXaction *sx);
|
void gnc_sx_instance_model_remove_sx_instances(GncSxInstanceModel *model, SchedXaction *sx);
|
||||||
|
|
||||||
/** @return GList<GncSxVariable*> **/
|
/** @return GList<GncSxVariable*>. Caller owns the list, but not the items. **/
|
||||||
GList *gnc_sx_instance_get_variables(GncSxInstance *inst);
|
GList *gnc_sx_instance_get_variables(GncSxInstance *inst);
|
||||||
|
|
||||||
Account* gnc_sx_get_template_transaction_account(SchedXaction *sx);
|
Account* gnc_sx_get_template_transaction_account(SchedXaction *sx);
|
||||||
|
@ -35,8 +35,8 @@ test_basic()
|
|||||||
|
|
||||||
do_test(g_list_length(model->sx_instance_list) == 1, "1 GncSxInstances");
|
do_test(g_list_length(model->sx_instance_list) == 1, "1 GncSxInstances");
|
||||||
insts = (GncSxInstances*)model->sx_instance_list->data;
|
insts = (GncSxInstances*)model->sx_instance_list->data;
|
||||||
do_test(g_list_length(insts->list) == 3, "yesterday, today and tomorrow");
|
do_test(g_list_length(insts->instance_list) == 3, "yesterday, today and tomorrow");
|
||||||
for (iter = insts->list; iter != NULL; iter = iter->next)
|
for (iter = insts->instance_list; iter != NULL; iter = iter->next)
|
||||||
{
|
{
|
||||||
GncSxInstance *inst = (GncSxInstance*)iter->data;
|
GncSxInstance *inst = (GncSxInstance*)iter->data;
|
||||||
do_test(inst->state == SX_INSTANCE_STATE_TO_CREATE, "to-create");
|
do_test(inst->state == SX_INSTANCE_STATE_TO_CREATE, "to-create");
|
||||||
@ -90,8 +90,8 @@ test_once()
|
|||||||
|
|
||||||
do_test(g_list_length(model->sx_instance_list) == 1, "1 instances");
|
do_test(g_list_length(model->sx_instance_list) == 1, "1 instances");
|
||||||
instances = (GncSxInstances*)model->sx_instance_list->data;
|
instances = (GncSxInstances*)model->sx_instance_list->data;
|
||||||
do_test(g_list_length(instances->list) == 1, "1 instance");
|
do_test(g_list_length(instances->instance_list) == 1, "1 instance");
|
||||||
instance = (GncSxInstance*)instances->list->data;
|
instance = (GncSxInstance*)instances->instance_list->data;
|
||||||
do_test(g_date_compare(when, &instances->next_instance_date) == 0, "next instance is expected");
|
do_test(g_date_compare(when, &instances->next_instance_date) == 0, "next instance is expected");
|
||||||
do_test(g_date_compare(when, &instance->date) == 0, "instance date is expected");
|
do_test(g_date_compare(when, &instance->date) == 0, "instance date is expected");
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ test_once()
|
|||||||
static GncSxInstance*
|
static GncSxInstance*
|
||||||
_nth_instance(GncSxInstances *instances, int i)
|
_nth_instance(GncSxInstances *instances, int i)
|
||||||
{
|
{
|
||||||
return (GncSxInstance*)g_list_nth_data(instances->list, i);
|
return (GncSxInstance*)g_list_nth_data(instances->instance_list, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -127,7 +127,7 @@ test_state_changes()
|
|||||||
|
|
||||||
do_test(g_list_length(model->sx_instance_list) == 1, "one sx");
|
do_test(g_list_length(model->sx_instance_list) == 1, "one sx");
|
||||||
insts = (GncSxInstances*)g_list_nth_data(model->sx_instance_list, 0);
|
insts = (GncSxInstances*)g_list_nth_data(model->sx_instance_list, 0);
|
||||||
do_test(g_list_length(insts->list) == 4, "4 instances");
|
do_test(g_list_length(insts->instance_list) == 4, "4 instances");
|
||||||
|
|
||||||
inst = _nth_instance(insts, 2);
|
inst = _nth_instance(insts, 2);
|
||||||
gnc_sx_instance_model_change_instance_state(model, inst, SX_INSTANCE_STATE_TO_CREATE);
|
gnc_sx_instance_model_change_instance_state(model, inst, SX_INSTANCE_STATE_TO_CREATE);
|
||||||
|
@ -225,7 +225,7 @@ gsidca_get_instance_count(GncDenseCalModel *model, guint tag)
|
|||||||
= (GncSxInstances*)g_list_find_custom(adapter->instances->sx_instance_list, GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
|
= (GncSxInstances*)g_list_find_custom(adapter->instances->sx_instance_list, GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
|
||||||
if (insts == NULL)
|
if (insts == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
return g_list_length(insts->list);
|
return g_list_length(insts->instance_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -237,7 +237,7 @@ gsidca_get_instance(GncDenseCalModel *model, guint tag, gint instance_index, GDa
|
|||||||
= (GncSxInstances*)g_list_find_custom(adapter->instances->sx_instance_list, GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
|
= (GncSxInstances*)g_list_find_custom(adapter->instances->sx_instance_list, GUINT_TO_POINTER(tag), gsidca_find_sx_with_tag)->data;
|
||||||
if (insts == NULL)
|
if (insts == NULL)
|
||||||
return;
|
return;
|
||||||
inst = (GncSxInstance*)g_list_nth_data(insts->list, instance_index);
|
inst = (GncSxInstance*)g_list_nth_data(insts->instance_list, instance_index);
|
||||||
g_date_valid(&inst->date);
|
g_date_valid(&inst->date);
|
||||||
*date = inst->date;
|
*date = inst->date;
|
||||||
g_date_valid(date);
|
g_date_valid(date);
|
||||||
|
@ -469,7 +469,7 @@ gsslrtma_populate_tree_store(GncSxSlrTreeModelAdapter *model)
|
|||||||
char instance_date_buf[MAX_DATE_LENGTH+1];
|
char instance_date_buf[MAX_DATE_LENGTH+1];
|
||||||
int instance_index = -1;
|
int instance_index = -1;
|
||||||
|
|
||||||
for (inst_iter = instances->list; inst_iter != NULL; inst_iter = inst_iter->next)
|
for (inst_iter = instances->instance_list; inst_iter != NULL; inst_iter = inst_iter->next)
|
||||||
{
|
{
|
||||||
GncSxInstance *inst = (GncSxInstance*)inst_iter->data;
|
GncSxInstance *inst = (GncSxInstance*)inst_iter->data;
|
||||||
qof_print_gdate(instance_date_buf, MAX_DATE_LENGTH, &inst->date);
|
qof_print_gdate(instance_date_buf, MAX_DATE_LENGTH, &inst->date);
|
||||||
@ -594,12 +594,12 @@ _gnc_sx_slr_model_get_instance(GncSxSlrTreeModelAdapter *model, GtkTreeIter *ite
|
|||||||
gtk_tree_path_free(path);
|
gtk_tree_path_free(path);
|
||||||
|
|
||||||
instances = (GncSxInstances*)g_list_nth_data(model->instances->sx_instance_list, instances_index);
|
instances = (GncSxInstances*)g_list_nth_data(model->instances->sx_instance_list, instances_index);
|
||||||
if (instance_index < 0 || instance_index >= g_list_length(instances->list))
|
if (instance_index < 0 || instance_index >= g_list_length(instances->instance_list))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (GncSxInstance*)g_list_nth_data(instances->list, instance_index);
|
return (GncSxInstance*)g_list_nth_data(instances->instance_list, instance_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
@ -688,7 +688,7 @@ _get_path_for_variable(GncSxSlrTreeModelAdapter *model, GncSxInstance *instance,
|
|||||||
indices[0] = g_list_index(model->instances->sx_instance_list, instance->parent);
|
indices[0] = g_list_index(model->instances->sx_instance_list, instance->parent);
|
||||||
if (indices[0] == -1)
|
if (indices[0] == -1)
|
||||||
return NULL;
|
return NULL;
|
||||||
indices[1] = g_list_index(instance->parent->list, instance);
|
indices[1] = g_list_index(instance->parent->instance_list, instance);
|
||||||
if (indices[1] == -1)
|
if (indices[1] == -1)
|
||||||
return NULL;
|
return NULL;
|
||||||
variables = gnc_sx_instance_get_variables(instance);
|
variables = gnc_sx_instance_get_variables(instance);
|
||||||
|
Loading…
Reference in New Issue
Block a user