netctl-gui/sources/netctlgui/include/netctlgui/netctlinteract.h
2014-08-06 01:43:08 +04:00

287 lines
10 KiB
C++

/***************************************************************************
* This file is part of netctl-gui *
* *
* netctl-gui is free software: you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* netctl-gui is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with netctl-gui. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
/**
* @file netctlinteract.h
* Header of netctlgui library
* @author Evgeniy Alekseev
* @copyright GPLv3
* @bug https://github.com/arcan1s/netctl-gui/issues
*/
#ifndef NETCTLINTERACT_H
#define NETCTLINTERACT_H
#include <QDir>
#include <QMap>
#include <QObject>
class NetctlProfile;
/**
* @struct netctlProfileInfo
* @brief netctl profile information structure
* @var netctlProfileInfo::name
* profile name
* @var netctlProfileInfo::description
* profile description
* @var netctlProfileInfo::active
* profile status
* @var netctlProfileInfo::enabled
* profile status
*/
typedef struct
{
QString name;
QString description;
bool active;
bool enabled;
} netctlProfileInfo;
/**
* @brief The Netctl class interacts with netctl
*/
class Netctl : public QObject
{
Q_OBJECT
public:
/**
* @brief Netctl class constructor
* @param debugCmd show debug messages
* @param settings default settings. Needed keys are
* IFACE_DIR (path to directory with interfaces),
* PREFERED_IFACE (prefered interface for WiFi),
* NETCTL_PATH (path to netctl command),
* NETCTLAUTO_PATH (path to netctl-auto command),
* NETCTLAUTO_SERVICE (netctl-auto service name),
* PROFILE_DIR (path to directory which contains profiles),
* SUDO_PATH (path to sudo command),
* SYSTEMCTL_PATH (path to systemctl command)
*/
explicit Netctl(const bool debugCmd = false,
const QMap<QString, QString> settings = QMap<QString, QString>());
/**
* @brief Netctl class destructor
*/
~Netctl();
// general information
/**
* @brief method which returns profile informations from netctl
* @return list of profiles
*/
QList<netctlProfileInfo> getProfileList();
/**
* @brief method which returns profile informations from netctl-auto
* @return list of profiles from netctl-auto
*/
QList<netctlProfileInfo> getProfileListFromNetctlAuto();
/**
* @brief method which gets description from profile
* @param profile profile name
* @return profile description or ""
*/
QString getProfileDescription(const QString profile);
/**
* @brief method which gets profile status
* @param profile profile name
* @return profile status. It may be "active (enabled)", "active (static)",
* "inactive (enabled)", "inactive (static)"
*/
QString getProfileStatus(const QString profile);
/**
* @brief method which checks if profile is active
* @param profile profile name
* @return false if profile is inactive
* @return true if profile is active
*/
bool isProfileActive(const QString profile);
/**
* @brief method which checks if profile is enabled
* @param profile profile name
* @return false if profile is disabled
* @return true if profile is enabled
*/
bool isProfileEnabled(const QString profile);
/**
* @brief method which checks if profile is active (netctl-auto)
* @param profile profile name
* @return false if profile is inactive
* @return true if profile is active
*/
bool autoIsProfileActive(const QString profile);
/**
* @brief method which checks if profile is enabled (netctl-auto)
* @param profile profile name
* @return false if profile is disabled
* @return true if profile is enabled
*/
bool autoIsProfileEnabled(const QString profile);
/**
* @brief method which checks netctl-auto autoload status
* @return false if netctl-auto is disabled
* @return true if netctl-auto is enabled
*/
bool isNetctlAutoEnabled();
/**
* @brief method which checks netctl-auto status
* @return false if netctl-auto is inactive
* @return true if netctl-auto is active
*/
bool isNetctlAutoRunning();
/**
* @brief method which gets wireless interface list from PREFERED_IFACE and IFACE_DIR
* @return interface list. If PREFERED_IFACE is not empty it will be first element
*/
QStringList getWirelessInterfaceList();
public slots:
// functions
// netctl
/**
* @brief method which sets profile disabled or enabled
* @param profile profile name
* @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors
*/
bool enableProfile(const QString profile);
/**
* @brief method which restarts profile
* @param profile profile name
* @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors
*/
bool restartProfile(const QString profile);
/**
* @brief method which starts or stops profile
* @param profile profile name
* @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors
*/
bool startProfile(const QString profile);
// netctl-auto
/**
* @brief method which sets all profiles disabled (netctl-auto)
* @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors
*/
bool autoDisableAllProfiles();
/**
* @brief method which sets profile disabled or enabled (netctl-auto)
* @param profile profile name
* @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors
*/
bool autoEnableProfile(const QString profile);
/**
* @brief method which sets all profiles enabled (netctl-auto)
* @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors
*/
bool autoEnableAllProfiles();
/**
* @brief method which switchs to profile (netctl-auto)
* @param profile profile name
* @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors
*/
bool autoStartProfile(const QString profile);
// netctl-auto service
/**
* @brief method which sets netctl-auto service enabled or disabled
* @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors
*/
bool autoEnableService();
/**
* @brief method which restarted netctl-auto service
* @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors
*/
bool autoRestartService();
/**
* @brief method which starts or stops netctl-auto service
* @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors
*/
bool autoStartService();
private:
/**
* @brief NetctlProfile class
*/
NetctlProfile *netctlProfile;
/**
* @brief show debug messages
*/
bool debug;
/**
* @brief directory with interfaces. Default is "/sys/class/net/"
*/
QDir *ifaceDirectory;
/**
* @brief prefered interface for WiFi. Default is ""
*/
QString mainInterface;
/**
* @brief path to netctl command. Default is "/usr/bin/netctl"
*/
QString netctlCommand;
/**
* @brief path to netctl-auto command. Default is "/usr/bin/netctl-auto"
*/
QString netctlAutoCommand;
/**
* @brief netctl-auto service name. Default is "netctl-auto"
*/
QString netctlAutoService;
/**
* @brief path to sudo command. Default is "/usr/bin/kdesu"
*/
QString sudoCommand;
/**
* @brief path to systemctl command. Default is "/usr/bin/systemctl"
*/
QString systemctlCommand;
// functions
/**
* @brief method which calls command
* @param sudo set true if sudo is needed
* @param command command which will be called
* @param commandLine command which will be passed to command
* @param argument argument which will be passed to commandLine
* @return false if components are not found or command exit code is not equal to 0
* @return true if the method was completed without errors
*/
bool cmdCall(const bool sudo, const QString command,
const QString commandLine, const QString argument = 0);
/**
* @brief method which calls command and returns its output
* @param sudo set true if sudo is needed
* @param command command which will be called
* @param commandLine command which will be passed to command
* @param argument argument which will be passed to commandLine
* @return command output
*/
QString getCmdOutput(const bool sudo, const QString command,
const QString commandLine, const QString argument = 0);
};
#endif /* NETCTLINTERACT_H */