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.
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.
Any suggestions?
Regards,
Phil
Attachment:
smime.p7s
Description: S/MIME cryptographic signature