mourningdove/bin/delete-bogus-media.pl

86 lines
1.9 KiB
Perl
Raw Permalink Normal View History

2026-05-24 01:03:05 +00:00
#!/usr/bin/perl
use v5.10;
use strict;
BEGIN { require "$ENV{LJHOME}/cgi-bin/ljlib.pl"; }
use Getopt::Long;
use DW::BlobStore;
use DW::Media;
sub usage {
die "Usage: $0 -u USER MEDIAID\n";
}
my ( $user, $versionid );
GetOptions( 'user=s' => \$user, );
if (@ARGV) {
if ( $ARGV[0] =~ /^\d+$/ ) {
$versionid = shift;
}
else {
usage();
}
}
else {
usage();
}
my $u = LJ::load_user($user)
or usage();
# Select row from media_versions
my @mv =
$u->selectrow_array( "SELECT mediaid FROM media_versions" . " WHERE userid=? AND versionid=?",
undef, $u->id, $versionid );
unless (@mv) {
say 'User has no matching media, nothing to do.';
exit 0;
}
my ($mediaid) = @mv;
if ( $mediaid == $versionid ) {
# this is the original, so the corresponding row in
# the media table needs to have its state updated
$u->do( "UPDATE media SET state='D' WHERE userid=? AND mediaid=?", undef, $u->id, $mediaid );
if ( $u->err ) {
say "Error updating media table: " . $u->errstr;
exit 1;
}
else {
say "User's mediaid $mediaid has been marked as deleted.";
}
# next, find any resized versions and queue them for deletion as well
my @thumbs = $u->selectrow_array(
"SELECT versionid FROM media_versions WHERE userid=? AND mediaid=?"
. " AND mediaid != versionid",
undef, $u->id, $mediaid
);
push @mv, @thumbs;
}
else {
@mv = ($versionid);
}
foreach my $id (@mv) {
# create a fake object to get the mogkey
my $fakeobj = bless { userid => $u->id, versionid => $id }, 'DW::Media::Photo';
my $mogkey = $fakeobj->mogkey;
# attempt to delete the file
if ( DW::BlobStore->delete( media => $mogkey ) ) {
say "File $mogkey has been deleted.";
}
else {
say "File $mogkey was not deleted (not found).";
}
}
exit 0;