ruby-pass-qt 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,111 +1,109 @@
1
- module PassQt
2
- class BrowseStoresDialog < RubyQt6::Bando::QDialog
3
- DataItem = Struct.new(:tablewidgetitem)
4
-
5
- q_object do
6
- signal "stores_changed()"
7
- slot "_on_list_add_button_clicked()"
8
- slot "_on_list_remove_button_clicked()"
9
- end
1
+ class BrowseStoresDialog < RubyQt6::Bando::QDialog
2
+ DataItem = Struct.new(:tablewidgetitem)
10
3
 
11
- def initialize
12
- super
4
+ q_object do
5
+ signal "stores_changed()"
6
+ slot "_on_list_add_button_clicked()"
7
+ slot "_on_list_remove_button_clicked()"
8
+ end
13
9
 
14
- @dataitems = {}
10
+ def initialize
11
+ super
15
12
 
16
- initialize_toolbar
17
- initialize_tablewidget
13
+ @dataitems = {}
18
14
 
19
- mainlayout = QVBoxLayout.new(self)
20
- mainlayout.add_stretch
21
- mainlayout.add_widget(@toolbar)
22
- mainlayout.add_widget(@tablewidget)
23
- mainlayout.add_stretch
15
+ initialize_toolbar
16
+ initialize_tablewidget
24
17
 
25
- set_attribute(Qt::WA_DeleteOnClose)
26
- set_modal(true)
27
- end
18
+ mainlayout = QVBoxLayout.new(self)
19
+ mainlayout.add_stretch
20
+ mainlayout.add_widget(@toolbar)
21
+ mainlayout.add_widget(@tablewidget)
22
+ mainlayout.add_stretch
28
23
 
29
- private
24
+ set_attribute(Qt::WA_DeleteOnClose)
25
+ set_modal(true)
26
+ end
30
27
 
31
- def initialize_toolbar
32
- @toolbar = QWidget.new
28
+ private
33
29
 
34
- btn = QPushButton.new(QIcon.from_theme(QIcon::ThemeIcon::ListAdd), "Add")
35
- btn.clicked.connect(self, :_on_list_add_button_clicked)
30
+ def initialize_toolbar
31
+ @toolbar = QWidget.new
36
32
 
37
- qhboxlayout = QHBoxLayout.new(@toolbar)
38
- qhboxlayout.add_widget(QLabel.new("Password Stores"))
39
- qhboxlayout.add_stretch
40
- qhboxlayout.add_widget(btn)
41
- end
33
+ btn = QPushButton.new(QIcon.from_theme(QIcon::ThemeIcon::ListAdd), "Add")
34
+ btn.clicked.connect(self, :_on_list_add_button_clicked)
42
35
 
43
- def initialize_tablewidget
44
- @tablewidget = QWidget.new
45
- @tablewidget.set_object_name("browsestoresdialog_tablewidget")
46
- @tablewidget.set_style_sheet("
47
- #browsestoresdialog_tablewidget {
48
- min-width: 600px;
49
- background: white;
50
- }
51
- ")
52
-
53
- QVBoxLayout.new(@tablewidget)
54
- PassQt.settings.GET_stores.each do |store|
55
- update_tablewidget_addtableitem(store["fullpath"])
56
- end
57
- end
36
+ qhboxlayout = QHBoxLayout.new(@toolbar)
37
+ qhboxlayout.add_widget(QLabel.new("Password Stores"))
38
+ qhboxlayout.add_stretch
39
+ qhboxlayout.add_widget(btn)
40
+ end
58
41
 
59
- def update_tablewidget_addtableitem(fullpath)
60
- tableitem = QWidget.new
61
- tableitemlayout = QHBoxLayout.new(tableitem)
42
+ def initialize_tablewidget
43
+ @tablewidget = QWidget.new
44
+ @tablewidget.set_object_name("browsestoresdialog_tablewidget")
45
+ @tablewidget.set_style_sheet("
46
+ #browsestoresdialog_tablewidget {
47
+ min-width: 600px;
48
+ background: white;
49
+ }
50
+ ")
51
+
52
+ QVBoxLayout.new(@tablewidget)
53
+ PassQt.settings.GET_stores.each do |store|
54
+ update_tablewidget_addtableitem(store["fullpath"])
55
+ end
56
+ end
62
57
 
63
- label = QLabel.new(fullpath)
64
- tableitemlayout.add_widget(label)
65
- tableitemlayout.add_stretch
58
+ def update_tablewidget_addtableitem(fullpath)
59
+ tableitem = QWidget.new
60
+ tableitemlayout = QHBoxLayout.new(tableitem)
66
61
 
67
- btn = QPushButton.new(QIcon.from_theme(QIcon::ThemeIcon::ListRemove), "Remove")
68
- btn.clicked.connect(self, :_on_list_remove_button_clicked)
69
- tableitemlayout.add_widget(btn)
62
+ label = QLabel.new(fullpath)
63
+ tableitemlayout.add_widget(label)
64
+ tableitemlayout.add_stretch
70
65
 
71
- @dataitems[fullpath] = DataItem.new(tableitem)
72
- @tablewidget.layout.add_widget(tableitem)
73
- end
66
+ btn = QPushButton.new(QIcon.from_theme(QIcon::ThemeIcon::ListRemove), "Remove")
67
+ btn.clicked.connect(self, :_on_list_remove_button_clicked)
68
+ tableitemlayout.add_widget(btn)
74
69
 
75
- def update_tablewidget_removetableitem(tableitem)
76
- @dataitems.delete_if { |_, item| item.tablewidgetitem == tableitem }
77
- tableitem.delete_now
78
- end
79
-
80
- def h_put_stores
81
- stores = @dataitems.map { |fullpath, _| {"fullpath" => fullpath} }
82
- PassQt.settings.PUT_stores(stores)
83
- stores_changed.emit
84
- end
70
+ @dataitems[fullpath] = DataItem.new(tableitem)
71
+ @tablewidget.layout.add_widget(tableitem)
72
+ end
85
73
 
86
- def _on_list_add_button_clicked
87
- dir = QFileDialog.get_existing_directory(self, "", QDir.home_path)
88
- return if dir.empty?
74
+ def update_tablewidget_removetableitem(tableitem)
75
+ @dataitems.delete_if { |_, item| item.tablewidgetitem == tableitem }
76
+ tableitem.delete_now
77
+ end
89
78
 
90
- if @dataitems.key?(dir)
91
- message = "<p>The following store already exists.</p>#{dir}"
92
- QMessageBox.critical(self, "", message)
93
- return
94
- end
79
+ def h_put_stores
80
+ stores = @dataitems.map { |fullpath, _| {"fullpath" => fullpath} }
81
+ PassQt.settings.PUT_stores(stores)
82
+ stores_changed.emit
83
+ end
95
84
 
96
- unless QDir.new(dir).exists(".gpg-id")
97
- message = "<p>The following store is invalid, because the .gpg-id file is missing.</p>#{dir}"
98
- QMessageBox.critical(self, "", message)
99
- return
100
- end
85
+ def _on_list_add_button_clicked
86
+ dir = QFileDialog.get_existing_directory(self, "", QDir.home_path)
87
+ return if dir.empty?
101
88
 
102
- update_tablewidget_addtableitem(dir)
103
- h_put_stores
89
+ if @dataitems.key?(dir)
90
+ message = "<p>The following store already exists.</p>#{dir}"
91
+ QMessageBox.critical(self, "", message)
92
+ return
104
93
  end
105
94
 
106
- def _on_list_remove_button_clicked
107
- update_tablewidget_removetableitem(sender.parent)
108
- h_put_stores
95
+ unless QDir.new(dir).exists(".gpg-id")
96
+ message = "<p>The following store is invalid, because the .gpg-id file is missing.</p>#{dir}"
97
+ QMessageBox.critical(self, "", message)
98
+ return
109
99
  end
100
+
101
+ update_tablewidget_addtableitem(dir)
102
+ h_put_stores
103
+ end
104
+
105
+ def _on_list_remove_button_clicked
106
+ update_tablewidget_removetableitem(sender.parent)
107
+ h_put_stores
110
108
  end
111
109
  end
@@ -1,80 +1,78 @@
1
- module PassQt
2
- class MainWindow < RubyQt6::Bando::QMainWindow
3
- q_object do
4
- slot "_on_browse_action_triggered()"
5
- slot "_on_browsestoresdialog_stores_changed()"
6
- slot "_on_passlistwidget_store_changed(QString)"
7
- slot "_on_passlistwidget_passfile_selected(QString,QString)"
8
- slot "_on_passlistwidget_passfolder_selected(QString,QString)"
9
- end
10
-
11
- def initialize
12
- super
13
-
14
- initialize_toolbar
15
- initialize_central_widget
16
-
17
- set_context_menu_policy(Qt::NoContextMenu)
18
- PassQt.settings.GET_mainwindow_geometry_and_restore_to(self)
19
- end
20
-
21
- def close_event(evt)
22
- PassQt.settings.PUT_mainwindow_geometry(self)
23
-
24
- _close_event(evt)
25
- end
26
-
27
- private
28
-
29
- def initialize_toolbar
30
- browse_action = QAction.new(QIcon.from_theme(QIcon::ThemeIcon::Computer), "Browse")
31
- browse_action.set_tool_tip("Browse password stores")
32
- browse_action.triggered.connect(self, :_on_browse_action_triggered)
33
-
34
- toolbar = add_tool_bar("ToolBar")
35
- toolbar.set_object_name("mainwindow_toolbar")
36
- toolbar.set_movable(false)
37
- toolbar.add_action(browse_action)
38
- end
39
-
40
- def initialize_central_widget
41
- @passlistwidget = PassListWidget.new
42
- @passlistwidget.store_changed.connect(self, :_on_passlistwidget_store_changed)
43
- @passlistwidget.passfile_selected.connect(self, :_on_passlistwidget_passfile_selected)
44
- @passlistwidget.passfolder_selected.connect(self, :_on_passlistwidget_passfolder_selected)
45
-
46
- @passinfowidget = PassInfoWidget.new
47
-
48
- centralwidget = QWidget.new
49
- mainlayout = QHBoxLayout.new(centralwidget)
50
- mainlayout.add_widget(@passlistwidget)
51
- mainlayout.add_widget(@passinfowidget)
52
- mainlayout.set_stretch(0, 2)
53
- mainlayout.set_stretch(1, 3)
54
-
55
- set_central_widget(centralwidget)
56
- end
57
-
58
- def _on_browse_action_triggered
59
- dialog = BrowseStoresDialog.new
60
- dialog.stores_changed.connect(self, :_on_browsestoresdialog_stores_changed)
61
- dialog.show
62
- end
63
-
64
- def _on_browsestoresdialog_stores_changed
65
- @passlistwidget.reinitialize_stores
66
- end
67
-
68
- def _on_passlistwidget_store_changed(store)
69
- @passinfowidget.reinitialize_infoframe
70
- end
71
-
72
- def _on_passlistwidget_passfile_selected(store, passname)
73
- @passinfowidget.reinitialize_passfile(store, passname)
74
- end
75
-
76
- def _on_passlistwidget_passfolder_selected(store, passname)
77
- @passinfowidget.reinitialize_passfolder(store, passname)
78
- end
1
+ class MainWindow < RubyQt6::Bando::QMainWindow
2
+ q_object do
3
+ slot "_on_browse_action_triggered()"
4
+ slot "_on_browsestoresdialog_stores_changed()"
5
+ slot "_on_passlistwidget_store_changed(QString)"
6
+ slot "_on_passlistwidget_passfile_selected(QString,QString)"
7
+ slot "_on_passlistwidget_passfolder_selected(QString,QString)"
8
+ end
9
+
10
+ def initialize
11
+ super
12
+
13
+ initialize_toolbar
14
+ initialize_central_widget
15
+
16
+ set_context_menu_policy(Qt::NoContextMenu)
17
+ PassQt.settings.GET_mainwindow_geometry_and_restore_to(self)
18
+ end
19
+
20
+ def close_event(evt)
21
+ PassQt.settings.PUT_mainwindow_geometry(self)
22
+
23
+ _close_event(evt)
24
+ end
25
+
26
+ private
27
+
28
+ def initialize_toolbar
29
+ browse_action = QAction.new(QIcon.from_theme(QIcon::ThemeIcon::Computer), "Browse")
30
+ browse_action.set_tool_tip("Browse password stores")
31
+ browse_action.triggered.connect(self, :_on_browse_action_triggered)
32
+
33
+ toolbar = add_tool_bar("ToolBar")
34
+ toolbar.set_object_name("mainwindow_toolbar")
35
+ toolbar.set_movable(false)
36
+ toolbar.add_action(browse_action)
37
+ end
38
+
39
+ def initialize_central_widget
40
+ @passlistwidget = PassListWidget.new
41
+ @passlistwidget.store_changed.connect(self, :_on_passlistwidget_store_changed)
42
+ @passlistwidget.passfile_selected.connect(self, :_on_passlistwidget_passfile_selected)
43
+ @passlistwidget.passfolder_selected.connect(self, :_on_passlistwidget_passfolder_selected)
44
+
45
+ @passinfowidget = PassInfoWidget.new
46
+
47
+ centralwidget = QWidget.new
48
+ mainlayout = QHBoxLayout.new(centralwidget)
49
+ mainlayout.add_widget(@passlistwidget)
50
+ mainlayout.add_widget(@passinfowidget)
51
+ mainlayout.set_stretch(0, 2)
52
+ mainlayout.set_stretch(1, 3)
53
+
54
+ set_central_widget(centralwidget)
55
+ end
56
+
57
+ def _on_browse_action_triggered
58
+ dialog = BrowseStoresDialog.new
59
+ dialog.stores_changed.connect(self, :_on_browsestoresdialog_stores_changed)
60
+ dialog.show
61
+ end
62
+
63
+ def _on_browsestoresdialog_stores_changed
64
+ @passlistwidget.reinitialize_stores
65
+ end
66
+
67
+ def _on_passlistwidget_store_changed(store)
68
+ @passinfowidget.reinitialize_infoframe
69
+ end
70
+
71
+ def _on_passlistwidget_passfile_selected(store, passname)
72
+ @passinfowidget.reinitialize_passfile(store, passname)
73
+ end
74
+
75
+ def _on_passlistwidget_passfolder_selected(store, passname)
76
+ @passinfowidget.reinitialize_passfolder(store, passname)
79
77
  end
80
78
  end
@@ -1,133 +1,131 @@
1
- module PassQt
2
- class NewOneTimePasswordDialog < RubyQt6::Bando::QDialog
3
- q_object do
4
- slot "_on_okbutton_clicked()"
5
- slot "_on_cancelbutton_clicked()"
6
- end
7
-
8
- def initialize(store, folder, on_success:)
9
- super()
10
-
11
- @store = store
12
- @folder = folder
13
- @on_success = on_success
14
-
15
- initialize_form
16
- initialize_btngroup
1
+ class NewOneTimePasswordDialog < RubyQt6::Bando::QDialog
2
+ q_object do
3
+ slot "_on_okbutton_clicked()"
4
+ slot "_on_cancelbutton_clicked()"
5
+ end
17
6
 
18
- mainlayout = QVBoxLayout.new(self)
19
- mainlayout.add_widget(@form)
20
- mainlayout.add_widget(@btngroup)
7
+ def initialize(store, folder, on_success:)
8
+ super()
21
9
 
22
- set_attribute(Qt::WA_DeleteOnClose)
23
- set_modal(true)
24
- end
10
+ @store = store
11
+ @folder = folder
12
+ @on_success = on_success
25
13
 
26
- private
14
+ initialize_form
15
+ initialize_btngroup
27
16
 
28
- def initialize_form
29
- titlelabel = QLabel.new("<center><b>Insert New OTP Password</b></center>")
17
+ mainlayout = QVBoxLayout.new(self)
18
+ mainlayout.add_widget(@form)
19
+ mainlayout.add_widget(@btngroup)
30
20
 
31
- @errinfolabel = QLabel.new("")
32
- @errinfolabel.set_style_sheet("background: white; color: red; padding: 8px; margin: 4px;")
33
- @errinfolabel.set_hidden(true)
34
-
35
- placeholder = (@folder == "") ? "github.com-otp" : "#{@folder}/github.com-otp"
36
- @passnamelabel = initialize_form_label("File")
37
- @passnameinput = initialize_form_inputfield(placeholder)
38
- set_focus_proxy(@passnameinput)
39
-
40
- @passwordlabel = initialize_form_label("OTP URI")
41
- @passwordinput = initialize_form_inputfield("otpauth://totp/GitHub...")
42
-
43
- @form = QWidget.new
44
- @form.set_object_name("newonetimepassworddialog_form")
45
- @form.set_style_sheet("
46
- #newonetimepassworddialog_form {
47
- min-width: 600px;
48
- }
49
- ")
50
-
51
- layout = QGridLayout.new(@form)
52
- layout.add_widget(titlelabel, 0, 0, 1, 2)
53
- layout.set_row_minimum_height(1, 10)
54
- layout.add_widget(@errinfolabel, 2, 0, 1, 2)
55
- layout.add_widget(@passnamelabel, 3, 0)
56
- layout.add_widget(@passnameinput, 3, 1)
57
- layout.add_widget(@passwordlabel, 4, 0)
58
- layout.add_widget(@passwordinput, 4, 1)
59
- end
21
+ set_attribute(Qt::WA_DeleteOnClose)
22
+ set_modal(true)
23
+ end
60
24
 
61
- def initialize_form_label(text)
62
- label = QLabel.new(text)
63
- label.set_alignment(Qt::AlignRight)
64
- label.set_style_sheet("min-width: 80px; padding-right: 4px;")
65
- label
66
- end
25
+ private
26
+
27
+ def initialize_form
28
+ titlelabel = QLabel.new("<center><b>Insert New OTP Password</b></center>")
29
+
30
+ @errinfolabel = QLabel.new("")
31
+ @errinfolabel.set_style_sheet("background: white; color: red; padding: 8px; margin: 4px;")
32
+ @errinfolabel.set_hidden(true)
33
+
34
+ placeholder = (@folder == "") ? "github.com-otp" : "#{@folder}/github.com-otp"
35
+ @passnamelabel = initialize_form_label("File")
36
+ @passnameinput = initialize_form_inputfield(placeholder)
37
+ set_focus_proxy(@passnameinput)
38
+
39
+ @passwordlabel = initialize_form_label("OTP URI")
40
+ @passwordinput = initialize_form_inputfield("otpauth://totp/GitHub...")
41
+
42
+ @form = QWidget.new
43
+ @form.set_object_name("newonetimepassworddialog_form")
44
+ @form.set_style_sheet("
45
+ #newonetimepassworddialog_form {
46
+ min-width: 600px;
47
+ }
48
+ ")
49
+
50
+ layout = QGridLayout.new(@form)
51
+ layout.add_widget(titlelabel, 0, 0, 1, 2)
52
+ layout.set_row_minimum_height(1, 10)
53
+ layout.add_widget(@errinfolabel, 2, 0, 1, 2)
54
+ layout.add_widget(@passnamelabel, 3, 0)
55
+ layout.add_widget(@passnameinput, 3, 1)
56
+ layout.add_widget(@passwordlabel, 4, 0)
57
+ layout.add_widget(@passwordinput, 4, 1)
58
+ end
67
59
 
68
- def initialize_form_inputfield(placeholder)
69
- input = QLineEdit.new
70
- input.set_placeholder_text(placeholder)
71
- input
72
- end
60
+ def initialize_form_label(text)
61
+ label = QLabel.new(text)
62
+ label.set_alignment(Qt::AlignRight)
63
+ label.set_style_sheet("min-width: 80px; padding-right: 4px;")
64
+ label
65
+ end
73
66
 
74
- def initialize_btngroup
75
- @okbutton = QPushButton.new("Create")
76
- @okbutton.clicked.connect(self, :_on_okbutton_clicked)
67
+ def initialize_form_inputfield(placeholder)
68
+ input = QLineEdit.new
69
+ input.set_placeholder_text(placeholder)
70
+ input
71
+ end
77
72
 
78
- @cancelbutton = QPushButton.new("Cancel")
79
- @cancelbutton.clicked.connect(self, :_on_cancelbutton_clicked)
73
+ def initialize_btngroup
74
+ @okbutton = QPushButton.new("Create")
75
+ @okbutton.clicked.connect(self, :_on_okbutton_clicked)
80
76
 
81
- @btngroup = QWidget.new
82
- layout = QHBoxLayout.new(@btngroup)
83
- layout.add_stretch
84
- layout.add_widget(@okbutton)
85
- layout.add_widget(@cancelbutton)
86
- end
77
+ @cancelbutton = QPushButton.new("Cancel")
78
+ @cancelbutton.clicked.connect(self, :_on_cancelbutton_clicked)
87
79
 
88
- def update_form_errinfo(info)
89
- if info.empty?
90
- @errinfolabel.set_text("")
91
- @errinfolabel.set_hidden(true)
92
- return
93
- end
80
+ @btngroup = QWidget.new
81
+ layout = QHBoxLayout.new(@btngroup)
82
+ layout.add_stretch
83
+ layout.add_widget(@okbutton)
84
+ layout.add_widget(@cancelbutton)
85
+ end
94
86
 
95
- @errinfolabel.set_text(info)
96
- @errinfolabel.set_hidden(false)
87
+ def update_form_errinfo(info)
88
+ if info.empty?
89
+ @errinfolabel.set_text("")
90
+ @errinfolabel.set_hidden(true)
91
+ return
97
92
  end
98
93
 
99
- def validate_form
100
- update_form_errinfo("")
94
+ @errinfolabel.set_text(info)
95
+ @errinfolabel.set_hidden(false)
96
+ end
101
97
 
102
- {
103
- "File" => @passnameinput,
104
- "OTP URI" => @passwordinput
105
- }.each do |k, v|
106
- next unless v.text.empty?
98
+ def validate_form
99
+ update_form_errinfo("")
107
100
 
108
- update_form_errinfo("#{k} can't be blank")
109
- return false
110
- end
101
+ {
102
+ "File" => @passnameinput,
103
+ "OTP URI" => @passwordinput
104
+ }.each do |k, v|
105
+ next unless v.text.empty?
111
106
 
112
- true
107
+ update_form_errinfo("#{k} can't be blank")
108
+ return false
113
109
  end
114
110
 
115
- def _on_okbutton_clicked
116
- return unless validate_form
117
-
118
- store = @store
119
- passname = @passnameinput.text
120
- password = @passwordinput.text
121
- Pass.otp_insert(store, passname, password, on_success: ->(_) {
122
- @on_success.call(passname)
123
- close
124
- }, on_failure: ->(data) {
125
- update_form_errinfo(data["stderr"].strip)
126
- })
127
- end
111
+ true
112
+ end
113
+
114
+ def _on_okbutton_clicked
115
+ return unless validate_form
128
116
 
129
- def _on_cancelbutton_clicked
117
+ store = @store
118
+ passname = @passnameinput.text
119
+ password = @passwordinput.text
120
+ Pass.otp_insert(store, passname, password, on_success: ->(_) {
121
+ @on_success.call(passname)
130
122
  close
131
- end
123
+ }, on_failure: ->(data) {
124
+ update_form_errinfo(data["stderr"].strip)
125
+ })
126
+ end
127
+
128
+ def _on_cancelbutton_clicked
129
+ close
132
130
  end
133
131
  end