summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2023-02-24 14:57:39 +0000
committerdakkar <dakkar@thenautilus.net>2023-02-24 14:57:39 +0000
commit02cab0a9540481bb75db7830adb55e662a3bac94 (patch)
tree468ac6b838c31162a4544d6fd6a5a2b825e07953
parentwhitespace (diff)
downloadtweet-archive-02cab0a9540481bb75db7830adb55e662a3bac94.tar.gz
tweet-archive-02cab0a9540481bb75db7830adb55e662a3bac94.tar.bz2
tweet-archive-02cab0a9540481bb75db7830adb55e662a3bac94.zip
only store friend/followers/following if changed
-rw-r--r--lib/Dakkar/TweetArchive/Store.pm44
1 files changed, 26 insertions, 18 deletions
diff --git a/lib/Dakkar/TweetArchive/Store.pm b/lib/Dakkar/TweetArchive/Store.pm
index f5919d3..1b926d5 100644
--- a/lib/Dakkar/TweetArchive/Store.pm
+++ b/lib/Dakkar/TweetArchive/Store.pm
@@ -90,23 +90,39 @@ SQL
return \@ids;
}
+sub _array_num_equal($a1,$a2) {
+ my ($a1_str, $a2_str) = map {
+ join "\0", sort { $a <=> $b } $_->@*
+ } $a1, $a2;
-sub store_twitter_friends($self,$friends) {
- my $ids = $self->_store_twitter_people($friends);
+ return $a1_str eq $a2_str;
+}
- $self->dbh->do(<<"SQL", {}, $ids);
-INSERT INTO twitter_friends(users) VALUES(?)
+sub _store_people_and_ids($self,$store_method,$ids_table,$people) {
+ my $ids = $self->$store_method($people);
+
+ my ($last_ids) = $self->dbh->selectrow_array(<<"SQL");
+SELECT users
+FROM ${ids_table}
+ORDER BY taken_at DESC
+LIMIT 1
SQL
-}
-sub store_twitter_followers($self,$followers) {
- my $ids = $self->_store_twitter_people($followers);
+ return if $last_ids && _array_num_equal($ids, $last_ids);
$self->dbh->do(<<"SQL", {}, $ids);
-INSERT INTO twitter_followers(users) VALUES(?)
+INSERT INTO ${ids_table}(users) VALUES(?)
SQL
}
+sub store_twitter_friends($self,$friends) {
+ $self->_store_people_and_ids('_store_twitter_people','twitter_friends',$friends);
+}
+
+sub store_twitter_followers($self,$followers) {
+ $self->_store_people_and_ids('_store_twitter_people','twitter_followers',$followers);
+}
+
# misskey notes
sub latest_note_id($self) {
@@ -152,19 +168,11 @@ SQL
sub store_misskey_following($self,$following) {
- my $ids = $self->_store_misskey_people($following);
-
- $self->dbh->do(<<"SQL", {}, $ids);
-INSERT INTO misskey_following(users) VALUES(?)
-SQL
+ $self->_store_people_and_ids('_store_misskey_people','misskey_following',$following);
}
sub store_misskey_followers($self,$followers) {
- my $ids = $self->_store_misskey_people($followers);
-
- $self->dbh->do(<<"SQL", {}, $ids);
-INSERT INTO misskey_followers(users) VALUES(?)
-SQL
+ $self->_store_people_and_ids('_store_misskey_people','misskey_followers',$followers);
}
# schema