1
0
Fork 0
KALLIOPE_FRENCH_PERSONALISA.../resources/neurons/run_app/run_app.py

73 lines
2.4 KiB
Python
Raw Normal View History

2022-05-01 01:28:36 +02:00
import subprocess
import os
from kalliope.core import NeuronModule
from kalliope.core.NeuronModule import MissingParameterException, MissingParameterException
home_dir = os.path.expanduser('~')
entries_dirs = [
os.path.join(home_dir, ".local/share/applications"),
"/usr/local/share/applications",
"/usr/share/applications"
]
def parse_exec(line):
splitted_line = line.split("=")
if len(splitted_line) < 2:
return None
else:
return splitted_line[1]
def check_file(file_path, query):
exec = None # Equals to Exec command of .desktop if is before search terms
found = False
for line in open(file_path, 'r').readlines():
if "exec" in line.lower():
exec = parse_exec(line)
if query.lower() in line.lower():
found = True
if exec is not None and found is True:
return exec
return None
def search_app_name_in_desktop_entries(query: str):
for d in entries_dirs:
if os.path.exists(d):
for f in os.listdir(d):
if ".desktop" in f:
result = check_file(os.path.join(d, f), query)
if result is not None:
return result
return None
class Run_app(NeuronModule):
def __init__(self, **kwargs):
NeuronModule.__init__(self, **kwargs)
self.query = kwargs.get('app', None)
self.found_message = kwargs.get('found_message', None)
self.not_found_message = kwargs.get('not_found_message', None)
if self._is_parameters_ok():
result = search_app_name_in_desktop_entries(self.query)
if result is not None:
subprocess.Popen(result, shell=True)
self.say(self.found_message)
else:
self.say(self.not_found_message)
def _is_parameters_ok(self):
"""
Check if received parameters are ok to perform operations in the neuron
:return: true if parameters are ok, raise an exception otherwise
.. raises:: MissingParameterException
"""
if self.query is None:
raise MissingParameterException("Query parameter is missing.")
if self.found_message is None:
raise MissingParameterException("Found message parameter is missing.")
if self.not_found_message is None:
raise MissingParameterException("Not found message parameter is missing.")
return True