#!/usr/bin/perl use strict; # here to stay? yes use warnings; # here to stay? Unlikely use Win32::OLE; #use Term::Activity; #the idea comes from RemoveDeadTracks.js by Apple print "rm dead tracks from iTunes Main Library (those without location)\n"; #my $ta = new Term::Activity 'iTunes.rmDeadTracks' # or die "Problem with Term::Activity\n"; my $iTunes = Win32::OLE->new("iTunes.Application") or die $!; my $ITTrackKindFile = 1; my $numDeletedTracks = 0; my $mainLibrary = $iTunes->LibraryPlaylist; my $tracks = $iTunes->LibraryPlaylist->Tracks; my $numTracks = $tracks->Count; my $numStart = $numTracks; print "$numTracks in registered in iTunes Main Library\n"; print "1. Current No of item (tracks and albums) in Library\n"; print "2. No of files left to check to complete loop\n"; print "3. Deleted during this loop\n"; # while ( keys %deletedTracks < 2 ) { print "Delete track from iTunes Library:\n"; while ( $numTracks != 0 ) { # $ta->tick; my $currTrack = $tracks->Item($numTracks); if ( $currTrack->Kind == $ITTrackKindFile ) { #print "File\n"; if ( $currTrack->Location eq "" ) { $numDeletedTracks++; print $currTrack->Name if $currTrack->Name; print (" (".($numStart-$numDeletedTracks)." - $numTracks - $numDeletedTracks)\n"); $currTrack->Delete(); #$ta->relabel( $currTrack->Name ) if $currTrack->Name; # } } $numTracks--; } print "Tracks deleted from iTunes Main Library:" . $numDeletedTracks;