#include "selectrestorepoint.h" #include #include #include "component/mypushbutton.h" #include "../../common/utils.h" #include "messageboxutils.h" #include "../globalbackupinfo.h" SelectRestorePoint::SelectRestorePoint(QWidget *parent, BackupPointType backupType, bool isOnlyShowLocal) : BackupPointListDialog(parent, isOnlyShowLocal), m_backupType(backupType) { if (BackupPointType::SYSTEM == backupType) { this->setWindowTitle(tr("System Backup Information")); } else { this->setWindowTitle(tr("Data Backup Information")); } // 隐藏备份点状态Backup State字段 m_tableWidget->hideColumn(Column_Index::Backup_State); initTableWidget(); // 刷新 // MyPushButton * buttonRefresh = new MyPushButton; // buttonRefresh->setText(tr("Refresh")); // 确定按钮 MyPushButton * buttonOk = new MyPushButton; buttonOk->setText(tr("Ok")); this->setResult(QDialog::Rejected); buttonOk->setProperty("isImportant", true); buttonOk->setEnabled(false); m_bottomLayout->addStretch(); // m_bottomLayout->addWidget(buttonRefresh); m_bottomLayout->addSpacing(10); m_bottomLayout->addWidget(buttonOk); connect(m_tableWidget, &QTableWidget::clicked, this, [=]() { buttonOk->setEnabled(true); }); // connect(buttonRefresh, &MyPushButton::clicked, this, &SelectRestorePoint::initTableWidget); connect(this, &SelectRestorePoint::udiskChange, this, &SelectRestorePoint::initTableWidget); connect(buttonOk, &MyPushButton::clicked, this, [=](){ // 判断是否已经选中备份点 QList selectList = this->m_tableWidget->selectedItems(); if (selectList.isEmpty()) { MessageBoxUtils::QMESSAGE_BOX_WARNING(this, QObject::tr("Warning"), QObject::tr("Please select one backup to continue."), QObject::tr("Ok")); // this->reject(); return; } // 还原相应备份点 if (!this->m_needConfirm || MessageBoxUtils::QMESSAGE_BOX_WARNING_CANCEL(this, QObject::tr("Information"), QObject::tr("Do you want to continue?"), QObject::tr("Continue"), QObject::tr("Cancel"))) { int curRow = this->m_tableWidget->currentRow(); ParseBackupList::BackupPoint backupPoint; backupPoint.m_backupName = this->text(curRow, Column_Index::Backup_Name); backupPoint.m_uuid = this->text(curRow, Column_Index::UUID); backupPoint.m_time = this->text(curRow, Column_Index::Backup_Time); backupPoint.m_path = this->text(curRow, Column_Index::Prefix_Path); QString dev = this->text(curRow, Column_Index::Backup_Device); if (dev.startsWith(tr("Other machine:"))) backupPoint.m_iPosition = BackupPosition::OTHER; else if (dev.startsWith(tr("Customize:"))) backupPoint.m_iPosition = BackupPosition::CUSTOMIZE; else if (dev.startsWith(tr("Udisk Device:"))) backupPoint.m_iPosition = BackupPosition::UDISK; else backupPoint.m_iPosition = BackupPosition::LOCAL; emit this->selected(backupPoint); this->accept(); } }); } SelectRestorePoint::~SelectRestorePoint() {} void SelectRestorePoint::initTableWidget() { m_tableWidget->clearContents(); m_tableWidget->setRowCount(0); m_tableWidget->setSortingEnabled(false); // 等录入完数据后再排序 insertLines(getBackupPointList()); } void SelectRestorePoint::insertLines(const QList &backupPoints) { QString settingPath = Utils::getSysRootPath() + UDISK_UNIQUE_SETTINGS; settingPath.replace("//", "/"); QSettings udisk_setting(settingPath, QSettings::IniFormat); udisk_setting.setIniCodec(QTextCodec::codecForName("utf-8")); int indexOfRow = 0; for (const ParseBackupList::BackupPoint& backupPoint : backupPoints) { // 系统备份排除非系统备份且非增量系统备份 if (BackupPointType::SYSTEM == m_backupType && int(BackupType::BACKUP_SYSTEM) != backupPoint.m_type && int(BackupType::INC_BACKUP_SYSTEM) != backupPoint.m_type) continue; else if (BackupPointType::DATA == m_backupType && int(BackupType::BACKUP_DATA) != backupPoint.m_type && int(BackupType::INC_BACKUP_DATA) != backupPoint.m_type) continue; // 数据备份需要用户隔离 if (BackupPointType::DATA == m_backupType) { // 管理员可看自己用户进行的数据备份和无用户信息的数据备份(旧备份数据) if (GlobelBackupInfo::inst().isManager() && !backupPoint.m_userId.isEmpty() && backupPoint.m_userId != GlobelBackupInfo::inst().curUserId()) continue ; // 标准用户只能看自己进行的操作 if (!GlobelBackupInfo::inst().isManager() && backupPoint.m_userId != GlobelBackupInfo::inst().curUserId()) continue ; } // 不展示未完成的备份点 if (BACKUP_PARSE_STATE_SUCCESS_STRTING != backupPoint.m_state) continue; //hide factory backup // 华为机型向主线SP1看齐,出厂备份相关的保持和主线一致 // if (backupPoint.m_uuid == FACTORY_BACKUP_UUID && Utils::isHuawei990()) // continue; //udisk unique bool isOther = false; QString preDevPath(Utils::getSysRootPath()); preDevPath += "/media"; preDevPath.replace("//", "/"); if (backupPoint.m_path.startsWith(preDevPath)) { udisk_setting.beginGroup(backupPoint.m_backupName); QString localuuid = udisk_setting.value("uuid").toString(); udisk_setting.endGroup(); if (localuuid != backupPoint.m_uuid) { if (BackupPointType::SYSTEM != m_backupType) continue; if ( backupPoint.m_os.left(backupPoint.m_os.length() - 1) != SystemInfo::m_os.left(SystemInfo::m_os.length() - 1) || backupPoint.m_arch != SystemInfo::m_arch || backupPoint.m_archdetect != SystemInfo::m_archDetect ) { qDebug() << "localuuid is " << localuuid << ", backupUUID is " << backupPoint.m_uuid; continue; } else { isOther = true; } } } m_tableWidget->insertRow(indexOfRow); setItem(indexOfRow, Column_Index::Backup_Name, backupPoint.m_backupName); setItem(indexOfRow, Column_Index::UUID, backupPoint.m_uuid); setItem(indexOfRow, Column_Index::Backup_Time, backupPoint.m_time); setItem(indexOfRow, Column_Index::Backup_Size, backupPoint.m_size); QString prefixPath_to_device; if (backupPoint.m_iPosition == BackupPosition::CUSTOMIZE) { prefixPath_to_device = QObject::tr("Customize:") + backupPoint.m_path + BACKUP_SNAPSHOTS_PATH; } else if (backupPoint.m_path.startsWith(preDevPath)) { QStorageInfo storage(backupPoint.m_path); QString udiskName = storage.rootPath(); if (isOther) prefixPath_to_device = QObject::tr("Other machine:") + " " + udiskName + BACKUP_SNAPSHOTS_PATH; else prefixPath_to_device = QObject::tr("Udisk Device:") + " " + udiskName + BACKUP_SNAPSHOTS_PATH; } else { prefixPath_to_device = QObject::tr("Local Disk:") + " " + BACKUP_SNAPSHOTS_PATH; } setItem(indexOfRow, Column_Index::Backup_Device, prefixPath_to_device); setItem(indexOfRow, Column_Index::Backup_State, backupPoint.m_state); setItem(indexOfRow, Column_Index::Prefix_Path, backupPoint.m_path); ++indexOfRow; } if (0 < indexOfRow) { m_tableWidget->setSortingEnabled(true); // 等录入完数据后再排序 m_tableWidget->sortItems(Column_Index::Backup_Time, Qt::DescendingOrder); m_tableWidget->horizontalHeader()->setVisible(true); } else { m_labelEmpty->setVisible(true); m_labelEmptyText->setVisible(true); m_tableWidget->horizontalHeader()->setVisible(false); } }