Здравствуйте! Возник такой вопрос (опять же, контекст - разработка легковесного DE). У меня сейчас при каждом открытии меню приложений читаются все *.desktop файлы из /usr/share/applications и ~/.local/share/applications (я знаю, что это не совсем правильно, и на самом деле надо проходиться по всем директориям из $XDG_DATA_DIRS, но пока что так). Я написал с нуля класс, который читает и парсит Desktop Entry (можно было бы использовать QSettings, как я собственно и делал раньше, но формат *.ini не предполагает перечислений через точки с запятыми, а именно это представляет собой параметр Categories, поэтому раньше не было возможности сделать меню по категориям). Но как-то не очень легковесно это, по-моему, каждый раз читать, вполне возможно, за сотню с лишним файлов с диска. Я где-то видел, что для этого используется т.н. menu-cache. Вопросов встает несколько:
-
Стоит ли пользоваться этим menu-cache? Т.е., насколько я понял, создается один файл, в котором закешированы основные параметры из каждого Desktop Entry, и апплет читает уже только его, чтобы снизить нагрузку на диск. Хотя может я и неправильно понял?
-
Является ли он стандартом / есть ли подобный стандарт от тех же Freedesktop, например?
-
А как этот кеш обновляется? Вот я изменил как-нибудь, допустим, файл *.desktop в /usr/share/applicaitons. И что, при добавлении/изменении/удалении надо каждый раз прописывать какую-нибудь команду для обновления кеша? А как сделать, чтобы пакетный мендежер автоматически это делал? Например, в Debian, насколько понимаю, так это и происходит. Мы же, когда ставим пакет, пакетный менеджер этот кеш меню автоматически обновляет.
Или не стоит это все того, и лучше оставить как есть?
UPD: Либо есть еще вариант. Один раз при запуске прочитать все файлы. Допустим, повесить QFileSystemWatcher на ту же /usr/share/applications и при изменении каком-либо обновлять список приложений, чтобы не делать это при каждом открытии меню приложения.
Заранее спасибо.