From f5b98de4c1d678224f1e2e1f42ce3879e9a072c6 Mon Sep 17 00:00:00 2001 From: nishiki Date: Sat, 17 Jan 2015 00:05:40 +0100 Subject: [PATCH] add select form when multiple result --- i18n/cli/en.yml | 5 +++++ i18n/cli/fr.yml | 5 +++++ lib/Sync/MPWSync.rb | 2 +- lib/UI/Cli.rb | 33 +++++++++++++++++++++++++-------- mpw | 2 +- 5 files changed, 37 insertions(+), 10 deletions(-) diff --git a/i18n/cli/en.yml b/i18n/cli/en.yml index 646671c..b8c1bd7 100644 --- a/i18n/cli/en.yml +++ b/i18n/cli/en.yml @@ -31,6 +31,9 @@ en: upload: "Can't upload the file on the server!" unknown: "An unknown error is occured!" + warning: + select: 'Your choice is not a valid element!' + option: usage: "Usage" show: "Search and show the items" @@ -51,6 +54,7 @@ en: help: "Show this help message" form: + select: "Select the item: " add: title: "Add a new item" name: "Enter the name: " @@ -122,6 +126,7 @@ en: port: "Port" protocol: "Protocol" server: "Server" + warning: "Warning" ssh: option: diff --git a/i18n/cli/fr.yml b/i18n/cli/fr.yml index 18f78af..ea9b9f0 100644 --- a/i18n/cli/fr.yml +++ b/i18n/cli/fr.yml @@ -31,6 +31,9 @@ fr: upload: "Impossible d'envoyer le fichier sur le serveur!" unknown: "Une erreur inconnue est survenue!" + warning: + select: "Votre choix n'est pas un élément valide!" + option: usage: "Utilisation" show: "Recherche et affiche les éléments" @@ -51,6 +54,7 @@ fr: help: "Affiche ce message d'aide" form: + select: "Sélectionner l'élément: " add: title: "Ajout d'un nouvel élément" name: "Entrez le nom: " @@ -122,6 +126,7 @@ fr: port: "Port" protocol: "Protocol" server: "Serveur" + warning: "Warning" ssh: option: diff --git a/lib/Sync/MPWSync.rb b/lib/Sync/MPWSync.rb index ae0c466..df8066f 100644 --- a/lib/Sync/MPWSync.rb +++ b/lib/Sync/MPWSync.rb @@ -90,7 +90,7 @@ module MPW file << msg['data'] end - mpw = MPW.new(tmp_file) + mpw = MPW.new(tmp_file, @gpg_key) if not mpw.decrypt(gpg_password) @error_msg = mpw.error_msg return nil diff --git a/lib/UI/Cli.rb b/lib/UI/Cli.rb index 40938b6..b1b4cda 100644 --- a/lib/UI/Cli.rb +++ b/lib/UI/Cli.rb @@ -39,7 +39,7 @@ class Cli return false end end - + if not @config.sync_host.nil? and not @config.sync_port.nil? if not @sync.connect(@config.sync_host, @config.sync_user, @config.sync_pwd, @config.sync_path, @config.sync_port) puts "#{I18n.t('display.error')} #1: #{@sync.error_msg}".red @@ -166,21 +166,37 @@ class Cli # Display the query's result # @args: search -> the string to search # protocol -> search from a particular protocol - def display(search, protocol=nil, group=nil, format=nil) + def display(search, protocol=nil, group=nil) result = @mpw.search(search, group, protocol) - if not result.empty? - result.each do |r| - display_item(r) - end - else + case result.length + when 0 puts I18n.t('display.nothing') + when 1 + display_item(result.first) + else + i = 1 + result.each do |r| + print "#{i}: ".cyan + print r['name'] + print " -> #{r['comment']}".magenta if not r['comment'].to_s.empty? + print "\n" + + i += 1 + end + choice = ask(I18n.t('form.select')).to_i + + if choice >= 1 and choice < i + display_item(result[choice-1]) + else + puts "#{I18n.t('display.warning')}: #{I18n.t('warning.select')}".yellow + end end end # Display an item in the default format # @args: item -> an array with the item information - def diplay_item(item) + def display_item(item) puts '--------------------' puts "Id: #{item['id']}" puts "#{I18n.t('display.name')}: #{item['name']}" @@ -193,6 +209,7 @@ class Cli puts "#{I18n.t('display.comment')}: #{item['comment']}" end + # Form to add a new item def add row = [] diff --git a/mpw b/mpw index 0e2a171..d18eaf5 100755 --- a/mpw +++ b/mpw @@ -133,7 +133,7 @@ cli.sync # Display the item's informations if not options[:display].nil? - cli.display(options[:display], options[:group], options[:type], options[:format]) + cli.display(options[:display], options[:group], options[:type]) # Remove an item elsif not options[:remove].nil?