2009-03-21 32 views
0

Existe-t-il un moyen de convertir les journaux de YM pour Mac en Adium?Convertir les journaux Yahoo Messenger en journaux Adium

Merci Cezar

+0

Selon le format de vos journaux YM sont, vous pouvez obtenir un certain kilométrage de la solution fournie ici: http://li-ma.blogspot.com/2008/10 /pidgin-log-file-to-adium-log-converter.html – bernie

Répondre

0
#!/usr/bin/perl 
use warnings; 
use strict; 
use File::Find; 
use File::Copy; 
use Getopt::Long; 

my $inDir = undef; 
my $outDir = undef ; 
my $adiumUser = undef; 
my $force = 0; 
my $foundLogs = 0; 
my $help = 0; 

my %Protocols = (    #Map gaim protocol IDs to Adium ones 
           "aim" =>  "AIM", 
           "yahoo" =>  "Yahoo!", 
           "msn" =>  "MSN" 
           #Add the rest here, or tell me what they are, someone who uses other protocols 
           ); 

sub usage 
{ 
     my $msg = shift; 
     print "Error: $msg\n" if $msg; 
     print "Usage: gaim2adium.pl [--adiumUser <user> | --outDir <output dir>] [--inDir <input dir>] [--yes]\n"; 
     print "Options: (defaults)\n\n"; 
     print "\tinDir:\t\t\tDirectory to import logs from (~/.gaim/logs)\n"; 
     print "\toutDir:\t\t\tDirectory to import logs to (./Logs)\n"; 
     print "\tadiumUser:\t\tAttempt to automatically import logs to the specified Adium user\n"; 
     print "\tyes:\t\t\tDon't prompt before overwriting existing logs\n"; 
     print "\thelp:\t\t\tDisplay this help.\n"; 
     print "\nOnce the logs have been imported, the contents of outDir can be dragged to your Adium log folder\n\n"; 
     exit(1); 
} 

sub process_log 
{ 
     -f or return; 
     #gaim logs are LOG_BASE/Protocol/Account/Contact/YYYY-MM-DD-TIME.(html|txt) 
     if($File::Find::name =~ m!^$inDir(?:/)?(.*?)/(.*?)/(.*?)/(\d{4})-(\d{2})-(\d{2})\.(\d{4})(\d{2}).(html|txt)!) 
     { 
       my ($proto,$acct,$contact,$year,$month,$day,$hour,$seconds,$ext) = ($1,$2,$3,$4,$5,$6,$7,$8,$9); 
       return unless defined ($proto = $Protocols{lc $proto}); 
       $foundLogs = 1;   #Set the logs found flag 
       my $outFN = "$contact ($year|$month|$day)."; 
       $outFN .= ((lc $ext) eq "html") ? "html" : "adiumLog"; 
       mkdir("$outDir/$proto.$acct"); 
       mkdir("$outDir/$proto.$acct/$contact"); 
       my $file = "$outDir/$proto.$acct/$contact/$outFN"; 
       if(-e $file && !$force) 
       { 
#      print(($adiumUser?"$adiumUser already has":"There already exists"), 
#      " a log from $proto.$acct to $contact on $day/$month/$year.\n"); 
         `cat '$File::Find::name' >> '$file'`; 
       } else { 
         copy($File::Find::name,$file); 
       } 
       `touch -t $year$month$day$hour.$seconds '$file'`; 
     } 
} 

#Sort a list of log files by time 
sub sort_logs 
{ 
     my @files = @_; 
     return sort logcmp @files; 
} 

sub logcmp 
{ 
     my ($t1,$t2); 
     $t1 = $& if $a =~ /\d{6}/; 
     $t2 = $& if $b =~ /\d{6}/; 
     return 0 unless defined($t1) && defined($t2); 
     return $t1 <=> $t2; 
} 


GetOptions( "adiumUser=s" =>  \$adiumUser, 
         "inDir=s"    =>  \$inDir, 
         "outDir=s"    =>  \$outDir, 
         "yes"     =>  \$force, 
         "help"     =>  \$help) 
     or usage(); 
usage() if $help; 
usage("You must supply at most one of adiumUser and outDir") if defined($outDir) && defined($adiumUser); 

$outDir ||= "$ENV{HOME}/Library/Application Support/Adium 2.0/Users/$adiumUser/Logs" if defined $adiumUser; 
$outDir ||= "$ENV{PWD}/Logs"; 

$inDir ||= shift; 
$inDir ||= "$ENV{HOME}/.gaim/logs"; 

print "NOTE: Output directory exists, existing logs will be appended to.\n" if(-d $outDir); 

mkdir($outDir) unless -e $outDir; 
usage("Output dir must be a directory") unless -d $outDir; 
usage("Output dir must be writeable") unless -w $outDir; 

usage("Input directory '$inDir' does not exist") unless -d $inDir; 
usage("Input directory '$inDir' is not readable") unless -r $inDir; 

#Spider the logs dir 
find({wanted => \&process_log, 
       preprocess => \&sort_logs}, $inDir); 

#Warn if we didn't find any logs 
unless($foundLogs) 
{ 
     print "Warning: No recognized logs found.\n"; 
     print "Note:\tThis script only supports logs generated by gaim 0.73 and above.\n"; 
     print "\tYou may be able to update older gaim logs to the new format using the script from\n"; 
     print "\thttp://sourceforge.net/forum/message.php?msg_id=2392758\n"; 
     exit(1); 
} 

exit(0); 
+0

Veuillez noter que j'ai seulement corrigé le format de cette réponse. Je ne sais pas d'où vient le code mais ça a l'air assez merdique. –