ruby-pass-qt 2.1.0 → 2.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0fb6805f75336a47b0d05fefce05aef65337a02726c03cae84d85587dc2ffe2c
4
- data.tar.gz: dd7c0cad047c733a073bc301a8b57512da731888a62960d207015e8b1c2f0eab
3
+ metadata.gz: c91b2943a3a656afdaa617f3bc534c2beab4dfeebb86c38f177054a2291cc202
4
+ data.tar.gz: 7d911ca4c201296c9259d755d643e500c15bc95fc2a7f723cef21e68882ed6d1
5
5
  SHA512:
6
- metadata.gz: b6a0044d9db31fb3cdd5c76ab9ac3c22266e371d6c2c9f18a58ed4de480740849c3cfcd4713cbd2344ac815b670a4d43c84db7e20f9ff8fb826488232c182ca4
7
- data.tar.gz: '069c63341c0129c3c5b113572055d579873fe58f9e95b16e74f80d1deabf01ee7e4503f0404f58682187fb0f03d52ce9bab176826947c3678bd8f9e6e0614a88'
6
+ metadata.gz: 35cb967283aa998c40e766d78e53d909e5f1034005130238608d20f5c2d072839d3dac7a5ac3547da7c6293205768928a0a4d7c750286ed4b2d95777d0101f0c
7
+ data.tar.gz: 7346a3732c5fad0a5c820340a462e2e150f525a15cfb2ab6f2da7d92f0472a8c1a544e16fcec6c84e154d097bc2081f8b7ffc76d667bab97ace3528576007616
@@ -1,26 +1,26 @@
1
1
  class MainWindowPassInfoWidget < RubyQt6::Bando::QWidget
2
- module Helpers
3
- def self.parse_passfile(data)
4
- lines = data["stdout"].lines
5
- password = lines[0][..-2]
2
+ private
6
3
 
7
- username = ""
8
- website = ""
9
- lines.each do |line|
10
- matched = line.match(/\A(\w+:\s*)?(.*)\n/)
11
- next if matched.nil?
4
+ def hlpr_parse_passfile(data)
5
+ lines = data["stdout"].lines
6
+ password = lines[0][..-2]
12
7
 
13
- case matched[1]&.rstrip&.downcase
14
- when "username:" then username = matched[2]
15
- when "website:" then website = matched[2]
16
- end
17
- end
8
+ username = ""
9
+ website = ""
10
+ lines.each do |line|
11
+ matched = line.match(/\A(\w+:\s*)?(.*)\n/)
12
+ next if matched.nil?
18
13
 
19
- {
20
- "password" => password,
21
- "username" => username,
22
- "website" => website
23
- }
14
+ case matched[1]&.rstrip&.downcase
15
+ when "username:" then username = matched[2]
16
+ when "website:" then website = matched[2]
17
+ end
24
18
  end
19
+
20
+ {
21
+ "password" => password,
22
+ "username" => username,
23
+ "website" => website
24
+ }
25
25
  end
26
26
  end
@@ -26,7 +26,7 @@ class MainWindowPassInfoWidget < RubyQt6::Bando::QWidget
26
26
  activate_infoframe
27
27
 
28
28
  Pass.show(@store, @passname, on_success: ->(data) {
29
- formdata = Helpers.parse_passfile(data)
29
+ formdata = hlpr_parse_passfile(data)
30
30
  if formdata["password"].start_with?("otpauth:")
31
31
  activate_otpform(formdata)
32
32
  else
@@ -0,0 +1,45 @@
1
+ class MainWindowPassListWidget < RubyQt6::Bando::QWidget
2
+ class TreeWidget < RubyQt6::Bando::QTreeWidget
3
+ private
4
+
5
+ def filter_imp(text)
6
+ set_current_item(nil)
7
+
8
+ if text.empty?
9
+ @dataitems.each do |_, item|
10
+ item.treewidgetitem.set_hidden(false)
11
+ item.treewidgetitem.set_selected(false)
12
+ end
13
+ return
14
+ end
15
+
16
+ re_options = QRegularExpression::UnanchoredWildcardConversion | QRegularExpression::NonPathWildcardConversion
17
+ re = QRegularExpression.from_wildcard(text, nil, re_options)
18
+
19
+ filepath_matched = Set.new
20
+ filepath_matched_1st = nil
21
+ @dataitems.each do |filepath, item|
22
+ has_match = re.match(item.passname).has_match
23
+ next unless has_match
24
+
25
+ if filepath_matched_1st.nil?
26
+ filepath_matched_1st = filepath if hlpr_passfile?(filepath)
27
+ end
28
+
29
+ loop do
30
+ filepath_matched << filepath
31
+ filepath = QFileInfo.new(filepath).absolute_path
32
+ break unless @dataitems.key?(filepath)
33
+ end
34
+ end
35
+
36
+ @dataitems.each do |filepath, item|
37
+ visible = filepath_matched.include?(filepath)
38
+ item.treewidgetitem.set_hidden(!visible)
39
+
40
+ selected = filepath_matched_1st == filepath
41
+ item.treewidgetitem.set_selected(selected)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,58 @@
1
+ class MainWindowPassListWidget < RubyQt6::Bando::QWidget
2
+ class TreeWidget < RubyQt6::Bando::QTreeWidget
3
+ private
4
+
5
+ def refresh_imp(store, selected_passname:)
6
+ @store = store
7
+ @dataitems = {}
8
+
9
+ clear
10
+ refresh_imp_rebuild_tree
11
+ expand_all
12
+
13
+ if selected_passname.nil?
14
+ set_current_item(nil)
15
+ else
16
+ @dataitems.each do |_, item|
17
+ next if item.passname != selected_passname
18
+ set_current_item(item.treewidgetitem)
19
+ break
20
+ end
21
+ end
22
+ end
23
+
24
+ def refresh_imp_rebuild_tree
25
+ file_icon_provider = QFileIconProvider.new
26
+ store_root_path = QDir.new(@store)
27
+ dirs = [@store]
28
+ until dirs.empty?
29
+ dir = dirs.shift
30
+ diritem = @dataitems[dir]&.treewidgetitem || invisible_root_item
31
+
32
+ entry_list = QDir.new(dir).entry_info_list(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot)
33
+ entry_list.each do |entry|
34
+ next if entry.hidden?
35
+ next if entry.file_name.starts_with(".")
36
+
37
+ filepath = entry.absolute_file_path
38
+ next if @dataitems.key?(filepath)
39
+
40
+ if entry.dir?
41
+ dirs << filepath
42
+ passname = store_root_path.relative_file_path(filepath)
43
+ elsif entry.file?
44
+ next unless hlpr_passfile?(entry)
45
+ passname = store_root_path.relative_file_path(filepath)
46
+ passname = passname[0, passname.size - entry.suffix.size - 1]
47
+ else
48
+ next
49
+ end
50
+
51
+ item = QTreeWidgetItem.new(diritem, QStringList.new << entry.complete_base_name << filepath)
52
+ item.set_icon(0, file_icon_provider.icon(entry))
53
+ @dataitems[filepath] = DataItem.new(passname, item)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,2 @@
1
+ require_relative "funcs/filter"
2
+ require_relative "funcs/refresh"
@@ -1,18 +1,18 @@
1
1
  class MainWindowPassListWidget < RubyQt6::Bando::QWidget
2
2
  class TreeWidget < RubyQt6::Bando::QTreeWidget
3
- module Helpers
4
- def self.passfile?(fileinfo)
5
- case fileinfo
6
- when QFileInfo then fileinfo.suffix.downcase == "gpg"
7
- when QString then fileinfo.ends_with(".gpg", Qt::CaseInsensitive)
8
- else raise "unreachable!"
9
- end
10
- end
3
+ private
11
4
 
12
- def self.folderpath(store, fileinfo)
13
- folder = fileinfo.dir? ? fileinfo.absolute_file_path : fileinfo.absolute_path
14
- QDir.new(store).relative_file_path(folder)
5
+ def hlpr_passfile?(fileinfo)
6
+ case fileinfo
7
+ when QFileInfo then fileinfo.suffix.downcase == "gpg"
8
+ when QString then fileinfo.ends_with(".gpg", Qt::CaseInsensitive)
9
+ else raise "unreachable!"
15
10
  end
16
11
  end
12
+
13
+ def hlpr_folderpath(store, fileinfo)
14
+ folder = fileinfo.dir? ? fileinfo.absolute_file_path : fileinfo.absolute_path
15
+ QDir.new(store).relative_file_path(folder)
16
+ end
17
17
  end
18
18
  end
@@ -1,10 +1,11 @@
1
+ require_relative "treewidget/funcs"
1
2
  require_relative "treewidget/helpers"
2
- require_relative "treewidget/treebuilder"
3
- require_relative "treewidget/treefilter"
4
3
  require_relative "treewidget/ui"
5
4
 
6
5
  class MainWindowPassListWidget < RubyQt6::Bando::QWidget
7
6
  class TreeWidget < RubyQt6::Bando::QTreeWidget
7
+ DataItem = Struct.new(:passname, :treewidgetitem)
8
+
8
9
  q_object do
9
10
  signal "nil_selected(QString)"
10
11
  signal "passfile_selected(QString,QString)"
@@ -33,27 +34,11 @@ class MainWindowPassListWidget < RubyQt6::Bando::QWidget
33
34
  end
34
35
 
35
36
  def refresh(store, selected_passname: nil)
36
- @store = store
37
- @dataitems = {}
38
-
39
- builder = TreeBuilder.new
40
- builder.perform(self, @store, @dataitems)
41
-
42
- expand_all
43
- if selected_passname.nil?
44
- set_current_item(nil)
45
- else
46
- @dataitems.each do |_, item|
47
- next if item.passname != selected_passname
48
- set_current_item(item.treewidgetitem)
49
- break
50
- end
51
- end
37
+ refresh_imp(store, selected_passname:)
52
38
  end
53
39
 
54
- def update_passname_filter(text)
55
- filter = TreeFilter.new
56
- filter.perform(self, @dataitems, text)
40
+ def filter(text)
41
+ filter_imp(text)
57
42
  end
58
43
 
59
44
  private
@@ -66,7 +51,7 @@ class MainWindowPassListWidget < RubyQt6::Bando::QWidget
66
51
 
67
52
  filepath = curr.data(1, Qt::DisplayRole).value
68
53
  dataitem = @dataitems[filepath]
69
- Helpers.passfile?(filepath) ?
54
+ hlpr_passfile?(filepath) ?
70
55
  passfile_selected.emit(@store, dataitem.passname) :
71
56
  passfolder_selected.emit(@store, dataitem.passname)
72
57
  end
@@ -75,7 +60,7 @@ class MainWindowPassListWidget < RubyQt6::Bando::QWidget
75
60
  item = selected_items[0]
76
61
  if item
77
62
  filepath = item.data(1, Qt::DisplayRole).value
78
- folder = Helpers.folderpath(@store, QFileInfo.new(filepath))
63
+ folder = hlpr_folderpath(@store, QFileInfo.new(filepath))
79
64
  folder = "" if folder == "."
80
65
  else
81
66
  folder = ""
@@ -91,7 +76,7 @@ class MainWindowPassListWidget < RubyQt6::Bando::QWidget
91
76
  item = selected_items[0]
92
77
  if item
93
78
  filepath = item.data(1, Qt::DisplayRole).value
94
- folder = Helpers.folderpath(@store, QFileInfo.new(filepath))
79
+ folder = hlpr_folderpath(@store, QFileInfo.new(filepath))
95
80
  folder = "" if folder == "."
96
81
  else
97
82
  folder = ""
@@ -40,6 +40,6 @@ class MainWindowPassListWidget < RubyQt6::Bando::QWidget
40
40
  end
41
41
 
42
42
  def _on_searchbar_text_changed(text)
43
- @treewidget.update_passname_filter(text)
43
+ @treewidget.filter(text)
44
44
  end
45
45
  end
@@ -1,3 +1,3 @@
1
1
  module PassQt
2
- VERSION = "2.1.0"
2
+ VERSION = "2.1.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-pass-qt
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Doe
@@ -48,9 +48,10 @@ files:
48
48
  - lib/pass-qt/app/views/mainwindow/components/passinfowidget/ui.rb
49
49
  - lib/pass-qt/app/views/mainwindow/components/passlistwidget.rb
50
50
  - lib/pass-qt/app/views/mainwindow/components/passlistwidget/treewidget.rb
51
+ - lib/pass-qt/app/views/mainwindow/components/passlistwidget/treewidget/funcs.rb
52
+ - lib/pass-qt/app/views/mainwindow/components/passlistwidget/treewidget/funcs/filter.rb
53
+ - lib/pass-qt/app/views/mainwindow/components/passlistwidget/treewidget/funcs/refresh.rb
51
54
  - lib/pass-qt/app/views/mainwindow/components/passlistwidget/treewidget/helpers.rb
52
- - lib/pass-qt/app/views/mainwindow/components/passlistwidget/treewidget/treebuilder.rb
53
- - lib/pass-qt/app/views/mainwindow/components/passlistwidget/treewidget/treefilter.rb
54
55
  - lib/pass-qt/app/views/mainwindow/components/passlistwidget/treewidget/ui.rb
55
56
  - lib/pass-qt/app/views/mainwindow/components/passlistwidget/ui.rb
56
57
  - lib/pass-qt/app/views/mainwindow/ui.rb
@@ -1,46 +0,0 @@
1
- class MainWindowPassListWidget < RubyQt6::Bando::QWidget
2
- class TreeWidget < RubyQt6::Bando::QTreeWidget
3
- DataItem = Struct.new(:passname, :treewidgetitem)
4
-
5
- class TreeBuilder
6
- def initialize
7
- @fileiconprovider = QFileIconProvider.new
8
- end
9
-
10
- def perform(treewidget, store, dataitems)
11
- treewidget.clear
12
-
13
- store_root_path = QDir.new(store)
14
- dirs = [store]
15
- until dirs.empty?
16
- dir = dirs.shift
17
- diritem = dataitems[dir]&.treewidgetitem || treewidget.invisible_root_item
18
-
19
- entry_list = QDir.new(dir).entry_info_list(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot)
20
- entry_list.each do |entry|
21
- next if entry.hidden?
22
- next if entry.file_name.starts_with(".")
23
-
24
- filepath = entry.absolute_file_path
25
- next if dataitems.key?(filepath)
26
-
27
- if entry.dir?
28
- dirs << filepath
29
- passname = store_root_path.relative_file_path(filepath)
30
- elsif entry.file?
31
- next unless Helpers.passfile?(entry)
32
- passname = store_root_path.relative_file_path(filepath)
33
- passname = passname[0, passname.size - entry.suffix.size - 1]
34
- else
35
- next
36
- end
37
-
38
- item = QTreeWidgetItem.new(diritem, QStringList.new << entry.complete_base_name << filepath)
39
- item.set_icon(0, @fileiconprovider.icon(entry))
40
- dataitems[filepath] = DataItem.new(passname, item)
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,45 +0,0 @@
1
- class MainWindowPassListWidget < RubyQt6::Bando::QWidget
2
- class TreeWidget < RubyQt6::Bando::QTreeWidget
3
- class TreeFilter
4
- def perform(treewidget, dataitems, text)
5
- treewidget.set_current_item(nil)
6
-
7
- if text.empty?
8
- dataitems.each do |_, item|
9
- item.treewidgetitem.set_hidden(false)
10
- item.treewidgetitem.set_selected(false)
11
- end
12
- return
13
- end
14
-
15
- re_options = QRegularExpression::UnanchoredWildcardConversion | QRegularExpression::NonPathWildcardConversion
16
- re = QRegularExpression.from_wildcard(text, nil, re_options)
17
-
18
- filepath_matched = Set.new
19
- filepath_matched_1st = nil
20
- dataitems.each do |filepath, item|
21
- has_match = re.match(item.passname).has_match
22
- next unless has_match
23
-
24
- if filepath_matched_1st.nil?
25
- filepath_matched_1st = filepath if Helpers.passfile?(filepath)
26
- end
27
-
28
- loop do
29
- filepath_matched << filepath
30
- filepath = QFileInfo.new(filepath).absolute_path
31
- break unless dataitems.key?(filepath)
32
- end
33
- end
34
-
35
- dataitems.each do |filepath, item|
36
- visible = filepath_matched.include?(filepath)
37
- item.treewidgetitem.set_hidden(!visible)
38
-
39
- selected = filepath_matched_1st == filepath
40
- item.treewidgetitem.set_selected(selected)
41
- end
42
- end
43
- end
44
- end
45
- end