class Otpui::OtpList
Public Class Methods
new(builder)
click to toggle source
# File lib/otpui/otp_list.rb, line 3 def initialize(builder) @otps = Settings.load.secrets @model = Gtk::ListStore.new(String, String) @progress_bar = builder["totp_timeout_progress_bar"] text_renderer = Gtk::CellRendererText.new column_name = Gtk::TreeViewColumn.new("Issuer", text_renderer, { text: 0 }) column_secret = Gtk::TreeViewColumn.new("Secret", text_renderer, { text: 1 }) treeview = Gtk::TreeView.new(@model) treeview.append_column(column_name) treeview.append_column(column_secret) treeview.selection.set_mode(:single) builder["scrolled_otps_win"].add_with_viewport(treeview) treeview.signal_connect("row_activated") do |_treeview, path, _column| iter = @model.get_iter(path) Clipboard.copy iter[1] end end
Public Instance Methods
get_current_second(totp, otp)
click to toggle source
# File lib/otpui/otp_list.rb, line 31 def get_current_second(totp, otp) future_seconds = 0.0 while totp.verify(otp, Time.now + future_seconds) future_seconds += 1 end future_seconds end
get_fraction_progress(totp, otp)
click to toggle source
# File lib/otpui/otp_list.rb, line 39 def get_fraction_progress(totp, otp) get_current_second(totp, otp) / 30 end
list_size()
click to toggle source
# File lib/otpui/otp_list.rb, line 25 def list_size i = 0 @model.each { i += 1 } i end
refresh_all()
click to toggle source
# File lib/otpui/otp_list.rb, line 57 def refresh_all @model.clear @otps.each do |issuer, secret| iter = @model.append update_row iter, secret, issuer end end
refresh_progress_bar()
click to toggle source
# File lib/otpui/otp_list.rb, line 65 def refresh_progress_bar totp = ROTP::TOTP.new("progress32secret3232") @progress_bar.fraction = get_fraction_progress(totp, totp.now.to_s) end
refresh_values()
click to toggle source
# File lib/otpui/otp_list.rb, line 51 def refresh_values @model.each do |_model, path, iter| update_row iter end end
run()
click to toggle source
# File lib/otpui/otp_list.rb, line 70 def run GLib::Timeout.add(1000) do refresh_progress_bar list_size == @otps.size ? refresh_values : refresh_all true end end
update_row(iter, secret = nil, issuer = nil)
click to toggle source
# File lib/otpui/otp_list.rb, line 43 def update_row(iter, secret = nil, issuer = nil) secret = @otps.fetch iter[0] unless secret iter[0] = issuer if issuer totp = ROTP::TOTP.new(secret) iter[1] = totp.now.to_s end