|
|
|
@ -173,6 +173,8 @@ struct status* status_new_repost( struct status* s, struct account* a )
|
|
|
|
|
repost->repost_id = s->id;
|
|
|
|
|
repost->published = time(NULL);
|
|
|
|
|
|
|
|
|
|
status_add_repost( s, repost );
|
|
|
|
|
|
|
|
|
|
status_save_new(repost);
|
|
|
|
|
return repost;
|
|
|
|
|
}
|
|
|
|
@ -891,14 +893,16 @@ void status_set_bookmark( struct status* s )
|
|
|
|
|
s->bookmarked = true;
|
|
|
|
|
mkdir_p( "data/bookmarks", 0755 );
|
|
|
|
|
char key[32];
|
|
|
|
|
ffdb_trie_set( "data/owner/bookmarks", format(key,32,"%d",s->id), "T" );
|
|
|
|
|
ffdb_trie_set( "data/owner/bookmarks", format(key,32,"Z-%012d",s->id), "T" );
|
|
|
|
|
ffdb_trie_set( "data/owner/bookmarks", format(key,32,"%d",s->id), NULL ); // Clear older format
|
|
|
|
|
status_save(s);
|
|
|
|
|
}
|
|
|
|
|
void status_clear_bookmark( struct status* s )
|
|
|
|
|
{
|
|
|
|
|
s->bookmarked = false;
|
|
|
|
|
char key[32];
|
|
|
|
|
ffdb_trie_set( "data/owner/bookmarks", format(key,32,"%d",s->id), NULL );
|
|
|
|
|
ffdb_trie_set( "data/owner/bookmarks", format(key,32,"%d",s->id), NULL ); // Clear older format
|
|
|
|
|
ffdb_trie_set( "data/owner/bookmarks", format(key,32,"Z-%012d",s->id), NULL );
|
|
|
|
|
status_save(s);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -916,15 +920,51 @@ void status_get_bookmarks( int offset, int limit, void* results_ptr )
|
|
|
|
|
} *results = results_ptr;
|
|
|
|
|
results->count = 0;
|
|
|
|
|
|
|
|
|
|
ffdb_trie_list( "data/owner/bookmarks", offset, limit, &keys, NULL );
|
|
|
|
|
const char* index = "data/owner/bookmarks";
|
|
|
|
|
|
|
|
|
|
enum {
|
|
|
|
|
migrate_count = 10,
|
|
|
|
|
};
|
|
|
|
|
int count;
|
|
|
|
|
int clean_limit = count = ffdb_trie_count( index );
|
|
|
|
|
if( clean_limit > migrate_count ) {
|
|
|
|
|
clean_limit = migrate_count;
|
|
|
|
|
}
|
|
|
|
|
ffdb_trie_list( index, count - clean_limit, clean_limit, &keys, NULL );
|
|
|
|
|
|
|
|
|
|
for( int i = 0; i < keys.count; ++i ) {
|
|
|
|
|
int id;
|
|
|
|
|
if( 1 == sscanf( keys.items[i], "%d", &id ) ) {
|
|
|
|
|
struct status* s = status_from_id(id);
|
|
|
|
|
if( s ) {
|
|
|
|
|
array_append( results_ptr, sizeof(s), &s );
|
|
|
|
|
status_set_bookmark(s);
|
|
|
|
|
status_free(s);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
free(keys.items[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
keys.count = 0;
|
|
|
|
|
|
|
|
|
|
ffdb_trie_list( index, offset, limit, &keys, NULL );
|
|
|
|
|
for( int i = 0; i < keys.count; ++i ) {
|
|
|
|
|
int id;
|
|
|
|
|
bool reset = false;
|
|
|
|
|
if( 1 == sscanf( keys.items[i], "Z-%012d", &id ) ) {
|
|
|
|
|
} else if( 1 == sscanf( keys.items[i], "%d", &id ) ) {
|
|
|
|
|
reset = true;
|
|
|
|
|
} else {
|
|
|
|
|
goto next_iteration;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct status* s = status_from_id(id);
|
|
|
|
|
if( s ) {
|
|
|
|
|
array_append( results_ptr, sizeof(s), &s );
|
|
|
|
|
if( reset ) {
|
|
|
|
|
status_set_bookmark(s);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
next_iteration:
|
|
|
|
|
free( keys.items[i] );
|
|
|
|
|
}
|
|
|
|
|
free( keys.items );
|
|
|
|
|