Hi Phil,
I've done something similar a while ago : let gPodder handle
"Subscribe to RSS feed" from Firefox.
But I resorted to Carbon.AppleEvents to do it (deprecated I'm
afraid).
In case you want to check it out, here it is :
http://repo.or.cz/w/gpodder.git/blob/refs/heads/master:/src/gpodder/gpodderosx.py
and
http://repo.or.cz/w/gpodder.git/tree/refs/heads/master:/data/osx
Le 25/08/10 08:23, Phillip Heller a écrit :
Greetings,
I'm wondering if anyone has implemented a Custom URL Handler within a pygtk project? It doesn't look like gtk provides a method to do this directly, so I'm trying with pyobjc and the Foundation classes.
An example of how I'm trying to do it:
import Foundation
TRYTONSCHEME = u'tryton'
WINDOW = none
class TrytonURLProtocol(Foundation.NSURLProtocol):
def canInitWithRequest_(cls, request):
if request.URL().scheme() == TRYTONSCHEME:
return True
return False
def canonicalRequestForRequest_(cls, request):
return request
def startLoading(self):
m = re.search('tryton://([^/]+)/(\d+)', self.request())
if m is not None:
Window.create(False, m.group(1), [int(m.group(2))], [], 'form',
mode=['form'], window=WINDOW)
def stopLoading(self):
pass
class Main(object):
def __init__(self):
super(Main, self).__init__()
self.window = gtk.Window()
WINDOW = self.window
<snip snip snip>
<the following line called at a point where the application can satisfy a URL request>
Foundation.NSURLProtocol.registerClass_(TrytonURLProtocol)
I've added the following to the Application Bundle Info.plist:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>MyApp's URL</string>
<key>CFBundleURLSchemes</key>
<array>
<string>tryton</string>
</array>
</dict>
</array>
Whenever I open a url like "tryton://sale.order/12345", the application gains focus, though nothing seemingly happens within the application itself.
Did you try with your application not open ?
From what I understand of your code, it's not possible, but my code
doesn't work when the application is open (the event is not
received).
The fact that your application gains focus is encouraging.
Maybe, when you'll be able to see debug output, it'll be easier to
figure out (see next bullet).
I'm not sure how exactly to debug this either -- normally I do my development within Eclipse with pydev, though I'm not sure how to do that with a bundled application. Any attempts to print to STDOUT within TrytonURLProtocol methods seem to fail.
Did you check in console.log (via /Applications/Utilities/Console) ?
Hope this helps,
Eric
|