yhkylin-backup-tools/backup-daemon/workerfactory.cpp

118 lines
2.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "workerfactory.h"
#include <QString>
Worker::Worker() :
QObject(nullptr)
{}
Worker::~Worker()
{}
//
/**
* @brief 环境检测
*/
void Worker::checkEnv()
{
checkEnvEx();
}
/**
* @brief 任务处理
*/
void Worker::doWork()
{
doWorkEx();
}
/**
* @brief 任务取消
*/
void Worker::cancel()
{
cancelEx();
}
// 环境检测,个性化部分派生类去实现
void Worker::checkEnvEx()
{}
// 任务处理,个性化部分派生类去实现
void Worker::doWorkEx()
{}
// 任务取消,个性化部分派生类去实现
void Worker::cancelEx()
{}
/**
* @brief 根据操作类型和位置创建相应的处理类
* @param type 操作类型,如:系统备份, 系统还原
* @param position 本地备份还是U盘备份: 0-本地备份1-移动设备备份
* @return Worker派生类对象指针需调用者释放此对象
*/
Worker * WorkerFactory::createWorker(int type, int position)
{
QString className;
switch (type) {
case BackupType::BACKUP_SYSTEM:
case BackupType::INC_BACKUP_SYSTEM:
if (BackupPosition::UDISK == position) {
className = "UDiskSystemBackupProxy";
} else {
className = "SystemBackupProxy";
}
break;
case BackupType::AUTO_BACKUP_SYSTEM:
className = "AutoSystemBackupProxy";
break;
case BackupType::RESTORE_SYSTEM:
case BackupType::RESTORE_SYSTEM_WITH_DATA:
if (BackupPosition::UDISK == position) {
className = "UDiskSystemRestoreProxy";
} else {
className = "SystemRestoreProxy";
}
break;
case BackupType::BACKUP_DATA:
case BackupType::INC_BACKUP_DATA:
if (BackupPosition::UDISK == position) {
className = "UDiskDataBackupProxy";
} else {
className = "DataBackupProxy";
}
break;
case BackupType::RESTORE_DATA:
if (BackupPosition::UDISK == position) {
className = "UDiskDataRestoreProxy";
} else {
className = "DataRestoreProxy";
}
break;
case BackupType::DELETE_BACKUP:
if (BackupPosition::UDISK == position) {
className = "UDiskDeleteProxy";
} else {
className = "DeleteProxy";
}
break;
case BackupType::GHOST_IMAGE:
if (BackupPosition::UDISK == position) {
className = "UDiskGhostProxy";
} else {
className = "GhostProxy";
}
break;
default:
break;
}
if (className.isEmpty()) {
return nullptr;
}
Worker * p = qobject_cast<Worker *>(Reflect::createObject(className));
return p;
}