ssb: Follow + block = block.
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 9m4s
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 9m4s
This commit is contained in:
40
src/ssb.db.c
40
src/ssb.db.c
@@ -1597,8 +1597,10 @@ typedef struct _following_t
|
|||||||
int depth;
|
int depth;
|
||||||
following_t** following;
|
following_t** following;
|
||||||
following_t** blocking;
|
following_t** blocking;
|
||||||
|
following_t** both;
|
||||||
int following_count;
|
int following_count;
|
||||||
int blocking_count;
|
int blocking_count;
|
||||||
|
int both_count;
|
||||||
int ref_count;
|
int ref_count;
|
||||||
int block_ref_count;
|
int block_ref_count;
|
||||||
} following_t;
|
} following_t;
|
||||||
@@ -1715,14 +1717,27 @@ static void _populate_follows_and_blocks(
|
|||||||
{
|
{
|
||||||
if (_add_following_entry(&entry->following, &entry->following_count, next))
|
if (_add_following_entry(&entry->following, &entry->following_count, next))
|
||||||
{
|
{
|
||||||
next->ref_count++;
|
if (next->ref_count++ == 0 && next->block_ref_count)
|
||||||
|
{
|
||||||
|
if (_remove_following_entry(&entry->blocking, &entry->blocking_count, next))
|
||||||
|
{
|
||||||
|
_remove_following_entry(&entry->following, &entry->following_count, next);
|
||||||
|
_add_following_entry(&entry->both, &entry->both_count, next);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_remove_following_entry(&entry->following, &entry->following_count, next))
|
if (_remove_following_entry(&entry->following, &entry->following_count, next))
|
||||||
{
|
{
|
||||||
next->ref_count--;
|
if (next->ref_count-- == 1 && next->block_ref_count)
|
||||||
|
{
|
||||||
|
if (_remove_following_entry(&entry->both, &entry->both_count, next))
|
||||||
|
{
|
||||||
|
_add_following_entry(&entry->blocking, &entry->blocking_count, next);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1737,14 +1752,29 @@ static void _populate_follows_and_blocks(
|
|||||||
{
|
{
|
||||||
if (_add_following_entry(&entry->blocking, &entry->blocking_count, next))
|
if (_add_following_entry(&entry->blocking, &entry->blocking_count, next))
|
||||||
{
|
{
|
||||||
next->block_ref_count++;
|
if (next->block_ref_count++ == 0 && next->ref_count)
|
||||||
|
{
|
||||||
|
if (_remove_following_entry(&entry->following, &entry->following_count, next))
|
||||||
|
{
|
||||||
|
next->ref_count--;
|
||||||
|
_remove_following_entry(&entry->blocking, &entry->blocking_count, next);
|
||||||
|
_add_following_entry(&entry->both, &entry->both_count, next);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_remove_following_entry(&entry->blocking, &entry->blocking_count, next))
|
if (_remove_following_entry(&entry->blocking, &entry->blocking_count, next))
|
||||||
{
|
{
|
||||||
next->block_ref_count--;
|
if (next->block_ref_count-- == 1)
|
||||||
|
{
|
||||||
|
if (_remove_following_entry(&entry->both, &entry->both_count, next))
|
||||||
|
{
|
||||||
|
next->ref_count++;
|
||||||
|
_add_following_entry(&entry->following, &entry->following_count, next);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1841,6 +1871,7 @@ tf_ssb_following_t* tf_ssb_db_following_deep(tf_ssb_t* ssb, const char** ids, in
|
|||||||
{
|
{
|
||||||
tf_free(following[i]->following);
|
tf_free(following[i]->following);
|
||||||
tf_free(following[i]->blocking);
|
tf_free(following[i]->blocking);
|
||||||
|
tf_free(following[i]->both);
|
||||||
tf_free(following[i]);
|
tf_free(following[i]);
|
||||||
}
|
}
|
||||||
tf_free(following);
|
tf_free(following);
|
||||||
@@ -1892,6 +1923,7 @@ const char** tf_ssb_db_following_deep_ids(tf_ssb_t* ssb, const char** ids, int c
|
|||||||
{
|
{
|
||||||
tf_free(following[i]->following);
|
tf_free(following[i]->following);
|
||||||
tf_free(following[i]->blocking);
|
tf_free(following[i]->blocking);
|
||||||
|
tf_free(following[i]->both);
|
||||||
tf_free(following[i]);
|
tf_free(following[i]);
|
||||||
}
|
}
|
||||||
tf_free(following);
|
tf_free(following);
|
||||||
|
|||||||
@@ -639,8 +639,14 @@ void tf_ssb_test_following(const tf_test_options_t* options)
|
|||||||
message = JS_NewObject(context); \
|
message = JS_NewObject(context); \
|
||||||
JS_SetPropertyStr(context, message, "type", JS_NewString(context, "contact")); \
|
JS_SetPropertyStr(context, message, "type", JS_NewString(context, "contact")); \
|
||||||
JS_SetPropertyStr(context, message, "contact", JS_NewString(context, contact)); \
|
JS_SetPropertyStr(context, message, "contact", JS_NewString(context, contact)); \
|
||||||
JS_SetPropertyStr(context, message, "following", follow ? JS_TRUE : JS_FALSE); \
|
if (follow) \
|
||||||
JS_SetPropertyStr(context, message, "blocking", block ? JS_TRUE : JS_FALSE); \
|
{ \
|
||||||
|
JS_SetPropertyStr(context, message, "following", JS_TRUE); \
|
||||||
|
} \
|
||||||
|
if (block) \
|
||||||
|
{ \
|
||||||
|
JS_SetPropertyStr(context, message, "blocking", JS_TRUE); \
|
||||||
|
} \
|
||||||
signed_message = tf_ssb_sign_message(ssb0, id, priv, message, NULL, 0); \
|
signed_message = tf_ssb_sign_message(ssb0, id, priv, message, NULL, 0); \
|
||||||
stored = false; \
|
stored = false; \
|
||||||
tf_ssb_verify_strip_and_store_message(ssb0, signed_message, _message_stored, &stored); \
|
tf_ssb_verify_strip_and_store_message(ssb0, signed_message, _message_stored, &stored); \
|
||||||
@@ -660,6 +666,11 @@ void tf_ssb_test_following(const tf_test_options_t* options)
|
|||||||
_assert_visible(ssb0, id0, id1, true);
|
_assert_visible(ssb0, id0, id1, true);
|
||||||
_assert_visible(ssb0, id0, id2, true);
|
_assert_visible(ssb0, id0, id2, true);
|
||||||
_assert_visible(ssb0, id0, id3, false);
|
_assert_visible(ssb0, id0, id3, false);
|
||||||
|
FOLLOW_BLOCK(id0, priv0, id1, false, true);
|
||||||
|
_assert_visible(ssb0, id0, id0, true);
|
||||||
|
_assert_visible(ssb0, id0, id1, false);
|
||||||
|
_assert_visible(ssb0, id0, id2, false);
|
||||||
|
_assert_visible(ssb0, id0, id3, false);
|
||||||
|
|
||||||
#undef FOLLOW_BLOCK
|
#undef FOLLOW_BLOCK
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user