Konversation/Скрипти/Імпортування списку серверів mIRC

    From KDE UserBase Wiki
    This page is a translated version of the page Konversation/Scripts/Import mIRC server list and the translation is 100% complete.
    Other languages:

    Інформація

    Цей скрипт виконує читання списку серверів mIRC зі сторінки mirc» і імпортує дані до вашого списку серверів Konversation.

    • Скрипт НЕ виконуватиме перезаписування вже створеного вами списку серверів, а просто допише сервери до поточного списку.
    • Скрипт не виконує інтеграції вже створених записів. Якщо у вас вже є запис групи freenode, після запуску скрипту у вас буде два записи груп.
    • Скриптом визначається використання типового профілю для всіх НОВОСТВОРЕНИХ записів серверів.
    • Скриптом припускається, що ви встановлюватимете з’єднання на першому з портів зі списку у файлі налаштувань mIRC. (У Konversation ще не передбачено можливості використання декількох різних портів).

    Користування

    Скопіюйте вміст скрипту до нового текстового документа і скористайтеся дією Зберегти, щоб зберегти скрипт з назвою «konversation_servers» (або будь-якою іншою назвою, не забудьте однак виправити наведені нижче команди!)

    Переконайтеся, що роботу Konversation завершено (не просто закрито головне вікно) і віддайте команду:

    perl konversation_servers

    або

    perl konversation_servers /шлях/до/konversationrc

    Для запуску скрипту слід встановити декілька модулів perl:

    Можете не встановлювати модуль File::HomeDir, якщо ви вкажете шлях до файла konversationrc у командному рядку або якщо встановлено змінну середовища KDEHOME, а файл konversationrc зберігається у типовій теці.

    Гарантійні зобов’язання

    ВАМ НЕ НАДАЄТЬСЯ ЖОДНИХ ГАРАНТІЙНИХ ЗОБОВ’ЯЗАНЬ ЩОДО ЦЬОГО СКРИПТУ.

    Підтримка

    Будь-які питання ви можете задати користувачеві Woosta у Freenode або вашому знайомому знавцеві perl.

    Умови ліцензування

    ©Rick Measham, 2007. Ця програма є вільним програмним забезпеченням, ви можете поширювати і/або вносити до неї зміни за дотримання тих самих ліцензійних умов, за якими розповсюджується ваш дистрибутив Perl.

    Скрипт

    #!/usr/bin/perl
    
    #  INFORMATION
    #  ====================================================================
    #  This script reads the mIRC server list from
    #  'http://www.mirc.co.uk/servers.ini' and imports it into your
    #  Konversation server list.
    #
    #  * It will NOT overwrite your existing servers, but will append the
    #    list to your existing list.
    #  * It doesn't integrate: If you have a freenode group now, you will
    #    have two freenode groups once you run it.
    #  * It sets all NEW servers to use your default profile
    #  * It assumes you want to connect on the first port listed in the
    #    mIRC config. (Konversation doesn't appear to have the concept of
    #    multiple ports)
    
    #  USAGE
    #  ====================================================================
    #  Make sure you quit (not just close) Konversation, and then run:
    #
    #     perl konversation_servers
    #        OR
    #     perl konversation_servers /path/to/konversationrc
    #
    #  To run it, you will need several perl modules installed:
    #    * Config::Tiny
    #    * LWP::Simple
    #    * File::HomeDir
    #
    #  You can skip File::HomeDir if you include the path to your
    #  konversationrc in the command line call or if your KDEHOME
    #  environment variable is set and your konversationrc is where
    #  is should be.
    #
    
    #  WARRANTY
    #  ====================================================================
    #  THIS SCRIPT COMES WITH NO WARRANTY AT ALL.
    #  Any questions look for Woosta on Freenode
    #
    
    #  SUPPORT
    #  ====================================================================
    #  Any questions look for Woosta on Freenode or ask your local perl guru
    #
    
    #  LICENCE
    #  ====================================================================
    #  (c)2007 Rick Measham.  This program is free software; you can 
    #  redistribute it and/or modify it under the same terms as Perl itself.
    #
    
    
    # Change this if it moves!
    my $mirc_url = 'http://www.mirc.co.uk/servers.ini';
    
    
    use warnings;
    use strict;
    
    BEGIN {
    
    my $konvs = `ps ax | grep konversation | grep -v grep`;
    	if ($konvs =~ /konversation/){
    		print "You need to quit konversation before running this script.\n";
    		exit(1);
    	}
    
    my @mod_list = ('Config::Tiny', 'File::Copy', 'LWP::Simple');
    
    # If there isn't a konversationrc in the ARGV, add File::HomeDir
    	push(@mod_list, 'File::HomeDir')
    		unless ($ARGV[0] && -r $ARGV[0])
    			|| ($ENV{KDEHOME} && -r "$ENV{KDEHOME}/share/config/konversationrc");
    
    foreach my $mod (@mod_list){
    		eval {
    			(my $fn = $mod) =~ s|::|/|g;
    			require $fn.'.pm';
    		};
    		if( $@ ){
    			print "You are missing $mod. Please install this perl module and then try again.\n";
    			exit(1);
    		}
    		import $mod;
    	}
    }
    
    
    
    my $konvrc =
    	($ARGV[0]) ? $ARGV[0]
    	: ($ENV{KDEHOME} && -r "$ENV{KDEHOME}/share/config/konversationrc") ? "$ENV{KDEHOME}/share/config/konversationrc"
    	: File::HomeDir->my_home . "/.kde/share/config/konversationrc";
    
    print "Reading konversationrc from $konvrc\n";
    
    if( ! -r $konvrc ){
    	print "Unable to read konversationrc from $konvrc. Please include the path on the command line:\n";
    	print "    /path/to/konversationrc\n";
    	exit(1);
    }
    
    
    print "Getting server list from mirc\n";
    my $servlist = get($mirc_url);
    print "   done.\n";
    
    
    
    print "Creating a backup of your current konversationrc to $konvrc.bak\n";
    copy($konvrc, "$konvrc.bak");
    print "   done.\n";
    
    
    
    print "Reading INI files\n";
    my $mIRC = Config::Tiny->read_string( $servlist );
    my $konv = Config::Tiny->read( $konvrc );
    print "   done.\n";
    
    
    
    print "Counting existing servers\n";
    my $scount = 0;
    while( exists $konv->{"Server $scount"} ){
    	$scount++;
    }
    print "   Next available server is $scount\n";
    
    
    
    print "Counting existing server groups\n";
    my $gcount = 0;
    while( exists $konv->{"ServerGroup $gcount"} ){
    	$gcount++;
    }
    print STDERR "   Next available group is $gcount\n";
    
    
    
    print "Parsing mIRC's server list\n";
    my %group;
    foreach my $s ( keys %{ $mIRC->{servers} } ){
    
    my ($name, $server, $port, $group)
    		= $mIRC->{servers}{$s}
    		=~ /(.+?)SERVER:(.+?):(\d+).*?GROUP:(.+)/;
    
    next unless $group && $server && $port;
    
    $name =~ s/^$group: //;
    
    push(@{$group{$group}}, { name=>$name, server=>$server, port=>$port });
    
    }
    print "   done.\n";
    
    
    
    print "Generating data for konversationrc\n";
    foreach my $g ( sort keys %group ){
    
    $konv->{"ServerGroup $gcount"} = {
    		AutoConnect         => 'false',
    		AutoJoinChannels    => '',
    		ChannelHistory      => '',
    		ConnectCommands     => '',
    		EnableNotifications => 'true',
    		Expanded            => 'false',
    		Identity            => 'Default Identity',
    		Name                => $g,
    		NotifyList          => '',
    	};
    
    foreach my $s ( @{ $group{$g} } ){
    
    $konv->{"Server $scount"} = {
    			Password   => '',
    			Port       => $s->{port},
    			SSLEnabled => 'false',
    			Server     => $s->{server},
    		};
    
    $konv->{"ServerGroup $gcount"}{ServerList} =
    			($konv->{"ServerGroup $gcount"}{ServerList} || '')
    			.(($konv->{"ServerGroup $gcount"}{ServerList}) ? ',' : '')
    			."Server $scount";
    
    $scount++;
    	}
    
    $gcount++;
    }
    $gcount--; $scount--;
    print "   done. There are now $gcount groups and $scount servers.\n";
    
    
    
    print "Writing konversationrc\n";
    $konv->write($konvrc);
    print "   done.\n";
    
    
    
    print "Completed. It is now safe to start konversation.\n";