Вот какая мысль: у нас
тут в теме на Yandex-disk уже собралось около 30 человек переходить - может нам как-то организоваться и нарисовать GUI плагин в панель для нотификации/информации?
Как я вижу этот проектик (ТЗ, с уточнениями):
1. Реализуется в виде индикатора для плагина индикаторов панели (как и в grive tools индикатор встраивается в любую панель). Индикатор - исключительно обертка для CLI утилиты
yandex-disk (парсим выхлоп).
При запуске:
1. Создаем индикатор.
2. Проверяем наличие демона (yandex-disk status) и если он не запущен - запускаем. На этом этапе ловим ошибку запуска и репортим об ошибке сообщением и закрываем приложение.
3. Берем из выхлопа yandex-disk status (при работающем демоне) текущий синхронизируемый каталог и текущий статус - запоминаем их.
3. Высвечиваем (иконка и, если настроено - сообщение) текущий статус.
4. Запускаем необходимые таймеры/потоки для дальнейшей текущей работы:
- Необходимо следить за файлом <текущий каталог YD>/.sync/cli.log и как только он изменился - дергать (с установкой NLS в EN) yandex-disk status
(export LANG=en_US.UTF-8; yandex-disk status). Выхлоп парсим. Текущий статус отрабатываем (уведомление, если настроено, и меняем иконку).
Навешивать вотчер на .sync/status оказалось неудобно, т.к. при останове демона, он этот файл просто удаляет, а когда создает новый (при запуске) то вотчер (работающий через inotify) его не подхватывает - это же новый файл и у него другой inode
В случае ошибок - репортим о них через notify и иконку
2. Индикатор в панели выглядит как летающаяя тарелочка, которая при смене статуса демона как-то меняет свой цвет или изображение (например: зеленый=синхронизировано, желтый или мигающий желто/черный - идет синхронизация, красный - ошибка). Будут нужны два набора иконок на светлую или на темную панель. Иконка для активного статуса (синхронизация) будет анимимированной (последовательная смена нескольких иконок).
3. Если разрешено в настройках, то при смене статуса выдается еще и нотификация (через notyfy):
- Запущена синхронизация | Synchronization started
(при смене idle на статус index или busy) - Синхронизация выполнена | Synchronization finished
(при смене busy или index на статус idle) - Ошибка синхронизации | Synchronization error
(при смене на статус error) - Синхронизация отключена | Synchronization switched off
(при отключении демона)4.
При наведении курсора на индикатор вываливается информация в виде ответа на yandex-disk status (выводим всю простынку - там все достаточно компактно, и в текущем NLS). Оказалось в индикаторе такие вещи не реалезуемы - обрезан этот функционал
Вместо этого, простынка вывода индикатора выводится в отдельное окошко при клике по статусу в меню индикатора.
5. По клику по индикатору открываем выпадающее меню:
Информация о статусе и объемах, берем из выхлопа yandex-disk status и выводим три строки:
1. Статус: | Status:
(одно из):
- Синхронизировано | Synchronized
(при статусе idle);
- Синхронизация <n>Mb из <m>Mb (<p>%) | Synchronization <n>Mb from <m>Mb (<p>%)
(при статусе busy);
- Ошибка | Error
(при статусе error);
- Нет соединения | Not connected
( нет связи с интернетом) - Демон не запущен / Daemon is not started
(когда демон не запущен);
2. Занято <n>Gb/<m>Gb, свободно <е>Gb | Used <n>Gb/<m>Gb
3. <k>Gb в корзине | <е>Gb free, trash <k>Gb
Информация о последних синхронизированных файлах: Выпадающее подменю с перечнем последних синхронизированных файлов. При клике на файл - он открывается в приложении по умолчанию для его типа.
Действия:
- Запустить сервис YD | Start YD daemon
(yandex-disk start - активно при остановленном демоне) - Остановить сервис YD | Stop YD daemon
(yandex-disk start - активно при запущенном демоне) - Синхронизация | Synchronize
(yandex-disk sync) не сделано, и я не уверен что оно нужно... - Открыть диск в браузере | Open disk in browser
(открыть закладку в браузере "по умолчанию" с адресом http://disk.yandex.ru, он сам перекинет куда надо) - Открыть локальную папку | Open local folder
(открыть текущий YD фолдер файл-менеджером "по умолчанию").
- Настройки | Settings
(открываем диалог настроек) - About
- Выход | Exit
(выполняем yandex-disk stop и убрать плагин из панели (закончить процесс плагина)).
6. Диалог настроек: Обычное диалоговое окно с следующими контролами:
- Checkbox - Запуск при старте компьютера | Start on system startup
(снятие галки уберет автозапуск (в ~/.config/autostart) индикатора, установка галки - прописывает в автозапуск индикатор) - Checkbox - Запуск сервиса Yandex.disk при старте компьютера | Start yandex disk daemon on system startup - то же самое как для индикатора - для демона.
- Checkbox - Светлые иконки | Light icons
(снятая галка - будут темные иконки, по умолчанию не установлено) - Checkbox - Включить нотификацию | Show notifications
(снятая галка - нотификацию не показываем, по умолчанию установлено ) -
Контрол с деревом каталогов (от текущего синхронизируемого каталога) и checkbox-сами на каталогах (по умолчанию все выбрано): Синхронизируемые папки | Synchronized folders Настройку выборочной синхронизации сделал чуточку по-другому в v1.5.0: показывается (в отдельном окне) список выбранных ранее каталогов для исключения из синхронизации. Добавление (кнопка "добавить каталог") в список через стандартный контрл по работе с файлами. Удалять - предварительно отметив удаляемые пути и кликнув по кнопке "удалить выбранные".
- Кнопка Close.
Дополнительно:Отдельную можно сделать "GUI" утилиту начальной настройки (она никак не завязана на индикатор):
На bash делаем через zenity окна в которых вводим все вопросы, которые задает yandex-disk setup и ответы отдаем ему же (можно просто в цикле). -
Сделано, спасибо snowdimon-у за помощь.А можно просто терминал открыть и в нем запустить yandex-disk setup. Кроме того можно пристроить к индикатору установку плагинов/скриптов для файловых менеджеров для расшаривания в общий доступ файлов - -
Сделано для Thunar, Dolphin, Nautilus и NemoНюансы:Утилита yandex-disk хавает окружение и выводит все свои статусы и сообщения в текущем NLS.
С точки зрения разбора вывода yandex-disk status - полезно вызывать c NLS английской
(export LANG=en_US.UTF-8; yandex-disk status) - там лаконичные статусы (всегда одним словом, кроме 'no internet access') да и разбор на два языка затачивать - имхо гиморно.
А вот для вывода текущего состояния (при наведении мыши) - там нужно брать вывод в текущей NLS.
Полезные(возможно) ссылки на подобные проекты:Нашел еще такой
проектик (GPLv2) из которого возможно вытянуть какие-то позезности... (но сам он что-то мне не очень понравился - я считаю нужно что-то заточенное именно на YD, простое и незатейливое).
Grive tools (GPLv3 индикатор на pyton. setup - bash) - можно использовать как основу (там решается похожая задача: grive - CLI утилита, grive-tools - индикатор в панель, обертка grive (pyton) + утилита начальной установки (bash + zenity) ).