|
|
|
@ -57,27 +57,27 @@ struct json_enum ap_object_type_enum[] = {
|
|
|
|
|
struct json_tagged_union_typelist activity_ref_types[] = {
|
|
|
|
|
{
|
|
|
|
|
.tag_value = apaot_ref,
|
|
|
|
|
.offset = offsetof( struct ap_activity, object.ref ),
|
|
|
|
|
.offset = offsetof( struct ap_object, object.ref ),
|
|
|
|
|
.type = &json_field_string
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.tag_value = apaot_activity,
|
|
|
|
|
.offset = offsetof( struct ap_activity, object.ptr ),
|
|
|
|
|
.type = &ap_activity_type
|
|
|
|
|
.offset = offsetof( struct ap_object, object.ptr ),
|
|
|
|
|
.type = &ap_object_type
|
|
|
|
|
},
|
|
|
|
|
JSON_TAGGED_UNION_TYPELIST_END,
|
|
|
|
|
};
|
|
|
|
|
struct json_tagged_union_typelist signature_types[] = {
|
|
|
|
|
{
|
|
|
|
|
.tag_value = 1,
|
|
|
|
|
.offset = offsetof( struct ap_activity, signature ),
|
|
|
|
|
.offset = offsetof( struct ap_object, signature ),
|
|
|
|
|
.type = &ap_signature_composite_type,
|
|
|
|
|
},
|
|
|
|
|
JSON_TAGGED_UNION_TYPELIST_END,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define OBJ_TYPE struct ap_activity
|
|
|
|
|
struct json_object_field ap_activity_layout[] = {
|
|
|
|
|
#define OBJ_TYPE struct ap_object
|
|
|
|
|
struct json_object_field ap_object_layout[] = {
|
|
|
|
|
{
|
|
|
|
|
.key = "@context",
|
|
|
|
|
.offset = offsetof( OBJ_TYPE, ap_context ),
|
|
|
|
@ -91,7 +91,7 @@ struct json_object_field ap_activity_layout[] = {
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
.key = "content",
|
|
|
|
|
.offset = offsetof( struct ap_activity, content ),
|
|
|
|
|
.offset = offsetof( OBJ_TYPE, content ),
|
|
|
|
|
.required = false,
|
|
|
|
|
.type = &ap_activity_source_type
|
|
|
|
|
},
|
|
|
|
@ -99,13 +99,13 @@ struct json_object_field ap_activity_layout[] = {
|
|
|
|
|
JSON_FIELD_DATETIME(published,false),
|
|
|
|
|
{
|
|
|
|
|
.key = "sensitive",
|
|
|
|
|
.offset = offsetof( struct ap_activity, sensitive ),
|
|
|
|
|
.offset = offsetof( OBJ_TYPE, sensitive ),
|
|
|
|
|
.required = false,
|
|
|
|
|
.type = &json_field_bool_or_null
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.key = "source",
|
|
|
|
|
.offset = offsetof( struct ap_activity, source ),
|
|
|
|
|
.offset = offsetof( OBJ_TYPE, source ),
|
|
|
|
|
.required = false,
|
|
|
|
|
.type = &ap_activity_source_type
|
|
|
|
|
},
|
|
|
|
@ -119,7 +119,7 @@ struct json_object_field ap_activity_layout[] = {
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
.key = "tag",
|
|
|
|
|
.offset = offsetof( struct ap_activity, tags ),
|
|
|
|
|
.offset = offsetof( OBJ_TYPE, tags ),
|
|
|
|
|
.required = false,
|
|
|
|
|
.type = &json_field_array_of,
|
|
|
|
|
.allow_drop_empty_array = true,
|
|
|
|
@ -127,7 +127,7 @@ struct json_object_field ap_activity_layout[] = {
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.key = "alsoKnownAs",
|
|
|
|
|
.offset = offsetof( struct ap_activity, also_known_as ),
|
|
|
|
|
.offset = offsetof( OBJ_TYPE, also_known_as ),
|
|
|
|
|
.required = false,
|
|
|
|
|
.allow_drop_empty_array = true,
|
|
|
|
|
.type = &json_field_array_of,
|
|
|
|
@ -145,14 +145,14 @@ struct json_object_field ap_activity_layout[] = {
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
.key = "directMessage",
|
|
|
|
|
.offset = offsetof( struct ap_activity, direct_message ),
|
|
|
|
|
.offset = offsetof( OBJ_TYPE, direct_message ),
|
|
|
|
|
.required = false,
|
|
|
|
|
.type = &json_field_bool
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
.key = "attachment",
|
|
|
|
|
.offset = offsetof( struct ap_activity, attachments ),
|
|
|
|
|
.offset = offsetof( OBJ_TYPE, attachments ),
|
|
|
|
|
.required = false,
|
|
|
|
|
.allow_drop_empty_array = true,
|
|
|
|
|
.type = &json_field_array_of,
|
|
|
|
@ -185,7 +185,7 @@ struct json_object_field ap_activity_layout[] = {
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.key = "object",
|
|
|
|
|
.offset = offsetof( struct ap_activity, object.tag ),
|
|
|
|
|
.offset = offsetof( OBJ_TYPE, object.tag ),
|
|
|
|
|
.required = false,
|
|
|
|
|
.type = &json_field_tagged_union,
|
|
|
|
|
.tagged_item_types = activity_ref_types
|
|
|
|
@ -193,7 +193,7 @@ struct json_object_field ap_activity_layout[] = {
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
.key = "signature",
|
|
|
|
|
.offset = offsetof( struct ap_activity, has_signature ),
|
|
|
|
|
.offset = offsetof( OBJ_TYPE, has_signature ),
|
|
|
|
|
.required = false,
|
|
|
|
|
.type = &json_field_tagged_union,
|
|
|
|
|
.tagged_item_types = signature_types
|
|
|
|
@ -220,21 +220,21 @@ struct json_object_field ap_activity_layout[] = {
|
|
|
|
|
};
|
|
|
|
|
#undef OBJ_TYPE
|
|
|
|
|
|
|
|
|
|
JSON_FIELD_TYPE_OBJECT_LAYOUT_WITH_DEFAULTS( ap_activity );
|
|
|
|
|
JSON_FIELD_TYPE_OBJECT_LAYOUT_WITH_DEFAULTS( ap_object );
|
|
|
|
|
|
|
|
|
|
struct ap_activity* ap_activity_from_FILE( FILE* f )
|
|
|
|
|
struct ap_object* ap_activity_from_FILE( FILE* f )
|
|
|
|
|
{
|
|
|
|
|
struct ap_activity* act = malloc(sizeof(struct ap_activity));
|
|
|
|
|
struct ap_object* act = malloc(sizeof(struct ap_object));
|
|
|
|
|
memset(act,0,sizeof(*act));
|
|
|
|
|
|
|
|
|
|
if( !json_read_object_layout_from_FILE( f, ap_activity_layout, act ) ) {
|
|
|
|
|
ap_activity_free(act);
|
|
|
|
|
if( !json_read_object_layout_from_FILE( f, ap_object_layout, act ) ) {
|
|
|
|
|
ap_object_free(act);
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if( !act->actor ) {
|
|
|
|
|
if( !act->attributed_to ) {
|
|
|
|
|
ap_activity_free(act);
|
|
|
|
|
ap_object_free(act);
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
act->actor = strdup(act->attributed_to);
|
|
|
|
@ -243,31 +243,31 @@ struct ap_activity* ap_activity_from_FILE( FILE* f )
|
|
|
|
|
return act;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ap_activity_write_to_FILE( struct ap_activity* act, FILE* f )
|
|
|
|
|
void ap_activity_write_to_FILE( struct ap_object* act, FILE* f )
|
|
|
|
|
{
|
|
|
|
|
struct json_writer jw = {
|
|
|
|
|
.f = f,
|
|
|
|
|
.indentation = "\t",
|
|
|
|
|
.indent = 0,
|
|
|
|
|
};
|
|
|
|
|
json_write_pretty_object_layout( &jw, ap_activity_layout, act );
|
|
|
|
|
json_write_pretty_object_layout( &jw, ap_object_layout, act );
|
|
|
|
|
}
|
|
|
|
|
void ap_activity_save( struct ap_activity* act )
|
|
|
|
|
void ap_activity_save( struct ap_object* act )
|
|
|
|
|
{
|
|
|
|
|
char filename[512];
|
|
|
|
|
snprintf( filename, sizeof(filename), "data/activities/%d.json", act->local_id );
|
|
|
|
|
|
|
|
|
|
json_write_object_layout_to_file( filename, "\t", ap_activity_layout, act );
|
|
|
|
|
json_write_object_layout_to_file( filename, "\t", ap_object_layout, act );
|
|
|
|
|
}
|
|
|
|
|
struct ap_activity* ap_activity_from_local_id( int id )
|
|
|
|
|
struct ap_object* ap_activity_from_local_id( int id )
|
|
|
|
|
{
|
|
|
|
|
struct ap_activity* act = ap_activity_new();
|
|
|
|
|
struct ap_object* act = ap_activity_new();
|
|
|
|
|
|
|
|
|
|
char filename[512];
|
|
|
|
|
snprintf( filename, sizeof(filename), "data/activities/%d.json", id );
|
|
|
|
|
|
|
|
|
|
if( !json_read_object_layout_from_file( filename, ap_activity_layout, act ) ) {
|
|
|
|
|
ap_activity_free(act);
|
|
|
|
|
if( !json_read_object_layout_from_file( filename, ap_object_layout, act ) ) {
|
|
|
|
|
ap_object_free(act);
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|