# Przypisanie protokołu GG

## peka

Na różnych WWW luidzie wystawiają swoje ikonki gg. GaduGadu pod Win rozpoznaje takie linki i po kliknięciu na ikone rozpoczyna rozmowę.

Jak "nauczyć" gaim, żeby robił to samo?

A może trzeba tego "nauczyć" przeglądarkę? Firefox mówi np. że protokół gg nie jest obsługiwany przez żadem program

----------

## yoshi314

mozna zaryzykowac, gdzies czytalem jak dodac protokol radia last.fm do firefoksa wiec moze i tu sie uda. 

o ile gaim lub inny komunikator akceptuje adresy gg w linii polecen.

----------

## wuja

 *peka wrote:*   

> Firefox mówi np. że protokół gg nie jest obsługiwany przez żadem program

 

Nie znam sie na Firefoksie, ale w Operze jest to możliwe. W preferencjach wstawia sie protokół gg i odpowiadający mu  /usr/bin/kadu

----------

## akub

 *wuja wrote:*   

> 
> 
> Nie znam sie na Firefoksie, ale w Operze jest to możliwe. W preferencjach wstawia sie protokół gg i odpowiadający mu  /usr/bin/kadu

 

za obsluge protokolu gg: jest odpowiedzialny modul dcopexport w kadu, ten sposob uruchamia poprostu kadu a nie rozmowe

kurde nie zauwazylem ze chodzi o gaima, w takim razie ten sposob moze zadzialas, ale pewnie z jakims przelacznikiem

----------

## Gabrys

Potrzebujesz gaim-remote i włączonego w gaimie moduł remote + konfiguracja firefoksa. Chodzi o klucz network.protocol-handler.app.gg.

----------

## peka

przejrzałem wcześniej about:config i nie widziałem tego klucza - dzięki

----------

## peka

Dodałem ten klucz z wartośćią gaim-remote i nic.

Dodałem z gaim-remote uri i tu tylko taka różnica, że znowu krzyczy, że nie umie obslużyć protokołu gg

Z konsoli wygląda to tak:

$ gaim-remote uri gg://11111/ - nic się dzie dzieje, nie krzyczy żadnym błędem, ale nie ma żadnego innego skutku

$ gaim-remote gg://11111/ - pokazuje jak prowidłowo wywoływać gaim remote - więc tak jest błędnie

----------

## wodzik

u mnie w konfiguracji kadu mozna to wyklikac po prostu. w ustawieniach jest cos takiego jak zainstaluj obsługę protokołu gg. w pliku: ~/.mozilla/firefox/0yi8v9fk.default/prefs.js mam taki wpis: 

```

user_pref("network.protocol-handler.app.gg", "/usr/lib/kadu/modules/bin/dcopexport/kadu-gg-handler.sh");

user_pref("network.protocol-handler.expose.gg", false);

user_pref("network.protocol-handler.external.gg", true);

user_pref("network.protocol-handler.warn-external.gg", false);

```

----------

## peka

Ja robiłem odpowiednio:

```
user_pref("network.protocol-handler.app.gg", "/usr/bin/gaim-remote uri"); 

user_pref("network.protocol-handler.external.gg", true); 

user_pref("network.protocol-handler.warn-external.gg", false); 
```

Kombinowałem z

```
user_pref("network.protocol-handler.app.gg", "/usr/bin/gaim-remote uri"); 
```

dając tam gaim, gaim-remote, gaim-remote uri, gaim-remote uri %r, gaim-remote uri %s, gaim-remote uri "%s".

I się poddałem  :Sad: 

Nie miałem tylko:

```
user_pref("network.protocol-handler.expose.gg", false); 
```

Spróbuję.

----------

## Gabrys

gaim-remote.py gg:goim?screenname=1595329

Jest magiczną komendą. Sprawdź z konsoli, a potem napisz jednolinijkowy skrypt w BASH-u, który będzie zamieniał gg://abc na gg:goim?screenname=abc albo poczekaj, aż wrócę i sam go napiszę.

```
#!/bin/bash

#Podstawowa obsługa AIM:

aim_nr="`echo "$1" | head -n1 | grep '^aim:goim?screenname=[0-9a-zA-Z_@.-]*&message=' | sed 's/^aim:goim?screenname=\([0-9a-zA-Z_@.-]*\)&message=.*$/\1/'`"

#Obsługa klasycznego protokołu GG://numer:

gg_nr="`echo "$1" | head -n1 | grep '^gg:/*[0-9]\+$' | sed 's/[^0-9]//g'`"

#Obsługa jabbera przez xmpp:

jabber_nr="`echo "$1" | head -n1 | grep '^xmpp:[0-9a-zA-Z_@.-]*$' | sed 's/^xmpp://'`"

#Obsługa protokołu GG przez AIM jak to ma miejsce na różnych forach np. Forums.Gentoo.org:

if [ "$aim_nr" != "" -a "`echo "$aim_nr" | grep '[^0-9]'`" == "" ]; then

        gg_nr="$aim_nr"

        aim_nr=""

fi

if [ "$gg_nr" != "" ]; then

        gaim-remote.py gg:goim?screenname="$gg_nr"

elif [ "$jabber_nr" != "" ]; then

        gaim-remote.py jabber:goim?screenname="$jabber_nr"

elif [ "$aim_nr" != "" ]; then

        gaim-remote.py aim:goim?screenname="$aim_nr"

fi

```

Ten programik oczywiście zapisujemy gdzieś, powiedzmy w ~/bin/gaim-protocol-handler.sh i podpinamy przez konfigurację firefoksa do:

network.protocol-handler.app.gg

network.protocol-handler.app.aim

network.protocol-handler.app.xmpp

----------

## peka

Dopiero wróciłem  :Sad: 

Dzięki za skrypt, ale....

Nie mam gaim-remote.py. Mam tylko gaim-remote.

"gaim-remote gg:goim?screenname=1595329" wykonane w konsoli pokazuje mi jak poprawnie uzywać gaim-remote  :Smile:  czyli nie działa.

W tej chwili nie mam skonfigurowanego ani dla aim ani dla gg, natomiast kiedy klikam na link z tego forum (czyli aim) firefox mi mówi, że potrzebuje do tego zewnętrznego protokołu zewnetrznej aplikacjii mówi, że to jest 

```
gaim-remote uri "%s"
```

. I rzeczywiście to działa. Mogę kliknąć check box i zapamietać to ustawienie. Kiedy potem chcę podejrzeć jakie wpisy zrobil do config-a to nie widze tego ani w user.js, prefs. js, userChrome.css ani userContent.css. Gdzie on to zapisuje? w about:config tez tego nie ma.

----------

## Gabrys

Widocznie masz starszego Gaima. Ja mam 2.0.0-beta3.1. Skoro gaim-remote pokazuje Ci jak go używać, to popraw sobie mój skrypt.

"I've shown you the way..."

EDIT: podpowiem, że masz trzy linijki do edycji.

----------

## peka

dobra, dobra... the way...

Tyle, że cokolwiek bym nie dał firefox-owi jako applikacja do obsługi protokołu gg w kluczu network.protocol-handler.app.gg to i tak krzyczy, że to nieznany protokół - tak jakby nie czytal wogóle tego co wpisuje w about:config (tak samo zresztą dla aim), więc skrypt mi niestety nie pomoże.

Ale dziękuje za chęć pomocy  :Smile: 

----------

## Gabrys

Musisz normalnie wejść sobie w about:config zrobić dodaj ustawienie typu string o nazwie network.blablabla.gg i o wartości /home/xxx/bin/cośtam.sh i wszystko. Skrypt ten po kliknięciu na linka dostanie jako parametr, w BASH-u $1, całego linka i wio. Możesz go sobie nawet wypisać na konsolę, żeby było śmiesznie.

----------

## peka

Dokładnie tak robiłem.

Problem nie jest chyba w firefox-ie ale w gaim-ie tj. uruchomione w konsoli

```
przemek@genio ~ $ gaim-remote uri aim:goim?screenname=112233
```

uruchamia okno gaim z wiadomościa do 112233

```
przemek@genio ~ $ gaim-remote uri gg:goim?screenname=112233
```

nie robi nic  :Sad: 

Dokładnie tak samo jak forefox. Dla aim pyta czy uruchomić zewnętrzną aplikację (bez żadnego config-u z mojej strony), a dla gg nie robi nic.

P.S. a nie wystarczylo by samo gg_nr="`echo "$1" | sed 's/[^0-9]//g'`" ?   :Smile:  Nie znam się  - tylko zaczepnie pytam  :Smile:  No hard feelings...

----------

## Gabrys

 *peka wrote:*   

> Dokładnie tak robiłem.
> 
> Problem nie jest chyba w firefox-ie ale w gaim-ie tj. uruchomione w konsoli
> 
> ```
> ...

 

Pobaw się tym, odpal firefox z konsoli i zarejestruj przez about:config jako network-handler /usr/bin/echo itp. Na pewno do czegoś dojdziesz.

 *Quote:*   

> P.S. a nie wystarczylo by samo gg_nr="`echo "$1" | sed 's/[^0-9]//g'`" ?   Nie znam się  - tylko zaczepnie pytam  No hard feelings...

 

W tym konkretnym przypadku tak,

ALE chciałem uczynić mój kod odpornym na ataki atomowe, więc wywołanie skryptu z dowolnymi parametrami ma być całkowicie bezpieczne nawet jeśli są gdzieś dziury w Gaimie. W przykładowym kodzie, który podałeś, gdy w linku wystąpią znaki nowej linii, to przejdą one przez seda, gdyż sed jest zorientowany liniowo, czyli działa linia po linii. W mojej implementacji nie ma tego problemu, bo head -n1 zwraca wszystko DO pierwszego znaku nowej linii, jeśli taki występuje. Chociaż jeszcze musiałbym sprawdzić, czy przypadkiem nie dołącza tego znaku nowej linii na samym końcu, co może być działaniem niepożądanym, ale tym z kolei _chyba_ zajmuje się BASH. 

Koniec ględzenia.

EDIT:

To, że faktycznie head -n1 robi swoje pokazuje następujący przykład:

```
quake@kornel ~ $ lol="`echo 'd1

ch1

' | head -n1`"

quake@kornel ~ $ echo "$lol"

d1

quake@kornel ~ $ 
```

Gdyby był dołączony dodatkowy znak nowej linii, to mielibyśmy:

```
quake@kornel ~ $ echo "$lol"

d1

quake@kornel ~ $ 
```

----------

## Piecia

 *akub wrote:*   

> 
> 
> za obsluge protokolu gg: jest odpowiedzialny modul dcopexport w kadu, ten sposob uruchamia poprostu kadu a nie rozmowe
> 
> 

 

A coś co by nie wymagało kdelibs?

----------

## Gabrys

Z tego co wiem w Kadu jedynym sposobem (na razie) na obsługę linków jest moduł dcopexport, który właśnie wymaga kdelibs  :Sad: . Może czas się przełamać?  :Wink: 

----------

