Add project support.

This commit is contained in:
Bastian Kleineidam 2012-01-26 20:23:15 +01:00
parent b5852683ab
commit 1deeb88e16
10 changed files with 844 additions and 459 deletions

View file

@ -15,7 +15,9 @@ Changes:
is not installed.
Features:
- gui: add Ctrl-L shortcut to highlight the URL input.
- gui: Add Ctrl-L shortcut to highlight the URL input.
- gui: Support loading and saving of project files.
Closes: SF bug #3467492
7.4 "Warrior" (released 07.01.2012)

View file

@ -235,3 +235,21 @@ def get_temp_file (**kwargs):
def is_tty (fp):
"""Check if is a file object pointing to a TTY."""
return (hasattr(fp, "isatty") and fp.isatty())
def is_readable(filename):
"""Check if file is a regular file and is readable."""
return os.path.isfile(filename) and os.access(filename, os.R_OK)
def is_writable(filename):
"""Check if
- the file is a regular file and is writable, or
- the file does not exist and its parent directory exists and is
writable
"""
if not os.path.exists(filename):
parentdir = os.path.dirname(filename)
return os.path.isdir(parentdir) and os.access(parentdir, os.W_OK)
return os.path.isfile(filename) and os.access(filename, os.W_OK)

View file

@ -35,6 +35,7 @@ from .urlmodel import UrlItemModel
from .urlsave import urlsave
from .settings import Settings
from .recentdocs import RecentDocumentModel
from .projects import openproject, saveproject, loadproject
from .. import configuration, checker, director, add_intern_pattern, \
strformat, fileutil, LinkCheckerError, get_link_pat
from ..containers import enum
@ -86,7 +87,7 @@ class LinkCheckerMain (QtGui.QMainWindow, Ui_MainWindow):
log_stats_signal = QtCore.pyqtSignal(object)
error_signal = QtCore.pyqtSignal(str)
def __init__(self, parent=None, url=None):
def __init__(self, parent=None, url=None, project=None):
"""Initialize UI."""
super(LinkCheckerMain, self).__init__(parent)
self.setupUi(self)
@ -117,7 +118,7 @@ class LinkCheckerMain (QtGui.QMainWindow, Ui_MainWindow):
self.init_config()
self.read_config()
self.init_menu()
self.init_app()
self.init_app(project)
def init_url (self, url):
"""Initialize URL input."""
@ -133,7 +134,7 @@ class LinkCheckerMain (QtGui.QMainWindow, Ui_MainWindow):
"""Add menu entries for bookmark file checking."""
self.urlinput.addMenuEntries(self.menuEdit)
def init_app (self):
def init_app (self, project):
"""Set window size and position, GUI options and reset status."""
data = self.settings.read_geometry()
if data["size"] is not None:
@ -143,7 +144,14 @@ class LinkCheckerMain (QtGui.QMainWindow, Ui_MainWindow):
self.options.set_options(self.settings.read_options())
self.status = Status.idle
self.actionSave.setEnabled(False)
msg = self.config_error or _("Ready.")
if project:
try:
msg = loadproject(project, self.config, self.options, self.urlinput)
except StandardError, errmsg:
args = dict(filename=project, err=errmsg)
msg = _("Could not load project %(filename)s: %(err)s") % args
else:
msg = self.config_error or _("Ready.")
self.set_statusmsg(msg)
def get_qhcpath (self):
@ -375,9 +383,19 @@ Version 2 or later.
"""Display debug dialog."""
self.debug.show()
@QtCore.pyqtSlot()
def on_actionOpen_project_triggered (self):
"""Open project."""
openproject(self)
@QtCore.pyqtSlot()
def on_actionSave_project_triggered (self):
"""Save project."""
saveproject(self, self.get_url())
@QtCore.pyqtSlot()
def on_actionSave_triggered (self):
"""Quit application."""
"""Save URL results."""
urlsave(self, self.config, self.model.urls)
@QtCore.pyqtSlot()
@ -522,6 +540,7 @@ Version 2 or later.
def set_statusmsg (self, msg):
"""Show given status message."""
self.statusBar.showMessage(msg)
if len(msg) > 30:
self.label_status.setToolTip(msg)
msg = msg[:27]+u"..."

View file

@ -2,8 +2,8 @@
# Form implementation generated from reading ui file 'ui/main.ui'
#
# Created: Sat Dec 17 12:37:55 2011
# by: PyQt4 UI code generator 4.8.6
# Created: Mon Jan 23 22:46:26 2012
# by: PyQt4 UI code generator 4.9
#
# WARNING! All changes made in this file will be lost!
@ -23,7 +23,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
MainWindow.setWindowTitle(_("LinkChecker"))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/app.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
@ -36,7 +35,6 @@ class Ui_MainWindow(object):
self.horizontalLayout_3 = QtGui.QHBoxLayout()
self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3"))
self.label = QtGui.QLabel(self.centralwidget)
self.label.setText(_("URL:"))
self.label.setObjectName(_fromUtf8("label"))
self.horizontalLayout_3.addWidget(self.label)
spacerItem = QtGui.QSpacerItem(4, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
@ -53,9 +51,7 @@ class Ui_MainWindow(object):
spacerItem1 = QtGui.QSpacerItem(10, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.horizontalLayout_3.addItem(spacerItem1)
self.controlButton = QtGui.QPushButton(self.centralwidget)
self.controlButton.setToolTip(_("Start checking the given URL."))
self.controlButton.setStatusTip(_fromUtf8(""))
self.controlButton.setText(QtGui.QApplication.translate("MainWindow", "Start", "Start checking URL", QtGui.QApplication.UnicodeUTF8))
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/start.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.controlButton.setIcon(icon1)
@ -68,34 +64,27 @@ class Ui_MainWindow(object):
self.horizontalLayout_4.setContentsMargins(0, 0, -1, -1)
self.horizontalLayout_4.setObjectName(_fromUtf8("horizontalLayout_4"))
self.label_32 = QtGui.QLabel(self.centralwidget)
self.label_32.setText(_("Active:"))
self.label_32.setObjectName(_fromUtf8("label_32"))
self.horizontalLayout_4.addWidget(self.label_32)
self.label_active = QtGui.QLabel(self.centralwidget)
self.label_active.setMinimumSize(QtCore.QSize(50, 0))
self.label_active.setText(_("0"))
self.label_active.setObjectName(_fromUtf8("label_active"))
self.horizontalLayout_4.addWidget(self.label_active)
self.label_30 = QtGui.QLabel(self.centralwidget)
self.label_30.setText(_("Queued:"))
self.label_30.setObjectName(_fromUtf8("label_30"))
self.horizontalLayout_4.addWidget(self.label_30)
self.label_queued = QtGui.QLabel(self.centralwidget)
self.label_queued.setMinimumSize(QtCore.QSize(50, 0))
self.label_queued.setText(_("0"))
self.label_queued.setObjectName(_fromUtf8("label_queued"))
self.horizontalLayout_4.addWidget(self.label_queued)
self.label_28 = QtGui.QLabel(self.centralwidget)
self.label_28.setText(_("Checked:"))
self.label_28.setObjectName(_fromUtf8("label_28"))
self.horizontalLayout_4.addWidget(self.label_28)
self.label_checked = QtGui.QLabel(self.centralwidget)
self.label_checked.setMinimumSize(QtCore.QSize(50, 0))
self.label_checked.setText(_("0"))
self.label_checked.setObjectName(_fromUtf8("label_checked"))
self.horizontalLayout_4.addWidget(self.label_checked)
self.label_15 = QtGui.QLabel(self.centralwidget)
self.label_15.setText(_("Info:"))
self.label_15.setObjectName(_fromUtf8("label_15"))
self.horizontalLayout_4.addWidget(self.label_15)
self.label_busy = QtGui.QLabel(self.centralwidget)
@ -105,7 +94,6 @@ class Ui_MainWindow(object):
sizePolicy.setHeightForWidth(self.label_busy.sizePolicy().hasHeightForWidth())
self.label_busy.setSizePolicy(sizePolicy)
self.label_busy.setMinimumSize(QtCore.QSize(16, 16))
self.label_busy.setText(_("-"))
self.label_busy.setObjectName(_fromUtf8("label_busy"))
self.horizontalLayout_4.addWidget(self.label_busy)
self.label_status = QtGui.QLabel(self.centralwidget)
@ -139,7 +127,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.url_properties.sizePolicy().hasHeightForWidth())
self.url_properties.setSizePolicy(sizePolicy)
self.url_properties.setTitle(_("URL properties"))
self.url_properties.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.url_properties.setObjectName(_fromUtf8("url_properties"))
self.horizontalLayout_2 = QtGui.QHBoxLayout(self.url_properties)
@ -153,7 +140,6 @@ class Ui_MainWindow(object):
self.formLayout.setFieldGrowthPolicy(QtGui.QFormLayout.ExpandingFieldsGrow)
self.formLayout.setObjectName(_fromUtf8("formLayout"))
self.label_2 = QtGui.QLabel(self.frame)
self.label_2.setText(_("URL"))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.label_2)
self.prop_url = QtGui.QLabel(self.frame)
@ -171,7 +157,6 @@ class Ui_MainWindow(object):
self.prop_url.setObjectName(_fromUtf8("prop_url"))
self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.prop_url)
self.label_3 = QtGui.QLabel(self.frame)
self.label_3.setText(_("Name"))
self.label_3.setObjectName(_fromUtf8("label_3"))
self.formLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.label_3)
self.prop_name = QtGui.QLabel(self.frame)
@ -188,7 +173,6 @@ class Ui_MainWindow(object):
self.prop_name.setObjectName(_fromUtf8("prop_name"))
self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.prop_name)
self.label_4 = QtGui.QLabel(self.frame)
self.label_4.setText(_("Parent URL"))
self.label_4.setObjectName(_fromUtf8("label_4"))
self.formLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.label_4)
self.prop_parenturl = QtGui.QLabel(self.frame)
@ -206,7 +190,6 @@ class Ui_MainWindow(object):
self.prop_parenturl.setObjectName(_fromUtf8("prop_parenturl"))
self.formLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.prop_parenturl)
self.label_5 = QtGui.QLabel(self.frame)
self.label_5.setText(_("Base"))
self.label_5.setObjectName(_fromUtf8("label_5"))
self.formLayout.setWidget(3, QtGui.QFormLayout.LabelRole, self.label_5)
self.prop_base = QtGui.QLabel(self.frame)
@ -224,7 +207,6 @@ class Ui_MainWindow(object):
self.prop_base.setObjectName(_fromUtf8("prop_base"))
self.formLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.prop_base)
self.label_7 = QtGui.QLabel(self.frame)
self.label_7.setText(_("Check time"))
self.label_7.setObjectName(_fromUtf8("label_7"))
self.formLayout.setWidget(4, QtGui.QFormLayout.LabelRole, self.label_7)
self.prop_checktime = QtGui.QLabel(self.frame)
@ -241,7 +223,6 @@ class Ui_MainWindow(object):
self.prop_checktime.setObjectName(_fromUtf8("prop_checktime"))
self.formLayout.setWidget(4, QtGui.QFormLayout.FieldRole, self.prop_checktime)
self.label_8 = QtGui.QLabel(self.frame)
self.label_8.setText(_("D/L time"))
self.label_8.setObjectName(_fromUtf8("label_8"))
self.formLayout.setWidget(5, QtGui.QFormLayout.LabelRole, self.label_8)
self.prop_dltime = QtGui.QLabel(self.frame)
@ -258,7 +239,6 @@ class Ui_MainWindow(object):
self.prop_dltime.setObjectName(_fromUtf8("prop_dltime"))
self.formLayout.setWidget(5, QtGui.QFormLayout.FieldRole, self.prop_dltime)
self.label_9 = QtGui.QLabel(self.frame)
self.label_9.setText(_("Size"))
self.label_9.setObjectName(_fromUtf8("label_9"))
self.formLayout.setWidget(6, QtGui.QFormLayout.LabelRole, self.label_9)
self.prop_size = QtGui.QLabel(self.frame)
@ -275,7 +255,6 @@ class Ui_MainWindow(object):
self.prop_size.setObjectName(_fromUtf8("prop_size"))
self.formLayout.setWidget(6, QtGui.QFormLayout.FieldRole, self.prop_size)
self.label_10 = QtGui.QLabel(self.frame)
self.label_10.setText(_("Info"))
self.label_10.setObjectName(_fromUtf8("label_10"))
self.formLayout.setWidget(7, QtGui.QFormLayout.LabelRole, self.label_10)
self.prop_info = QtGui.QLabel(self.frame)
@ -293,7 +272,6 @@ class Ui_MainWindow(object):
self.prop_info.setObjectName(_fromUtf8("prop_info"))
self.formLayout.setWidget(7, QtGui.QFormLayout.FieldRole, self.prop_info)
self.label_11 = QtGui.QLabel(self.frame)
self.label_11.setText(_("Warning"))
self.label_11.setObjectName(_fromUtf8("label_11"))
self.formLayout.setWidget(8, QtGui.QFormLayout.LabelRole, self.label_11)
self.prop_warning = QtGui.QLabel(self.frame)
@ -312,7 +290,6 @@ class Ui_MainWindow(object):
self.prop_warning.setObjectName(_fromUtf8("prop_warning"))
self.formLayout.setWidget(8, QtGui.QFormLayout.FieldRole, self.prop_warning)
self.label_12 = QtGui.QLabel(self.frame)
self.label_12.setText(_("Result"))
self.label_12.setObjectName(_fromUtf8("label_12"))
self.formLayout.setWidget(9, QtGui.QFormLayout.LabelRole, self.label_12)
self.prop_result = QtGui.QLabel(self.frame)
@ -350,7 +327,6 @@ class Ui_MainWindow(object):
font.setBold(True)
font.setWeight(75)
self.groupBox.setFont(font)
self.groupBox.setTitle(_("Check results"))
self.groupBox.setObjectName(_fromUtf8("groupBox"))
self.gridLayout = QtGui.QGridLayout(self.groupBox)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
@ -360,7 +336,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_24.sizePolicy().hasHeightForWidth())
self.label_24.setSizePolicy(sizePolicy)
self.label_24.setText(_("Valid URLs"))
self.label_24.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_24.setObjectName(_fromUtf8("label_24"))
self.gridLayout.addWidget(self.label_24, 0, 0, 1, 1)
@ -384,7 +359,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_26.sizePolicy().hasHeightForWidth())
self.label_26.setSizePolicy(sizePolicy)
self.label_26.setText(_("Warnings"))
self.label_26.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_26.setObjectName(_fromUtf8("label_26"))
self.gridLayout.addWidget(self.label_26, 0, 2, 1, 1)
@ -408,7 +382,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_25.sizePolicy().hasHeightForWidth())
self.label_25.setSizePolicy(sizePolicy)
self.label_25.setText(_("Invalid URLs"))
self.label_25.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_25.setObjectName(_fromUtf8("label_25"))
self.gridLayout.addWidget(self.label_25, 1, 0, 1, 1)
@ -433,7 +406,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.groupBox_3.sizePolicy().hasHeightForWidth())
self.groupBox_3.setSizePolicy(sizePolicy)
self.groupBox_3.setTitle(_("Content type statistics"))
self.groupBox_3.setObjectName(_fromUtf8("groupBox_3"))
self.gridLayout_2 = QtGui.QGridLayout(self.groupBox_3)
self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
@ -443,7 +415,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_6.sizePolicy().hasHeightForWidth())
self.label_6.setSizePolicy(sizePolicy)
self.label_6.setText(_("Image"))
self.label_6.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_6.setObjectName(_fromUtf8("label_6"))
self.gridLayout_2.addWidget(self.label_6, 0, 0, 1, 1)
@ -467,7 +438,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_13.sizePolicy().hasHeightForWidth())
self.label_13.setSizePolicy(sizePolicy)
self.label_13.setText(_("Text"))
self.label_13.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_13.setObjectName(_fromUtf8("label_13"))
self.gridLayout_2.addWidget(self.label_13, 0, 2, 1, 1)
@ -491,7 +461,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_27.sizePolicy().hasHeightForWidth())
self.label_27.setSizePolicy(sizePolicy)
self.label_27.setText(_("Application"))
self.label_27.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_27.setObjectName(_fromUtf8("label_27"))
self.gridLayout_2.addWidget(self.label_27, 0, 4, 1, 1)
@ -515,7 +484,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_17.sizePolicy().hasHeightForWidth())
self.label_17.setSizePolicy(sizePolicy)
self.label_17.setText(_("Audio"))
self.label_17.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_17.setObjectName(_fromUtf8("label_17"))
self.gridLayout_2.addWidget(self.label_17, 1, 0, 1, 1)
@ -539,7 +507,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_21.sizePolicy().hasHeightForWidth())
self.label_21.setSizePolicy(sizePolicy)
self.label_21.setText(_("Video"))
self.label_21.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_21.setObjectName(_fromUtf8("label_21"))
self.gridLayout_2.addWidget(self.label_21, 1, 2, 1, 1)
@ -577,7 +544,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_23.sizePolicy().hasHeightForWidth())
self.label_23.setSizePolicy(sizePolicy)
self.label_23.setText(_("Other"))
self.label_23.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_23.setObjectName(_fromUtf8("label_23"))
self.gridLayout_2.addWidget(self.label_23, 2, 4, 1, 1)
@ -601,7 +567,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_22.sizePolicy().hasHeightForWidth())
self.label_22.setSizePolicy(sizePolicy)
self.label_22.setText(_("Mail"))
self.label_22.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_22.setObjectName(_fromUtf8("label_22"))
self.gridLayout_2.addWidget(self.label_22, 1, 4, 1, 1)
@ -612,7 +577,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.groupBox_2.sizePolicy().hasHeightForWidth())
self.groupBox_2.setSizePolicy(sizePolicy)
self.groupBox_2.setTitle(_("URL statistics"))
self.groupBox_2.setObjectName(_fromUtf8("groupBox_2"))
self.gridLayout_3 = QtGui.QGridLayout(self.groupBox_2)
self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
@ -622,7 +586,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_18.sizePolicy().hasHeightForWidth())
self.label_18.setSizePolicy(sizePolicy)
self.label_18.setText(_("Min. length"))
self.label_18.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_18.setObjectName(_fromUtf8("label_18"))
self.gridLayout_3.addWidget(self.label_18, 0, 0, 1, 1)
@ -646,7 +609,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_20.sizePolicy().hasHeightForWidth())
self.label_20.setSizePolicy(sizePolicy)
self.label_20.setText(_("Avg. length"))
self.label_20.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_20.setObjectName(_fromUtf8("label_20"))
self.gridLayout_3.addWidget(self.label_20, 0, 2, 1, 1)
@ -670,7 +632,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_19.sizePolicy().hasHeightForWidth())
self.label_19.setSizePolicy(sizePolicy)
self.label_19.setText(_("Max. length"))
self.label_19.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_19.setObjectName(_fromUtf8("label_19"))
self.gridLayout_3.addWidget(self.label_19, 1, 0, 1, 1)
@ -694,7 +655,6 @@ class Ui_MainWindow(object):
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_14.sizePolicy().hasHeightForWidth())
self.label_14.setSizePolicy(sizePolicy)
self.label_14.setText(_("Domains"))
self.label_14.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_14.setObjectName(_fromUtf8("label_14"))
self.gridLayout_3.addWidget(self.label_14, 1, 2, 1, 1)
@ -720,13 +680,10 @@ class Ui_MainWindow(object):
self.menubar.setGeometry(QtCore.QRect(0, 0, 782, 20))
self.menubar.setObjectName(_fromUtf8("menubar"))
self.menuEdit = QtGui.QMenu(self.menubar)
self.menuEdit.setTitle(_("&Edit"))
self.menuEdit.setObjectName(_fromUtf8("menuEdit"))
self.menuFile = QtGui.QMenu(self.menubar)
self.menuFile.setTitle(_("&File"))
self.menuFile.setObjectName(_fromUtf8("menuFile"))
self.menuHelp = QtGui.QMenu(self.menubar)
self.menuHelp.setTitle(_("&Help"))
self.menuHelp.setObjectName(_fromUtf8("menuHelp"))
MainWindow.setMenuBar(self.menubar)
self.statusBar = QtGui.QStatusBar(MainWindow)
@ -736,76 +693,58 @@ class Ui_MainWindow(object):
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/about.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionAbout.setIcon(icon2)
self.actionAbout.setText(_("A&bout"))
self.actionAbout.setIconText(_("About"))
self.actionAbout.setObjectName(_fromUtf8("actionAbout"))
self.actionHelp = QtGui.QAction(MainWindow)
icon3 = QtGui.QIcon()
icon3.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/help.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionHelp.setIcon(icon3)
self.actionHelp.setText(_("&Help"))
self.actionHelp.setIconText(_("Help"))
self.actionHelp.setObjectName(_fromUtf8("actionHelp"))
self.actionViewOnline = QtGui.QAction(MainWindow)
icon4 = QtGui.QIcon()
icon4.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/online.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionViewOnline.setIcon(icon4)
self.actionViewOnline.setText(_("View online"))
self.actionViewOnline.setToolTip(_("View URL online"))
self.actionViewOnline.setObjectName(_fromUtf8("actionViewOnline"))
self.actionOptions = QtGui.QAction(MainWindow)
icon5 = QtGui.QIcon()
icon5.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/preferences.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionOptions.setIcon(icon5)
self.actionOptions.setText(_("&Options"))
self.actionOptions.setIconText(_("Options"))
self.actionOptions.setObjectName(_fromUtf8("actionOptions"))
self.actionCopyToClipboard = QtGui.QAction(MainWindow)
icon6 = QtGui.QIcon()
icon6.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/copy.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionCopyToClipboard.setIcon(icon6)
self.actionCopyToClipboard.setText(_("Copy to clipboard"))
self.actionCopyToClipboard.setToolTip(_("Copy URL to clipboard"))
self.actionCopyToClipboard.setShortcut(_("Ctrl+C"))
self.actionCopyToClipboard.setObjectName(_fromUtf8("actionCopyToClipboard"))
self.actionViewParentOnline = QtGui.QAction(MainWindow)
self.actionViewParentOnline.setIcon(icon4)
self.actionViewParentOnline.setText(_("View parent online"))
self.actionViewParentOnline.setToolTip(_("View parent URL online"))
self.actionViewParentOnline.setObjectName(_fromUtf8("actionViewParentOnline"))
self.actionViewParentSource = QtGui.QAction(MainWindow)
self.actionViewParentSource.setIcon(icon4)
self.actionViewParentSource.setText(_("View parent source"))
self.actionViewParentSource.setToolTip(_("View parent URL source"))
self.actionViewParentSource.setObjectName(_fromUtf8("actionViewParentSource"))
self.actionDebug = QtGui.QAction(MainWindow)
self.actionDebug.setText(_("Show debug"))
self.actionDebug.setObjectName(_fromUtf8("actionDebug"))
self.actionViewProperties = QtGui.QAction(MainWindow)
self.actionViewProperties.setText(_("View properties"))
self.actionViewProperties.setToolTip(_("View URL properties"))
self.actionViewProperties.setObjectName(_fromUtf8("actionViewProperties"))
self.actionSave = QtGui.QAction(MainWindow)
icon7 = QtGui.QIcon()
icon7.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/save.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionSave.setIcon(icon7)
self.actionSave.setText(_("&Save results..."))
self.actionSave.setShortcut(_("Ctrl+S"))
self.actionSave.setObjectName(_fromUtf8("actionSave"))
self.actionQuit = QtGui.QAction(MainWindow)
icon8 = QtGui.QIcon()
icon8.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/exit.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionQuit.setIcon(icon8)
self.actionQuit.setText(_("&Quit"))
self.actionQuit.setShortcut(_("Ctrl+Q"))
self.actionQuit.setObjectName(_fromUtf8("actionQuit"))
self.actionCheckUpdates = QtGui.QAction(MainWindow)
self.actionCheckUpdates.setText(_("Check for updates"))
self.actionCheckUpdates.setObjectName(_fromUtf8("actionCheckUpdates"))
self.actionDonate = QtGui.QAction(MainWindow)
self.actionDonate.setText(_("Donate"))
self.actionDonate.setObjectName(_fromUtf8("actionDonate"))
self.actionOpen_project = QtGui.QAction(MainWindow)
self.actionOpen_project.setObjectName(_fromUtf8("actionOpen_project"))
self.actionSave_project = QtGui.QAction(MainWindow)
self.actionSave_project.setObjectName(_fromUtf8("actionSave_project"))
self.menuEdit.addAction(self.actionOptions)
self.menuFile.addAction(self.actionOpen_project)
self.menuFile.addAction(self.actionSave_project)
self.menuFile.addAction(self.actionSave)
self.menuFile.addAction(self.actionQuit)
self.menuHelp.addAction(self.actionAbout)
@ -822,7 +761,77 @@ class Ui_MainWindow(object):
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
pass
MainWindow.setWindowTitle(_("LinkChecker"))
self.label.setText(_("URL:"))
self.controlButton.setToolTip(_("Start checking the given URL."))
self.controlButton.setText(QtGui.QApplication.translate("MainWindow", "Start", "Start checking URL", QtGui.QApplication.UnicodeUTF8))
self.label_32.setText(_("Active:"))
self.label_active.setText(_("0"))
self.label_30.setText(_("Queued:"))
self.label_queued.setText(_("0"))
self.label_28.setText(_("Checked:"))
self.label_checked.setText(_("0"))
self.label_15.setText(_("Info:"))
self.label_busy.setText(_("-"))
self.url_properties.setTitle(_("URL properties"))
self.label_2.setText(_("URL"))
self.label_3.setText(_("Name"))
self.label_4.setText(_("Parent URL"))
self.label_5.setText(_("Base"))
self.label_7.setText(_("Check time"))
self.label_8.setText(_("D/L time"))
self.label_9.setText(_("Size"))
self.label_10.setText(_("Info"))
self.label_11.setText(_("Warning"))
self.label_12.setText(_("Result"))
self.groupBox.setTitle(_("Check results"))
self.label_24.setText(_("Valid URLs"))
self.label_26.setText(_("Warnings"))
self.label_25.setText(_("Invalid URLs"))
self.groupBox_3.setTitle(_("Content type statistics"))
self.label_6.setText(_("Image"))
self.label_13.setText(_("Text"))
self.label_27.setText(_("Application"))
self.label_17.setText(_("Audio"))
self.label_21.setText(_("Video"))
self.label_23.setText(_("Other"))
self.label_22.setText(_("Mail"))
self.groupBox_2.setTitle(_("URL statistics"))
self.label_18.setText(_("Min. length"))
self.label_20.setText(_("Avg. length"))
self.label_19.setText(_("Max. length"))
self.label_14.setText(_("Domains"))
self.menuEdit.setTitle(_("&Edit"))
self.menuFile.setTitle(_("&File"))
self.menuHelp.setTitle(_("&Help"))
self.actionAbout.setText(_("A&bout"))
self.actionAbout.setIconText(_("About"))
self.actionHelp.setText(_("&Help"))
self.actionHelp.setIconText(_("Help"))
self.actionViewOnline.setText(_("View online"))
self.actionViewOnline.setToolTip(_("View URL online"))
self.actionOptions.setText(_("&Options"))
self.actionOptions.setIconText(_("Options"))
self.actionCopyToClipboard.setText(_("Copy to clipboard"))
self.actionCopyToClipboard.setToolTip(_("Copy URL to clipboard"))
self.actionCopyToClipboard.setShortcut(_("Ctrl+C"))
self.actionViewParentOnline.setText(_("View parent online"))
self.actionViewParentOnline.setToolTip(_("View parent URL online"))
self.actionViewParentSource.setText(_("View parent source"))
self.actionViewParentSource.setToolTip(_("View parent URL source"))
self.actionDebug.setText(_("Show debug"))
self.actionViewProperties.setText(_("View properties"))
self.actionViewProperties.setToolTip(_("View URL properties"))
self.actionSave.setText(_("Save &results..."))
self.actionQuit.setText(_("&Quit"))
self.actionQuit.setShortcut(_("Ctrl+Q"))
self.actionCheckUpdates.setText(_("Check for updates"))
self.actionDonate.setText(_("Donate"))
self.actionOpen_project.setText(_("&Open project..."))
self.actionOpen_project.setIconText(_("Open project"))
self.actionOpen_project.setShortcut(_("Ctrl+O"))
self.actionSave_project.setText(_("&Save project..."))
self.actionSave_project.setShortcut(_("Ctrl+S"))
from lineedit import LineEdit
import linkchecker_rc

View file

@ -19,6 +19,7 @@ import os
from PyQt4 import QtGui
from .linkchecker_ui_options import Ui_Options
from .editor import EditorWindow
from ..fileutil import is_writable
from .. import configuration
@ -50,7 +51,7 @@ class LinkCheckerOptions (QtGui.QDialog, Ui_Options):
def reset_config_options (self):
"""Reset configuration file edit buttons."""
self.user_config_writable = os.access(self.user_config, os.W_OK)
self.user_config_writable = is_writable(self.user_config)
set_edit_button(self.user_config, self.user_config_button,
self.user_config_writable)
@ -71,15 +72,15 @@ class LinkCheckerOptions (QtGui.QDialog, Ui_Options):
def set_options (self, data):
"""Set GUI options from given data."""
if data["debug"] is not None:
if data.get("debug") is not None:
self.debug.setChecked(data["debug"])
if data["verbose"] is not None:
if data.get("verbose") is not None:
self.verbose.setChecked(data["verbose"])
if data["recursionlevel"] is not None:
if data.get("recursionlevel") is not None:
self.recursionlevel.setValue(data["recursionlevel"])
if data["warninglines"] is not None:
if data.get("warninglines") is not None:
self.warninglines.setPlainText(data["warninglines"])
if data["ignorelines"] is not None:
if data.get("ignorelines") is not None:
self.ignorelines.setPlainText(data["ignorelines"])

194
linkcheck/gui/projects.py Normal file
View file

@ -0,0 +1,194 @@
# -*- coding: iso-8859-1 -*-
# Copyright (C) 2012 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.
import re
import os
import shutil
from PyQt4 import QtGui
from ..configuration import get_user_config, confparse
from ..url import url_split
from ..fileutil import is_readable, is_writable
ProjectExt = ".lcp"
ProjectFilter = _("LinkChecker project (*%(ext)s)") % dict(ext=ProjectExt)
class ProjectParser (confparse.LCConfigParser):
def __init__ (self, config, gui_options, urlinput):
super(ProjectParser, self).__init__(config)
# has set_options(data) function
self.gui_options = gui_options
# has setText(url) function
self.urlinput = urlinput
def read (self, files):
super(ProjectParser, self).read(files)
self.read_project_config()
self.read_gui_config()
def read_project_config(self):
section = "project"
if not self.has_section(section):
return
option = "url"
if self.has_option(section, option):
url = self.get(section, option)
self.urlinput.setText(url)
else:
self.urlinput.setText(u"")
def read_gui_config(self):
section = "gui"
if not self.has_section(section):
return
data = {}
option = "debug"
if self.has_option(section, option):
data[option] = self.getboolean(section, option)
option = "verbose"
if self.has_option(section, option):
data[option] = self.getboolean(section, option)
option = "recursionlevel"
if self.has_option(section, option):
data[option] = self.getint(section, option)
option = "warninglines"
if self.has_option(section, option):
data[option] = self.get(section, option)
option = "ignorelines"
if self.has_option(section, option):
data[option] = self.get(section, option)
self.gui_options.set_options(data)
def write (self, fp):
"""Write project configuration to given file object."""
self.write_project_config()
self.write_gui_config()
super(ProjectParser, self).write(fp)
def write_project_config(self):
"""Write project section configuration."""
section = "project"
self.add_section(section)
self.set(section, "url", self.urlinput.text())
def write_gui_config(self):
"""Write gui section configuration."""
section = "gui"
self.add_section(section)
for key, value in self.gui_options.get_options().items():
self.set(section, key, value)
def url_to_filename(url, extension):
value = unicode(url)
# filter host and document
parts = url_split(url)
value = parts[1]+parts[3]
# normalize
import unicodedata
value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
# replace non-alpha characters and convert to lowercase
value = re.sub('[^\w-]+', '_', value).strip().lower()
# add extension
return value + extension
def saveproject(parent, url):
"""Save a project file."""
try:
msg = saveproject_msg(parent, url)
except StandardError, errmsg:
msg = str(errmsg)
parent.set_statusmsg(msg)
def saveproject_msg(parent, url):
"""Save a project file and return status message."""
title = _("Save LinkChecker project")
func = QtGui.QFileDialog.getSaveFileName
suggestedname = url_to_filename(url, ProjectExt)
res = func(parent, title, suggestedname, ProjectFilter)
if not res:
# user canceled
return _("Canceled saving a project file.")
filename = unicode(res)
d = dict(filename=filename)
if not is_writable(filename):
return _("Could not write project file %(filename)s.") % d
user_config = get_user_config()
if is_readable(user_config):
# Copy user config to filename since this is the current
# configuration.
# This way it is not necessary to write the parent.config
# dictionary back to a file.
shutil.copy(user_config, filename)
filter_comments = True
else:
# use default config (ie. do not write anything)
filter_comments = False
write_header(filename, filter_comments)
parser = ProjectParser(parent.config, parent.options, parent.urlinput)
with open(filename, 'a') as fp:
parser.write(fp)
return _("Project file %(filename)s saved successfully.") % d
def write_header(filename, filter_comments):
"""Write header and filter comment lines if file already exists."""
lines = [
'# This is a generated LinkChecker project file. Do not edit'+os.linesep,
]
if filter_comments:
with open(filename, 'r') as fp:
for line in fp:
if not line.lstrip().startswith((';', '#')):
lines.append(line)
with open(filename, 'w') as fp:
for line in lines:
fp.write(line)
def openproject (parent):
"""Select and load a project file."""
try:
msg = openproject_msg(parent)
except StandardError, errmsg:
msg = str(errmsg)
parent.set_statusmsg(msg)
def openproject_msg(parent):
"""Select and load a project file. Returns message to display
which indicates if file has been loaded successful."""
title = _("Open LinkChecker project")
func = QtGui.QFileDialog.getOpenFileName
directory = ""
filename = func(parent, title, directory, ProjectFilter)
if not filename:
# user canceled
return _("Canceled opening a project file.")
if not is_readable(filename):
return _("Could not read project file %(filename)s.") % dict(filename=filename)
return loadproject(filename, parent.config, parent.options, parent.urlinput)
def loadproject(filename, config, options, urlinput):
"""Load a project file. Returns message to display which indicates if
file has been loaded successful."""
parser = ProjectParser(config, options, urlinput)
parser.read([filename])
d = dict(filename=filename)
return _("Project file %(filename)s loaded successfully.") % d

View file

@ -1403,6 +1403,8 @@
<property name="title">
<string>&amp;File</string>
</property>
<addaction name="actionOpen_project"/>
<addaction name="actionSave_project"/>
<addaction name="actionSave"/>
<addaction name="actionQuit"/>
</widget>
@ -1527,10 +1529,7 @@
<normaloff>:/icons/save.png</normaloff>:/icons/save.png</iconset>
</property>
<property name="text">
<string>&amp;Save results...</string>
</property>
<property name="shortcut">
<string>Ctrl+S</string>
<string>Save &amp;results...</string>
</property>
</action>
<action name="actionQuit">
@ -1555,6 +1554,25 @@
<string>Donate</string>
</property>
</action>
<action name="actionOpen_project">
<property name="text">
<string>&amp;Open project...</string>
</property>
<property name="iconText">
<string>Open project</string>
</property>
<property name="shortcut">
<string>Ctrl+O</string>
</property>
</action>
<action name="actionSave_project">
<property name="text">
<string>&amp;Save project...</string>
</property>
<property name="shortcut">
<string>Ctrl+S</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>

View file

@ -27,7 +27,9 @@ if main_is_frozen():
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.fileutil import is_readable
from linkcheck.gui import LinkCheckerMain, get_app_style
from linkcheck.gui.projects import ProjectExt
def excepthook (window, etype, evalue, tb):
@ -52,14 +54,17 @@ def main (argv=None):
QApplication.setStyle(get_app_style())
QApplication.setPalette(QApplication.style().standardPalette())
args = app.arguments()
mainkwargs = {}
if len(args) > 1:
url = args[1]
else:
url = u""
fileorurl = unicode(args[1])
if is_readable(fileorurl) and fileorurl.lower().endswith(ProjectExt):
mainkwargs["project"] = fileorurl
else:
mainkwargs["url"] = fileorurl
signal.signal(signal.SIGINT, signal.SIG_DFL)
# use local variable here to avoid garbage collection of the main
# window before app.exec_() finishes
window = LinkCheckerMain(url=url)
window = LinkCheckerMain(**mainkwargs)
window.show()
window.raise_() # this will raise the window on Mac OS X
drop_privileges()

454
po/de.po

File diff suppressed because it is too large Load diff

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: calvin@users.sourceforge.net\n"
"POT-Creation-Date: 2012-01-21 00:22+0100\n"
"POT-Creation-Date: 2012-01-26 20:18+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -80,7 +80,7 @@ msgstr ""
msgid "System info:"
msgstr ""
#: ../linkcheck/director/console.py:129 ../linkchecker:571
#: ../linkcheck/director/console.py:129 ../linkchecker:575
#, python-format
msgid "Python %(version)s on %(platform)s"
msgstr ""
@ -155,54 +155,43 @@ msgstr ""
msgid "invalid login URL `%s'. Only HTTP and HTTPS URLs are supported."
msgstr ""
#: ../linkcheck/configuration/__init__.py:303
#: ../linkcheck/configuration/__init__.py:287
msgid "missing user or URL pattern in authentication data."
msgstr ""
#: ../linkcheck/configuration/__init__.py:353
#: ../linkcheck/configuration/__init__.py:333
msgid "activating text logger output."
msgstr ""
#: ../linkcheck/configuration/__init__.py:361
#: ../linkcheck/checker/urlbase.py:786
msgid "tidy module is not available; download from http://utidylib.berlios.de/"
msgstr ""
#: ../linkcheck/configuration/__init__.py:369
#: ../linkcheck/checker/urlbase.py:813
msgid ""
"cssutils module is not available; download from http://cthedot.de/cssutils/"
msgstr ""
#: ../linkcheck/configuration/__init__.py:379
#: ../linkcheck/configuration/__init__.py:343
msgid "Clamav could not be initialized"
msgstr ""
#: ../linkcheck/configuration/__init__.py:385
#: ../linkcheck/configuration/__init__.py:349
msgid "activating sendcookies because storecookies is active."
msgstr ""
#: ../linkcheck/configuration/__init__.py:395
#: ../linkcheck/configuration/__init__.py:359
msgid "no CGI password fieldname given for login URL."
msgstr ""
#: ../linkcheck/configuration/__init__.py:399
#: ../linkcheck/configuration/__init__.py:363
msgid "no CGI user fieldname given for login URL."
msgstr ""
#: ../linkcheck/configuration/__init__.py:403
#: ../linkcheck/configuration/__init__.py:367
msgid "no user/password authentication data found for login URL."
msgstr ""
#: ../linkcheck/configuration/__init__.py:406
#: ../linkcheck/configuration/__init__.py:370
msgid "login URL is not a HTTP URL."
msgstr ""
#: ../linkcheck/configuration/__init__.py:410
#: ../linkcheck/configuration/__init__.py:374
msgid "login URL is incomplete."
msgstr ""
#: ../linkcheck/configuration/__init__.py:414
#: ../linkcheck/configuration/__init__.py:378
#, python-format
msgid "disabling login URL %(url)s."
msgstr ""
@ -353,22 +342,22 @@ msgid "Cache key"
msgstr ""
#: ../linkcheck/logger/__init__.py:33
#: ../linkcheck/gui/linkchecker_ui_main.py:315 ../linkcheck/gui/urlmodel.py:22
#: ../linkcheck/gui/linkchecker_ui_main.py:786 ../linkcheck/gui/urlmodel.py:22
msgid "Result"
msgstr ""
#: ../linkcheck/logger/__init__.py:34
#: ../linkcheck/gui/linkchecker_ui_main.py:209
#: ../linkcheck/gui/linkchecker_ui_main.py:780
msgid "Base"
msgstr ""
#: ../linkcheck/logger/__init__.py:35
#: ../linkcheck/gui/linkchecker_ui_main.py:174 ../linkcheck/gui/urlmodel.py:22
#: ../linkcheck/gui/linkchecker_ui_main.py:778 ../linkcheck/gui/urlmodel.py:22
msgid "Name"
msgstr ""
#: ../linkcheck/logger/__init__.py:36
#: ../linkcheck/gui/linkchecker_ui_main.py:191
#: ../linkcheck/gui/linkchecker_ui_main.py:779
msgid "Parent URL"
msgstr ""
@ -377,32 +366,32 @@ msgid "Extern"
msgstr ""
#: ../linkcheck/logger/__init__.py:38
#: ../linkcheck/gui/linkchecker_ui_main.py:278
#: ../linkcheck/gui/linkchecker_ui_main.py:784
msgid "Info"
msgstr ""
#: ../linkcheck/logger/__init__.py:39
#: ../linkcheck/gui/linkchecker_ui_main.py:296
#: ../linkcheck/gui/linkchecker_ui_main.py:785
msgid "Warning"
msgstr ""
#: ../linkcheck/logger/__init__.py:40
#: ../linkcheck/gui/linkchecker_ui_main.py:244
#: ../linkcheck/gui/linkchecker_ui_main.py:782
msgid "D/L time"
msgstr ""
#: ../linkcheck/logger/__init__.py:41
#: ../linkcheck/gui/linkchecker_ui_main.py:261
#: ../linkcheck/gui/linkchecker_ui_main.py:783
msgid "Size"
msgstr ""
#: ../linkcheck/logger/__init__.py:42
#: ../linkcheck/gui/linkchecker_ui_main.py:227
#: ../linkcheck/gui/linkchecker_ui_main.py:781
msgid "Check time"
msgstr ""
#: ../linkcheck/logger/__init__.py:43
#: ../linkcheck/gui/linkchecker_ui_main.py:156 ../linkcheck/gui/urlmodel.py:22
#: ../linkcheck/gui/linkchecker_ui_main.py:777 ../linkcheck/gui/urlmodel.py:22
msgid "URL"
msgstr ""
@ -774,35 +763,35 @@ msgid ""
"Download size (%(dlsize)d Byte) does not equal content size (%(size)d Byte)."
msgstr ""
#: ../linkcheck/checker/urlbase.py:799 ../linkcheck/checker/urlbase.py:867
#: ../linkcheck/checker/urlbase.py:797 ../linkcheck/checker/urlbase.py:862
msgid "valid HTML syntax"
msgstr ""
#: ../linkcheck/checker/urlbase.py:805
#: ../linkcheck/checker/urlbase.py:803
#, python-format
msgid "tidy HTML parsing caused error: %(msg)s "
msgstr ""
#: ../linkcheck/checker/urlbase.py:830 ../linkcheck/checker/urlbase.py:903
#: ../linkcheck/checker/urlbase.py:825 ../linkcheck/checker/urlbase.py:898
msgid "valid CSS syntax"
msgstr ""
#: ../linkcheck/checker/urlbase.py:836
#: ../linkcheck/checker/urlbase.py:831
#, python-format
msgid "cssutils parsing caused error: %(msg)s"
msgstr ""
#: ../linkcheck/checker/urlbase.py:845
#: ../linkcheck/checker/urlbase.py:840
#, python-format
msgid "%(w3type)s validation error at line %(line)s col %(column)s: %(msg)s"
msgstr ""
#: ../linkcheck/checker/urlbase.py:876
#: ../linkcheck/checker/urlbase.py:871
#, python-format
msgid "HTML W3C validation caused error: %(msg)s "
msgstr ""
#: ../linkcheck/checker/urlbase.py:911
#: ../linkcheck/checker/urlbase.py:906
#, python-format
msgid "CSS W3C validation caused error: %(msg)s "
msgstr ""
@ -993,35 +982,35 @@ msgstr ""
msgid "NNTP server too busy; tried more than %d times."
msgstr ""
#: ../linkcheck/__init__.py:129
#: ../linkcheck/__init__.py:148
msgid "CRITICAL"
msgstr ""
#: ../linkcheck/__init__.py:130
#: ../linkcheck/__init__.py:149
msgid "ERROR"
msgstr ""
#: ../linkcheck/__init__.py:131
#: ../linkcheck/__init__.py:150
msgid "WARN"
msgstr ""
#: ../linkcheck/__init__.py:132
#: ../linkcheck/__init__.py:151
msgid "WARNING"
msgstr ""
#: ../linkcheck/__init__.py:133
#: ../linkcheck/__init__.py:152
msgid "INFO"
msgstr ""
#: ../linkcheck/__init__.py:134
#: ../linkcheck/__init__.py:153
msgid "DEBUG"
msgstr ""
#: ../linkcheck/__init__.py:135
#: ../linkcheck/__init__.py:154
msgid "NOTSET"
msgstr ""
#: ../linkcheck/__init__.py:146
#: ../linkcheck/__init__.py:165
msgid "Running as root user; dropping privileges by changing user to nobody."
msgstr ""
@ -1029,224 +1018,240 @@ msgstr ""
msgid "LinkChecker debug log"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:26
#: ../linkcheck/gui/linkchecker_ui_main.py:764
msgid "LinkChecker"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:39
#: ../linkcheck/gui/linkchecker_ui_main.py:765
msgid "URL:"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:56
#: ../linkcheck/gui/linkchecker_ui_main.py:766
msgid "Start checking the given URL."
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:71
#: ../linkcheck/gui/linkchecker_ui_main.py:768
msgid "Active:"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:76
#: ../linkcheck/gui/linkchecker_ui_main.py:85
#: ../linkcheck/gui/linkchecker_ui_main.py:94
#: ../linkcheck/gui/linkchecker_ui_main.py:769
#: ../linkcheck/gui/linkchecker_ui_main.py:771
#: ../linkcheck/gui/linkchecker_ui_main.py:773
msgid "0"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:80
#: ../linkcheck/gui/linkchecker_ui_main.py:770
msgid "Queued:"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:89
#: ../linkcheck/gui/linkchecker_ui_main.py:772
msgid "Checked:"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:98
#: ../linkcheck/gui/linkchecker_ui_main.py:774
msgid "Info:"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:108
#: ../linkcheck/gui/linkchecker_ui_main.py:775
msgid "-"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:142
#: ../linkcheck/gui/linkchecker_ui_main.py:776
msgid "URL properties"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:353
#: ../linkcheck/gui/linkchecker_ui_main.py:787
msgid "Check results"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:363
#: ../linkcheck/gui/linkchecker_ui_main.py:788
msgid "Valid URLs"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:387
#: ../linkcheck/gui/linkchecker_ui_main.py:789
msgid "Warnings"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:411
#: ../linkcheck/gui/linkchecker_ui_main.py:790
msgid "Invalid URLs"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:436
#: ../linkcheck/gui/linkchecker_ui_main.py:791
msgid "Content type statistics"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:446
#: ../linkcheck/gui/linkchecker_ui_main.py:792
msgid "Image"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:470
#: ../linkcheck/gui/linkchecker_ui_main.py:793
msgid "Text"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:494
#: ../linkcheck/gui/linkchecker_ui_main.py:794
msgid "Application"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:518
#: ../linkcheck/gui/linkchecker_ui_main.py:795
msgid "Audio"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:542
#: ../linkcheck/gui/linkchecker_ui_main.py:796
msgid "Video"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:580
#: ../linkcheck/gui/linkchecker_ui_main.py:797
msgid "Other"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:604
#: ../linkcheck/gui/linkchecker_ui_main.py:798
msgid "Mail"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:615
#: ../linkcheck/gui/linkchecker_ui_main.py:799
msgid "URL statistics"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:625
#: ../linkcheck/gui/linkchecker_ui_main.py:800
msgid "Min. length"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:649
#: ../linkcheck/gui/linkchecker_ui_main.py:801
msgid "Avg. length"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:673
#: ../linkcheck/gui/linkchecker_ui_main.py:802
msgid "Max. length"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:697
#: ../linkcheck/gui/linkchecker_ui_main.py:803
msgid "Domains"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:723
#: ../linkcheck/gui/linkchecker_ui_main.py:804
msgid "&Edit"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:726
#: ../linkcheck/gui/linkchecker_ui_main.py:805
#: ../linkcheck/gui/linkchecker_ui_editor.py:34
msgid "&File"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:729
#: ../linkcheck/gui/linkchecker_ui_main.py:746
#: ../linkcheck/gui/linkchecker_ui_main.py:806
#: ../linkcheck/gui/linkchecker_ui_main.py:809
msgid "&Help"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:739
#: ../linkcheck/gui/linkchecker_ui_main.py:807
msgid "A&bout"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:740
#: ../linkcheck/gui/linkchecker_ui_main.py:808
msgid "About"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:747
#: ../linkcheck/gui/linkchecker_ui_main.py:810
msgid "Help"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:753
#: ../linkcheck/gui/linkchecker_ui_main.py:811
msgid "View online"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:754
#: ../linkcheck/gui/linkchecker_ui_main.py:812
msgid "View URL online"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:760
#: ../linkcheck/gui/linkchecker_ui_main.py:813
msgid "&Options"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:761
#: ../linkcheck/gui/linkchecker_ui_main.py:814
#: /usr/lib/python2.7/optparse.py:1626
msgid "Options"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:767
#: ../linkcheck/gui/linkchecker_ui_main.py:815
msgid "Copy to clipboard"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:768
#: ../linkcheck/gui/linkchecker_ui_main.py:816
msgid "Copy URL to clipboard"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:769
#: ../linkcheck/gui/linkchecker_ui_main.py:817
msgid "Ctrl+C"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:773
#: ../linkcheck/gui/linkchecker_ui_main.py:818
msgid "View parent online"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:774
#: ../linkcheck/gui/linkchecker_ui_main.py:819
msgid "View parent URL online"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:778
#: ../linkcheck/gui/linkchecker_ui_main.py:820
msgid "View parent source"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:779
#: ../linkcheck/gui/linkchecker_ui_main.py:821
msgid "View parent URL source"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:782
#: ../linkcheck/gui/linkchecker_ui_main.py:822
msgid "Show debug"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:785
#: ../linkcheck/gui/linkchecker_ui_main.py:823
msgid "View properties"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:786
#: ../linkcheck/gui/linkchecker_ui_main.py:824
msgid "View URL properties"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:792
msgid "&Save results..."
#: ../linkcheck/gui/linkchecker_ui_main.py:825
msgid "Save &results..."
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:793
#: ../linkcheck/gui/linkchecker_ui_editor.py:50
msgid "Ctrl+S"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:799
#: ../linkcheck/gui/linkchecker_ui_main.py:826
msgid "&Quit"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:800
#: ../linkcheck/gui/linkchecker_ui_main.py:827
msgid "Ctrl+Q"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:803
#: ../linkcheck/gui/linkchecker_ui_main.py:828
msgid "Check for updates"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:806
#: ../linkcheck/gui/linkchecker_ui_main.py:829
msgid "Donate"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:830
msgid "&Open project..."
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:831
msgid "Open project"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:832
msgid "Ctrl+O"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:833
msgid "&Save project..."
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_main.py:834
#: ../linkcheck/gui/linkchecker_ui_editor.py:50
msgid "Ctrl+S"
msgstr ""
#: ../linkcheck/gui/editor.py:104
msgid "Save file?"
msgstr ""
@ -1309,16 +1314,16 @@ msgstr ""
msgid "Insert %(browser)s bookmark file"
msgstr ""
#: ../linkcheck/gui/options.py:104
#: ../linkcheck/gui/options.py:105
#: ../linkcheck/gui/linkchecker_ui_options.py:123
msgid "Edit"
msgstr ""
#: ../linkcheck/gui/options.py:106
#: ../linkcheck/gui/options.py:107
msgid "Read"
msgstr ""
#: ../linkcheck/gui/options.py:109
#: ../linkcheck/gui/options.py:110
msgid "File not found"
msgstr ""
@ -1354,28 +1359,33 @@ msgstr ""
msgid "&Save"
msgstr ""
#: ../linkcheck/gui/__init__.py:146 ../linkcheck/gui/__init__.py:465
#: ../linkcheck/gui/__init__.py:152
#, python-format
msgid "Could not load project %(filename)s: %(err)s"
msgstr ""
#: ../linkcheck/gui/__init__.py:154 ../linkcheck/gui/__init__.py:483
msgid "Ready."
msgstr ""
#: ../linkcheck/gui/__init__.py:173
#: ../linkcheck/gui/__init__.py:181
msgid "Check finished."
msgstr ""
#: ../linkcheck/gui/__init__.py:281
#: ../linkcheck/gui/__init__.py:289
msgid "Start"
msgstr ""
#: ../linkcheck/gui/__init__.py:306
#: ../linkcheck/gui/__init__.py:314
msgid "Stop"
msgstr ""
#: ../linkcheck/gui/__init__.py:354
#: ../linkcheck/gui/__init__.py:362
#, python-format
msgid "About %(appname)s"
msgstr ""
#: ../linkcheck/gui/__init__.py:355
#: ../linkcheck/gui/__init__.py:363
#, python-format
msgid ""
"<qt><center>\n"
@ -1392,32 +1402,32 @@ msgid ""
"</center></qt>"
msgstr ""
#: ../linkcheck/gui/__init__.py:400
#: ../linkcheck/gui/__init__.py:418
msgid "Closing pending connections..."
msgstr ""
#: ../linkcheck/gui/__init__.py:434
#: ../linkcheck/gui/__init__.py:452
msgid "Error, empty URL"
msgstr ""
#: ../linkcheck/gui/__init__.py:436
#: ../linkcheck/gui/__init__.py:454
#, python-format
msgid "Checking '%s'."
msgstr ""
#: ../linkcheck/gui/__init__.py:442
#: ../linkcheck/gui/__init__.py:460
#, python-format
msgid "Error, invalid URL `%s'."
msgstr ""
#: ../linkcheck/gui/__init__.py:462
#: ../linkcheck/gui/__init__.py:480
#, python-format
msgid "%d URL selected."
msgid_plural "%d URLs selected"
msgstr[0] ""
msgstr[1] ""
#: ../linkcheck/gui/__init__.py:542
#: ../linkcheck/gui/__init__.py:561
msgid "LinkChecker internal error"
msgstr ""
@ -1425,7 +1435,7 @@ msgstr ""
msgid "Dialog"
msgstr ""
#: ../linkcheck/gui/linkchecker_ui_options.py:26 ../linkchecker:444
#: ../linkcheck/gui/linkchecker_ui_options.py:26 ../linkchecker:448
msgid "Checking options"
msgstr ""
@ -1483,6 +1493,47 @@ msgstr ""
msgid "Close"
msgstr ""
#: ../linkcheck/gui/projects.py:26
#, python-format
msgid "LinkChecker project (*%(ext)s)"
msgstr ""
#: ../linkcheck/gui/projects.py:120
msgid "Save LinkChecker project"
msgstr ""
#: ../linkcheck/gui/projects.py:126
msgid "Canceled saving a project file."
msgstr ""
#: ../linkcheck/gui/projects.py:130
#, python-format
msgid "Could not write project file %(filename)s."
msgstr ""
#: ../linkcheck/gui/projects.py:146
#, python-format
msgid "Project file %(filename)s saved successfully."
msgstr ""
#: ../linkcheck/gui/projects.py:176
msgid "Open LinkChecker project"
msgstr ""
#: ../linkcheck/gui/projects.py:182
msgid "Canceled opening a project file."
msgstr ""
#: ../linkcheck/gui/projects.py:184
#, python-format
msgid "Could not read project file %(filename)s."
msgstr ""
#: ../linkcheck/gui/projects.py:194
#, python-format
msgid "Project file %(filename)s loaded successfully."
msgstr ""
#: ../linkcheck/lc_cgi.py:90
#, python-format
msgid "URL has unparsable domain name: %s"
@ -1791,28 +1842,28 @@ msgid "Output options"
msgstr ""
#: ../linkchecker:351
msgid "Check syntax of CSS URLs with local library (cssutils)."
msgid ""
"Check syntax of CSS URLs with cssutils. If it's not installed,\n"
"check with the W3C online validator."
msgstr ""
#: ../linkchecker:354
msgid "Check syntax of CSS URLs with W3C online validator."
#: ../linkchecker:356 ../linkchecker:364
msgid "This option is deprecated."
msgstr ""
#: ../linkchecker:357
msgid "Check syntax of HTML URLs with local library (HTML tidy)."
#: ../linkchecker:359
msgid ""
"Check syntax of HTML URLs with HTML tidy. If it's not installed,\n"
"check with the W3C online validator."
msgstr ""
#: ../linkchecker:360
msgid "Check syntax of HTML URLs with W3C online validator."
msgstr ""
#: ../linkchecker:362
#: ../linkchecker:366
msgid ""
"Log all URLs, including duplicates.\n"
"Default is to log duplicate URLs only once."
msgstr ""
#: ../linkchecker:366
#: ../linkchecker:370
#, python-format
msgid ""
"Print debugging output for the given logger.\n"
@ -1824,7 +1875,7 @@ msgid ""
"For accurate results, threading will be disabled during debug runs."
msgstr ""
#: ../linkchecker:377
#: ../linkchecker:381
#, python-format
msgid ""
"Output to a file linkchecker-out.TYPE, $HOME/.linkchecker/blacklist for\n"
@ -1841,15 +1892,15 @@ msgid ""
"suppress all console output with the option '-o none'."
msgstr ""
#: ../linkchecker:391
#: ../linkchecker:395
msgid "Do not print check status messages."
msgstr ""
#: ../linkchecker:393
#: ../linkchecker:397
msgid "Don't log warnings. Default is to log warnings."
msgstr ""
#: ../linkchecker:397
#: ../linkchecker:401
#, python-format
msgid ""
"Specify output as %(loggertypes)s. Default output type is text.\n"
@ -1859,36 +1910,36 @@ msgid ""
"html."
msgstr ""
#: ../linkchecker:405
#: ../linkchecker:409
#, python-format
msgid ""
"Write profiling data into a file named %s in the\n"
"current working directory. See also --viewprof."
msgstr ""
#: ../linkchecker:409
#: ../linkchecker:413
msgid ""
"Quiet operation, an alias for '-o none'.\n"
"This is only useful with -F."
msgstr ""
#: ../linkchecker:413
#: ../linkchecker:417
msgid "Scan content of URLs with ClamAV virus scanner."
msgstr ""
#: ../linkchecker:415
#: ../linkchecker:419
msgid "Print tracing information."
msgstr ""
#: ../linkchecker:418
#: ../linkchecker:422
msgid "Log all URLs. Default is to log only errors and warnings."
msgstr ""
#: ../linkchecker:421
#: ../linkchecker:425
msgid "Print out previously generated profiling data. See also --profile."
msgstr ""
#: ../linkchecker:425
#: ../linkchecker:429
msgid ""
"Define a regular expression which prints a warning if it matches\n"
"any content of the checked link. This applies only to valid pages,\n"
@ -1902,19 +1953,19 @@ msgid ""
"for example \"(This page has moved|Oracle Application error)\"."
msgstr ""
#: ../linkchecker:438
#: ../linkchecker:442
msgid ""
"Print a warning if content size info is available and exceeds the\n"
"given number of bytes."
msgstr ""
#: ../linkchecker:447
#: ../linkchecker:451
msgid ""
"Check HTTP anchor references. Default is not to check anchors.\n"
"This option enables logging of the warning 'url-anchor-not-found'."
msgstr ""
#: ../linkchecker:451
#: ../linkchecker:455
msgid ""
"Accept and send HTTP cookies according to RFC 2109. Only cookies\n"
"which are sent back to the originating server are accepted.\n"
@ -1922,146 +1973,146 @@ msgid ""
"information."
msgstr ""
#: ../linkchecker:458
#: ../linkchecker:462
msgid ""
"Read a file with initial cookie data. The cookie data format is\n"
"explained below."
msgstr ""
#: ../linkchecker:463
#: ../linkchecker:467
msgid ""
"Only check syntax of URLs matching the given regular expression.\n"
" This option can be given multiple times."
msgstr ""
#: ../linkchecker:468
#: ../linkchecker:472
msgid ""
"Check but do not recurse into URLs matching the given regular\n"
"expression. This option can be given multiple times."
msgstr ""
#: ../linkchecker:473
#: ../linkchecker:477
msgid ""
"Specify an NNTP server for 'news:...' links. Default is the\n"
"environment variable NNTP_SERVER. If no host is given,\n"
"only the syntax of the link is checked."
msgstr ""
#: ../linkchecker:479
#: ../linkchecker:483
msgid ""
"Read a password from console and use it for HTTP and FTP authorization.\n"
"For FTP the default password is 'anonymous@'. For HTTP there is\n"
"no default password. See also -u."
msgstr ""
#: ../linkchecker:485
#: ../linkchecker:489
msgid ""
"Pause the given number of seconds between two subsequent connection\n"
"requests to the same host. Default is no pause between requests."
msgstr ""
#: ../linkchecker:490
#: ../linkchecker:494
msgid ""
"Check recursively all links up to given depth. A negative depth\n"
"will enable infinite recursion. Default depth is infinite."
msgstr ""
#: ../linkchecker:495
#: ../linkchecker:499
#, python-format
msgid ""
"Set the timeout for connection attempts in seconds. The default\n"
"timeout is %d seconds."
msgstr ""
#: ../linkchecker:500
#: ../linkchecker:504
msgid ""
"Try the given username for HTTP and FTP authorization.\n"
"For FTP the default username is 'anonymous'. For HTTP there is\n"
"no default username. See also -p."
msgstr ""
#: ../linkchecker:506
#: ../linkchecker:510
msgid ""
"Specify the User-Agent string to send to the HTTP server, for example\n"
"\"Mozilla/4.0\". The default is \"LinkChecker/X.Y\" where X.Y is the current\n"
"version of LinkChecker."
msgstr ""
#: ../linkchecker:544
#: ../linkchecker:548
#, python-format
msgid "URL has unparsable domain name: %(domain)s"
msgstr ""
#: ../linkchecker:569
#: ../linkchecker:573
#, python-format
msgid "Invalid debug level %(level)r"
msgstr ""
#: ../linkchecker:582
#: ../linkchecker:586
#, python-format
msgid "Unreadable config file: %r"
msgstr ""
#: ../linkchecker:590
#: ../linkchecker:594
msgid "Running with python -O disables debugging."
msgstr ""
#: ../linkchecker:612 ../linkchecker:643
#: ../linkchecker:616 ../linkchecker:647
#, python-format
msgid "Unknown logger type %(type)r in %(output)r for option %(option)s"
msgstr ""
#: ../linkchecker:616 ../linkchecker:649
#: ../linkchecker:620 ../linkchecker:653
#, python-format
msgid "Unknown encoding %(encoding)r in %(output)r for option %(option)s"
msgstr ""
#: ../linkchecker:661
#: ../linkchecker:665
#, python-format
msgid "Enter LinkChecker HTTP/FTP password for user %(user)s:"
msgstr ""
#: ../linkchecker:664
#: ../linkchecker:668
msgid "Enter LinkChecker HTTP/FTP password:"
msgstr ""
#: ../linkchecker:671 ../linkchecker:689
#: ../linkchecker:675 ../linkchecker:693
#, python-format
msgid "Illegal argument %(arg)r for option %(option)s"
msgstr ""
#: ../linkchecker:728
#: ../linkchecker:732
#, python-format
msgid "Enter LinkChecker password for user %(user)s at %(strpattern)s:"
msgstr ""
#: ../linkchecker:745
#: ../linkchecker:749
msgid ""
"Using DOT or GML loggers without --complete output gives an incomplete "
"sitemap graph."
msgstr ""
#: ../linkchecker:758
#: ../linkchecker:762
#, python-format
msgid "Could not parse cookie file: %s"
msgstr ""
#: ../linkchecker:772
#: ../linkchecker:776
msgid "no files or URLs given"
msgstr ""
#: ../linkchecker:777
#: ../linkchecker:781
#, python-format
msgid ""
"Overwrite profiling file %(file)r?\n"
"Press Ctrl-C to cancel, RETURN to continue."
msgstr ""
#: ../linkchecker:783
#: ../linkchecker:787
msgid "Canceled."
msgstr ""
#: ../linkchecker:787
#: ../linkchecker:791
msgid ""
"The `profile' Python module is not installed, therefore the --profile option "
"is disabled."