Class: FileFinder

Inherits:
Object
  • Object
show all
Defined in:
lib/vimamsa/file_finder.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeFileFinder

Returns a new instance of FileFinder.



16
17
18
19
# File 'lib/vimamsa/file_finder.rb', line 16

def initialize()
  vma.hook.register(:shutdown, self.method("save"))
  @@dir_list = vma.marshal_load("file_index")
end

Class Method Details

.recursively_find_filesObject



66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/vimamsa/file_finder.rb', line 66

def self.recursively_find_files()
  debug("START find files")
  dlist = []

  for d in $search_dirs
    debug("FIND FILEs IN #{d}")
    dlist = dlist + Dir.glob("#{d}/**/*").select { |e| File.file?(e) and $find_extensions.include?(File.extname(e)) }
    debug("FIND FILEs IN #{d} END")
  end
  @@dir_list = dlist
  debug("END find files")
  return @@dir_list
end

.update_indexObject



8
9
10
11
12
13
14
# File 'lib/vimamsa/file_finder.rb', line 8

def self.update_index()
  message("Start updating file index")
  Thread.new {
    recursively_find_files()
    message("Finnish updating file index")
  }
end

Instance Method Details

#filter_files(search_str) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/vimamsa/file_finder.rb', line 80

def filter_files(search_str)
  dir_hash = {}

  scores = Parallel.map(@@dir_list, in_threads: 8) do |file|
    [file, srn_dst(search_str, file)]
  end
  for s in scores
    dir_hash[s[0]] = s[1] if s[1] > 0
  end
  # debug scores
  dir_hash = dir_hash.sort_by { |k, v| -v }
  dir_hash = dir_hash[0..20]
  dir_hash.map do |file, d|
    debug "D:#{d} #{file}"
  end
  return dir_hash
end

#gui_file_finder_select_callback(search_str, idx) ⇒ Object



59
60
61
62
63
64
# File 'lib/vimamsa/file_finder.rb', line 59

def gui_file_finder_select_callback(search_str, idx)
  selected_file = @file_search_list[idx][0]
  debug "FILE FINDER SELECT CALLBACK: s=#{search_str},i=#{idx}: #{selected_file}"
  gui_select_window_close(0)
  open_new_file(selected_file)
end

#gui_file_finder_update_callback(search_str = "") ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
# File 'lib/vimamsa/file_finder.rb', line 47

def gui_file_finder_update_callback(search_str = "")
  debug "FILE FINDER UPDATE CALLBACK: #{search_str}"
  if (search_str.size > 1)
    files = filter_files(search_str)
    @file_search_list = files
    return files
    #debug files.inspect
    #return files.values
  end
  return []
end

#saveObject



21
22
23
24
# File 'lib/vimamsa/file_finder.rb', line 21

def save()
 debug "SAVE FILE INDEX", 2
  vma.marshal_save("file_index", @@dir_list)
end

#start_guiObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/vimamsa/file_finder.rb', line 26

def start_gui()
  if $search_dirs.empty?
    message("FileFinder: No $search_dirs defined")
    return
  end
  l = []
  $select_keys = ["h", "l", "f", "d", "s", "a", "g", "z"]
  if @@dir_list == nil
    Thread.new { FileFinder.recursively_find_files() }
  end

  # select_callback = proc { |search_str, idx| gui_file_finder_select_callback(search_str, idx) }
  select_callback = self.method("gui_file_finder_select_callback")
  update_callback = self.method("gui_file_finder_update_callback")

  gui_select_update_window(l, $select_keys.collect { |x| x.upcase },
                           # "gui_file_finder_select_callback",
                           select_callback,
                           update_callback)
end