#!/usr/bin/env python # -*- coding: iso-8859-1 -*- # Copyright (C) 2008-2011 Bastian Kleineidam # # This program 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; either version 2 of the License, or # (at your option) any later version. # # This program 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 this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. """ Check HTML pages for broken links. This is the GUI client. """ import sys import signal from linkcheck import configuration, drop_privileges, i18n, main_is_frozen if main_is_frozen(): # Let Python find the C++ runtime DLLs for PyQt. import os from linkcheck import get_install_data sys.path.append(os.path.join(get_install_data(), 'Microsoft.VC90.CRT')) from PyQt4.QtGui import QApplication from linkcheck.gui import LinkCheckerMain, get_app_style def excepthook (window, etype, evalue, tb): """Catch unhandled exceptions.""" from cStringIO import StringIO from linkcheck.director.console import internal_error out = i18n.get_encoded_writer(out=StringIO(), encoding="utf-8") internal_error(out=out, etype=etype, evalue=evalue, tb=tb) # signal main window to be thread-safe window.error_signal.emit(out.getvalue()) def sigint_handler(*args): """Handler for the SIGINT signal.""" sys.stderr.write('\r') QApplication.quit() def main (argv=None): if argv is None: argv = sys.argv app = QApplication(argv) app.setApplicationName(configuration.AppName) app.setApplicationVersion(configuration.Version) app.setOrganizationName(configuration.Author) QApplication.setStyle(get_app_style()) QApplication.setPalette(QApplication.style().standardPalette()) if app.argc() > 1: url = app.argv()[1] else: url = u"" signal.signal(signal.SIGINT, sigint_handler) # use local variable here to avoid garbage collection of the main # window before app.exec_() finishes window = LinkCheckerMain(url=url) window.show() drop_privileges() sys.excepthook = \ lambda etype, evalue, tb: excepthook(window, etype, evalue, tb) sys.exit(app.exec_()) if __name__ == "__main__": main(argv=sys.argv)