Skip to content

Commit

Permalink
Merge pull request #810 from jtheoof/feat/809/whitelist-apps-env
Browse files Browse the repository at this point in the history
Add ability to show all apps
  • Loading branch information
friday committed Sep 19, 2021
2 parents 32b2ab7 + 6d9b67e commit 023f544
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 9 deletions.
4 changes: 4 additions & 0 deletions data/preferences/src/api/fixture.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export default function(url, params) {
clear_previous_text: true,
grab_mouse_pointer: true,
blacklisted_desktop_dirs: ['/var/tmp', '/tmp/var/log/bin/bash/root'].join(':'),
disable_desktop_filters: false,
available_themes: [{ text: 'Dark', value: 'dark' }, { text: 'Light', value: 'light' }],
theme_name: 'light',
is_wayland: true,
Expand Down Expand Up @@ -49,6 +50,9 @@ export default function(url, params) {
} else if (isMatch(url, '/set/blacklisted-desktop-dirs')) {
console.log('/set/blacklisted-desktop-dirs', params)
setTimeout(resolve, 0)
} else if (isMatch(url, '/set/disable-desktop-filters')) {
console.log('/set/disable-desktop-filters', params)
setTimeout(resolve, 0)
} else if (isMatch(url, '/open/web-url')) {
console.log('/open/web-url', params)
setTimeout(resolve, 0)
Expand Down
31 changes: 31 additions & 0 deletions data/preferences/src/components/pages/Preferences.vue
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,22 @@
></editable-text-list>
</td>
</tr>
<tr>
<td class="pull-top">
<label for="disable-desktop-filters">Show All Apps</label>
<small>
<p>
Display all applications, even if they are configured to not show in the current desktop environment.
</p>
<p v-if="disableDesktopFiltersChanged">
<i class="fa fa-warning"></i> Restart Ulauncher for this to take effect
</p>
</small>
</td>
<td class="pull-top">
<b-form-checkbox id="disable-desktop-filters" v-model="disable_desktop_filters"></b-form-checkbox>
</td>
</tr>
</table>
</div>
</template>
Expand Down Expand Up @@ -294,6 +310,21 @@ export default {
}
},
disable_desktop_filters: {
get() {
return this.prefs.disable_desktop_filters
},
set(value) {
return jsonp('prefs://set/disable-desktop-filters', { value: value }).then(
() => {
this.setPrefs({ disable_desktop_filters: value })
this.disableDesktopFiltersChanged = true
},
err => bus.$emit('error', err)
)
}
},
render_on_screen: {
get() {
return this.prefs.render_on_screen
Expand Down
8 changes: 6 additions & 2 deletions ulauncher/search/apps/app_watcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

from ulauncher.utils.decorator.run_async import run_async
from ulauncher.utils.desktop.reader import find_desktop_files, read_desktop_file, filter_app, find_apps_cached
from ulauncher.utils.Settings import Settings
from ulauncher.search.apps.AppDb import AppDb
from ulauncher.config import DESKTOP_DIRS

Expand All @@ -31,6 +32,9 @@ def decorator_func(self, event, *args, **kwargs):

DeferredFiles = Dict[str, float]

settings = Settings.get_instance()
disable_desktop_filters = settings.get_property('disable-desktop-filters')


class AppNotifyEventHandler(pyinotify.ProcessEvent):
RETRY_INTERVAL = 2 # seconds
Expand Down Expand Up @@ -118,7 +122,7 @@ def _add_file_sync(self, pathname: str) -> None:

try:
app = read_desktop_file(pathname)
if filter_app(app):
if filter_app(app, disable_desktop_filters):
self.__db.put_app(app)
logger.info('New app was added "%s" (%s)', app.get_name(), app.get_filename())
else:
Expand Down Expand Up @@ -165,7 +169,7 @@ def start():
db = AppDb.get_instance()
t0 = time()
logger.info('Started scanning desktop dirs')
for app in find_apps_cached():
for app in find_apps_cached(None, disable_desktop_filters):
db.put_app(app)
logger.info('Scanned desktop dirs in %.2f seconds', (time() - t0))

Expand Down
8 changes: 8 additions & 0 deletions ulauncher/ui/windows/PreferencesUlauncherDialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@ def prefs_get_all(self, url_params):
'show_recent_apps': self.settings.get_property('show-recent-apps'),
'clear_previous_query': self.settings.get_property('clear-previous-query'),
'blacklisted_desktop_dirs': self.settings.get_property('blacklisted-desktop-dirs'),
'disable_desktop_filters': self.settings.get_property('disable-desktop-filters'),
'available_themes': self._get_available_themes(),
'theme_name': Theme.get_current().get_name(),
'render_on_screen': self.settings.get_property('render-on-screen'),
Expand Down Expand Up @@ -350,6 +351,13 @@ def prefs_set_blacklisted_desktop_dirs(self, url_params):
self.settings.set_property('blacklisted-desktop-dirs', dirs)
self.settings.save_to_file()

@rt.route('/set/disable-desktop-filters')
def prefs_set_disable_desktop_filters(self, url_params):
is_on = self._get_bool(url_params['query']['value'])
logger.info('Set disable-desktop-filters to %s', is_on)
self.settings.set_property('disable-desktop-filters', is_on)
self.settings.save_to_file()

@rt.route('/set/render-on-screen')
def prefs_set_render_on_screen(self, url_params):
selected_option = url_params['query']['value']
Expand Down
5 changes: 5 additions & 0 deletions ulauncher/utils/Settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@
None,
False,
GObject.ParamFlags.READWRITE),
"disable-desktop-filters": (bool, # type
"Display all apps in environment despite OnlyShowIn/NotShowIn", # nick name
None, # description
False, # default
GObject.ParamFlags.READWRITE), # flags
}


Expand Down
15 changes: 8 additions & 7 deletions ulauncher/utils/desktop/reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,13 @@ def find_desktop_files(dirs: List[str] = None, pattern: str = "*.desktop") -> Ge
yield file


def filter_app(app):
def filter_app(app, disable_desktop_filters=False):
"""
:param Gio.DesktopAppInfo app:
:returns: True if app can be added to the database
"""
return app and app.get_string('Name') and app.get_string('Type') == 'Application' \
and app.get_show_in() and not app.get_nodisplay() and not app.get_is_hidden()
and (app.get_show_in() or disable_desktop_filters) and not app.get_nodisplay() and not app.get_is_hidden()


def read_desktop_file(file):
Expand All @@ -76,18 +76,19 @@ def read_desktop_file(file):
return None


def find_apps(dirs=None):
def find_apps(dirs=None, disable_desktop_filters=False):
"""
:param list dirs: list of paths to `*.desktop` files
:returns: list of :class:`Gio.DesktopAppInfo` objects
"""
if dirs is None:
dirs = DESKTOP_DIRS

return list(filter(filter_app, map(read_desktop_file, find_desktop_files(dirs))))
return list(filter(lambda app: filter_app(app, disable_desktop_filters),
map(read_desktop_file, find_desktop_files(dirs))))


def find_apps_cached(dirs=None):
def find_apps_cached(dirs=None, disable_desktop_filters=False):
"""
:param list dirs: list of paths to `*.desktop` files
:returns: list of :class:`Gio.DesktopAppInfo` objects
Expand All @@ -108,11 +109,11 @@ def find_apps_cached(dirs=None):
if desktop_dirs:
for dir in desktop_dirs:
app_info = read_desktop_file(dir)
if filter_app(app_info):
if filter_app(app_info, disable_desktop_filters):
yield app_info
logger.info('Found %s apps in cache', len(desktop_dirs))
new_desktop_dirs = []
for app_info in find_apps(DESKTOP_DIRS):
for app_info in find_apps(DESKTOP_DIRS, disable_desktop_filters):
yield app_info
new_desktop_dirs.append(app_info.get_filename())
cache.put('desktop_dirs', new_desktop_dirs)
Expand Down

0 comments on commit 023f544

Please sign in to comment.