#!/usr/bin/env /usr/bin/pythonw
# pythonw -c 'import gensuitemodule; gensuitemodule.main()' --output Safari /Applications/Safari.app
import time
import Safari
import aetools # for aetools.Error trapping
import MacOS # for MacOS.Error trapping
# icon support
import AppKit
app = AppKit.NSApplication.sharedApplication()
ipath = __file__.replace(".py","") + ".icns"
img = AppKit.NSImage.alloc().initWithContentsOfFile_(ipath)
if img:
app.setApplicationIconImage_(img)
# end icon support
s = Safari.Safari()
items = Safari.items(1)
knowndocs = {}
slog = open("safari_log", "a")
print >> slog, "*", time.time()
lostdocs = {}
while 1:
try:
ndocs = s.count(items, each=Safari.document)
except MacOS.Error, e:
if e[0] == -1712:
print "timeout, retrying"
time.sleep(10)
continue
raise
nowdocs = {}
newdocs = []
# we sometimes lose one doc, temporarily
# it isn't just a scan, it may be due to new windows at just the
# right time, kicking something off the end?
t_scan_start = time.time()
for docnum in range(ndocs):
try:
url = s.get(Safari.documents(docnum+1).URL)
except aetools.Error, e:
print "oops:", e
continue
except MacOS.Error, e:
if e[0] == -1712:
print "timeout, retrying"
continue
print "oops", e
continue
if url not in knowndocs:
# appeared
newdocs.append(url)
knowndocs[url] = 1
nowdocs[url] = 1
t_scan = time.time() - t_scan_start
for url in knowndocs.keys():
if url not in nowdocs:
if url in lostdocs:
print >> slog, "-", time.time(), url
del knowndocs[url]
del lostdocs[url]
else: # not visible, but only just lost:
lostdocs[url] = 1
elif url in lostdocs: # visible but we though we lost it:
del lostdocs[url] # "nevermind"
# do newdocs after purge, looks cleaner for the url-jump case
# though the addition of the lostdocs case kind of breaks this...
for url in newdocs:
print >> slog, "+", time.time(), url
slog.flush()
# print t_scan
time.sleep((7+t_scan)/2)
# s.do_JavaScript("getSelection()", in_=Safari.documents(1))
## - 1084845111.0 http://www.sdss.org/iotw/iotw.html
## Traceback (most recent call last):
## File "./monitor_safari.py", line 22, in ?
## ndocs = s.count(items, each=Safari.document)
## File "/Users/eichin/thok/intranet/python/mac/Safari/Standard_Suite.py", line 64, in count
## raise aetools.Error, aetools.decodeerror(_arguments)
## aetools.Error: (-1708, 'the AppleEvent was not handled by any handler', None)
## 69884.55 real 1824.98 user 130.13 sys
##
## -- this was from scanning with a quicktime save-menu up, I think...