Russian Qt Forum

Qt => Вопросы новичков => Тема начата: White Owl от Август 06, 2015, 19:16



Название: Синхронизация с внешними устройствами
Отправлено: White Owl от Август 06, 2015, 19:16
Задача: Есть десктоп, есть планшеты (и телефоны). Есть файлы которые надо синхронизировать между десктопом и планшетом.

Как я решаю задачу сейчас: подключаю планшет по USB кабелю к десктопу, в десткопном приложении тыкаю кнопку "Sync" - она проверяет что есть доступ к ранее заданному каталогу (который на самом деле уже на планшете) и перекидывает файлы между локальным каталогом и планшетным. Если же планшет в данный момент не подключен - Sync показывает ошибку, мол "внешнее устройство не найдено".

Хочу: Чтобы десктопная часть (планшетную пока трогать не будем), автоматически обнаруживала что к машине подключили планшет и разрешала-запрещала кнопку Sync. Ну и (в качестве бонуса) про появлении планшета показывала юзеру диалог "Есть внешнее устройство с таким-то именем, желаете синхронизироваться с ним сейчас? Да/Нет".

Спрашивается как можно отследить подключение внешнего устройства? Раз в цать времени проверять существование внешнего каталога в принципе возможно, но не кошерно.

Решение желательно ОС-независимое.


Название: Re: Синхронизация с внешними устройствами
Отправлено: kuzulis от Август 06, 2015, 20:13
Цитировать
Решение желательно ОС-независимое.

Невозможно. Нужно использовать разные фишечки:

* SetupAPI - windows
* udev - linux
* IOKit - macosx



Название: Re: Синхронизация с внешними устройствами
Отправлено: kai666_73 от Август 07, 2015, 11:42
Цитировать
Решение желательно ОС-независимое.

Невозможно. Нужно использовать разные фишечки:

* SetupAPI - windows
* udev - linux
* IOKit - macosx


Хороший повод изучить и применить на практике соотв. паттерн.
И сообщество будет благодарно )


Название: Re: Синхронизация с внешними устройствами
Отправлено: kuzulis от Август 07, 2015, 11:50
Эмм.. ну, или libusb.. но я не знаю, можно ли там отслеживать появление/исчезновение девайса с заданными VID/PID по эвентам, а не поллингом.


Название: Re: Синхронизация с внешними устройствами
Отправлено: qate от Август 07, 2015, 13:34
пусть android входит в wifi сеть - далее синхронизировать по сокетам
ОС независимое решение


Название: Re: Синхронизация с внешними устройствами
Отправлено: Bepec от Август 07, 2015, 18:53
Самое простое и топорное, как вы и предложили - таймер и проверка дисков на наличие каталога.
QDir + QTimer + QList.
Раз в секунду проверяете список устройств, если есть новое, проверяете на наличие папки и кнопку енаблите.

Кроссплатформенно, быстро, без мутотени с апи разных систем. При желании можно добавить получение имени устройства (опять таки не кроссплатформенно), или же тупо добавлять при первичной синхронизации в ваш каталог файл с названием устройства.

PS а вот разбираться с апи различных систем, это работа не на день, с учетом тестировая и отладки :)


Название: Re: Синхронизация с внешними устройствами
Отправлено: White Owl от Август 07, 2015, 19:01
Придется наверное действительно писать собственный враппер над ОС-зависимыми функциями. Странно что в Qt его до сих пор нет.


Название: Re: Синхронизация с внешними устройствами
Отправлено: Bepec от Август 07, 2015, 19:02
Он есть, он во многих проектах, но вот незадача - никто не выкладывает его в окончании темы с вопросом :D
PS у меня нет ^.^