#ifndef UDISKSYSTEMBACKUPPROXY_H #define UDISKSYSTEMBACKUPPROXY_H #include "workerfactory.h" #include "myprocess/calcbackupsize.h" #include "myprocess/mksquashfsprocess.h" #include "myprocess/rsyncpathtodirprocess.h" #include "parsebackuplist.h" class UDiskSystemBackupProxy : public Worker { Q_OBJECT DECLARE_DYNCREATE(UDiskSystemBackupProxy) public: // 系统备份的几种场景 enum UDiskSystemBackupScene { SYSTEM_BACKUP, // 系统备份 TRY_SYSTEM_BACKUP, // 测试系统备份,可用于计算备份传输数据大小 MKSQUASHFS, // 生成img文件 IMG_BACKUP, // 备份img文件 }; explicit UDiskSystemBackupProxy(); virtual ~UDiskSystemBackupProxy(); public: // 环境检测 virtual bool checkEnvEx(); // 任务处理 virtual void doWorkEx(); signals: private slots: // 校验剩余空间是否满足备份 void checkFreeCapacity(qint64 itotalSize); // mksqushfs void doMksqushfs(); // 备份 void doBackup(); // 任务取消 virtual void cancelEx(); /** * @brief 校验移动盘是否还在 * @return: bool,存在返回true;不存在返回false * @author: zhaominyong * @since: 2021/05/24 * @note: * add by zhaominyong at 2021/05/24 for bug:54377 【备份还原】备份数据到U盘的过程中拔出U盘,备份还原工具仍然一直显示正在备份数据 */ bool checkDestDirExists(); private: // 判断是否增量备份 bool isIncBackup(); // 计算备份所需空间大小 void calcSizeForBackup(); /** * @brief 根据场景获取rsync命令参数 * @param scene,场景 * @return 组装好的rsync的参数信息 */ QStringList getRsyncArgs(UDiskSystemBackupScene scene); /** * @brief 记录/backup/snapshots/backuplist.xml文件 * @return true-成功;false-失败 */ bool recordBackupPoint(); // 备份准备 bool doPrepare(); // 备份系统 bool backupSystem(); // 备份img文件 bool backupImg(); bool backup(const QStringList &args); // 失败则删除相应数据 void deleteFailedData(); // 计算备份空间大小的进程 CalcBackupSize *m_calc; // 压缩进程 MkSquashFSProcess *m_mksquashfs; // 是否完成 bool m_isFinished; // 是否备份成功 bool m_bSuccess; // 当前备份uuid QString m_curUuid; // 当前备份目标目录 QString m_destPath; // 当前备份所需空间大小 qint64 m_size; // 备份进程 RsyncPathToDirProcess *m_p; // 当前备份节点 ParseBackupList::BackupPoint m_backupPoint; // 是否只是检测 bool m_isOnlyCheck; // img文件存放路径 QString m_imgPath; // 强制结束标志(stop后没反应的情况,系统处于睡眠状态) bool m_isForce; }; #endif // UDISKSYSTEMBACKUPPROXY_H