初步实现版本号切割

This commit is contained in:
gfdgd xi 2024-05-18 15:36:03 +08:00
parent ee34925def
commit ebe3473d15
5 changed files with 112 additions and 2 deletions

@ -11,6 +11,63 @@ AptPkgInfo::AptPkgInfo(QString pkgName, PkgSearchOption option)
ReadAptData(); 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() void AptPkgInfo::ReadAptData()
{ {
this->aptData = QJsonObject(); this->aptData = QJsonObject();
@ -36,7 +93,19 @@ void AptPkgInfo::ReadAptData()
if(strTemp.replace(" ", "").replace("\n", "") == "") { if(strTemp.replace(" ", "").replace("\n", "") == "") {
// 空行 // 空行
if(status == pkgDataStatus::IsContain) { 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; status = pkgDataStatus::EmptyLine;
pkgData = QJsonObject(); // 清空 pkgData = QJsonObject(); // 清空
@ -149,3 +218,8 @@ QByteArray AptPkgInfo::GetCommandResult(QString command, QStringList argv, QProc
process.close(); process.close();
return result; return result;
} }
QJsonObject AptPkgInfo::get_data() const
{
return aptData;
}

@ -28,6 +28,9 @@ public:
QString get_description(QString pkgName) const; QString get_description(QString pkgName) const;
QString get_architecture(QString pkgName) const; QString get_architecture(QString pkgName) const;
QJsonObject get_data() const;
bool CompareVersion(QString version1, QString version2) const;
private: private:
@ -35,6 +38,15 @@ private:
QString pkgInfo; QString pkgInfo;
QJsonObject aptData; QJsonObject aptData;
PkgSearchOption pkgSearchOption = PkgSearchOption::Equal; PkgSearchOption pkgSearchOption = PkgSearchOption::Equal;
QStringList symbolList = {"-", "~", "+"};
enum SplitVersionStatus {
Checking,
MeetedEnglishLetter,
MeetSymbol,
Other
};
QStringList SplitVersion(QString version) const;
enum pkgDataStatus { enum pkgDataStatus {
EmptyLine = 0, EmptyLine = 0,
@ -43,7 +55,10 @@ private:
Readed = 3, Readed = 3,
None = 4, None = 4,
UnContain = 5, UnContain = 5,
IsContain = 6 IsContain = 6,
IsContainOldVersion = 7,
IsContainNewVersion = 8,
IsContainSameVersion = 9
}; };
void ReadAptData(); void ReadAptData();

@ -14,6 +14,7 @@ void KernelInformation::LoadInfo()
QJsonArray array; QJsonArray array;
AptPkgInfo kernelManagerinfo = AptPkgInfo("gxde-kernel-manager", AptPkgInfo::PkgSearchOption::Equal); AptPkgInfo kernelManagerinfo = AptPkgInfo("gxde-kernel-manager", AptPkgInfo::PkgSearchOption::Equal);
QStringList list = kernelManagerinfo.GetAptPackageList(); QStringList list = kernelManagerinfo.GetAptPackageList();
qDebug() << kernelManagerinfo.get_data();
for(QString i: list) { for(QString i: list) {
QJsonObject object; QJsonObject object;
kernelManagerinfo.SetPkgName(i); kernelManagerinfo.SetPkgName(i);

@ -47,6 +47,8 @@ private slots:
void on_m_kernelShow_doubleClicked(const QModelIndex &index); void on_m_kernelShow_doubleClicked(const QModelIndex &index);
void on_actionSourceforge_triggered();
private: private:
Ui::MainWindow *ui; Ui::MainWindow *ui;
KernelInformation *kernelInformation; KernelInformation *kernelInformation;

@ -126,6 +126,7 @@
</property> </property>
<addaction name="actionGitee"/> <addaction name="actionGitee"/>
<addaction name="actionGithub"/> <addaction name="actionGithub"/>
<addaction name="actionSourceforge"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionDonate"/> <addaction name="actionDonate"/>
<addaction name="separator"/> <addaction name="separator"/>
@ -140,8 +141,15 @@
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionUpgrade"/> <addaction name="actionUpgrade"/>
</widget> </widget>
<widget class="QMenu" name="menuGrub">
<property name="title">
<string>Grub</string>
</property>
<addaction name="actionUpdate_Grub"/>
</widget>
<addaction name="menuProgram"/> <addaction name="menuProgram"/>
<addaction name="menuApt"/> <addaction name="menuApt"/>
<addaction name="menuGrub"/>
<addaction name="menuHelp"/> <addaction name="menuHelp"/>
</widget> </widget>
<widget class="QStatusBar" name="statusbar"/> <widget class="QStatusBar" name="statusbar"/>
@ -185,6 +193,16 @@
<string>Donate</string> <string>Donate</string>
</property> </property>
</action> </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> </widget>
<resources> <resources>
<include location="Resource.qrc"/> <include location="Resource.qrc"/>