add reportabug 1.0.2

This commit is contained in:
arcan1s 2014-07-31 19:59:55 +04:00
parent 78a4aeb0eb
commit 0aa162b71b
27 changed files with 4196 additions and 196 deletions

View File

@ -4,6 +4,7 @@ cmake_policy (SET CMP0003 OLD)
cmake_policy (SET CMP0002 OLD) cmake_policy (SET CMP0002 OLD)
cmake_policy (SET CMP0011 NEW) cmake_policy (SET CMP0011 NEW)
cmake_policy (SET CMP0015 NEW) cmake_policy (SET CMP0015 NEW)
cmake_policy (SET CMP0028 OLD)
project (netctl-gui) project (netctl-gui)
set (PROJECT_AUTHOR "Evgeniy Alekseev") set (PROJECT_AUTHOR "Evgeniy Alekseev")
@ -50,17 +51,23 @@ else ()
endif () endif ()
configure_file (${CMAKE_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h) configure_file (${CMAKE_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
configure_file (${CMAKE_SOURCE_DIR}/reportabug.h ${CMAKE_SOURCE_DIR}/reportabug/src/config.h)
# resources # resources
set (PROJECT_LIBRARY netctlgui) set (PROJECT_LIBRARY netctlgui)
set (PROJECT_RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/resources) set (PROJECT_RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/resources)
add_subdirectory (${PROJECT_RESOURCE_DIR}) add_subdirectory (${PROJECT_RESOURCE_DIR})
# 3rd party
set (GUI_3RDPARTY reportabug)
# components # components
if (BUILD_LIBRARY) if (BUILD_LIBRARY)
add_subdirectory (${PROJECT_LIBRARY}) add_subdirectory (${PROJECT_LIBRARY})
endif() endif()
if (BUILD_GUI) if (BUILD_GUI)
foreach (3RDPARTY ${GUI_3RDPARTY})
add_subdirectory (${3RDPARTY})
endforeach ()
add_subdirectory (gui) add_subdirectory (gui)
endif () endif ()
if (BUILD_DATAENGINE) if (BUILD_DATAENGINE)

View File

@ -13,6 +13,9 @@ include_directories (${CMAKE_CURRENT_SOURCE_DIR}/../../${PROJECT_LIBRARY}/includ
${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_BINARY_DIR}) ${CMAKE_CURRENT_BINARY_DIR})
link_directories (${PROJECT_LIBRARY}/src/lib) link_directories (${PROJECT_LIBRARY}/src/lib)
foreach (3RDPARTY ${GUI_3RDPARTY})
include_directories (${CMAKE_CURRENT_SOURCE_DIR}/../../${3RDPARTY}/src)
endforeach ()
if (USE_QT5) if (USE_QT5)
find_package(Qt5Core REQUIRED) find_package(Qt5Core REQUIRED)
@ -21,6 +24,7 @@ if (USE_QT5)
add_definitions(${Qt5Core_DEFINITIONS}) add_definitions(${Qt5Core_DEFINITIONS})
add_definitions(${Qt5Widgets_DEFINITIONS}) add_definitions(${Qt5Widgets_DEFINITIONS})
add_definitions(${Qt5LinguistTools_DEFINITIONS}) add_definitions(${Qt5LinguistTools_DEFINITIONS})
include_directories (${Qt5Core_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS})
qt5_wrap_cpp (MOC_SOURCES ${HEADERS}) qt5_wrap_cpp (MOC_SOURCES ${HEADERS})
qt5_wrap_ui (UI_HEADERS ${FORMS}) qt5_wrap_ui (UI_HEADERS ${FORMS})
qt5_add_resources (QRC_SOURCES ${RESOURCES}) qt5_add_resources (QRC_SOURCES ${RESOURCES})
@ -34,14 +38,6 @@ if (USE_QT5)
endforeach () endforeach ()
add_custom_target (translations COMMAND ${Qt5_LUPDATE_EXECUTABLE} ${HEADERS} ${SOURCES} ${UI_HEADERS} -ts ${TRANSLATIONS}) add_custom_target (translations COMMAND ${Qt5_LUPDATE_EXECUTABLE} ${HEADERS} ${SOURCES} ${UI_HEADERS} -ts ${TRANSLATIONS})
add_custom_command (TARGET translations COMMAND ${Qt5_LRELEASE_EXECUTABLE} ${TRANSLATIONS}) add_custom_command (TARGET translations COMMAND ${Qt5_LRELEASE_EXECUTABLE} ${TRANSLATIONS})
source_group ("Header Files" FILES ${HEADERS})
source_group ("Source Files" FILES ${SOURCES})
source_group ("Generated Files" FILES ${MOC_SOURCES})
include_directories (${Qt5Core_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS})
add_executable (${SUBPROJECT} ${UI_HEADERS} ${HEADERS} ${SOURCES} ${MOC_SOURCES} ${QRC_SOURCES} ${TRANSLATIONS})
target_link_libraries (${SUBPROJECT} ${PROJECT_LIBRARY} ${Qt5Widgets_LIBRARIES} ${Qt5Core_LIBRARIES})
else () else ()
find_package (Qt4 REQUIRED) find_package (Qt4 REQUIRED)
include (${QT_USE_FILE}) include (${QT_USE_FILE})
@ -58,14 +54,9 @@ else ()
endforeach () endforeach ()
add_custom_target (translations COMMAND ${QT_LUPDATE_EXECUTABLE} ${HEADERS} ${SOURCES} ${UI_HEADERS} -ts ${TRANSLATIONS}) add_custom_target (translations COMMAND ${QT_LUPDATE_EXECUTABLE} ${HEADERS} ${SOURCES} ${UI_HEADERS} -ts ${TRANSLATIONS})
add_custom_command (TARGET translations COMMAND ${QT_LRELEASE_EXECUTABLE} ${TRANSLATIONS}) add_custom_command (TARGET translations COMMAND ${QT_LRELEASE_EXECUTABLE} ${TRANSLATIONS})
source_group ("Header Files" FILES ${HEADERS})
source_group ("Source Files" FILES ${SOURCES})
source_group ("Generated Files" FILES ${MOC_SOURCES})
add_executable (${SUBPROJECT} ${UI_HEADERS} ${HEADERS} ${SOURCES} ${MOC_SOURCES} ${QRC_SOURCES} ${TRANSLATIONS})
target_link_libraries (${SUBPROJECT} ${PROJECT_LIBRARY} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
endif() endif()
add_executable (${SUBPROJECT} ${UI_HEADERS} ${HEADERS} ${SOURCES} ${MOC_SOURCES} ${QRC_SOURCES} ${TRANSLATIONS})
target_link_libraries (${SUBPROJECT} ${GUI_3RDPARTY} ${PROJECT_LIBRARY} ${Qt5Widgets_LIBRARIES} ${Qt5Core_LIBRARIES})
# install properties # install properties
install (TARGETS ${SUBPROJECT} DESTINATION bin) install (TARGETS ${SUBPROJECT} DESTINATION bin)

View File

@ -24,6 +24,7 @@
#include <QProcess> #include <QProcess>
#include <netctlgui/netctlgui.h> #include <netctlgui/netctlgui.h>
#include <reportabug/reportabug.h>
#include "aboutwindow.h" #include "aboutwindow.h"
#include "bridgewidget.h" #include "bridgewidget.h"
@ -91,6 +92,7 @@ MainWindow::MainWindow(QWidget *parent,
aboutWin = new AboutWindow(this, debug); aboutWin = new AboutWindow(this, debug);
errorWin = new ErrorWindow(this, debug); errorWin = new ErrorWindow(this, debug);
netctlAutoWin = new NetctlAutoWindow(this, debug, configuration); netctlAutoWin = new NetctlAutoWindow(this, debug, configuration);
reportWin = new Reportabug(this, debug);
// profile widgets // profile widgets
generalWid = new GeneralWidget(this, configuration); generalWid = new GeneralWidget(this, configuration);
ui->scrollAreaWidgetContents->layout()->addWidget(generalWid); ui->scrollAreaWidgetContents->layout()->addWidget(generalWid);
@ -173,6 +175,7 @@ MainWindow::~MainWindow()
delete errorWin; delete errorWin;
delete netctlAutoWin; delete netctlAutoWin;
delete settingsWin; delete settingsWin;
delete reportWin;
delete ui; delete ui;
} }
@ -231,6 +234,7 @@ void MainWindow::createActions()
connect(ui->actionNetctlAuto, SIGNAL(triggered(bool)), netctlAutoWin, SLOT(showWindow())); connect(ui->actionNetctlAuto, SIGNAL(triggered(bool)), netctlAutoWin, SLOT(showWindow()));
connect(ui->actionSettings, SIGNAL(triggered(bool)), settingsWin, SLOT(showWindow())); connect(ui->actionSettings, SIGNAL(triggered(bool)), settingsWin, SLOT(showWindow()));
connect(ui->actionQuit, SIGNAL(triggered(bool)), this, SLOT(close())); connect(ui->actionQuit, SIGNAL(triggered(bool)), this, SLOT(close()));
connect(ui->actionReport, SIGNAL(triggered(bool)), reportWin, SLOT(showWindow()));
// actions menu // actions menu
connect(ui->menuActions, SIGNAL(aboutToShow()), this, SLOT(updateMenu())); connect(ui->menuActions, SIGNAL(aboutToShow()), this, SLOT(updateMenu()));

View File

@ -37,6 +37,7 @@ class NetctlProfile;
class PasswdWidget; class PasswdWidget;
class PppoeWidget; class PppoeWidget;
class SettingsWindow; class SettingsWindow;
class Reportabug;
class TunnelWidget; class TunnelWidget;
class TuntapWidget; class TuntapWidget;
class VlanWidget; class VlanWidget;
@ -109,6 +110,7 @@ private:
AboutWindow *aboutWin; AboutWindow *aboutWin;
ErrorWindow *errorWin; ErrorWindow *errorWin;
NetctlAutoWindow *netctlAutoWin; NetctlAutoWindow *netctlAutoWin;
Reportabug *reportWin;
PasswdWidget *passwdWid; PasswdWidget *passwdWid;
SettingsWindow *settingsWin; SettingsWindow *settingsWin;
BridgeWidget *bridgeWid; BridgeWidget *bridgeWid;

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>479</width> <width>477</width>
<height>507</height> <height>505</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -367,7 +367,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>479</width> <width>477</width>
<height>22</height> <height>22</height>
</rect> </rect>
</property> </property>
@ -402,6 +402,7 @@
<property name="title"> <property name="title">
<string>Help</string> <string>Help</string>
</property> </property>
<addaction name="actionReport"/>
<addaction name="actionAbout"/> <addaction name="actionAbout"/>
</widget> </widget>
<addaction name="menuMenu"/> <addaction name="menuMenu"/>
@ -562,12 +563,22 @@
</action> </action>
<action name="actionAbout"> <action name="actionAbout">
<property name="icon"> <property name="icon">
<iconset theme="help-about"/> <iconset theme="help-about">
<normaloff/>
</iconset>
</property> </property>
<property name="text"> <property name="text">
<string>About</string> <string>About</string>
</property> </property>
</action> </action>
<action name="actionReport">
<property name="icon">
<iconset theme="tools-report-bug"/>
</property>
<property name="text">
<string>Report a bug</string>
</property>
</action>
</widget> </widget>
<tabstops> <tabstops>
<tabstop>tabWidget</tabstop> <tabstop>tabWidget</tabstop>

View File

@ -14,10 +14,6 @@ if (USE_QT5)
add_definitions(${Qt5Core_DEFINITIONS}) add_definitions(${Qt5Core_DEFINITIONS})
qt5_wrap_cpp (MOC_SOURCES ${HEADERS}) qt5_wrap_cpp (MOC_SOURCES ${HEADERS})
source_group ("Header Files" FILES ${HEADERS})
source_group ("Source Files" FILES ${SOURCES})
source_group ("Generated Files" FILES ${MOC_SOURCES})
include_directories (${Qt5Core_INCLUDE_DIRS}) include_directories (${Qt5Core_INCLUDE_DIRS})
add_library (${SUBPROJECT} SHARED ${SOURCES} ${HEADERS} ${MOC_SOURCES}) add_library (${SUBPROJECT} SHARED ${SOURCES} ${HEADERS} ${MOC_SOURCES})
target_link_libraries (${SUBPROJECT} ${Qt5Core_LIBRARIES}) target_link_libraries (${SUBPROJECT} ${Qt5Core_LIBRARIES})
@ -26,10 +22,6 @@ else ()
include (${QT_USE_FILE}) include (${QT_USE_FILE})
qt4_wrap_cpp (MOC_SOURCES ${HEADERS}) qt4_wrap_cpp (MOC_SOURCES ${HEADERS})
source_group ("Header Files" FILES ${HEADERS})
source_group ("Source Files" FILES ${SOURCES})
source_group ("Generated Files" FILES ${MOC_SOURCES})
add_library (${SUBPROJECT} SHARED ${SOURCES} ${HEADERS} ${MOC_SOURCES}) add_library (${SUBPROJECT} SHARED ${SOURCES} ${HEADERS} ${MOC_SOURCES})
target_link_libraries (${SUBPROJECT} ${QT_QTCORE_LIBRARY}) target_link_libraries (${SUBPROJECT} ${QT_QTCORE_LIBRARY})
endif() endif()

76
sources/reportabug.h Normal file
View File

@ -0,0 +1,76 @@
/***************************************************************************
* This file is part of reportabug *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 3.0 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. *
***************************************************************************/
#ifndef CONFIG_H
#define CONFIG_H
#include <inconfig.h>
/*
* Main configuration
*/
// the owner of the source repository
#define OWNER "arcan1s"
// project name
#define PROJECT "netctl-gui"
// tags defaults
#define TAG_TITLE "A new bug"
#define TAG_BODY "Some error occurs"
// the following tags will work only if user has push access
// if they will be empty, they will be ignored
#define TAG_ASSIGNEE "$OWNER"
#define TAG_MILESTONE ""
// comma separated
#define TAG_LABELS ""
/*
* Configuration of creating an issue using GitHub API
*/
// combobox text
#define GITHUB_COMBOBOX "I want to report a bug using my GitHub account"
// issues url; in the most cases do not touch it
// available tags are $PROJECT, $OWNER
#define ISSUES_URL "https://api.github.com/repos/$OWNER/$PROJECT/issues"
/*
* Configuration of creating an issue using GitHub API and own token
*
* This module will be used instead of GitReport module.
* To create a token please visit https://github.com/settings/applications
* and generate new one. Needed scopes are public_repo
* (or repo if you will use it for a private repository).
* Please keep in mind that passing the token in the clear,
* you may discredit your account.
*/
/*
* Configuration of creating an issue using GitReports
*
* Please, visit https://gitreports.com/
* and set up it for your repository.
*/
// combobox text
#define GITREPORT_COMBOBOX "GitHub? I don't understand what do you want from me!"
// public link; in the most cases do not touch it
// available tags are $PROJECT, $OWNER
#define PUBLIC_URL "https://gitreports.com/issue/$OWNER/$PROJECT"
// captcha url; in the most cases do not touch it
#define CAPTCHA_URL "https://gitreports.com/simple_captcha?code="
#endif /* CONFIG_H */

View File

@ -0,0 +1,73 @@
cmake_minimum_required (VERSION 2.8)
cmake_policy (SET CMP0003 OLD)
cmake_policy (SET CMP0002 OLD)
cmake_policy (SET CMP0011 NEW)
cmake_policy (SET CMP0015 NEW)
cmake_policy (SET CMP0048 OLD)
project (reportabug)
set (SUBPROJECT reportabug)
set (SUBPROJECT_AUTHOR "Evgeniy Alekseev")
set (SUBPROJECT_CONTACT "esalexeev@gmail.com")
set (SUBPROJECT_LICENSE "LGPLv3")
set (SUBPROJECT_VERSION_MAJOR 1)
set (SUBPROJECT_VERSION_MINOR 0)
set (SUBPROJECT_VERSION_PATCH 2)
set (SUBPROJECT_VERSION ${SUBPROJECT_VERSION_MAJOR}.${SUBPROJECT_VERSION_MINOR}.${SUBPROJECT_VERSION_PATCH})
string (TIMESTAMP CURRENT_DATE "%Y-%m-%d %H:%M" UTC)
string (TIMESTAMP CURRENT_YEAR "%Y")
message (STATUS "Subproject: ${SUBPROJECT}")
message (STATUS "Version: ${SUBPROJECT_VERSION}")
message (STATUS "Build date: ${CURRENT_DATE}")
# install options
set (BUILD_AS_LIBRARY ON CACHE BOOL "Build the application as a shared library")
set (BUILD_DOCS OFF CACHE BOOL "Build developers documentation")
set (ENABLE_GITHUB ON CACHE BOOL "Enable GitHub module")
set (ENABLE_GITREPORT ON CACHE BOOL "Enable GitReport module")
set (USE_QT5 ON CACHE BOOL "Use Qt5 instead of Qt4")
set (OWN_GITHUB_TOKEN "" CACHE STRING "Use own GitHub token instead of GitReport")
# set flags
if (OWN_GITHUB_TOKEN STREQUAL "")
set (USE_OWN_TOKEN OFF)
else ()
set (USE_OWN_TOKEN ON)
endif ()
if (USE_OWN_TOKEN)
set (ENABLE_GITREPORT OFF)
endif ()
# flags
if (CMAKE_COMPILER_IS_GNUCXX)
set (ADD_CXX_FLAGS "-Wall")
set (CMAKE_CXX_FLAGS "-O0 ${ADD_CXX_FLAGS}")
set (CMAKE_CXX_FLAGS_DEBUG "-g -O0")
set (CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
else ()
message (STATUS "Unknown compiler")
endif ()
configure_file (${CMAKE_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)
# build
# set directories
set (SUBPROJECT_BINARY_DIR bin)
set (SUBPROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
# executable path
set (EXECUTABLE_OUTPUT_PATH ${SUBPROJECT_BINARY_DIR})
# additional targets
set (TARGETS "")
set (HEADERS "")
add_subdirectory (${SUBPROJECT_SOURCE_DIR})
if (BUILD_DOCS)
include (docs.cmake)
endif ()
if (NOT BUILD_AS_LIBRARY)
install (FILES ${SUBPROJECT}.desktop DESTINATION share/applications/)
endif ()

View File

@ -0,0 +1,21 @@
# include files
install (FILES ${HEADERS} DESTINATION include/${SUBPROJECT})
# doxygen documentation
find_package (Doxygen)
if (NOT DOXYGEN_FOUND)
message (STATUS "WARNING: Doxygen not found - Reference manual will not be created")
return ()
endif ()
configure_file (doxygen.conf.in ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf)
add_custom_target (oxygen-docs ALL COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf)
# man pages
# workaround for man pages
set (MAN_DIR ${CMAKE_CURRENT_BINARY_DIR}/docs/man/man3)
install (FILES ${MAN_DIR}/Reportabug.3 DESTINATION share/man/man3 RENAME ${SUBPROJECT}_Reportabug.3)
install (FILES ${MAN_DIR}/GithubModule.3 DESTINATION share/man/man3 RENAME ${SUBPROJECT}_GithubModule.3)
install (FILES ${MAN_DIR}/GitreportModule.3 DESTINATION share/man/man3 RENAME ${SUBPROJECT}_GitreportModule.3)
# html docs
install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/docs/html DESTINATION share/doc/${SUBPROJECT})

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,10 @@
#!/usr/bin/env xdg-open
[Desktop Entry]
Name=Report a bug
Comment=A simple Qt application which allows users to create an issue for GitHub projects
Exec=reportabug
Icon=tools-report-bug
Terminal=false
Encoding=UTF-8
Type=Application
Categories=system

View File

@ -0,0 +1 @@
src/reportabug.h

View File

@ -0,0 +1,66 @@
# set files
set (SOURCES ${SUBPROJECT_SOURCE_DIR}/main.cpp ${SUBPROJECT_SOURCE_DIR}/reportabug.cpp)
set (HEADERS ${SUBPROJECT_SOURCE_DIR}/reportabug.h ${SUBPROJECT_SOURCE_DIR}/config.h)
set (FORMS ${SUBPROJECT_SOURCE_DIR}/reportabug.ui)
if (ENABLE_GITHUB OR USE_OWN_TOKEN)
set (SOURCES ${SOURCES} ${SUBPROJECT_SOURCE_DIR}/githubmodule.cpp)
set (HEADERS ${HEADERS} ${SUBPROJECT_SOURCE_DIR}/githubmodule.h)
endif ()
if (ENABLE_GITREPORT)
set (SOURCES ${SOURCES} ${SUBPROJECT_SOURCE_DIR}/gitreportmodule.cpp)
set (HEADERS ${HEADERS} ${SUBPROJECT_SOURCE_DIR}/gitreportmodule.h)
endif ()
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/inconfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/inconfig.h)
# include_path
include_directories (${CMAKE_CURRENT_BINARY_DIR}/../
${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_BINARY_DIR})
if (USE_QT5)
find_package (Qt5Core REQUIRED)
find_package (Qt5Widgets REQUIRED)
find_package (Qt5Network REQUIRED)
add_definitions (${Qt5Core_DEFINITIONS})
add_definitions (${Qt5Widgets_DEFINITIONS})
add_definitions (${Qt5Network_DEFINITIONS})
include_directories (${Qt5Core_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS})
set (QT_USED_LIBRARIES ${Qt5Core_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES})
if (ENABLE_GITREPORT)
find_package (Qt5WebKit REQUIRED)
find_package (Qt5WebKitWidgets REQUIRED)
add_definitions (${Qt5WebKit_DEFINITIONS})
add_definitions (${Qt5WebKitWidgets_DEFINITIONS})
include_directories (${Qt5WebKit_INCLUDE_DIRS} ${Qt5WebKitWidgets_INCLUDE_DIRS})
set (QT_USED_LIBRARIES ${QT_USED_LIBRARIES} ${Qt5WebKit_LIBRARIES} ${Qt5WebKitWidgets_LIBRARIES})
endif ()
qt5_wrap_cpp (MOC_SOURCES ${HEADERS})
qt5_wrap_ui (UI_HEADERS ${FORMS})
else ()
set (QT_USED_COMPONENTS QtCore QtGui QtNetwork)
if (ENABLE_GITREPORT)
set (QT_USED_COMPONENTS ${QT_USED_COMPONENTS} QtWebKit)
endif ()
find_package(Qt4 COMPONENTS ${QT_USED_COMPONENTS} REQUIRED)
include (${QT_USE_FILE})
set (QT_USED_LIBRARIES ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY})
if (ENABLE_GITREPORT)
set (QT_USED_LIBRARIES ${QT_USED_LIBRARIES} ${QT_QTWEBKIT_LIBRARY})
endif ()
qt4_wrap_cpp (MOC_SOURCES ${HEADERS})
qt4_wrap_ui (UI_HEADERS ${FORMS})
endif()
if (BUILD_AS_LIBRARY)
add_library (${SUBPROJECT} SHARED ${SOURCES} ${HEADERS} ${MOC_SOURCES} ${UI_HEADERS})
else ()
add_executable (${SUBPROJECT} ${UI_HEADERS} ${HEADERS} ${SOURCES} ${MOC_SOURCES})
endif ()
target_link_libraries (${SUBPROJECT} ${QT_USED_LIBRARIES})
# install properties
if (BUILD_AS_LIBRARY)
install (TARGETS ${SUBPROJECT} DESTINATION lib)
else ()
install (TARGETS ${SUBPROJECT} DESTINATION bin)
endif ()

View File

@ -0,0 +1,76 @@
/***************************************************************************
* This file is part of reportabug *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 3.0 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. *
***************************************************************************/
#ifndef CONFIG_H
#define CONFIG_H
#include <inconfig.h>
/*
* Main configuration
*/
// the owner of the source repository
#define OWNER "arcan1s"
// project name
#define PROJECT "netctl-gui"
// tags defaults
#define TAG_TITLE "A new bug"
#define TAG_BODY "Some error occurs"
// the following tags will work only if user has push access
// if they will be empty, they will be ignored
#define TAG_ASSIGNEE "$OWNER"
#define TAG_MILESTONE ""
// comma separated
#define TAG_LABELS ""
/*
* Configuration of creating an issue using GitHub API
*/
// combobox text
#define GITHUB_COMBOBOX "I want to report a bug using my GitHub account"
// issues url; in the most cases do not touch it
// available tags are $PROJECT, $OWNER
#define ISSUES_URL "https://api.github.com/repos/$OWNER/$PROJECT/issues"
/*
* Configuration of creating an issue using GitHub API and own token
*
* This module will be used instead of GitReport module.
* To create a token please visit https://github.com/settings/applications
* and generate new one. Needed scopes are public_repo
* (or repo if you will use it for a private repository).
* Please keep in mind that passing the token in the clear,
* you may discredit your account.
*/
/*
* Configuration of creating an issue using GitReports
*
* Please, visit https://gitreports.com/
* and set up it for your repository.
*/
// combobox text
#define GITREPORT_COMBOBOX "GitHub? I don't understand what do you want from me!"
// public link; in the most cases do not touch it
// available tags are $PROJECT, $OWNER
#define PUBLIC_URL "https://gitreports.com/issue/$OWNER/$PROJECT"
// captcha url; in the most cases do not touch it
#define CAPTCHA_URL "https://gitreports.com/simple_captcha?code="
#endif /* CONFIG_H */

View File

@ -0,0 +1,215 @@
/***************************************************************************
* This file is part of reportabug *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 3.0 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. *
***************************************************************************/
/**
* @file githubmodule.cpp
* Source code of reportabug
* @author Evgeniy Alekseev
* @copyright LGPLv3
* @bug https://github.com/arcan1s/reportabug/issues
*/
#include "githubmodule.h"
#include "reportabug.h"
#include <QApplication>
#include <QDebug>
#include <QGridLayout>
#include <QMessageBox>
#include <QPushButton>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QUrl>
#include "config.h"
/**
* @class GithubModule
*/
/**
* @fn GithubModule
*/
GithubModule::GithubModule(QWidget *parent, bool debugCmd)
: QObject(parent),
debug(debugCmd),
mainWindow((Reportabug *)parent)
{
}
/**
* @fn ~GithubModule
*/
GithubModule::~GithubModule()
{
if (debug) qDebug() << "[GithubModule]" << "[~GithubModule]";
}
/**
* @fn prepareRequest
*/
QByteArray GithubModule::prepareRequest(const QString title, const QString body)
{
if (debug) qDebug() << "[GithubModule]" << "[prepareRequest]";
if (debug) qDebug() << "[GithubModule]" << "[prepareRequest]" << ":" << "Title" << title;
if (debug) qDebug() << "[GithubModule]" << "[prepareRequest]" << ":" << "Title" << body;
QStringList requestList;
requestList.append(QString("\"title\":\"") + title + QString("\""));
QString fixBody = body;
fixBody.replace(QString("\n"), QString("<br>"));
requestList.append(QString("\"body\":\"") + fixBody + QString("\""));
if (!QString(TAG_ASSIGNEE).isEmpty())
requestList.append(QString("\"assignee\":\"") + parseString(QString(TAG_ASSIGNEE)) + QString("\""));
if (!QString(TAG_MILESTONE).isEmpty())
requestList.append(QString("\"milestone\":") + QString(TAG_MILESTONE));
if (!QString(TAG_LABELS).isEmpty()) {
QStringList labels = QString(TAG_LABELS).split(QChar(','));
for (int i=0; i<labels.count(); i++)
labels[i] = QString("\"") + labels[i] + QString("\"");
requestList.append(QString("\"labels\":[") + labels.join(QChar(',')) + QString("]"));
}
QString request;
request += QString("{");
request += requestList.join(QChar(','));
request += QString("}");
return request.toLocal8Bit();
}
/**
* @fn parseString
*/
QString GithubModule::parseString(QString line)
{
if (debug) qDebug() << "[GithubModule]" << "[parseString]";
if (debug) qDebug() << "[GithubModule]" << "[parseString]" << ":" << "Parse line" << line;
if (line.contains(QString("$OWNER")))
line = line.split(QString("$OWNER"))[0] +
QString(OWNER) +
line.split(QString("$OWNER"))[1];
if (line.contains(QString("$PROJECT")))
line = line.split(QString("$PROJECT"))[0] +
QString(PROJECT) +
line.split(QString("$PROJECT"))[1];
return line;
}
/**
* @fn sendReportUsingGithub
*/
void GithubModule::sendReportUsingGithub(const QMap<QString, QString> info)
{
if (debug) qDebug() << "[GithubModule]" << "[sendReportUsingGithub]";
// authentication
QString headerData;
if (info.contains(QString("userdata")))
headerData = QString("token ") + info[QString("userdata")];
else {
QString concatenated = info[QString("username")] + QString(":") + info[QString("password")];
QByteArray userData = concatenated.toLocal8Bit().toBase64();
headerData = QString("Basic ") + userData;
}
// text
QByteArray text = prepareRequest(info[QString("title")], info[QString("body")]);
QByteArray textSize = QByteArray::number(text.size());
// sending request
QNetworkRequest request = QNetworkRequest(parseString(QString(ISSUES_URL)));
request.setRawHeader("Authorization", headerData.toLocal8Bit());
request.setRawHeader("User-Agent", "reportabug");
request.setRawHeader("Host", "api.github.com");
request.setRawHeader("Accept", "*/*");
request.setRawHeader("Content-Type", "application/vnd.github.VERSION.raw+json");
request.setRawHeader("Content-Length", textSize);
QNetworkAccessManager *manager = new QNetworkAccessManager;
manager->post(request, text);
disconnect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(githubFinished(QNetworkReply *)));
connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(githubFinished(QNetworkReply *)));
}
/**
* @fn githubFinished
*/
void GithubModule::githubFinished(QNetworkReply *reply)
{
if (debug) qDebug() << "[GithubModule]" << "[githubFinished]";
if (debug) qDebug() << "[GithubModule]" << "[githubFinished]" << ":" << "Error state" << reply->error();
if (debug) qDebug() << "[GithubModule]" << "[githubFinished]" << ":" << "Reply size" << reply->readBufferSize();
bool state = true;
QString answer = reply->readAll();
if (debug) qDebug() << "[GithubModule]" << "[replyFinished]" << ":" << answer;
QString messageBody, messageTitle;
QMessageBox::Icon icon = QMessageBox::NoIcon;
if (answer.contains(QString("\"html_url\":"))) {
QString url;
for (int i=0; i<answer.split(QChar(',')).count(); i++)
if (answer.split(QChar(','))[i].split(QChar(':'))[0] == QString("\"html_url\"")) {
url = answer.split(QChar(','))[i].split(QString("\"html_url\":"))[1].remove(QChar('"'));
break;
}
messageBody += QString("%1\n").arg(QApplication::translate("Reportabug", "Message has been sended"));
messageBody += QString("Url: %2").arg(url);
messageTitle = QApplication::translate("Reportabug", "Done!");
icon = QMessageBox::Information;
state = true;
}
else if (answer.contains(QString("\"Bad credentials\""))) {
messageBody += QApplication::translate("Reportabug", "Incorrect username or password");
messageTitle = QApplication::translate("Reportabug", "Error!");
icon = QMessageBox::Critical;
state = false;
}
else {
messageBody += QApplication::translate("Reportabug", "An error occurs");
messageTitle = QApplication::translate("Reportabug", "Error!");
icon = QMessageBox::Critical;
state = false;
}
reply->deleteLater();
QMessageBox messageBox;
messageBox.setText(messageTitle);
messageBox.setInformativeText(messageBody);
messageBox.setIcon(icon);
messageBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Retry);
messageBox.setDefaultButton(QMessageBox::Ok);
QSpacerItem *horizontalSpacer = new QSpacerItem(400, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
QGridLayout *layout = (QGridLayout *)messageBox.layout();
layout->addItem(horizontalSpacer, layout->rowCount(), 0, 1, layout->columnCount());
int ret = messageBox.exec();
switch (ret) {
case QMessageBox::Ok:
if (state) mainWindow->close();
break;
case QMessageBox::Retry:
if (state) mainWindow->externalUpdateTab();
break;
default:
break;
}
}

View File

@ -0,0 +1,114 @@
/***************************************************************************
* This file is part of reportabug *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 3.0 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. *
***************************************************************************/
/**
* @file githubmodule.h
* Source code of reportabug
* @author Evgeniy Alekseev
* @copyright LGPLv3
* @bug https://github.com/arcan1s/reportabug/issues
*/
#ifndef GITHUBMODULE_H
#define GITHUBMODULE_H
#include <QMap>
#include <QObject>
class Reportabug;
class QNetworkReply;
/**
* @brief The GithubModule class creates issue over GitHub.
* @details The GitHub API is used for creating issue. Please visit
* [the API page](https://developer.github.com/v3/issues/) for more details.
* This module requires an users authentication. The typical POST request is:
* @code
* curl -X POST -u user:pass -d '{"title":"A new bug","body":"Some error occurs"}' \
* https://api.github.com/repos/owner/repo/issues
* @endcode
*
* The module also may send request using given token. In this case request is:
* @code
* curl -X POST -H "Authorization: token token" -d '{"title":"A new bug","body":"Some error occurs"}' \
* https://api.github.com/repos/owner/repo/issues
* @endcode
*
* This module depends on QtNetwork module.
*/
class GithubModule : public QObject
{
Q_OBJECT
public:
/**
* @brief GithubModule class constructor
* @param parent parent object
* @param debugCmd show debug messages
*/
explicit GithubModule(QWidget *parent = 0,
bool debugCmd = false);
/**
* @brief GithubModule class destructor
*/
~GithubModule();
public slots:
/**
* @brief method which creates an issue
* @param info issue details. Needed keys are:
* body (body of an issue),
* password (GitHub password),
* title (title of an issue),
* userdata (given GitHub token, it is optional key),
* username (GitHub user name),
*/
void sendReportUsingGithub(const QMap<QString, QString> info);
private slots:
/**
* @brief method which will be called after sending POST request
* @param reply reply of the request
*/
void githubFinished(QNetworkReply *reply);
private:
/**
* @brief show debug messages
*/
bool debug;
/**
* @brief Reportabug class
*/
Reportabug *mainWindow;
/**
* @brief method which parses string and replace known tags
* @param line source line
* @return replaced line
*/
QString parseString(QString line);
/**
* @brief method which prepares raw issue details for sending request
* @param title title of an issue
* @param body body of an issue
* @return JSON string
*/
QByteArray prepareRequest(const QString title, const QString body);
};
#endif /* GITHUBMODULE_H */

View File

@ -0,0 +1,189 @@
/***************************************************************************
* This file is part of reportabug *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 3.0 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. *
***************************************************************************/
/**
* @file gitreportmodule.cpp
* Source code of reportabug
* @author Evgeniy Alekseev
* @copyright LGPLv3
* @bug https://github.com/arcan1s/reportabug/issues
*/
#include "gitreportmodule.h"
#include "reportabug.h"
#include <QApplication>
#include <QDebug>
#include <QGridLayout>
#include <QMessageBox>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QPushButton>
#include <QUrl>
#include <QWebElement>
#include <QWebFrame>
#include "config.h"
/**
* @class GitreportModule
*/
/**
* @fn GitreportModule
*/
GitreportModule::GitreportModule(QWidget *parent, bool debugCmd)
: QObject(parent),
debug(debugCmd),
mainWindow((Reportabug *)parent)
{
webView = new QWebView();
}
/**
* @fn ~GitreportModule
*/
GitreportModule::~GitreportModule()
{
if (debug) qDebug() << "[GitreportModule]" << "[~GitreportModule]";
delete webView;
}
/**
* @fn sendReportUsingGitreport
*/
void GitreportModule::sendReportUsingGitreport(const QMap<QString, QString> info)
{
if (debug) qDebug() << "[GitreportModule]" << "[sendReportUsingGitreport]";
QWebElement document = webView->page()->mainFrame()->documentElement();
QWebElement captchaKey = document.findFirst(QString("input#captcha"));
QWebElement emailInput = document.findFirst(QString("input#email"));
QWebElement textArea = document.findFirst(QString("textarea#details"));
QWebElement usernameInput = document.findFirst(QString("input#name"));
// input
usernameInput.setAttribute(QString("value"), info[QString("username")]);
emailInput.setAttribute(QString("value"), info[QString("password")]);
textArea.setPlainText(info[QString("body")]);
captchaKey.setAttribute(QString("value"), info[QString("captcha")]);
// send request
document.findFirst(QString("input[name=commit]")).evaluateJavaScript("this.click()");
disconnect(webView, SIGNAL(loadFinished(bool)), this, SLOT(gitreportLoaded(bool)));
disconnect(webView, SIGNAL(loadFinished(bool)), this, SLOT(gitreportFinished(bool)));
connect(webView, SIGNAL(loadFinished(bool)), this, SLOT(gitreportFinished(bool)));
}
/**
* @fn gitreportLoaded
*/
void GitreportModule::gitreportLoaded(const bool state)
{
if (debug) qDebug() << "[GitreportModule]" << "[gitreportLoaded]";
if (debug) qDebug() << "[GitreportModule]" << "[gitreportLoaded]" << ":" << "State" << state;
if (state) {
webView->setHidden(!debug);
// captcha
QWebElement document = webView->page()->mainFrame()->documentElement();
QWebElement captchaImg = document.findFirst(QString("input#captcha_key"));
QString captchaUrl = QString(CAPTCHA_URL) + captchaImg.attribute(QString("value"));
QNetworkRequest request(captchaUrl);
manager.get(request);
disconnect(&manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(setCaptcha(QNetworkReply *)));
connect(&manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(setCaptcha(QNetworkReply *)));
}
else {
QMessageBox messageBox;
messageBox.setText(QApplication::translate("Reportabug", "Error!"));
messageBox.setInformativeText(QApplication::translate("Reportabug", "An error occurs"));
messageBox.setIcon(QMessageBox::Critical);
messageBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Retry);
messageBox.setDefaultButton(QMessageBox::Ok);
QSpacerItem *horizontalSpacer = new QSpacerItem(400, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
QGridLayout *layout = (QGridLayout *)messageBox.layout();
layout->addItem(horizontalSpacer, layout->rowCount(), 0, 1, layout->columnCount());
messageBox.exec();
}
}
/**
* @fn gitreportFinished
*/
void GitreportModule::gitreportFinished(const bool state)
{
if (debug) qDebug() << "[GitreportModule]" << "[gitreportFinished]";
if (debug) qDebug() << "[GitreportModule]" << "[gitreportFinished]" << ":" << "State" << state;
QString messageBody, messageTitle;
QMessageBox::Icon icon = QMessageBox::NoIcon;
if (state) {
messageBody += QApplication::translate("Reportabug", "Message has been sended");
messageTitle = QApplication::translate("Reportabug", "Done!");
icon = QMessageBox::Information;
}
else {
messageBody += QApplication::translate("Reportabug", "An error occurs");
messageTitle = QApplication::translate("Reportabug", "Error!");
icon = QMessageBox::Critical;
}
QMessageBox messageBox;
messageBox.setText(messageTitle);
messageBox.setInformativeText(messageBody);
messageBox.setIcon(icon);
messageBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Retry);
messageBox.setDefaultButton(QMessageBox::Ok);
QSpacerItem *horizontalSpacer = new QSpacerItem(400, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
QGridLayout *layout = (QGridLayout *)messageBox.layout();
layout->addItem(horizontalSpacer, layout->rowCount(), 0, 1, layout->columnCount());
int ret = messageBox.exec();
switch (ret) {
case QMessageBox::Ok:
if (state) mainWindow->close();
break;
case QMessageBox::Retry:
if (state) mainWindow->externalUpdateTab();
break;
default:
break;
}
}
/**
* @fn setCaptcha
*/
void GitreportModule::setCaptcha(QNetworkReply *reply)
{
if (debug) qDebug() << "[setCaptcha]" << "[setCaptcha]";
if (debug) qDebug() << "[setCaptcha]" << "[setCaptcha]" << ":" << "Error state" << reply->error();
if (debug) qDebug() << "[setCaptcha]" << "[setCaptcha]" << ":" << "Reply size" << reply->readBufferSize();
QByteArray answer = reply->readAll();
QPixmap captcha;
captcha.loadFromData(answer);
mainWindow->setCaptchaImage(captcha);
reply->deleteLater();
}

View File

@ -0,0 +1,107 @@
/***************************************************************************
* This file is part of reportabug *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 3.0 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. *
***************************************************************************/
/**
* @file gitreportmodule.h
* Source code of reportabug
* @author Evgeniy Alekseev
* @copyright LGPLv3
* @bug https://github.com/arcan1s/reportabug/issues
*/
#ifndef GITREPORTMODULE_H
#define GITREPORTMODULE_H
#include <QMap>
#include <QObject>
#include <QWebView>
class QNetworkAccessManager;
class Reportabug;
/**
* @brief The GitreportModule class creates issue over GitReports
* @details This module uses [GitReport](https://gitreports.com/about) for
* creating an issue. Please visit [this page](https://gitreports.com/)
* and set up it for your repository.
*
* This module depends on QtWebKit and QtNetwork modules.
*/
class GitreportModule : public QObject
{
Q_OBJECT
public:
/**
* @brief GitreportModule class constructor
* @param parent parent object
* @param debugCmd show debug messages
*/
explicit GitreportModule(QWidget *parent = 0,
bool debugCmd = false);
/**
* @brief GitreportModule class destructor
*/
~GitreportModule();
/**
* @brief Webkit item which is used for loading web page
*/
QWebView *webView;
public slots:
/**
* @brief method which creates an issue
* @param info issue details. Needed keys are:
* body (body of an issue)
* password (user email),
* username (user name),
*/
void sendReportUsingGitreport(const QMap<QString, QString> info);
private slots:
/**
* @brief method which will be called after sending request
* @param bool state of web page loading
*/
void gitreportFinished(const bool state);
/**
* @brief method which will be called after loading of web page
* @param bool state of web page loading
*/
void gitreportLoaded(const bool state);
/**
* @brief method which will be called after loading captcha image
* @param reply reply of the request
*/
void setCaptcha(QNetworkReply *reply);
private:
/**
* @brief show debug messages
*/
bool debug;
/**
* @brief Reportabug class
*/
Reportabug *mainWindow;
/**
* @brief manager for getting captcha
*/
QNetworkAccessManager manager;
};
#endif /* GITREPORTMODULE_H */

View File

@ -0,0 +1,35 @@
/***************************************************************************
* This file is part of reportabug *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 3.0 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. *
***************************************************************************/
#ifndef INCONFIG_H
#define INCONFIG_H
// DO NOT EDIT THIS FILE
/*
* Main configuration
*/
// modules. Please use -DENABLE_GITHUB= and -DENABLE_GITREPORT= cmake flags
#cmakedefine ENABLE_GITHUB
#cmakedefine ENABLE_GITREPORT
// please use -DOWN_GITHUB_TOKEN= cmake flag to define it
// if it is empty, it will be ignored
#cmakedefine OWN_GITHUB_TOKEN "@OWN_GITHUB_TOKEN@"
#endif /* INCONFIG_H */

View File

@ -0,0 +1,44 @@
/***************************************************************************
* This file is part of reportabug *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 3.0 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. *
***************************************************************************/
/**
* @file main.cpp
* Source code of reportabug
* @author Evgeniy Alekseev
* @copyright LGPLv3
* @bug https://github.com/arcan1s/reportabug/issues
*/
#include <QApplication>
#include "reportabug.h"
#include "version.h"
/**
* @fn main
*/
int main(int argc, char *argv[])
/**
* @return QApplication.exec()
*/
{
QApplication a(argc, argv);
Reportabug w(0, true);
w.showWindow();
return a.exec();
}

View File

@ -0,0 +1,327 @@
/***************************************************************************
* This file is part of reportabug *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 3.0 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. *
***************************************************************************/
/**
* @file reportabug.cpp
* Source code of reportabug
* @author Evgeniy Alekseev
* @copyright LGPLv3
* @bug https://github.com/arcan1s/reportabug/issues
*/
#include "reportabug.h"
#include "ui_reportabug.h"
#include <QDebug>
#include <QPushButton>
#include "config.h"
#if defined(ENABLE_GITHUB) || defined(OWN_GITHUB_TOKEN)
#include "githubmodule.h"
#endif /* defined(ENABLE_GITHUB) || defined(OWN_GITHUB_TOKEN) */
#ifdef ENABLE_GITREPORT
#include "gitreportmodule.h"
#endif /* ENABLE_GITREPORT */
#include "version.h"
/**
* @class Reportabug
*/
/**
* @fn Reportabug
*/
Reportabug::Reportabug(QWidget *parent, bool debugCmd)
: QMainWindow(parent),
debug(debugCmd),
ui(new Ui::Reportabug)
{
ui->setupUi(this);
initModules();
createComboBox();
createActions();
}
/**
* @fn ~Reportabug
*/
Reportabug::~Reportabug()
{
if (debug) qDebug() << "[Reportabug]" << "[~Reportabug]";
#if defined(ENABLE_GITHUB) || defined(OWN_GITHUB_TOKEN)
delete github;
#endif /* defined(ENABLE_GITHUB) || defined(OWN_GITHUB_TOKEN) */
#ifdef ENABLE_GITREPORT
delete gitreport;
#endif /* ENABLE_GITREPORT */
delete ui;
}
/**
* @fn externalUpdateTab
*/
void Reportabug::externalUpdateTab()
{
if (debug) qDebug() << "[Reportabug]" << "[externalUpdateTab]";
return updateTabs(ui->comboBox->currentIndex());
}
/**
* @fn setCaptchaImage
*/
void Reportabug::setCaptchaImage(QPixmap captcha)
{
if (debug) qDebug() << "[Reportabug]" << "[setCaptchaImage]";
ui->label_captcha->setPixmap(captcha);
}
/**
* @fn createActions
*/
void Reportabug::createActions()
{
if (debug) qDebug() << "[Reportabug]" << "[createActions]";
connect(ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateTabs(int)));
connect(ui->buttonBox->button(QDialogButtonBox::Close), SIGNAL(clicked(bool)), this, SLOT(close()));
connect(ui->buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked(bool)), this, SLOT(sendReport()));
}
/**
* @fn createComboBox
*/
void Reportabug::createComboBox()
{
if (debug) qDebug() << "[Reportabug]" << "[createComboBox]";
ui->comboBox->clear();
if (modules[0])
ui->comboBox->addItem(GITHUB_COMBOBOX);
if (modules[1] || modules[2])
ui->comboBox->addItem(GITREPORT_COMBOBOX);
}
/**
* @fn getNumberByIndex
*/
int Reportabug::getNumberByIndex(const int index)
{
if (debug) qDebug() << "[Reportabug]" << "[getNumberByIndex]";
if (debug) qDebug() << "[Reportabug]" << "[getNumberByIndex]" << ":" << "Index" << index;
if ((modules[0]) && (modules[1])) {
if (index == 0)
return 0;
else if (index == 1)
return 1;
}
else if ((modules[0]) && (modules[2])) {
if (index == 0)
return 0;
else if (index == 1)
return 2;
}
else if ((modules[1]) && (modules[2]))
// wtf??
return -1;
else if (modules[0])
return 0;
else if (modules[1])
return 1;
else if (modules[2])
return 2;
return -1;
}
/**
* @fn initModules
*/
void Reportabug::initModules()
{
if (debug) qDebug() << "[Reportabug]" << "[initModules]";
modules[0] = false;
modules[1] = false;
modules[2] = false;
#if defined(ENABLE_GITHUB) || defined(OWN_GITHUB_TOKEN)
github = new GithubModule(this, debug);
#endif /* defined(ENABLE_GITHUB) || defined(OWN_GITHUB_TOKEN) */
#ifdef ENABLE_GITHUB
modules[0] = true;
#endif /* ENABLE_GITHUB */
#ifdef ENABLE_GITREPORT
modules[1] = true;
gitreport = new GitreportModule(this, debug);
// 4 is a magic number. Seriously
ui->verticalLayout->insertWidget(5, gitreport->webView);
#endif /* ENABLE_GITREPORT */
#ifdef OWN_GITHUB_TOKEN
modules[2] = true;
#endif /* OWN_GITHUB_TOKEN */
}
/**
* @fn keyPressEvent
*/
void Reportabug::keyPressEvent(QKeyEvent *pressedKey)
{
if (debug) qDebug() << "[Reportabug]" << "[keyPressEvent]";
if (pressedKey->key() == Qt::Key_Escape)
close();
}
/**
* @fn parseString
*/
QString Reportabug::parseString(QString line)
{
if (debug) qDebug() << "[Reportabug]" << "[parseString]";
if (debug) qDebug() << "[Reportabug]" << "[parseString]" << ":" << "Parse line" << line;
if (line.contains(QString("$OWNER")))
line = line.split(QString("$OWNER"))[0] +
QString(OWNER) +
line.split(QString("$OWNER"))[1];
if (line.contains(QString("$PROJECT")))
line = line.split(QString("$PROJECT"))[0] +
QString(PROJECT) +
line.split(QString("$PROJECT"))[1];
return line;
}
/**
* @fn sendReport
*/
void Reportabug::sendReport()
{
if (debug) qDebug() << "[Reportabug]" << "[sendReport]";
int number = getNumberByIndex(ui->comboBox->currentIndex());
QMap<QString, QString> info;
info[QString("body")] = ui->textEdit->toPlainText();
info[QString("captcha")] = ui->lineEdit_captcha->text();
info[QString("password")] = ui->lineEdit_password->text();
info[QString("title")] = ui->lineEdit_title->text();
info[QString("username")] = ui->lineEdit_username->text();
if (number == -1)
return;
#ifdef ENABLE_GITHUB
else if (number == 0)
github->sendReportUsingGithub(info);
#endif /* ENABLE_GITHUB */
#ifdef ENABLE_GITREPORT
else if (number == 1)
gitreport->sendReportUsingGitreport(info);
#endif /* ENABLE_GITREPORT */
#ifdef OWN_GITHUB_TOKEN
else if (number == 2) {
info[QString("userdata")] = QString(OWN_GITHUB_TOKEN);
github->sendReportUsingGithub(info);
}
#endif /* OWN_GITHUB_TOKEN */
}
/**
* @fn showWindow
*/
void Reportabug::showWindow()
{
externalUpdateTab();
show();
}
/**
* @fn updateTabs
*/
void Reportabug::updateTabs(const int index)
{
if (debug) qDebug() << "[Reportabug]" << "[updateTabs]";
if (debug) qDebug() << "[Reportabug]" << "[updateTabs]" << ":" << "Index" << index;
int number = getNumberByIndex(index);
ui->lineEdit_username->clear();
ui->lineEdit_password->clear();
ui->lineEdit_title->setText(QString(TAG_TITLE));
ui->textEdit->setPlainText(QString(TAG_BODY));
ui->lineEdit_captcha->clear();
// it is out of conditional because I don't want a lot of ifdef/endif
#ifdef ENABLE_GITREPORT
gitreport->webView->setHidden(true);
#endif /* ENABLE_GITREPORT */
if (number == -1) {
ui->widget_auth->setHidden(true);
ui->widget_title->setHidden(true);
ui->textEdit->setHidden(true);
ui->widget_captcha->setHidden(true);
}
#ifdef ENABLE_GITHUB
else if (number == 0) {
ui->widget_auth->setHidden(false);
ui->widget_title->setHidden(false);
ui->textEdit->setHidden(false);
ui->widget_captcha->setHidden(true);
ui->label_password->setText(QApplication::translate("Reportabug", "Password"));
ui->label_password->setToolTip(QApplication::translate("Reportabug", "GitHub account password"));
ui->lineEdit_password->setPlaceholderText(QApplication::translate("Reportabug", "password"));
ui->lineEdit_password->setEchoMode(QLineEdit::Password);
}
#endif /* ENABLE_GITHUB */
#ifdef ENABLE_GITREPORT
else if (number == 1) {
ui->widget_auth->setHidden(false);
ui->widget_title->setHidden(true);
ui->textEdit->setHidden(false);
ui->widget_captcha->setHidden(false);
ui->label_password->setText(QApplication::translate("Reportabug", "Email"));
ui->label_password->setToolTip(QApplication::translate("Reportabug", "Your email"));
ui->lineEdit_password->setPlaceholderText(QApplication::translate("Reportabug", "email"));
ui->lineEdit_password->setEchoMode(QLineEdit::Normal);
gitreport->webView->load(QUrl(parseString(QString(PUBLIC_URL))));
disconnect(gitreport->webView, SIGNAL(loadFinished(bool)), gitreport, SLOT(gitreportLoaded(bool)));
disconnect(gitreport->webView, SIGNAL(loadFinished(bool)), gitreport, SLOT(gitreportFinished(bool)));
connect(gitreport->webView, SIGNAL(loadFinished(bool)), gitreport, SLOT(gitreportLoaded(bool)));
}
#endif /* ENABLE_GITREPORT */
#ifdef OWN_GITHUB_TOKEN
else if (number == 2) {
ui->widget_auth->setHidden(true);
ui->widget_title->setHidden(false);
ui->textEdit->setHidden(false);
}
#endif /* OWN_GITHUB_TOKEN */
}

View File

@ -0,0 +1,140 @@
/***************************************************************************
* This file is part of reportabug *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 3.0 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. *
***************************************************************************/
/**
* @file reportabug.h
* Source code of reportabug
* @author Evgeniy Alekseev
* @copyright LGPLv3
* @bug https://github.com/arcan1s/reportabug/issues
*/
#ifndef REPORTABUG_H
#define REPORTABUG_H
#include <QKeyEvent>
#include <QLocale>
#include <QMainWindow>
class GithubModule;
class GitreportModule;
namespace Ui {
class Reportabug;
}
/**
* @brief The Reportabug class is a main class of the application
*/
class Reportabug : public QMainWindow
{
Q_OBJECT
public:
/**
* @brief Reportabug class constructor
* @param parent parent object
* @param debugCmd show debug messages
*/
explicit Reportabug(QWidget *parent = 0,
bool debugCmd = false);
/**
* @brief Reportabug class destructor
*/
~Reportabug();
/**
* @brief method which is used for update tabs from external classes
*/
void externalUpdateTab();
/**
* @brief method which sets captcha image
* @param captcha captcha image
*/
void setCaptchaImage(QPixmap captcha);
public slots:
/**
* @brief method which creates an issue
*/
void sendReport();
/**
* @brief method which updates text and shows window
*/
void showWindow();
/**
* @brief method which updates text
* @param index the current combobox index
*/
void updateTabs(const int index);
private:
/**
* @brief show debug messages
*/
bool debug;
/**
* @brief contains information about enabled modules
*/
bool modules[3];
/**
* @brief class user interface
*/
Ui::Reportabug *ui;
// modules
/**
* @brief GitHub module
*/
GithubModule *github;
/**
* @brief GitReports module
*/
GitreportModule *gitreport;
/**
* @brief method which creates the window actions
*/
void createActions();
/**
* @brief method which adds a text into combobox
*/
void createComboBox();
/**
* @brief method which parses combobox content
* @param index the current combobox index
* @return -1 if there is no any selected modules
* @return 0 if the GitHub module is selected
* @return 1 if the GitReports module is selected
*/
int getNumberByIndex(const int index);
/**
* @brief method which initializates modules
*/
void initModules();
/**
* @brief method which monitors on pressed keys
* @param pressedKey the current pressed key
*/
void keyPressEvent(QKeyEvent *pressedKey);
/**
* @brief method which parses string and replace known tags
* @param line source line
* @return replaced line
*/
QString parseString(QString line);
};
#endif /* REPORTABUG_H */

View File

@ -0,0 +1,150 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Reportabug</class>
<widget class="QMainWindow" name="Reportabug">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>541</width>
<height>372</height>
</rect>
</property>
<property name="windowTitle">
<string>Report a bug</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QComboBox" name="comboBox"/>
</item>
<item>
<widget class="QWidget" name="widget_auth" native="true">
<layout class="QHBoxLayout" name="layout_auth">
<item>
<widget class="QLabel" name="label_username">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Username</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_username">
<property name="toolTip">
<string>Your GitHub account</string>
</property>
<property name="placeholderText">
<string>username</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_password">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Password</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_password">
<property name="toolTip">
<string>GitHub account password</string>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
<property name="placeholderText">
<string>password</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_title" native="true">
<layout class="QHBoxLayout" name="layout_title">
<item>
<widget class="QLabel" name="label_title">
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Title</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_title">
<property name="toolTip">
<string>Title of the report</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QTextEdit" name="textEdit">
<property name="toolTip">
<string>Text of the report</string>
</property>
<property name="acceptRichText">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_captcha" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_captcha">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_captcha">
<property name="placeholderText">
<string>captcha</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Close|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<action name="actionClose">
<property name="text">
<string>Close</string>
</property>
</action>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,26 @@
#ifndef VERSION_H
#define VERSION_H
#define NAME "Report a Bug"
#define VERSION "@SUBPROJECT_VERSION@"
#define AUTHOR "@SUBPROJECT_AUTHOR@"
#define EMAIL "@SUBPROJECT_CONTACT@"
#define LICENSE "@SUBPROJECT_LICENSE@"
#define HOMEPAGE "https://github.com/arcan1s/reportabug"
#define REPOSITORY "https://github.com/arcan1s/reportabug"
#define BUGTRACKER "https://github.com/arcan1s/reportabug/issues"
#define BUILD_DATE "@CURRENT_DATE@"
#define DATE "2014-@CURRENT_YEAR@"
#define CMAKE_BUILD_TYPE "@CMAKE_BUILD_TYPE@"
#define CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@"
#define SUBPROJECT_DOCS "@BUILD_DOCS@"
#define SUBPROJECT_LIBRARY "@BUILD_AS_LIBRARY@"
#define SUBPROJECT_GITHUB_MODULE "@ENABLE_GITHUB@"
#define SUBPROJECT_GITREPORT_MODULE "@ENABLE_GITREPORT@"
#define SUBPROJECT_OWN_GITHUB_TOKEN "@OWN_GITHUB_TOKEN@"
#define SUBPROJECT_USE_QT5 "@USE_QT5@"
#endif /* VERSION_H */

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.0" language="en"> <TS version="2.1" language="en">
<context> <context>
<name>AboutWindow</name> <name>AboutWindow</name>
<message> <message>
@ -194,7 +194,7 @@
<source>Skip no carrier</source> <source>Skip no carrier</source>
<translation>Skip no carrier</translation> <translation>Skip no carrier</translation>
</message> </message>
<message utf8="true"> <message>
<source>Set to yes to use 802.1x authentication</source> <source>Set to yes to use 802.1x authentication</source>
<translation>Set to yes to use 802.1x authentication</translation> <translation>Set to yes to use 802.1x authentication</translation>
</message> </message>
@ -329,7 +329,7 @@
<source>A command that is executed before a connection is brought down</source> <source>A command that is executed before a connection is brought down</source>
<translation>A command that is executed before a connection is brought down</translation> <translation>A command that is executed before a connection is brought down</translation>
</message> </message>
<message utf8="true"> <message>
<source>Set to yes to force connecting even if the interface is up</source> <source>Set to yes to force connecting even if the interface is up</source>
<translation>Set to yes to force connecting even if the interface is up</translation> <translation>Set to yes to force connecting even if the interface is up</translation>
</message> </message>
@ -380,7 +380,7 @@
<source>Add</source> <source>Add</source>
<translation>Add</translation> <translation>Add</translation>
</message> </message>
<message utf8="true"> <message>
<source>An array of IP addresses suffixed with /&lt;netmask&gt;</source> <source>An array of IP addresses suffixed with /&lt;netmask&gt;</source>
<translation>An array of IP addresses suffixed with /&lt;netmask&gt;</translation> <translation>An array of IP addresses suffixed with /&lt;netmask&gt;</translation>
</message> </message>
@ -460,7 +460,7 @@
<source>Timeout DAD</source> <source>Timeout DAD</source>
<translation>Timeout DAD</translation> <translation>Timeout DAD</translation>
</message> </message>
<message utf8="true"> <message>
<source>Set to yes to release the DHCP lease when the profile is stopped</source> <source>Set to yes to release the DHCP lease when the profile is stopped</source>
<translation>Set to yes to release the DHCP lease when the profile is stopped</translation> <translation>Set to yes to release the DHCP lease when the profile is stopped</translation>
</message> </message>
@ -520,7 +520,7 @@
<source>DNS domain</source> <source>DNS domain</source>
<translation>DNS domain</translation> <translation>DNS domain</translation>
</message> </message>
<message utf8="true"> <message>
<source>A domain line for /etc/resolv.conf</source> <source>A domain line for /etc/resolv.conf</source>
<translation>A domain line for /etc/resolv.conf</translation> <translation>A domain line for /etc/resolv.conf</translation>
</message> </message>
@ -528,7 +528,7 @@
<source>DNS search</source> <source>DNS search</source>
<translation>DNS search</translation> <translation>DNS search</translation>
</message> </message>
<message utf8="true"> <message>
<source>A search line for /etc/resolv.conf</source> <source>A search line for /etc/resolv.conf</source>
<translation>A search line for /etc/resolv.conf</translation> <translation>A search line for /etc/resolv.conf</translation>
</message> </message>
@ -536,11 +536,11 @@
<source>DNS options</source> <source>DNS options</source>
<translation>DNS options</translation> <translation>DNS options</translation>
</message> </message>
<message utf8="true"> <message>
<source>An array of options lines for /etc/resolv.conf</source> <source>An array of options lines for /etc/resolv.conf</source>
<translation>An array of options lines for /etc/resolv.conf</translation> <translation>An array of options lines for /etc/resolv.conf</translation>
</message> </message>
<message utf8="true"> <message>
<source>Maximum time, in seconds, to wait for IPv6s Duplicate Address Detection to succeed</source> <source>Maximum time, in seconds, to wait for IPv6s Duplicate Address Detection to succeed</source>
<translation>Maximum time, in seconds, to wait for IPv6s Duplicate Address Detection to succeed</translation> <translation>Maximum time, in seconds, to wait for IPv6s Duplicate Address Detection to succeed</translation>
</message> </message>
@ -990,6 +990,10 @@
<source>read configuration from this file</source> <source>read configuration from this file</source>
<translation>read configuration from this file</translation> <translation>read configuration from this file</translation>
</message> </message>
<message>
<source>Report a bug</source>
<translation>Report a bug</translation>
</message>
</context> </context>
<context> <context>
<name>MobileWidget</name> <name>MobileWidget</name>
@ -1310,7 +1314,7 @@
<source>Idle timeout</source> <source>Idle timeout</source>
<translation>Idle timeout</translation> <translation>Idle timeout</translation>
</message> </message>
<message utf8="true"> <message>
<source>This option specifies the idle time (in seconds) after which pppd should disconnect</source> <source>This option specifies the idle time (in seconds) after which pppd should disconnect</source>
<translation>This option specifies the idle time (in seconds) after which pppd should disconnect</translation> <translation>This option specifies the idle time (in seconds) after which pppd should disconnect</translation>
</message> </message>
@ -1350,7 +1354,7 @@
<source>LCP echo interval</source> <source>LCP echo interval</source>
<translation>LCP echo interval</translation> <translation>LCP echo interval</translation>
</message> </message>
<message utf8="true"> <message>
<source>These options override default LCP parameters from /etc/ppp/options</source> <source>These options override default LCP parameters from /etc/ppp/options</source>
<translation>These options override default LCP parameters from /etc/ppp/options</translation> <translation>These options override default LCP parameters from /etc/ppp/options</translation>
</message> </message>
@ -1615,11 +1619,11 @@
</message> </message>
<message> <message>
<source>wpa_actiond path</source> <source>wpa_actiond path</source>
<translation>wpa_actiond path</translation> <translation type="vanished">wpa_actiond path</translation>
</message> </message>
<message> <message>
<source>Path to wpa_actiond</source> <source>Path to wpa_actiond</source>
<translation>Path to wpa_actiond</translation> <translation type="vanished">Path to wpa_actiond</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1711,7 +1715,7 @@
<source>tap</source> <source>tap</source>
<translation>tap</translation> <translation>tap</translation>
</message> </message>
<message utf8="true"> <message>
<source>Either tun, or tap</source> <source>Either tun, or tap</source>
<translation>Either tun, or tap</translation> <translation>Either tun, or tap</translation>
</message> </message>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.0"> <TS version="2.1">
<context> <context>
<name>AboutWindow</name> <name>AboutWindow</name>
<message> <message>
@ -228,7 +228,7 @@
<source>Skip no carrier</source> <source>Skip no carrier</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message utf8="true"> <message>
<location filename="../../../build/gui/src/ui_ethernetwidget.h" line="215"/> <location filename="../../../build/gui/src/ui_ethernetwidget.h" line="215"/>
<source>Set to yes to use 802.1x authentication</source> <source>Set to yes to use 802.1x authentication</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -299,13 +299,13 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/wirelesswidget.cpp" line="188"/> <location filename="../../gui/src/wirelesswidget.cpp" line="189"/>
<location filename="../../gui/src/ethernetwidget.cpp" line="78"/> <location filename="../../gui/src/ethernetwidget.cpp" line="78"/>
<source>Select wpa configuration file</source> <source>Select wpa configuration file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/wirelesswidget.cpp" line="190"/> <location filename="../../gui/src/wirelesswidget.cpp" line="191"/>
<location filename="../../gui/src/ethernetwidget.cpp" line="80"/> <location filename="../../gui/src/ethernetwidget.cpp" line="80"/>
<source>Configuration files (*.conf)</source> <source>Configuration files (*.conf)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -410,7 +410,7 @@
<source>A command that is executed before a connection is brought down</source> <source>A command that is executed before a connection is brought down</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message utf8="true"> <message>
<location filename="../../../build/gui/src/ui_generalwidget.h" line="325"/> <location filename="../../../build/gui/src/ui_generalwidget.h" line="325"/>
<source>Set to yes to force connecting even if the interface is up</source> <source>Set to yes to force connecting even if the interface is up</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -476,7 +476,7 @@
<source>Add</source> <source>Add</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message utf8="true"> <message>
<location filename="../../../build/gui/src/ui_ipwidget.h" line="771"/> <location filename="../../../build/gui/src/ui_ipwidget.h" line="771"/>
<source>An array of IP addresses suffixed with /&lt;netmask&gt;</source> <source>An array of IP addresses suffixed with /&lt;netmask&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -579,7 +579,7 @@
<source>Timeout DAD</source> <source>Timeout DAD</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message utf8="true"> <message>
<location filename="../../../build/gui/src/ui_ipwidget.h" line="818"/> <location filename="../../../build/gui/src/ui_ipwidget.h" line="818"/>
<source>Maximum time, in seconds, to wait for IPv6s Duplicate Address Detection to succeed</source> <source>Maximum time, in seconds, to wait for IPv6s Duplicate Address Detection to succeed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -636,7 +636,7 @@
<source>Maximum time, in seconds, to wait for DHCP to be successful</source> <source>Maximum time, in seconds, to wait for DHCP to be successful</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message utf8="true"> <message>
<location filename="../../../build/gui/src/ui_ipwidget.h" line="846"/> <location filename="../../../build/gui/src/ui_ipwidget.h" line="846"/>
<source>Set to yes to release the DHCP lease when the profile is stopped</source> <source>Set to yes to release the DHCP lease when the profile is stopped</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -661,7 +661,7 @@
<source>DNS domain</source> <source>DNS domain</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message utf8="true"> <message>
<location filename="../../../build/gui/src/ui_ipwidget.h" line="856"/> <location filename="../../../build/gui/src/ui_ipwidget.h" line="856"/>
<source>A domain line for /etc/resolv.conf</source> <source>A domain line for /etc/resolv.conf</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -671,7 +671,7 @@
<source>DNS search</source> <source>DNS search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message utf8="true"> <message>
<location filename="../../../build/gui/src/ui_ipwidget.h" line="860"/> <location filename="../../../build/gui/src/ui_ipwidget.h" line="860"/>
<source>A search line for /etc/resolv.conf</source> <source>A search line for /etc/resolv.conf</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -681,7 +681,7 @@
<source>DNS options</source> <source>DNS options</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message utf8="true"> <message>
<location filename="../../../build/gui/src/ui_ipwidget.h" line="865"/> <location filename="../../../build/gui/src/ui_ipwidget.h" line="865"/>
<source>An array of options lines for /etc/resolv.conf</source> <source>An array of options lines for /etc/resolv.conf</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -723,157 +723,162 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="478"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="490"/>
<source>Netctl GUI</source> <source>Netctl GUI</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="509"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="522"/>
<source>Connect to profile</source> <source>Connect to profile</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/mainwindow.cpp" line="403"/> <location filename="../../gui/src/mainwindow.cpp" line="403"/>
<location filename="../../gui/src/mainwindow.cpp" line="516"/> <location filename="../../gui/src/mainwindow.cpp" line="516"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="500"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="513"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="516"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="529"/>
<source>Name</source> <source>Name</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/mainwindow.cpp" line="404"/> <location filename="../../gui/src/mainwindow.cpp" line="404"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="502"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="515"/>
<source>Description</source> <source>Description</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/mainwindow.cpp" line="405"/> <location filename="../../gui/src/mainwindow.cpp" line="405"/>
<location filename="../../gui/src/mainwindow.cpp" line="517"/> <location filename="../../gui/src/mainwindow.cpp" line="517"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="504"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="517"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="518"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="531"/>
<source>Status</source> <source>Status</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/mainwindow.cpp" line="586"/> <location filename="../../gui/src/mainwindow.cpp" line="586"/>
<location filename="../../gui/src/mainwindow.cpp" line="1200"/> <location filename="../../gui/src/mainwindow.cpp" line="1200"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="483"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="495"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="490"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="502"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="505"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="518"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="523"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="536"/>
<source>Refresh</source> <source>Refresh</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="506"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="519"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="524"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="537"/>
<source>Ctrl+R</source> <source>Ctrl+R</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="507"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="520"/>
<source>Restart</source> <source>Restart</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/mainwindow.cpp" line="777"/> <location filename="../../gui/src/mainwindow.cpp" line="777"/>
<location filename="../../gui/src/mainwindow.cpp" line="1396"/> <location filename="../../gui/src/mainwindow.cpp" line="1398"/>
<location filename="../../gui/src/mainwindow.cpp" line="1401"/> <location filename="../../gui/src/mainwindow.cpp" line="1403"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="508"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="521"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="525"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="538"/>
<source>Start</source> <source>Start</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="513"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="526"/>
<source>Create a new profile</source> <source>Create a new profile</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="510"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="523"/>
<source>Profile</source> <source>Profile</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="489"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="501"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="511"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="524"/>
<source>Clear</source> <source>Clear</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="512"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="509"/>
<source>Report a bug</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="525"/>
<source>Save</source> <source>Save</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="526"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="539"/>
<source>Connect to Wi-Fi</source> <source>Connect to Wi-Fi</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="514"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="527"/>
<source>Please install &apos;wpa_supplicant&apos; before using it</source> <source>Please install &apos;wpa_supplicant&apos; before using it</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="496"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="508"/>
<source>About</source> <source>About</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="497"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="510"/>
<source>netctl-auto is running</source> <source>netctl-auto is running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="498"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="511"/>
<source>Show</source> <source>Show</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/mainwindow.cpp" line="518"/> <location filename="../../gui/src/mainwindow.cpp" line="518"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="520"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="533"/>
<source>Signal</source> <source>Signal</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/mainwindow.cpp" line="519"/> <location filename="../../gui/src/mainwindow.cpp" line="519"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="522"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="535"/>
<source>Security</source> <source>Security</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="527"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="540"/>
<source>Menu</source> <source>Menu</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="528"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="541"/>
<source>Actions</source> <source>Actions</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="529"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="542"/>
<source>Help</source> <source>Help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="479"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="491"/>
<source>Settings</source> <source>Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="480"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="492"/>
<source>Ctrl+S</source> <source>Ctrl+S</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="481"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="493"/>
<source>Quit</source> <source>Quit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="482"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="494"/>
<source>Ctrl+Q</source> <source>Ctrl+Q</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -881,13 +886,13 @@
<location filename="../../gui/src/mainwindow.cpp" line="449"/> <location filename="../../gui/src/mainwindow.cpp" line="449"/>
<location filename="../../gui/src/mainwindow.cpp" line="589"/> <location filename="../../gui/src/mainwindow.cpp" line="589"/>
<location filename="../../gui/src/mainwindow.cpp" line="608"/> <location filename="../../gui/src/mainwindow.cpp" line="608"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="484"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="496"/>
<source>Start profile</source> <source>Start profile</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/mainwindow.cpp" line="590"/> <location filename="../../gui/src/mainwindow.cpp" line="590"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="485"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="497"/>
<source>Restart profile</source> <source>Restart profile</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -895,40 +900,40 @@
<location filename="../../gui/src/mainwindow.cpp" line="458"/> <location filename="../../gui/src/mainwindow.cpp" line="458"/>
<location filename="../../gui/src/mainwindow.cpp" line="592"/> <location filename="../../gui/src/mainwindow.cpp" line="592"/>
<location filename="../../gui/src/mainwindow.cpp" line="616"/> <location filename="../../gui/src/mainwindow.cpp" line="616"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="486"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="498"/>
<source>Enable profile</source> <source>Enable profile</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/mainwindow.cpp" line="594"/> <location filename="../../gui/src/mainwindow.cpp" line="594"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="487"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="499"/>
<source>Edit profile</source> <source>Edit profile</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/mainwindow.cpp" line="596"/> <location filename="../../gui/src/mainwindow.cpp" line="596"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="488"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="500"/>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="494"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="506"/>
<source>Remove profile</source> <source>Remove profile</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="491"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="503"/>
<source>Load profile</source> <source>Load profile</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="492"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="504"/>
<source>Save profile</source> <source>Save profile</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="493"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="505"/>
<source>Start Wi-Fi</source> <source>Start Wi-Fi</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_mainwindow.h" line="495"/> <location filename="../../../build/gui/src/ui_mainwindow.h" line="507"/>
<source>netctl-auto</source> <source>netctl-auto</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -980,9 +985,9 @@
<location filename="../../gui/src/mainwindow.cpp" line="746"/> <location filename="../../gui/src/mainwindow.cpp" line="746"/>
<location filename="../../gui/src/mainwindow.cpp" line="1112"/> <location filename="../../gui/src/mainwindow.cpp" line="1112"/>
<location filename="../../gui/src/mainwindow.cpp" line="1183"/> <location filename="../../gui/src/mainwindow.cpp" line="1183"/>
<location filename="../../gui/src/mainwindow.cpp" line="1287"/> <location filename="../../gui/src/mainwindow.cpp" line="1289"/>
<location filename="../../gui/src/mainwindow.cpp" line="1342"/> <location filename="../../gui/src/mainwindow.cpp" line="1344"/>
<location filename="../../gui/src/mainwindow.cpp" line="1346"/> <location filename="../../gui/src/mainwindow.cpp" line="1348"/>
<source>Done</source> <source>Done</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -995,15 +1000,15 @@
<location filename="../../gui/src/mainwindow.cpp" line="748"/> <location filename="../../gui/src/mainwindow.cpp" line="748"/>
<location filename="../../gui/src/mainwindow.cpp" line="1114"/> <location filename="../../gui/src/mainwindow.cpp" line="1114"/>
<location filename="../../gui/src/mainwindow.cpp" line="1185"/> <location filename="../../gui/src/mainwindow.cpp" line="1185"/>
<location filename="../../gui/src/mainwindow.cpp" line="1289"/> <location filename="../../gui/src/mainwindow.cpp" line="1291"/>
<location filename="../../gui/src/mainwindow.cpp" line="1340"/> <location filename="../../gui/src/mainwindow.cpp" line="1342"/>
<location filename="../../gui/src/mainwindow.cpp" line="1348"/> <location filename="../../gui/src/mainwindow.cpp" line="1350"/>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/mainwindow.cpp" line="772"/> <location filename="../../gui/src/mainwindow.cpp" line="772"/>
<location filename="../../gui/src/mainwindow.cpp" line="1392"/> <location filename="../../gui/src/mainwindow.cpp" line="1394"/>
<source>Stop</source> <source>Stop</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1537,7 +1542,7 @@
<source>Idle timeout</source> <source>Idle timeout</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message utf8="true"> <message>
<location filename="../../../build/gui/src/ui_pppoewidget.h" line="399"/> <location filename="../../../build/gui/src/ui_pppoewidget.h" line="399"/>
<source>This option specifies the idle time (in seconds) after which pppd should disconnect</source> <source>This option specifies the idle time (in seconds) after which pppd should disconnect</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -1593,7 +1598,7 @@
<source>LCP echo interval</source> <source>LCP echo interval</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message utf8="true"> <message>
<location filename="../../../build/gui/src/ui_pppoewidget.h" line="420"/> <location filename="../../../build/gui/src/ui_pppoewidget.h" line="420"/>
<location filename="../../../build/gui/src/ui_pppoewidget.h" line="424"/> <location filename="../../../build/gui/src/ui_pppoewidget.h" line="424"/>
<source>These options override default LCP parameters from /etc/ppp/options</source> <source>These options override default LCP parameters from /etc/ppp/options</source>
@ -1688,272 +1693,261 @@
<context> <context>
<name>SettingsWindow</name> <name>SettingsWindow</name>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="658"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="634"/>
<source>Settings</source> <source>Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="663"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="639"/>
<source>General</source> <source>General</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="674"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="650"/>
<source>Language</source> <source>Language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="676"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="652"/>
<source>Select a language</source> <source>Select a language</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="678"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="654"/>
<source>You will need to restart the application</source> <source>You will need to restart the application</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="665"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="641"/>
<source>netctl</source> <source>netctl</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="684"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="660"/>
<source>netctl path</source> <source>netctl path</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="686"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="662"/>
<source>Path to netctl</source> <source>Path to netctl</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="659"/>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="664"/>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="669"/>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="678"/>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="683"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="683"/>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="688"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="688"/>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="693"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="693"/>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="702"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="714"/>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="707"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="719"/>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="712"/>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="717"/>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="722"/>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="743"/>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="748"/>
<source>Browse</source> <source>Browse</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="698"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="674"/>
<source>Profile path</source> <source>Profile path</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="700"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="676"/>
<source>Path to profile directory</source> <source>Path to profile directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="667"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="643"/>
<source>sudo</source> <source>sudo</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="703"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="679"/>
<source>sudo path</source> <source>sudo path</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="705"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="681"/>
<source>Path to sudo</source> <source>Path to sudo</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="669"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="645"/>
<source>wpa_supplicant</source> <source>wpa_supplicant</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="679"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="655"/>
<source>systemctl path</source> <source>systemctl path</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="681"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="657"/>
<source>Path to systemctl</source> <source>Path to systemctl</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="689"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="665"/>
<source>netctl-auto path</source> <source>netctl-auto path</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="691"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="667"/>
<source>Path to netctl-auto</source> <source>Path to netctl-auto</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="694"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="670"/>
<source>netctl-auto service</source> <source>netctl-auto service</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="696"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="672"/>
<source>Name of netctl-auto systemd service</source> <source>Name of netctl-auto systemd service</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="708"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="684"/>
<source>wpa_supplicant path</source> <source>wpa_supplicant path</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="710"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="686"/>
<source>Path to wpa_supplicant</source> <source>Path to wpa_supplicant</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="713"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="689"/>
<source>wpa_cli path</source> <source>wpa_cli path</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="715"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="691"/>
<source>Path to wpa_cli</source> <source>Path to wpa_cli</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="718"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="694"/>
<source>wpa_actiond path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="720"/>
<source>Path to wpa_actiond</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="723"/>
<source>PID file</source> <source>PID file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="725"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="696"/>
<source>wpa_supplicant PID file</source> <source>wpa_supplicant PID file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="727"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="698"/>
<source>wpa_supplicant drivers</source> <source>wpa_supplicant drivers</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="729"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="700"/>
<source>wpa_supplicant drivers comma separated</source> <source>wpa_supplicant drivers comma separated</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="731"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="702"/>
<source>ctrl_interface directory</source> <source>ctrl_interface directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="733"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="704"/>
<source>Path to control directory</source> <source>Path to control directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="735"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="706"/>
<source>ctrl_interface group</source> <source>ctrl_interface group</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="737"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="708"/>
<source>Group of control directory</source> <source>Group of control directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="671"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="647"/>
<source>Other</source> <source>Other</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="739"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="710"/>
<source>Path to interface list</source> <source>Path to interface list</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="741"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="712"/>
<source>Path to directory which contains network devices</source> <source>Path to directory which contains network devices</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="744"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="715"/>
<source>Path to rfkill device list</source> <source>Path to rfkill device list</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="746"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="717"/>
<source>Path to directory which contains rfkill devices</source> <source>Path to directory which contains rfkill devices</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="749"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="720"/>
<location filename="../../../build/gui/src/ui_settingswindow.h" line="751"/> <location filename="../../../build/gui/src/ui_settingswindow.h" line="722"/>
<source>Prefered wireless interface</source> <source>Prefered wireless interface</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/settingswindow.cpp" line="136"/> <location filename="../../gui/src/settingswindow.cpp" line="135"/>
<source>Select path to directory with interfaces</source> <source>Select path to directory with interfaces</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/settingswindow.cpp" line="149"/> <location filename="../../gui/src/settingswindow.cpp" line="148"/>
<source>Select netctl command</source> <source>Select netctl command</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/settingswindow.cpp" line="151"/> <location filename="../../gui/src/settingswindow.cpp" line="150"/>
<location filename="../../gui/src/settingswindow.cpp" line="165"/> <location filename="../../gui/src/settingswindow.cpp" line="164"/>
<location filename="../../gui/src/settingswindow.cpp" line="205"/> <location filename="../../gui/src/settingswindow.cpp" line="204"/>
<location filename="../../gui/src/settingswindow.cpp" line="219"/> <location filename="../../gui/src/settingswindow.cpp" line="218"/>
<location filename="../../gui/src/settingswindow.cpp" line="233"/> <location filename="../../gui/src/settingswindow.cpp" line="232"/>
<location filename="../../gui/src/settingswindow.cpp" line="247"/> <location filename="../../gui/src/settingswindow.cpp" line="246"/>
<source>All files (*)</source> <source>All files (*)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/settingswindow.cpp" line="163"/> <location filename="../../gui/src/settingswindow.cpp" line="162"/>
<source>Select netctl-auto command</source> <source>Select netctl-auto command</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/settingswindow.cpp" line="177"/> <location filename="../../gui/src/settingswindow.cpp" line="176"/>
<source>Select path to profile directory</source> <source>Select path to profile directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/settingswindow.cpp" line="190"/> <location filename="../../gui/src/settingswindow.cpp" line="189"/>
<source>Select path to directory with rfkill devices</source> <source>Select path to directory with rfkill devices</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/settingswindow.cpp" line="203"/> <location filename="../../gui/src/settingswindow.cpp" line="202"/>
<source>Select sudo command</source> <source>Select sudo command</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/settingswindow.cpp" line="217"/> <location filename="../../gui/src/settingswindow.cpp" line="216"/>
<source>Select systemctl command</source> <source>Select systemctl command</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/settingswindow.cpp" line="231"/> <location filename="../../gui/src/settingswindow.cpp" line="230"/>
<source>Select wpa_cli command</source> <source>Select wpa_cli command</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/settingswindow.cpp" line="245"/> <location filename="../../gui/src/settingswindow.cpp" line="244"/>
<source>Select wpa_supplicant command</source> <source>Select wpa_supplicant command</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -2058,7 +2052,7 @@
<source>Mode</source> <source>Mode</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message utf8="true"> <message>
<location filename="../../../build/gui/src/ui_tuntapwidget.h" line="127"/> <location filename="../../../build/gui/src/ui_tuntapwidget.h" line="127"/>
<source>Either tun, or tap</source> <source>Either tun, or tap</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -2232,7 +2226,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/wirelesswidget.cpp" line="204"/> <location filename="../../gui/src/wirelesswidget.cpp" line="205"/>
<location filename="../../../build/gui/src/ui_wirelesswidget.h" line="500"/> <location filename="../../../build/gui/src/ui_wirelesswidget.h" line="500"/>
<source>Show advanced</source> <source>Show advanced</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -2339,7 +2333,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../gui/src/wirelesswidget.cpp" line="200"/> <location filename="../../gui/src/wirelesswidget.cpp" line="201"/>
<source>Hide advanced</source> <source>Hide advanced</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.0" language="ru"> <TS version="2.1" language="ru">
<context> <context>
<name>AboutWindow</name> <name>AboutWindow</name>
<message> <message>
@ -194,7 +194,7 @@
<source>Skip no carrier</source> <source>Skip no carrier</source>
<translation>Пропустить отсутствие оператора</translation> <translation>Пропустить отсутствие оператора</translation>
</message> </message>
<message utf8="true"> <message>
<source>Set to yes to use 802.1x authentication</source> <source>Set to yes to use 802.1x authentication</source>
<translation>Установить &quot;да&quot;, чтобы использовать 802.1x авторизацию</translation> <translation>Установить &quot;да&quot;, чтобы использовать 802.1x авторизацию</translation>
</message> </message>
@ -329,7 +329,7 @@
<source>A command that is executed before a connection is brought down</source> <source>A command that is executed before a connection is brought down</source>
<translation>Команда, которая будет запущена перед отключением</translation> <translation>Команда, которая будет запущена перед отключением</translation>
</message> </message>
<message utf8="true"> <message>
<source>Set to yes to force connecting even if the interface is up</source> <source>Set to yes to force connecting even if the interface is up</source>
<translation>Установить &quot;да&quot;, чтобы запустить соединение, даже если интерфейс уже поднят</translation> <translation>Установить &quot;да&quot;, чтобы запустить соединение, даже если интерфейс уже поднят</translation>
</message> </message>
@ -380,7 +380,7 @@
<source>Add</source> <source>Add</source>
<translation>Добавить</translation> <translation>Добавить</translation>
</message> </message>
<message utf8="true"> <message>
<source>An array of IP addresses suffixed with /&lt;netmask&gt;</source> <source>An array of IP addresses suffixed with /&lt;netmask&gt;</source>
<translation>Массив IP адресов с суффиксом /&lt;netmask&gt;</translation> <translation>Массив IP адресов с суффиксом /&lt;netmask&gt;</translation>
</message> </message>
@ -460,7 +460,7 @@
<source>Timeout DAD</source> <source>Timeout DAD</source>
<translation>Таймаут DAD</translation> <translation>Таймаут DAD</translation>
</message> </message>
<message utf8="true"> <message>
<source>Set to yes to release the DHCP lease when the profile is stopped</source> <source>Set to yes to release the DHCP lease when the profile is stopped</source>
<translation>Установить &quot;да&quot;, чтобы оставить выделенный DHCP, когда профиль отключен</translation> <translation>Установить &quot;да&quot;, чтобы оставить выделенный DHCP, когда профиль отключен</translation>
</message> </message>
@ -520,7 +520,7 @@
<source>DNS domain</source> <source>DNS domain</source>
<translation>DNS домен</translation> <translation>DNS домен</translation>
</message> </message>
<message utf8="true"> <message>
<source>A domain line for /etc/resolv.conf</source> <source>A domain line for /etc/resolv.conf</source>
<translation>Строка domain в /etc/resolv.conf</translation> <translation>Строка domain в /etc/resolv.conf</translation>
</message> </message>
@ -528,7 +528,7 @@
<source>DNS search</source> <source>DNS search</source>
<translation>Поиск DNS</translation> <translation>Поиск DNS</translation>
</message> </message>
<message utf8="true"> <message>
<source>A search line for /etc/resolv.conf</source> <source>A search line for /etc/resolv.conf</source>
<translation>Строка search в /etc/resolv.conf</translation> <translation>Строка search в /etc/resolv.conf</translation>
</message> </message>
@ -536,11 +536,11 @@
<source>DNS options</source> <source>DNS options</source>
<translation>Опции DNS</translation> <translation>Опции DNS</translation>
</message> </message>
<message utf8="true"> <message>
<source>An array of options lines for /etc/resolv.conf</source> <source>An array of options lines for /etc/resolv.conf</source>
<translation>Массив строк options в /etc/resolv.conf</translation> <translation>Массив строк options в /etc/resolv.conf</translation>
</message> </message>
<message utf8="true"> <message>
<source>Maximum time, in seconds, to wait for IPv6s Duplicate Address Detection to succeed</source> <source>Maximum time, in seconds, to wait for IPv6s Duplicate Address Detection to succeed</source>
<translation>Максимальное время в секундах для ожидания выполнения детектирования дубликации IPv6 адресов</translation> <translation>Максимальное время в секундах для ожидания выполнения детектирования дубликации IPv6 адресов</translation>
</message> </message>
@ -989,6 +989,10 @@
<source>read configuration from this file</source> <source>read configuration from this file</source>
<translation>прочитать настройки из данного файла</translation> <translation>прочитать настройки из данного файла</translation>
</message> </message>
<message>
<source>Report a bug</source>
<translation>Сообщить о баге</translation>
</message>
</context> </context>
<context> <context>
<name>MobileWidget</name> <name>MobileWidget</name>
@ -1309,7 +1313,7 @@
<source>Idle timeout</source> <source>Idle timeout</source>
<translation>Таймаут простоя</translation> <translation>Таймаут простоя</translation>
</message> </message>
<message utf8="true"> <message>
<source>This option specifies the idle time (in seconds) after which pppd should disconnect</source> <source>This option specifies the idle time (in seconds) after which pppd should disconnect</source>
<translation>Указывает таймаут простоя в секундах, после чего &apos;pppd&apos; будет отключен</translation> <translation>Указывает таймаут простоя в секундах, после чего &apos;pppd&apos; будет отключен</translation>
</message> </message>
@ -1349,7 +1353,7 @@
<source>LCP echo interval</source> <source>LCP echo interval</source>
<translation>LCP echo интервал</translation> <translation>LCP echo интервал</translation>
</message> </message>
<message utf8="true"> <message>
<source>These options override default LCP parameters from /etc/ppp/options</source> <source>These options override default LCP parameters from /etc/ppp/options</source>
<translation>Эти опции заместят стандартные опции LCP из /etc/ppp/options</translation> <translation>Эти опции заместят стандартные опции LCP из /etc/ppp/options</translation>
</message> </message>
@ -1614,11 +1618,11 @@
</message> </message>
<message> <message>
<source>wpa_actiond path</source> <source>wpa_actiond path</source>
<translation>Путь к wpa_actiond</translation> <translation type="vanished">Путь к wpa_actiond</translation>
</message> </message>
<message> <message>
<source>Path to wpa_actiond</source> <source>Path to wpa_actiond</source>
<translation>Путь к wpa_actiond</translation> <translation type="vanished">Путь к wpa_actiond</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1710,7 +1714,7 @@
<source>tap</source> <source>tap</source>
<translation>tap</translation> <translation>tap</translation>
</message> </message>
<message utf8="true"> <message>
<source>Either tun, or tap</source> <source>Either tun, or tap</source>
<translation>tun или tap</translation> <translation>tun или tap</translation>
</message> </message>