diff --git a/aptpkginfo.cpp b/aptpkginfo.cpp index f766a4d..6a19ec4 100644 --- a/aptpkginfo.cpp +++ b/aptpkginfo.cpp @@ -11,6 +11,63 @@ AptPkgInfo::AptPkgInfo(QString pkgName, PkgSearchOption option) ReadAptData(); } +QStringList AptPkgInfo::SplitVersion(QString version) const +{ + SplitVersionStatus status = SplitVersionStatus::Checking; + QStringList versionList; + QString versionNumberTemp = ""; + QString versionLetterTemp = ""; + for(QString i: version) { + if(symbolList.contains(i)) { + // 如果是特殊字符 + + switch(status) { + case SplitVersionStatus::Checking: + versionList.append(versionNumberTemp); + break; + case SplitVersionStatus::MeetedEnglishLetter: + versionList.append(versionLetterTemp); + break; + } + versionList.append(i); + versionNumberTemp = ""; + versionLetterTemp = ""; + status = SplitVersionStatus::MeetSymbol; + continue; + } + if(i[0].isLetter()) { + switch(status) { + case SplitVersionStatus::Checking: + versionList.append(versionNumberTemp); + break; + } + versionLetterTemp += i; + versionNumberTemp = ""; + status = SplitVersionStatus::MeetedEnglishLetter; + continue; + } + switch(status) { + case SplitVersionStatus::MeetedEnglishLetter: + versionList.append(versionLetterTemp); + break; + } + versionNumberTemp += i; + status = SplitVersionStatus::Checking; + versionLetterTemp = ""; + } + if(status == SplitVersionStatus::Checking) { + versionList.append(versionNumberTemp); + } + + + return versionList; +} + +bool AptPkgInfo::CompareVersion(QString version1, QString version2) const +{ + return true; +} + void AptPkgInfo::ReadAptData() { this->aptData = QJsonObject(); @@ -36,7 +93,19 @@ void AptPkgInfo::ReadAptData() if(strTemp.replace(" ", "").replace("\n", "") == "") { // 空行 if(status == pkgDataStatus::IsContain) { - aptData.insert(pkgData.value("Package").toString(), pkgData); + QString addPkgName = pkgData.value("Package").toString(); + // 如果已经存在表中 + if(pkgData.contains(addPkgName)) { + // 新增数据 + QJsonObject allDataObject = aptData.value(addPkgName).toObject(); + // 判断版本大小,如果新于表内版本则更新 + QString dataVersion = allDataObject.value("Version").toString(); + + } + else { + aptData.insert(addPkgName, pkgData); + } + } status = pkgDataStatus::EmptyLine; pkgData = QJsonObject(); // 清空 @@ -149,3 +218,8 @@ QByteArray AptPkgInfo::GetCommandResult(QString command, QStringList argv, QProc process.close(); return result; } + +QJsonObject AptPkgInfo::get_data() const +{ + return aptData; +} diff --git a/aptpkginfo.h b/aptpkginfo.h index 35a13d8..5707c4c 100644 --- a/aptpkginfo.h +++ b/aptpkginfo.h @@ -28,6 +28,9 @@ public: QString get_description(QString pkgName) const; QString get_architecture(QString pkgName) const; + QJsonObject get_data() const; + + bool CompareVersion(QString version1, QString version2) const; private: @@ -35,6 +38,15 @@ private: QString pkgInfo; QJsonObject aptData; PkgSearchOption pkgSearchOption = PkgSearchOption::Equal; + QStringList symbolList = {"-", "~", "+"}; + enum SplitVersionStatus { + Checking, + MeetedEnglishLetter, + MeetSymbol, + Other + }; + + QStringList SplitVersion(QString version) const; enum pkgDataStatus { EmptyLine = 0, @@ -43,7 +55,10 @@ private: Readed = 3, None = 4, UnContain = 5, - IsContain = 6 + IsContain = 6, + IsContainOldVersion = 7, + IsContainNewVersion = 8, + IsContainSameVersion = 9 }; void ReadAptData(); diff --git a/kernelinformation.cpp b/kernelinformation.cpp index cbcf034..e76551c 100644 --- a/kernelinformation.cpp +++ b/kernelinformation.cpp @@ -14,6 +14,7 @@ void KernelInformation::LoadInfo() QJsonArray array; AptPkgInfo kernelManagerinfo = AptPkgInfo("gxde-kernel-manager", AptPkgInfo::PkgSearchOption::Equal); QStringList list = kernelManagerinfo.GetAptPackageList(); + qDebug() << kernelManagerinfo.get_data(); for(QString i: list) { QJsonObject object; kernelManagerinfo.SetPkgName(i); diff --git a/mainwindow.h b/mainwindow.h index d48e22f..0783128 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -47,6 +47,8 @@ private slots: void on_m_kernelShow_doubleClicked(const QModelIndex &index); + void on_actionSourceforge_triggered(); + private: Ui::MainWindow *ui; KernelInformation *kernelInformation; diff --git a/mainwindow.ui b/mainwindow.ui index 9367092..71c8f01 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -126,6 +126,7 @@ </property> <addaction name="actionGitee"/> <addaction name="actionGithub"/> + <addaction name="actionSourceforge"/> <addaction name="separator"/> <addaction name="actionDonate"/> <addaction name="separator"/> @@ -140,8 +141,15 @@ <addaction name="separator"/> <addaction name="actionUpgrade"/> </widget> + <widget class="QMenu" name="menuGrub"> + <property name="title"> + <string>Grub</string> + </property> + <addaction name="actionUpdate_Grub"/> + </widget> <addaction name="menuProgram"/> <addaction name="menuApt"/> + <addaction name="menuGrub"/> <addaction name="menuHelp"/> </widget> <widget class="QStatusBar" name="statusbar"/> @@ -185,6 +193,16 @@ <string>Donate</string> </property> </action> + <action name="actionSourceforge"> + <property name="text"> + <string>Sourceforge</string> + </property> + </action> + <action name="actionUpdate_Grub"> + <property name="text"> + <string>Update Grub</string> + </property> + </action> </widget> <resources> <include location="Resource.qrc"/>