Class: Fusuma::Plugin::Appmatcher::GnomeExtension::Matcher

Inherits:
Object
  • Object
show all
Defined in:
lib/fusuma/plugin/appmatcher/gnome_extension.rb

Overview

Look up application name using dbus

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMatcher

Returns a new instance of Matcher.



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/fusuma/plugin/appmatcher/gnome_extension.rb', line 66

def initialize
  @session_bus = DBus.session_bus
  service = session_bus.service("org.gnome.Shell")
  @interface = service["/dev/iberianpig/Appmatcher"]["dev.iberianpig.Appmatcher"]
rescue DBus::Error => e
  MultiLogger.error "DBus::Error: #{e.message}"
  MultiLogger.error "Have you installed GNOME extension?"
  MultiLogger.error "$ fusuma-appmatcher --install-gnome-extension"
  MultiLogger.error "Then Restart your session"

  exit 1
end

Instance Attribute Details

#session_busObject (readonly)

Returns the value of attribute session_bus.



64
65
66
# File 'lib/fusuma/plugin/appmatcher/gnome_extension.rb', line 64

def session_bus
  @session_bus
end

Instance Method Details

#active_applicationString

Returns:

  • (String)


89
90
91
92
93
94
95
# File 'lib/fusuma/plugin/appmatcher/gnome_extension.rb', line 89

def active_application
  app = JSON.parse(@interface.ActiveWindow, object_class: Application)
  app&.wm_class
rescue JSON::ParserError => e
  MultiLogger.error e.message
  nil
end

#on_active_application_changedObject



97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/fusuma/plugin/appmatcher/gnome_extension.rb', line 97

def on_active_application_changed
  @interface.on_signal("ActiveWindowChanged") do |json|
    # if app is is not found, fetch active_application_id
    app =
      begin
        JSON.parse(json, object_class: Application)
      rescue JSON::ParserError => e
        MultiLogger.error e.message
        nil
      end

    yield(app&.wm_class || "NOT FOUND") if block_given?
  end
end

#running_applicationsArray<String>

Returns:

  • (Array<String>)


80
81
82
83
84
85
86
# File 'lib/fusuma/plugin/appmatcher/gnome_extension.rb', line 80

def running_applications
  applications = JSON.parse(@interface.ListWindows, object_class: Application)
  applications.map(&:wm_class)
rescue JSON::ParserError => e
  MultiLogger.error e.message
  nil
end