Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Помогите разобраться или переписать сторонинй софт. Исходники есть  (Прочитано 1658 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн fill.sa

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
Ситуация такая, подключен к локалке где есть медиасервер. В сети используется собственная программка - "домашний агент" которая показыват баланс, новости и прочие функции делает.

Запуск фильмов идет с web сайта, но нажатию на кнопку, оттуда идет обращение к "домашний агент" и запускается плеер с фильмом.
Все это хорошо работает под виндой но под линуксом по нажатию на кнопку естественно ничего не происходит. местные умельцы, которые давно не выходят на свзязь переписали софтину под линукс(исходники есть) и все вродибы работает кроме запуска фильмов. А это самое нужное.

Вобщем кто , чем может помочь с запуском фильмов?

У меня kubuntu , есть последняя версия иходников,в ней добавлен запуск фильмомов который не работает, видимо потому-что у авторов была ubuntu и mandriva. Есть небольшой мануал для убунты.

Цитировать
Нашел вариат запуска фильмо с видиотеки.
Прописываем это
gconftool-2 -s /desktop/gnome/url-handlers/agent/command '/path/to/app %s' --type String
gconftool-2 -s /desktop/gnome/url-handlers/agent/enabled --type Boolean true

и остается реализовать запуск в агенте.

код для домашнего агента такой (в основных исходних вроди как добавлен)


Цитировать
int main(int argc, char *argv[])
{
    QString str;
    QApplication a(argc, argv);
    if (argc>1)
    {
        str=argv[1];
        if (str.contains(QRegExp("^agent:select:")))
        {           
            str.replace(QRegExp("^agent:select:"), "smb:");
            str.replace("\\","/");
            str.replace("/vika/","/ViKa/");
            QString extracted;
            QRegExp regexp;
            int pos;
            regexp.setPattern("smb://.*/.*/.*/.*/");
            pos = regexp.indexIn(str);
               if (pos > -1)
               {
                 extracted = regexp.cap(0);
               }
            QProcess *proc = new QProcess;
            proc->start(QString("nautilus \"%1\"").arg(extracted));
        }
    return 0;
    }
    Agent w;
    return a.exec();
}

Ну и сами исходники прилагаются.


Кто может помочь под KDE сие дело запустить?

Оффлайн агасфер

  • Активист
  • *
  • Сообщений: 660
  • Тот, который был тысячей..
    • Просмотр профиля
я ни разу не программист, но выше в коде упомянут наутилус, которого в кедах нет, ибо они пользуют Dolphin как файл-менеджер..
Возможно всё, но..

Оффлайн fill.sa

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
Я про это и писал, что у авторов была Ubuntu, а у меня Kubuntu с КДЕ. Как мне под кде это реализовать.

З.Ы. я уже пробовал менять
proc->start(QString("nautilus \"%1\"").arg(extracted));
на
proc->start(QString("dolphin \"%1\"").arg(extracted));

не помогло, видно нужно еще что-то сделать.
« Последнее редактирование: 14 Ноябрь 2015, 14:59:59 от fill.sa »

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4073
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
fill.sa, имхо проще переписать.
ЗЫ если поставить наутилус?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн fill.sa

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
Цитировать
gconftool-2 -s /desktop/gnome/url-handlers/agent/command '/path/to/app %s' --type String
gconftool-2 -s /desktop/gnome/url-handlers/agent/enabled --type Boolean true
Я так понимаю наутилусь без прописаных команд выше не будет открывать. А их я так понял только на gnome можно прописать.

В этих строках видимо и кроется основаная суть передачи команды из браузера в домашенго агента. Но я там ничего не понима. Возможно если что-то подобное прописать под KDE все заработает, сам домавшний агент уже содержит код для запуска.
« Последнее редактирование: 14 Ноябрь 2015, 15:48:06 от fill.sa »

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
видимо надо прописать protocol handler в kde. я сам не kde-шник, поэтому как это там сделать не знаю, но тут описывается что-то похожее - https://lists.debian.org/debian-kde/2011/02/msg00048.html , ну и плюс гугл по фразам 'kde protocol handler'  или 'kde url handler'.

Пользователь решил продолжить мысль [time]14 Ноябрь 2015, 22:31:43[/time]:
протокол, который нужно добавить - это видимо 'agent', а открывать файл вместо nautilus каким-нибудь xdg-open.

Пользователь решил продолжить мысль 14 Ноябрь 2015, 21:54:17:
и, кстати говоря, какая версия кубунты?
« Последнее редактирование: 14 Ноябрь 2015, 21:54:17 от spk-ubuntu »

Оффлайн fill.sa

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
Загуглил что есть protocol handler
https://support.google.com/chrome/answer/1382847?hl=ru

Вообщем очень похоже на то что нужно. Осталось разобраться как это все реализовать. Пока читаю ссылки.

agent - так зовется софтина. и вроди бы в запросе браузер такая команда.

Пользователь решил продолжить мысль 19 Ноябрь 2015, 17:45:08:
Ах да, версия 12,04,03
« Последнее редактирование: 19 Ноябрь 2015, 17:45:08 от fill.sa »

Оффлайн fill.sa

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
И так добавил файл agent.protocol
с таким содержимым

[Protocol]
exec=/usr/sbin/agent "%u"
protocol=lastfm
input=none
output=none
helper=true
listing=
reading=false
writing=false
makedir=false
deleting=false


теперь по кнопке запуска в брайзере запускаемся мой smplayer, но плейлист пуст. Также агент выводит сообщение об запуске файла "".
Т.е. процесс пошел но браузер не передает агенту что нужно запускать. Пробовал менять строку exec=/usr/sbin/agent "%u"
в итоге получил smplayer и в плейлисте вся строка из браузера вместо пусти к файлу.

Куда дальше копать? кто подскажет?

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
protocol=lastfm
Палимся! )))

Пробовал менять строку exec=/usr/sbin/agent "%u"
в итоге получил smplayer и в плейлисте вся строка из браузера вместо пусти к файлу.
Ну и отлично! Если посмотреть код "агента", то он как раз с того и начинает, что в полученном url меняет "agent:select" на  "smb:", прямые слэши на обратные и "/vika/" на "/ViKa/". В результате получается некий адрес виндовой шары, которая и скармливается наутилусу (в вашем случае этот адрес будет передаваться smplayer или xdg-open).
Покажите пример "агентовского" URL-а, чтобы мы проверили, правильно ли я понимаю происходящее.

Оффлайн fill.sa

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
protocol=lastfm
Палимся! )))

Я даже хз что это, просто бездумно скопировал пример и заменил адрес к програмке своей. Думаю что половина строк даже ненужно, но опятьтаки хз какая для чего.

Пробовал менять строку exec=/usr/sbin/agent "%u"
в итоге получил smplayer и в плейлисте вся строка из браузера вместо пусти к файлу.
Ну и отлично! Если посмотреть код "агента", то он как раз с того и начинает, что в полученном url меняет "agent:select" на  "smb:", прямые слэши на обратные и "/vika/" на "/ViKa/". В результате получается некий адрес виндовой шары, которая и скармливается наутилусу (в вашем случае этот адрес будет передаваться smplayer или xdg-open).

Так в том и дело что никакой замены непроисходит, тупо строка из браузера перелетела в плейлист(без замены или вырезки части строки). Причем это было один раз, когда я пробовал разные аргументы тут менять exec=/usr/sbin/agent "%u"
В остальных случаях просто пустая строка(агент тоже пишет о запуске НИКАКОГО файла.)
Может стоит попробовать еще другие аргументы(%u %g)? какие варинты посоветуете?
Пример url выложу позже, когда дома буду.
« Последнее редактирование: 29 Ноябрь 2015, 10:58:22 от fill.sa »

Оффлайн fill.sa

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
вот такой запрос в браузере
agent:open:\\infolan.by\fs\vika\s206d0\128 ударов сердца в минуту (We Are Your Friends).2015.Sun.avi

целиком код выкгляит так
<img src="image/open_file.gif" title="agent:open:\\infolan.by\fs\vika\s206d0\128 ударов сердца в минуту (We Are Your Friends).2015.Sun.avi" border="0">

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
попробуйте в коде агента заменить "agent:select:" на "agent:open:"

Пользователь решил продолжить мысль [time]23 Декабрь 2015, 23:38:54[/time]:
Ну или "допилить" url перед передачей программе-открывашке с помощью sed. По крайней мере у меня подобная команда вполне работает:
Код: Bash
  1. totem "$(echo 'agent:open:\\infolan.by\fs\vika\s206d0\128 ударов сердца в минуту (We Are Your Friends).2015.Sun.avi' | sed -e 's/\\/\//g' -e 's/agent:open/smb/' -e 's/\/vika\//\/ViKa\//')"
Другой разговор, что кроме Totem (у меня Gnome) никто (ни smplayer, ни gnome-player) не захотел воспроизводить файлы, чей адрес начинается с "smb://". Скорее всего в идеале было было сначала смонтировать куда-нибудь шару, а потом открывать файл.

Пользователь решил продолжить мысль [time]24 Декабрь 2015, 02:27:56[/time]:
Посмотрел исходники, которые Вы прикрепили:
в main.cpp:
Код: C
  1. int main(int argc, char *argv[])
  2. {
  3.     ...
  4.     Agent w;
  5.     w.getCmdLine(args);
  6.     ...
  7. }
в agent.cpp:
Код: C
  1. void Agent::getCmdLine(QStringList s)
  2. {
  3.     QString st;
  4.     if (s.length()>1) {
  5.         st = s.at(1);
  6.         if (st.contains(QRegExp("^agent:open:")))
  7.         {
  8.             st.replace(QRegExp("^agent:open:"), "smb:");
  9.             st.replace("\\","/");
  10.             st.replace("/vika/","/ViKa/");
  11.             QString extracted;
  12.             QRegExp regexp;
  13.             int pos;
  14.             regexp.setPattern("smb://.*/.*/.*/.*/.*");
  15.             pos = regexp.indexIn(st);
  16.                if (pos > -1)
  17.                {
  18.                  extracted = regexp.cap(0);
  19.                }
  20.             //QMessageBox::information(this,trUtf8("Домашний агент"),trUtf8("Открытие файла:\n \"%1\"").arg(extracted));
  21.             QSystemTrayIcon::MessageIcon ic = QSystemTrayIcon::MessageIcon(QSystemTrayIcon::Information);
  22.             trayIcon->showMessage(trUtf8("Домашний агент"), trUtf8("Открытие файла:\n \"%1\"").arg(extracted), ic, 5000);
  23.             QProcess *proc = new QProcess;
  24.  
  25.             proc->start(QString("/usr/bin/vlc \"%1\"").arg(extracted));
  26.  
  27.         }
  28.     }
  29. }
  30.  
т.е.
1. Код отличается от того, которые Вы написали в первом сообщении.
2. Для открытия файла используется VLC.
Попробуйте перекомпилировать программу из этих исходников или привести свою в соответствие с этими исходниками ("agent:select" замените на "agent:open", а вместо nautilus вызывайте vlc).
« Последнее редактирование: 24 Декабрь 2015, 01:34:05 от spk-ubuntu »

Оффлайн fill.sa

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
В первом посте это выречка с форума, видимо в последствии автор сам в исходниках поменял на "agent:open:".
ВОобще сейчас в исходниках "agent:open:" и с нимиже была собрана программа. Значит этот пункт отметаем.

Для верности скачал еще раз сходники и пересобрал, пробовал и с vlc и менять на smplayer2. Вообщем запускается пустой плеер ну и сообщение выводится о запуска файла "".
Если же агент не запущен то из браузера просто запускается smplayer со строкой в плейлисте равной запросу в браузере(agent:open:\\infolan.by\fs\vika\s206d0\128 ударов сердца в минуту (We Are Your Friends).2015.Sun.avi).

Я так понимаю что агент передают smplayer пустую строку на запуск. Сообственно и сообщение в агенте выводится с пустым фалом. Это я так понял строка в исходниках.           
QSystemTrayIcon::MessageIcon ic = QSystemTrayIcon::MessageIcon(QSystemTrayIcon::Information);
trayIcon->showMessage(trUtf8("Домашний агент"), trUtf8("Открытие файла:\n \"%1\"").arg(extracted), ic, 5000);


Вот как заставить передоваться ссылке на фильм? Может где то в исходних можно что-то прописать для проверки передается ли вообще агенту первоначальная строка из браузера? еще до того как идет подмена пути.

Пользователь добавил сообщение 09 Май 2016, 13:24:51:
Поправил строку с сообщение на такую
trayIcon->showMessage(trUtf8("Домашний агент"), trUtf8("Исходный: \"%2\"\n\n Открытие файла:\n \"%1\"").arg(extracted).arg(st), ic, 7000);

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



Но вот куча непонятных символов приростает. Может быть дело в них? как полечит?
« Последнее редактирование: 09 Май 2016, 13:34:06 от fill.sa »

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
https://ru.wikipedia.org/wiki/URL#.D0.9A.D0.BE.D0.B4.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_URL
https://yandex.ru/yandsearch?text=urlencode%20c%2B%2B

Пользователь добавил сообщение 11 Май 2016, 18:36:25:
применительно к qt, похоже, можно использовать что-то вроде QUrl::fromPercentEncoding()
« Последнее редактирование: 11 Май 2016, 18:36:25 от spk-ubuntu »

Оффлайн fill.sa

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
Почитал вот тут http://www.prog.org.ru/topic_23358_0.html
Пишут fromPercentEncoding - работает для всего, кроме русских символов. Например для ссылки "http://savedhistory.net/k/%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B-dle" - не переводит в русские. (должно быть "http://savedhistory.net/k/шаблоны-dle")

Хотя попробую вообще работает или нет. хотябы с английскими буквами.

Пользователь добавил сообщение 14 Май 2016, 00:01:43:
Добавил строчку QString  url = QUrl::fromPercentEncoding("%1").arg(st);Не знаю может я чего не так сделал но программа собралась без ошибок. Результат прежний - кракозябра. Я бы даже сказал что вообще ничего не изменилось.

Вот полный фрагмент.
QString  url = QUrl::fromPercentEncoding("%1").arg(st);

QSystemTrayIcon::MessageIcon ic = QSystemTrayIcon::MessageIcon(QSystemTrayIcon::Information);
QProcess *proc = new QProcess;

trayIcon->showMessage(trUtf8("Домашний агент"), trUtf8("Исходный: \"%2\"\n\n Открытие файла:\n \"%1\"").arg(extracted).arg(url), ic, 8000);
« Последнее редактирование: 22 Май 2016, 20:15:48 от fill.sa »

 

Страница сгенерирована за 0.074 секунд. Запросов: 24.