Собираем
информацию
по крупицам


Новости

MyTetra научилась копировать картинки из интернета
21-01-2016
11:04:21

В современных фреймверках, и в Qt в частности, работа с буфером обмена реализована на зачаточном уровне. Если в буфере обмена находится текст - то текст будет передан. Если в буфере обмена находится картинка - то картинка тоже будет передана. А что произойдет, если в буфере будет находиться и текст и изображение? Ничего хорошего! Не существует кроссплатформенных методов одномоментного получения из буфера обмена различных типов объектов. Поэтому, если выделить текст с картинками в браузере Firefox, и вставить текст в Microsoft Word, то Microsoft Word не сможет получить картинки из буфера обмена. Он пропарсит текст, найдет интернет-ссылки, и молча примется их закачивать. Создается впечатление, что Microsoft Word умеет копировать текст с картинками через буфер обмена, заполненный другой программой, но на деле это не так.

 

Моя программа для накопления информации MyTetra тоже не могла похвастаться копированием текста, содержащего картинки. Можно было скопировать и вставить отдельную картинку. Можно скопировать и вставить текст с картинками в пределах самой программы MyTetra. Но вставить текст с картинками из браузера небыло никакой возможности.

 

Недавно у меня состоялся такой разговор с пользователем PIM-менеджера CherryTree:

 

Пользователь:

Не могу сказать, когда это было реализовано. Но год назад, когда я начал пользоваться cheerytree, эта возможность уже была, что и определило мой выбор.

 

Я:

Посмотрел. Я-то думал, что, действительно, решена задача вставки из буфера текста + картинок. А на самом деле задача не решена. Они просто парсят вставляемый текст, и выкачивают картинки.

Соответственно, такое решение не работает:

- Если используется прокси. Картинки не копируются, так как прямого соединения с интернет нет;
- Если пропал интернет. То есть, в буфере картинки есть, но CherryTree не умеет доставать из буфера. Поэтому картинки будут потеряны;
- Если скопировать текст с картинками не из браузера, а из Libre/Open Office, то картинки тоже не будут вставлены. А все из-за того, что из буфера CherryTree доставать не умеет.

В общем, сделана полумера, от реализации которой я в свое время отказался, так как посчитал костылем. Но если народу нравится, и альтернатив нет, то наверно реализую вот так так же как у Cherry.

 

Я предпринял последнюю попытку разобраться с буфером обмена. Я думал, что может быть все-таки существует метод вычленения и текста и картинок из одного буфера. Я проштудировал все методы, которые дает Qt для работы с буфером обмена. Но оказалось, что такого функционала просто не предусмотрено. Я проделывал разные манипуляции с буфером обмена между разными программами и понял, что даже Microsoft не умеет работать с комбинированным буфером.

 

В соответствии с вышесказанным, мне пришлось отказаться от честной работы с буфером обмена, на которую я так расчитывал. И для решения вопроса о копировании текста с картинками из браузера, я сделал такой же механизм, как и в других программах. А именно: вычленение тегов картинок во вставляемом тексте, и подкачка их из сети. Вчера реализация этого механизма была завершена в ветке editorModification в коммите 71e6d9d.

 

Теперь, если выделить в браузере текст с картинками, то они будут подгружены в текст. Происходит это с помощью встроенного довнлоадера:

 

 

Вот, например, как выглядит запись, вставленная с Хабрахабра:

 

 

Довнлоадер умеет скачивать по HTTP, HTTPS, понимает редиректы (которые, например, используются на Хабрасторадже для хранения картинок).

 

Очередной шаг в развитии MyTetra сделан, и теперь я приступаю к исправлению косметических недочетов. Некоторые решаются просто, а некоторые могут потребовать больших усилий. Сейчас мне начал помогать фиксить баги один добрый человек из Питера, и я надеюсь, что работа пойдет быстрее, и релиз выйдет в ближайшее время.

 

Всем удачи.

 



Интересное на сайте


Программирование на C++ и Qt » Как в Linux глобально отловить нажания клавиш в X11 (XWindow)

Несколько раз я пытался найти пример кода, который бы позволял отслеживать события нажатия и отжатия клавиш в нашем любимом X-сервере. Важный момент: ...


Демо на Ассемблере » AeroBall

Размер: 4 Кб Требования: DOS 6.22 Год: 1999   Третье место из трех 8) в номинации 4Kb на демопати Paradox-99. Писано в рамках демогруппы TransMi...


Мультиплатформенные игры » Ежик-попрыгунчик. Лесная тропа.

Игра про ёжика, который прыгает по подвижным платформам и собирает яблочки.   Эта игра писалась в рамках конкурса конференции разработчиков игр ...

RSS подписка

Подпишитесь на новости сайта по RSS


О, смотри-ка какое хорошее место. Дайте два!

Внимание!


На этом сайте разрабатывается программа MyTetra и её родственные проекты. Доступны к просмотру следующие базы знаний:

 

База Xintrea (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)

База Rarrugas (1, 2)

База Balas

База YellowRaven

База Yurons

База Lesnik757

База Shandor

База Sirrichar

База Anatolean

База Аrmagedec

База SorokinRed

База Deadelf79

 

Требуют доработки:

 

База Tairesh

База Ivnglkv

База Kolyag87

База Andyk101

База Garik456456

База Harpokrat

База SalexIzyh

База Duwaz

 

Подробности на странице MyTetra Share.

 WebHamster.Ru
 Домик любопытного хомячка
Яндекс индекс цитирования
Почтовый ящик