# HG changeset patch # User Mikael Berthe # Date 1270221338 -7200 # Node ID 1d1e0f98d459a773dbe5031329e41839380a32a1 # Parent 32bceb73895cc93617f9b36974739b5d9b4b1a53 Remove outdated and unmaintained mcwizz from contrib diff -r 32bceb73895c -r 1d1e0f98d459 mcabber/contrib/mcwizz.rb --- a/mcabber/contrib/mcwizz.rb Fri Apr 02 16:46:48 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,631 +0,0 @@ -#!/usr/bin/ruby -w -# -# Copyright (C) 2006,2007 Adam Wolk "Mulander" -# Copyright (C) 2006 Mateusz Karkula "Karql" -# -# This script is provided under the terms of the GNU General Public License, -# see the file COPYING in the root mcabber source directory. -# -# - -require 'getoptlong' - -## -# strings of colors ;) -module Colors - @@color = true - - ESC = 27.chr - - RED = ESC + '[31m' - GREEN = ESC + '[32m' - YELLOW= ESC + '[33m' - BLUE = ESC + '[34m' - PURPLE= ESC + '[35m' - CYAN = ESC + '[36m' - - BGREEN= ESC + '[42m' - - ENDCOL= ESC + '[0m' - - def color(color) - return '[' + self + ']' unless @@color - color + self + ENDCOL - end - def red; color(RED); end - def green; color(GREEN); end - def yellow; color(YELLOW); end - def blue; color(BLUE); end - def purple; color(PURPLE); end - def cyan; color(CYAN); end - def bgreen; color(BGREEN); end -end - -class String; include Colors; end - -class Option - attr_accessor :value, :current, :default - attr_reader :name,:msg - - def initialize(args) - @name = args[:name] - @msg = args[:msg] - @default = args[:default] - @value = nil - @current = nil - @prompt = '' - end - - def set?; !@value.nil?; end - def to_s; "set #@name=#@value"; end - def additional?; false; end - - def ask() - puts @msg - print @prompt - $stdin.gets.chomp - end - -end - -class YesNo < Option - def initialize(args) - super(args) - @ifSet = args[:ifSet] - @prompt = '[Yes/no]: ' - end - def ask() - # 1 == yes, 0 == no - case super - when /^Y/i - @value = 1 - return additional() - when /^N/i - @value = 0 - return [] - else - puts 'Please answer yes or no' - puts - ask() - end - end - - def additional? - (@value == 1 && !@ifSet.nil?) ? true : false - end - - def additional - (@ifSet.nil?) ? [] : @ifSet - end -end - -class Edit < Option - def initialize(args) - super(args) - @regex = args[:regex] - @prompt = '[edit]: ' - end - def ask() - answer = super - if answer.empty? || ( !@regex.nil? && !(answer =~ @regex) ) - ask() - else - @value = answer - end - return [] - end -end - -class Multi < Option - attr_reader :choices - def initialize(args) - super(args) - @choices = args[:choices] - @max = @choices.length - 1 - @prompt = "[0-#{ @max }] " - end - - def ask() - puts @msg - @choices.each_with_index do |choice,idx| - print "#{idx}. #{choice}\n" - end - print @prompt - answer = $stdin.gets.chomp - - ask() if answer.empty? # we ask here because ''.to_i == 0 - - case answer.to_i - when 0 ... @max - @value = answer - else - ask() - end - return [] - end -end - -class Wizzard - VERSION = 0.04 - attr_accessor :options, :ignore_previous, :ignore_auto, :target - def initialize() - if File.exists?(ENV['HOME'] + '/.mcabberrc') - @target = ENV['HOME'] + '/.mcabberrc' - else - Dir.mkdir(ENV['HOME'] + '/.mcabber') unless File.exists?(ENV['HOME'] + '/.mcabber') - @target = ENV['HOME'] + '/.mcabber/mcabberrc' - end - @ignore_previous = false - @ignore_auto = false - @options = Hash.new - @order = Array.new - @processed = Array.new - @old = Array.new # for storing the users file untouched - end - - ## - # add a group of settings to the order queue - def enqueue(group) - group = group.to_a if group.class.to_s == 'String' - @order += group - end - - - ## adds options to the settings object - def add(args) - @options[args[:name]] = args[:type].new(args) - end - - ## run the wizzard - def run() - parse() - display(@order) - save() - end - - ## - # displays the setting and allows the user to modify it - def display(order) - order.each do |name| - # this line here is less efficient then on the end of this method - # but if placed on the end, recursion then breaks the order of settings - @processed.push(name) - ## - # I know this is not efficient, but I have no better idea to modify the default port - @options['port'].default = 5223 if @options['ssl'].value == 1 - - puts - puts "'#{name}'" - puts @options[name].msg - puts 'e'.green + 'dit setting' - puts 'l'.green + 'eave current setting ' + show(@options[name],:current).cyan unless @options[name].current.nil? - puts 'u'.green + 'se default ' + show(@options[name],:default).cyan unless @options[name].default.nil? - puts 's'.green + 'kip' - puts 'a'.red + 'bort configuration' - print '[action]: ' - case $stdin.gets.chomp - when /^s/ - next - when /^l/ - @options[name].value = @options[name].current - display(@options[name].additional) if @options[name].additional? - when /^u/ - @options[name].value = @options[name].default - display(@options[name].additional) if @options[name].additional? - when /^e/ - additional = @options[name].ask - display(additional) if additional.empty? - when /^a/ - puts 'aborted!!'.red - exit - end - end - end - - ## - # this allows us to print 'yes' 'no' or descriptions of multi option settings - # insted of just showing an integer - def show(option,type) - value = '' - if type == :default - value = option.default - else - value = option.current - end - - case option.class.to_s - when 'YesNo' - return (value.to_i==1) ? 'yes' : 'no' - when 'Multi' - return option.choices[value.to_i] - else - return value.to_s - end - end - - ## save - # save all settings to a file - def save() - flag,dumped = true,false - target = File.new(@target,"w") - - @old.each do |line| - flag = false if line =~ /^#BEGIN AUTO GENERATED SECTION/ - flag = true if line =~ /^#END AUTO GENERATED SECTION/ - if flag - target << line - elsif( !flag && !dumped ) - target << "#BEGIN AUTO GENERATED SECTION\n\n" - @processed.each do |name| - target << @options[name].to_s + "\n" if @options[name].set? - end - puts - dumped = true - end - end - - unless dumped - target << "#BEGIN AUTO GENERATED SECTION\n\n" - @processed.each do |name| - target << @options[name].to_s + "\n" if @options[name].set? - end - target << "#END AUTO GENERATED SECTION\n\n" - end - - target.close - end - ## parse - # attempt to load settings from file - def parse() - return if @ignore_previous - return unless File.exists?(@target) - keyreg = @options.keys.join('|') - parse = true - File.open(@target) do |config| - config.each do |line| - - @old << line - parse = false if @ignore_auto && line =~ /^#BEGIN AUTO GENERATED SECTION/ - parse = true if @ignore_auto && line =~ /^#END AUTO GENERATED SECTION/ - - if parse && line =~ /^set\s+(#{keyreg})\s*=\s*(.+)$/ - @options[$1].current = $2 if @options.has_key?($1) - end - - end - end - end - - ## - # display onscreen help - def Wizzard.help() - puts %{ -Usage: #{ $0.to_s.blue } #{ 'options'.green } - -This script generates configuration files for mcabber jabber client - -#{ "Options:".green } -#{ "-h".green }, #{ "--help".green } display this help screen -#{ "-v".green }, #{ "--version".green } display version information -#{ "-T".green }, #{ "--target".green } configuration file -#{ "-i".green }, #{ "--ignore".green } ignore previous configuration -#{ "-I".green }, #{ "--ignore-auto".green } ignore auto generated section -#{ "-S".green }, #{ "--status".green } ask for status settings -#{ "-P".green }, #{ "--proxy".green } ask for proxy settings -#{ "-k".green }, #{ "--keep".green } ping/keepalive connection settings -#{ "-t".green }, #{ "--tracelog".green } ask for tracelog settings -#{ "-C".green }, #{ "--nocolor".green } turn of color output - } - exit - end - - ## - # display version information - def Wizzard.version() - puts "mcwizz v#{VERSION.to_s.purple} coded by #{ 'Karql'.purple } & #{ 'mulander'.purple } " - exit - end -end - -required = %w{ username server resource nickname ssl port pgp logging } -proxy = %w{ proxy_host proxy_port proxy_user proxy_pass } -status = %w{ buddy_format roster_width show_status_in_buffer autoaway message message_avail message_free - message_dnd message_notavail message_away message_autoaway } -tracelog = %w{ tracelog_level tracelog_file } - -opts = GetoptLong.new( - ["--help","-h", GetoptLong::NO_ARGUMENT], - ["--version","-v", GetoptLong::NO_ARGUMENT], - ["--target", "-T", GetoptLong::REQUIRED_ARGUMENT], - ["--ignore","-i", GetoptLong::NO_ARGUMENT], - ["--ignore-auto","-I",GetoptLong::NO_ARGUMENT], - ["--proxy","-P", GetoptLong::NO_ARGUMENT], - ["--keep","-k", GetoptLong::NO_ARGUMENT], - ["--status","-S", GetoptLong::NO_ARGUMENT], - ["--tracelog","-t", GetoptLong::NO_ARGUMENT], - ["--nocolor","-C", GetoptLong::NO_ARGUMENT] -) - -opts.ordering = GetoptLong::REQUIRE_ORDER - -config = Wizzard.new() -config.enqueue(required) -config.enqueue( %w{ beep_on_message hide_offline_buddies iq_version_hide_os autoaway } ) - -## -# Description of the add() syntax -# :name - name of the setting -# :msg - message displayed to the user -# :type - type of settings - avaible types are: YesNo, Edit, Multi -# :default - default setting -# YesNo type specific flag: -# :ifSet - an array of other options, that will be asked if the flag holding option is set to true -# Edit type specific flag: -# :regex- regular expression to which input will be compared -# Multi type specific flag: -# :choices - an array of possible settings -# - -## -# here we add all the settings that we want to be able to handle - -## -# ungrouped settings -config.add( :name => 'beep_on_message', - :msg => 'Should mcabber beep when you receive a message?', - :type => YesNo, - :default => 0 ) - -config.add( :name => 'hide_offline_buddies', - :msg => 'Display only connected buddies in the roster?', - :type => YesNo, - :default => 0 ) - -config.add( :name => 'pinginterval', - :msg => 'Enter pinginterval in seconds for keepalive settings' \ - ' set this to 0 to disable.', - :type => Edit, - :regex => /^\d+$/, - :default => 40) - -config.add( :name => 'iq_version_hide_os', - :msg => 'Hide Your OS information?', - :type => YesNo, - :default => 0 ) - - -config.add( :name => 'port', - :msg => 'Enter port number', - :type => Edit, - :regex => /^\d+$/, - :default => 5222 ) - -## -# server settings -config.add( :name => 'username', - :msg => 'Your username', - :type => Edit, - :regex => /^[^\s\@:<>&\'"]+$/ ) - -config.add( :name => 'server', - :msg => 'Your jabber server', - :type => Edit, - :regex => /^\S+$/ ) - -config.add( :name => 'resource', - :msg => 'Resource (If you don\'t know what a resource is, use the default setting)', - :type => Edit, - :regex => /^.{1,1024}$/, - :default => 'mcabber' ) - -config.add( :name => 'nickname', - :msg => 'Conference nickname (if you skip this setting your username will be used as' \ - ' nickname in MUC chatrooms)', - :type => Edit ) - -## -# ssl settings -config.add( :name => 'ssl', - :msg => 'Enable ssl?', - :type => YesNo, - :ifSet => %w{ ssl_verify ssl_cafile ssl_capath ciphers }, - :default => 0 ) - - -config.add( :name => 'ssl_verify', - :msg => 'Set to 0 to disable certificate verification, or non-zero to set desired maximum CA' \ - ' verification depth. Use -1 to specify an unlimited depth.', - :type => Edit, - :regex => /^(-1)|(\d+)$/, - :default => -1 ) - -config.add( :name => 'ssl_cafile', - :msg => 'Set to a path to a CA certificate file (may contain multiple CA certificates)', - :type => Edit ) - -config.add( :name => 'ssl_capath', - :msg => 'Set to a directory containing CA certificates (use c_rehash to generate hash links)', - :type => Edit ) - -config.add( :name => 'ciphers', - :msg => 'Set to a list of desired SSL ciphers (run "openssl ciphers" for a candidate values)', - :type => Edit ) - -## -# pgp support -config.add( :name => 'pgp', - :msg => 'Enable OpenPGP support?', - :type => YesNo, - :ifSet => %w{ pgp_private_key }, - :default => 0 ) - -config.add( :name => 'pgp_private_key', - :msg => 'Enter your private key id. You can get the Key Id with gpg: ' \ - '"gpg --list-keys --keyid-format long"', - :type => Edit ) -## -# proxy settings -config.add( :name => 'proxy_host', - :msg => 'Proxy host', - :type => Edit, - :regex => /^\S+?\.\S+?$/ ) - -config.add( :name => 'proxy_port', - :msg => 'Proxy port', - :type => Edit, - :regex => /^\d+$/, - :default => 3128 ) - -config.add( :name => 'proxy_user', - :msg => 'Proxy user', - :type => Edit ) - -config.add( :name => 'proxy_pass', - :msg => 'Proxy pass (will be stored unencrypted an the pass will be echoed during input)', - :type => Edit ) -## -# trace logs -config.add( :name => 'tracelog_level', - :msg => 'Specify level of advanced traces', - :type => Multi, - :choices => [ 'lvl0: I don\'t want advanced tracing', - 'lvl1: most events of the log window are written to the file', - 'lvl2: debug logging (XML etc.)' ], - :default => 0 ) - -config.add( :name => 'tracelog_file', - :msg => 'Specify a file to which the logs will be written', - :type => Edit ) -## -# logging settings -config.add( :name => 'logging', - :msg => 'Enable logging?', - :type => YesNo, - :ifSet => %w{ log_win_height log_display_sender load_logs logging_dir log_muc_conf}, - :default => 1 ) - -config.add( :name => 'log_win_height', - :msg => 'Set log window height (minimum 1)', - :type => Edit, - :regex => /^[1-9]\d*/, - :default => 5 ) - -config.add( :name => 'log_display_sender', - :msg => 'Display the message sender\'s jid in the log window?', - :type => YesNo, - :default => 0 ) - -config.add( :name => 'load_logs', - :msg => 'Enable loading logs?', - :type => YesNo, - :default => 1 ) - -config.add( :name => 'logging_dir', - :msg => 'Enter logging directory', - :type => Edit ) - -config.add( :name => 'log_muc_conf', - :msg => 'Log MUC chats?', - :ifSet => %w{ load_muc_logs }, - :type => YesNo, - :default => 1 ) - -config.add( :name => 'load_muc_logs', - :msg => 'Load MUC chat logs?', - :type => YesNo, - :default => 0 ) -## -# status settings -config.add( :name => 'roster_width', - :msg => 'Set buddylist window width (minimum 2)', - :type => Edit, - :regex => /^[2-9]\d*$/, - :default => 24 ) - -config.add( :name => 'buddy_format', - :msg => 'What buddy format (in status window) do you prefer?', - :type => Multi, - :choices => [ '', - 'name (name is omitted if same as the jid)', - 'name/resource (if the name is same as the jid, use ', - 'name (if the name is the same as the jid, use ' ] ) - -config.add( :name => 'show_status_in_buffer', - :msg => 'What status changes should be displayed in the buffer?', - :type => Multi, - :choices => [ 'none', - 'connect/disconnect', - 'all' ], - :default => 2 ) - -config.add( :name => 'autoaway', - :msg => 'After how many seconds of inactivity should You become away? (0 for never)', - :type => Edit, - :regex => /^\d+$/, - :default => 0 ) - -config.add( :name => 'message', - :msg => 'Skip this setting unless you want to override all other status messages', - :type => Edit ) - -config.add( :name => 'message_avail', - :message => 'Set avaible status', - :type => Edit, - :default => 'I\'m avaible' ) - - -config.add( :name => 'message_free', - :message => 'Set free for chat status', - :type => Edit, - :default => 'I\'m free for chat' ) - -config.add( :name => 'message_dnd', - :message => 'Set do not disturb status', - :type => Edit, - :default => 'Please do not disturb' ) - -config.add( :name => 'message_notavail', - :message => 'Set not avaible status', - :type => Edit, - :default => 'I\'m not avaible' ) - -config.add( :name => 'message_away', - :message => 'Set away status', - :type => Edit, - :default => 'I\'m away' ) - -config.add( :name => 'message_autoaway', - :msg => 'Set auto-away status', - :type => Edit, - :default => 'Auto-away' ) - -begin - opts.each do |opt,arg| - case opt - when '--help' - Wizzard.help() - when '--version' - Wizzard.version() - when '--target' - config.target = arg - when '--ignore' - config.ignore_previous = true - when '--ignore-auto' - config.ignore_auto = true - when '--proxy' - config.enqueue(proxy) - when '--keep' - config.enqueue('pinginterval') - when '--tracelog' - config.enqueue(tracelog) - when '--status' - config.enqueue(status) - when '--nocolor' - class String; @@color = false; end - end - end -rescue GetoptLong::InvalidOption - Wizzard.help() -end - -config.run