123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-"
- # vim: set expandtab tabstop=4 shiftwidth=4:
- """
- This file is part of the XSSer project, https://xsser.03c8.net
- Copyright (c) 2010/2019 | psy <epsylon@riseup.net>
- xsser is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation version 3 of the License.
- xsser is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- details.
- You should have received a copy of the GNU General Public License along
- with xsser; if not, write to the Free Software Foundation, Inc., 51
- Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- """
- import gi
- gi.require_version('Gtk', '3.0')
- gi.require_version('Gdk', '3.0')
- from gi.repository import Gtk as gtk
- from gi.repository import Gdk as gdk
- gdk.threads_init()
- import sys
- from gi.repository import GObject as gobject
- import subprocess
- from threading import Thread
- try:
- from gtkmozembed import MozEmbed
- except:
- MozEmbed = None
- import webbrowser
- class CheckerThread(Thread):
- def __init__(self, parent, url):
- Thread.__init__(self)
- self.daemon = True
- self._armed = True
- self._url = url
- self._parent = parent
- def shutdown(self):
- if self.result:
- self._armed = False
- self.result.terminate()
- def run(self):
- self.result = subprocess.Popen([sys.executable, __file__, self._url],
- stderr=subprocess.PIPE)
- self.result.wait()
- if self._armed:
- self._parent.on_net_stop()
- self.result = None
- class MozChecker(object):
- def __init__(self, parent):
- self._busy = False
- self._urlqueue = []
- self._parent = parent
- self._armed = True
- if MozEmbed:
- pass
- else:
- self.open = self.open_webbrowser
- def remaining(self):
- return len(self._urlqueue)
- def init_mozembed(self):
- self.moz = MozEmbed()
- self.moz.connect('net-stop', self.on_net_stop)
- self.moz.connect('net-state', self.on_net_state)
- self.moz.connect('new-window', self.on_new_window)
- self.add(self.moz)
- self.moz.show()
- def on_new_window(self, widget, retval, chromemask):
- print("new window")
- print(widget, retval, chromemask)
- return False
- def open_webbrowser(self, url):
- webbrowser.open(url, 2, False)
- def open_job(self, url):
- if self._parent:
- self._parent.start_token_check(url)
- self._busy = CheckerThread(self, url)
- self._busy.start()
- def shutdown(self):
- if self._busy:
- self._armed = False
- self._busy.shutdown()
- self._busy.join()
- def open(self, url):
- if not self._busy:
- self.open_job(url)
- else:
- self._urlqueue.append(url)
- def on_js_status(self, widget):
- widget.get_js_status()
- def on_net_state(self, widget, flags, status):
- print("net_state", widget, flags, status)
- def on_net_stop(self, widget=None):
- gdk.threads_enter()
- gobject.timeout_add(0, self.process_next)
- gdk.threads_leave()
- def process_next(self):
- if self._urlqueue and self._armed:
- next_url = self._urlqueue.pop(0)
- self.open_job(next_url)
- else:
- self._busy = False
- if __name__ == '__main__':
- win = gtk.Window()
- def finished(widget):
- gtk.main_quit()
- def alertkill():
- for a in gtk.window_list_toplevels():
- if a.get_title() and (a.get_title() == 'Alert' or 'says' in a.get_title() or 'Warning' in a.get_title()):
- print(a.get_children())
- a.hide()
- a.destroy()
- gtk.main_quit()
- gobject.timeout_add(100, alertkill)
- def bailout():
- gtk.main_quit()
- sys.exit()
- def unmap(widget):
- widget.hide()
- def new_window(widget, retval, mask):
- print("new window!!")
- gobject.timeout_add(30000, bailout)
- gobject.timeout_add(100, alertkill)
- win = gtk.Window()
- win.set_property('skip-taskbar-hint', True)
- win.set_property('skip-pager-hint', True)
- win.set_keep_below(True)
- win.connect('map', unmap)
- moz = MozEmbed()
- moz.load_url(sys.argv[1])
- moz.connect('net-stop', finished)
- moz.connect('new-window', new_window)
- win.set_title(sys.argv[1])
- win.add(moz)
- win.show_all()
- gtk.main()
|