summaryrefslogtreecommitdiff
path: root/lib/AniDB/Manager.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/AniDB/Manager.pm')
-rw-r--r--lib/AniDB/Manager.pm48
1 files changed, 47 insertions, 1 deletions
diff --git a/lib/AniDB/Manager.pm b/lib/AniDB/Manager.pm
index eeb724f..0539c07 100644
--- a/lib/AniDB/Manager.pm
+++ b/lib/AniDB/Manager.pm
@@ -4,12 +4,17 @@ use experimental 'signatures';
use Moo;
use Log::Any '$log';
use Path::Tiny;
+use AniDB::Hashing;
use namespace::clean;
has datastore => (
is => 'ro',
required => 1,
- handles => [qw(update)],
+);
+
+has api_client => (
+ is => 'ro',
+ required => 1,
);
around BUILDARGS => sub($orig,$class,@args) {
@@ -20,6 +25,12 @@ around BUILDARGS => sub($orig,$class,@args) {
database => $db_name,
});
}
+ if (my $username = $args->{username}) {
+ require AniDB::APIClient;;
+ $args->{api_client} = AniDB::APIClient->new({
+ %{$args}{qw(username password)},
+ });
+ }
return $args;
};
@@ -35,6 +46,7 @@ sub _build_renamer {
sub new_name_for($self,$path) {
$path = path($path)->realpath;
+ $self->update($path);
my $full_info = $self->datastore->full_info_for($path);
return $self->renamer->new_name_for($path,$full_info);
}
@@ -61,4 +73,38 @@ sub rename($self,$path,$new_path) {
}
}
+sub update($self,$path) {
+ $path = path($path)->realpath;
+
+ my $stat = $path->stat;
+
+ return unless $self->datastore->has_changed($path,$stat);
+
+ my $hash = AniDB::Hashing::hash_fd($path->openr_raw);
+
+ $self->datastore->update_path_info(
+ $path => my $path_info = {
+ size => $stat->size,
+ mtime => $stat->mtime,
+ hash => $hash,
+ },
+ );
+
+ my $episode_info = $self->datastore->episode_info_for($path_info);
+ unless ($episode_info) {
+ $episode_info = $self->api_client->episode_info_for($path_info);
+ $self->datastore->update_episode_info(
+ $path_info, $episode_info,
+ );
+ }
+
+ my $anime_info = $self->datastore->anime_info_for($episode_info);
+ unless ($anime_info) {
+ $anime_info = $self->api_client->anime_info_for($episode_info);
+ $self->datastore->update_anime_info(
+ $episode_info, $anime_info,
+ );
+ }
+}
+
1;