Compare commits

...

5 Commits

Author SHA1 Message Date
4238d3e1fa 更新部分圖標
刪除不需要函數
2024-10-21 13:53:24 +08:00
35dd8cb465 源url连通性检测 2024-10-20 19:24:21 +08:00
f3dc14698d 修复拉取列表未清空全局变量问题
修复更新后不更新列表信息问题
2024-10-20 18:27:19 +08:00
fd35c2bf03 FIX CMakeLists 2024-10-20 17:05:10 +08:00
99fd3d61ce 新建清单分享界面-开发未完成 2024-10-18 19:38:24 +08:00
21 changed files with 303 additions and 162 deletions

View File

@ -110,7 +110,8 @@
"qheaderview": "cpp",
"qabstractlistmodel": "cpp",
"qtconcurrentrun": "cpp",
"*.in": "cpp"
"*.in": "cpp",
"qactiongroup": "cpp"
},
"Codegeex.RepoIndex": true
}

View File

@ -1,9 +1,9 @@
#cmake
cmake_minimum_required(VERSION 3.19)
set(VCPKG_ROOT "F:/SourceCode/vcpkg")
set(CMAKE_TOOLCHAIN_FILE "F:/SourceCode/vcpkg/scripts/buildsystems/vcpkg.cmake")
set(VCPKG_TARGET_TRIPLET "x64-mingw-static")
SET(VCPKG_ROOT "F:/SourceCode/vcpkg")
SET(CMAKE_TOOLCHAIN_FILE "F:/SourceCode/vcpkg/scripts/buildsystems/vcpkg.cmake")
SET(VCPKG_TARGET_TRIPLET "x64-mingw-static")
SET(CMAKE_C_COMPILER "x86_64-w64-mingw32-gcc.exe")
SET(CMAKE_CXX_COMPILER "x86_64-w64-mingw32-g++.exe")
#
@ -29,6 +29,7 @@ SET(CMAKE_CXX_FLAGS"-Wall -Wextra")
SET(CMAKE_CXX_FLAGS_RELEASE"-O3 -s")
SET(CMAKE_BUILD_TYPE "Release")
MESSAGE(STATUS ${PROJECT_BINARY_DIR})
MESSAGE(STATUS "----------编译模式 START-------------")
if(NOT CMAKE_BUILD_TYPE)
MESSAGE(STATUS "[CMAKE_BUILD_TYPE]当前值[Debug]")
@ -37,13 +38,19 @@ if(NOT CMAKE_BUILD_TYPE)
else()
MESSAGE(STATUS "[CMAKE_BUILD_TYPE]当前值[Release]")
SET(CMAKE_BUILD_TYPE "Release")
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/release)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/release/)
endif()
MESSAGE(STATUS "----------编译模式 END---------------")
#QT .cmake
#QT
SET(QT_DIR "D:/Dev/Qt/6.8.0/mingw1310_static_x64/lib/cmake")
SET(QT_STATU "static")
if(QT_STATU STREQUAL "dynamic")
SET(QT_DIR "D:/Dev/Qt/6.8.0/mingw_64/lib/cmake")
else()
SET(QT_DIR "D:/Dev/Qt/6.8.0/mingw1310_static_x64/lib/cmake")
endif()
SET(JSON ${PROJECT_SOURCE_DIR}/3rdparty/json)
@ -102,12 +109,10 @@ endif()
include_directories(${JSON}/include)
#XSteamcpp
FILE(GLOB src "${PROJECT_SOURCE_DIR}/src/*.cpp" "${PROJECT_SOURCE_DIR}/src/*.h")
FILE(GLOB src_xsteam "${PROJECT_SOURCE_DIR}/src/*.cpp" "${PROJECT_SOURCE_DIR}/src/*.h")
SET(PROJECT_SOURCES ${src_xsteam})
SET(PROJECT_SOURCES
main.cpp
${src}
)
# qFatalqDebug
LIST(APPEND CMAKE_CXX_FLAGS "-DQT_NO_DEBUG_OUTPUT")
@ -153,12 +158,7 @@ target_link_options(${PROJECT_NAME} PUBLIC -Wl,--allow-multiple-definition)
# GCC
message(STATUS "G++ version: ${CMAKE_CXX_COMPILER_VERSION}")
# CMAKE_
foreach(var IN LISTS CMAKE_VARIABLES)
if(var MATCHES "^CMAKE_")
message(STATUS "${var} = ${${var}}")
endif()
endforeach()
# Qt
SET(QT_VERSION_STR "${Qt6_VERSION}")
# Qt

View File

@ -2,6 +2,9 @@
<qresource prefix="/">
<file>res/img/btn/btn_setting.png</file>
<file>res/img/btn/btn_about.png</file>
<file>res/img/btn/net_ok.png</file>
<file>res/img/btn/net_error.png</file>
<file>res/img/btn/net_wait.png</file>
<file>res/img/xsteam.ico</file>
<file>res/img/xsteam.png</file>
<file>res/bin/luapacka.exe</file>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 791 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 966 B

BIN
res/img/btn/net_error.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 B

BIN
res/img/btn/net_ok.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

BIN
res/img/btn/net_wait.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 B

View File

@ -8,7 +8,7 @@ QPushButton#ico_button{
image:url(:/res/img/xsteam.png);
border:none;
}
QLabel#HEAD_STR,QLabel#SRC_SERVER,QLabel#GAME_UID,QLabel#VERSION_TIPS,QLabel#STATE_TIPS,QLabel#VERSION_TIPS_TXT{
QLabel#HEAD_STR,QLabel#SRC_SERVER,QLabel#GAME_UID,QLabel#VERSION_TIPS,QLabel#STATE_TIPS,QLabel#VERSION_TIPS_TXT,QLabel#INFO{
color:#F2F2F2;
}
QPushButton#BTN_SETS{

View File

@ -13,13 +13,13 @@ QPushButton#ico_button{
border:none;
}
QLabel#HEAD_STR,QLabel#SRC_SERVER,QLabel#GAME_UID,QLabel#VERSION_TIPS,QLabel#STATE_TIPS,QLabel#VERSION_TIPS_TXT{
QLabel#HEAD_STR,QLabel#SRC_SERVER,QLabel#GAME_UID,QLabel#VERSION_TIPS,QLabel#STATE_TIPS,QLabel#VERSION_TIPS_TXT,QLabel#INFO{
color:#404040;
}
QPushButton:hover{
padding-left:1px;
padding-top:1px;
padding-left:1px;
padding-top:1px;
}
QPushButton#BTN_SETS{

View File

@ -1,7 +1,7 @@
#include <QApplication>
#include "src/sui.h"
#include "sui.h"
#include <QTranslator>
#include "src/xsteam_base_ex.h"
#include "xsteam_base_ex.h"
int main(int argc, char *argv[])
{

View File

@ -1,50 +1,50 @@
#include "sui_title.h"
sui_title::sui_title(QWidget *parent)
: QWidget (parent),
: QWidget(parent),
m_menu(nullptr),
s_menu(nullptr),
f_menu(nullptr)
{
m_parent=parent;
//给成员变量申请内存
m_parent = parent;
// 给成员变量申请内存
m_icon_button = new QPushButton(/*this*/);
m_min_button = new QPushButton(this);
m_max_button = new QPushButton(this);
m_close_button = new QPushButton(this);
//初始化图标Label
m_icon_button->setFixedSize(35,35);
// 初始化图标Label
m_icon_button->setFixedSize(35, 35);
m_icon_button->setAutoFillBackground(true);
m_icon_button->setFlat(true);
//设置按钮的固定大小、图片、取消边框
m_min_button->setIconSize(QSize(25,25));
// 设置按钮的固定大小、图片、取消边框
m_min_button->setIconSize(QSize(25, 25));
m_min_button->setAutoFillBackground(true);
m_min_button->setFlat(true);
//--
m_max_button->setIconSize(QSize(25,25));
m_max_button->setIconSize(QSize(25, 25));
m_max_button->setAutoFillBackground(true);
m_max_button->setFlat(true);
//--
m_close_button->setIconSize(QSize(25,25));
m_close_button->setIconSize(QSize(25, 25));
m_close_button->setAutoFillBackground(true);
m_close_button->setFlat(true);
//设置窗口部件的名称
// 设置窗口部件的名称
setObjectName(tr("sui_title"));
m_icon_button->setObjectName(tr("ico_button"));
m_min_button->setObjectName(tr("min_button"));
m_max_button->setObjectName(tr("max_button"));
m_close_button->setObjectName(tr("close_button"));
//给按钮设置静态tooltip当鼠标移上去时显示tooltip
// 给按钮设置静态tooltip当鼠标移上去时显示tooltip
m_min_button->setToolTip(tr("最小化"));
m_max_button->setToolTip(tr("最大化"));
m_close_button->setToolTip(tr("关闭"));
//标题栏布局
m_title_label=new QLabel(this);
// 标题栏布局
m_title_label = new QLabel(this);
m_title_label->setAlignment(Qt::AlignCenter);
m_title_label->setObjectName(tr("HEAD_STR"));
QFont font = m_title_label->font();
font.setPointSize(28);
font.setPointSize(28);
m_title_label->setFont(font);
m_layout = new QHBoxLayout(this);
m_layout->setAlignment(Qt::AlignCenter);
@ -58,9 +58,9 @@ sui_title::sui_title(QWidget *parent)
m_layout->setSpacing(5);
m_layout->setContentsMargins(0, 0, 0, 0);
setFixedHeight(40);
setLayout(m_layout);
setLayout(m_layout);
QFontDatabase database;
foreach(const QString & family, database.families(QFontDatabase::SimplifiedChinese))
foreach (const QString &family, database.families(QFontDatabase::SimplifiedChinese))
{
font_table.append(family);
}
@ -73,8 +73,9 @@ sui_title::sui_title(QWidget *parent)
sui_title::~sui_title()
{
}
void sui_title::connect_slots(){
//连接三个按钮的信号槽3
void sui_title::connect_slots()
{
// 连接三个按钮的信号槽3
connect(m_icon_button, SIGNAL(clicked(bool)), this, SLOT(slots_ico_menu()));
connect(m_min_button, SIGNAL(clicked(bool)), this, SLOT(on_clicked()));
connect(m_max_button, SIGNAL(clicked(bool)), this, SLOT(on_clicked()));
@ -83,95 +84,118 @@ void sui_title::connect_slots(){
void sui_title::slots_ico_menu()
{
m_menu = new QMenu();
//外观
if(!s_menu){
QActionGroup* s_QGroup = new QActionGroup(this);
// 外观
if (!s_menu)
{
QActionGroup *s_QGroup = new QActionGroup(this);
s_menu = new QMenu(tr("外观设置"));
for(int i=0;i<=style_table.count()-1;i++){
QString sName=QFileInfo(style_table[i]).baseName();
QAction* s_Action=new QAction(sName,s_QGroup);
for (int i = 0; i <= style_table.count() - 1; i++)
{
QString sName = QFileInfo(style_table[i]).baseName();
QAction *s_Action = new QAction(sName, s_QGroup);
s_Action->setObjectName(QString::number(i));
s_Action->setCheckable(true);
if(i==_data.x_config.style){
if (i == _data.x_config.style)
{
s_Action->setChecked(true);
}
connect(s_Action,SIGNAL(triggered (bool)),this,SLOT(slots_set_style_change()));
connect(s_Action, SIGNAL(triggered(bool)), this, SLOT(slots_set_style_change()));
s_menu->addAction(s_Action);
}
}
//字体
if(!f_menu){
QActionGroup* f_QGroup = new QActionGroup(this);
// 字体
if (!f_menu)
{
QActionGroup *f_QGroup = new QActionGroup(this);
f_menu = new QMenu(tr("字体设置"));
for(int i=0;i<=font_table.count()-1;i++){
QAction* f_Action=new QAction(font_table[i],f_QGroup);
for (int i = 0; i <= font_table.count() - 1; i++)
{
QAction *f_Action = new QAction(font_table[i], f_QGroup);
f_Action->setObjectName(QString::number(i));
f_Action->setCheckable(true);
if(i==_data.x_config.font){
if (i == _data.x_config.font)
{
f_Action->setChecked(true);
}
connect(f_Action,SIGNAL(triggered (bool)),this,SLOT(slots_set_font_change()));
connect(f_Action, SIGNAL(triggered(bool)), this, SLOT(slots_set_font_change()));
f_menu->addAction(f_Action);
}
QAction *separator = new QAction(nullptr);
separator->setSeparator(true);
f_menu->addAction(separator);
QActionGroup* b_QGroup = new QActionGroup(this);
QAction* b_Action=new QAction("字体加粗",b_QGroup);
QActionGroup *b_QGroup = new QActionGroup(this);
QAction *b_Action = new QAction("字体加粗", b_QGroup);
b_Action->setObjectName("font_bold");
b_Action->setCheckable(true);
if(_data.x_config.font_bold){
if (_data.x_config.font_bold)
{
b_Action->setChecked(true);
}
connect(b_Action,SIGNAL(triggered (bool)),this,SLOT(slots_set_font_change()));
connect(b_Action, SIGNAL(triggered(bool)), this, SLOT(slots_set_font_change()));
f_menu->addAction(b_Action);
}
m_menu->addMenu(s_menu);
m_menu->addMenu(f_menu);
m_menu->exec(QCursor::pos());
delete m_menu;
m_menu=nullptr;
m_menu = nullptr;
}
void sui_title::slots_set_style_change()
{
if(sender()!=nullptr){
_data.x_config.style=sender()->objectName().toInt();
if (sender() != nullptr)
{
_data.x_config.style = sender()->objectName().toInt();
}
change_style(_data.x_config.style);
}
void sui_title::slots_set_font_change()
{
if(sender()!=nullptr){
if(sender()->objectName()=="font_bold"){
if(_data.x_config.font_bold){
_data.x_config.font_bold=0;
((QAction*)sender())->setChecked(false);
}else{
_data.x_config.font_bold=1;
((QAction*)sender())->setChecked(true);
}
}else{
_data.x_config.font=sender()->objectName().toInt();
}
}
if (sender() != nullptr)
{
if (sender()->objectName() == "font_bold")
{
if (_data.x_config.font_bold)
{
_data.x_config.font_bold = 0;
((QAction *)sender())->setChecked(false);
}
else
{
_data.x_config.font_bold = 1;
((QAction *)sender())->setChecked(true);
}
}
else
{
_data.x_config.font = sender()->objectName().toInt();
}
}
QFont font;
if(!font_table[_data.x_config.font].isEmpty()){
if (!font_table[_data.x_config.font].isEmpty())
{
font.setFamily(font_table[_data.x_config.font]);
font.setPointSize(10);
if( _data.x_config.font_bold){
if (_data.x_config.font_bold)
{
font.setBold(true);
}else{
}
else
{
font.setBold(false);
}
}
QApplication::setFont(font);
}else {
qDebug()<<"Failed to load font.";
}
else
{
qDebug() << "Failed to load font.";
}
change_style(_data.x_config.style);
}
void sui_title::change_style(int index){
QString style=tr(":/res/qss/")+style_table[index];
void sui_title::change_style(int index)
{
_data.x_config.style=index;
QString style = tr(":/res/qss/") + style_table[index];
QFile qss(style);
if (qss.open(QFile::ReadOnly))
{
@ -183,61 +207,24 @@ void sui_title::change_style(int index){
m_parent->update();
}
//双击标题栏进行界面的最大化/还原
// 双击标题栏进行界面的最大化/还原
void sui_title::mouseDoubleClickEvent(QMouseEvent *event)
{
Q_UNUSED(event); //没有实质性的作用只是用来允许event可以不使用用来避免编译器警告
Q_UNUSED(event); // 没有实质性的作用只是用来允许event可以不使用用来避免编译器警告
emit m_max_button->clicked();
}
//使用事件过滤器监听标题栏所在的窗体,所以当窗体标题、图标等信息发生改变时,标题栏也应该随之改变
bool sui_title::eventFilter(QObject *obj, QEvent *event)
{
qDebug()<<event->type();
switch ( event->type() ) //判断发生事件的类型
{
case QEvent::WindowTitleChange: //窗口标题改变事件
{
QWidget *pWidget = qobject_cast<QWidget *>(obj); //获得发生事件的窗口对象
if (pWidget)
{
//窗体标题改变,则标题栏标题也随之改变
//m_pTitleLabel->setText(pWidget->windowTitle());
return true;
}
}
break;
case QEvent::WindowIconChange: //窗口图标改变事件
{
QWidget *pWidget = qobject_cast<QWidget *>(obj);
if (pWidget)
{
//窗体图标改变,则标题栏图标也随之改变
QIcon icon = pWidget->windowIcon();
//m_pIconLabel->setPixmap(icon.pixmap(m_pIconLabel->size()));
return true;
}
}
break;
case QEvent::Resize:
up_maximize(); //最大化/还原
return true;
default:
return QWidget::eventFilter(obj, event);
}
return QWidget::eventFilter(obj, event);
}
//进行最小化、最大化/还原、关闭操作
// 进行最小化、最大化/还原、关闭操作
void sui_title::on_clicked()
{
//QObject::Sender()返回发送信号的对象的指针返回类型为QObject *
// QObject::Sender()返回发送信号的对象的指针返回类型为QObject *
QPushButton *pButton = qobject_cast<QPushButton *>(sender());
QWidget *pWindow = this->window(); //获得标题栏所在的窗口
QWidget *pWindow = this->window(); // 获得标题栏所在的窗口
if (pWindow->isWindow())
{
//判断发送信号的对象使哪个按钮
// 判断发送信号的对象使哪个按钮
if (pButton == m_min_button)
{
pWindow->showMinimized(); //窗口最小化显示
pWindow->showMinimized(); // 窗口最小化显示
}
else if (pButton == m_max_button)
{
@ -250,30 +237,31 @@ void sui_title::on_clicked()
}
}
}
//最大化/还原
// 最大化/还原
void sui_title::up_maximize()
{
QWidget *pWindow = this->window(); //获得标题栏所在的窗口
QWidget *pWindow = this->window(); // 获得标题栏所在的窗口
if (pWindow->isWindow())
{
bool bMaximize = pWindow->isFullScreen(); //判断窗口是不是最大化状态是则返回true否则返回false
bool bMaximize = pWindow->isFullScreen(); // 判断窗口是不是最大化状态是则返回true否则返回false
if (bMaximize)
{
//目前窗口是最大化状态,则最大化/还原的toolTip设置为"Restore"
// 目前窗口是最大化状态,则最大化/还原的toolTip设置为"Restore"
m_max_button->setToolTip(tr("Restore"));
//设置按钮的属性名为"maximizeProperty"
// 设置按钮的属性名为"maximizeProperty"
m_max_button->setProperty("maximizeProperty", tr("restore"));
}
else
{
//目前窗口是还原状态,则最大化/还原的toolTip设置为"Maximize"
// 目前窗口是还原状态,则最大化/还原的toolTip设置为"Maximize"
m_max_button->setToolTip(tr("Maximize"));
//设置按钮的属性名为"maximizeProperty"
// 设置按钮的属性名为"maximizeProperty"
m_max_button->setProperty("maximizeProperty", tr("maximize"));
}
m_max_button->setStyle(QApplication::style());
}
}
void sui_title::set_title_txt(QString str){
void sui_title::set_title_txt(QString str)
{
m_title_label->setText(str);
}

View File

@ -13,8 +13,10 @@
#include <QFileInfo>
#include <QMenu>
#include <QDir>
#include <QStyleFactory>
#include <QActionGroup>
#include <QFontDatabase>
#include <QStyleFactory>
#include "xsteam_ex.h"
class sui_title: public QWidget
{
@ -26,8 +28,6 @@ public:
protected:
//双击标题栏进行界面的最大化/还原
void mouseDoubleClickEvent(QMouseEvent *event);
//设置界面标题与图标
bool eventFilter(QObject *obj, QEvent *event);
private slots:
//进行最小化、最大化/还原、关闭操作
void on_clicked();

View File

@ -2,17 +2,19 @@
xsteam_curl::xsteam_curl()
{
curl=nullptr;
curl = nullptr;
}
xsteam_curl::~xsteam_curl()
{
}
void xsteam_curl::init_curl(){
if(curl!=nullptr){
void xsteam_curl::init_curl()
{
if (curl != nullptr)
{
curl_easy_cleanup(curl);
curl=nullptr;
curl = nullptr;
}
curl=curl_easy_init();
curl = curl_easy_init();
}
size_t call_info_data(void *buffer, size_t sz, size_t nmemb, void *writer)
{
@ -27,10 +29,10 @@ size_t call_write_data(void *ptr, size_t size, size_t nmemb, void *stream)
size_t written = fwrite(ptr, size, nmemb, (FILE *)stream);
return written;
}
std::string xsteam_curl::get_steam_id_info(std::string api_url,std::string _c_uid)
std::string xsteam_curl::get_steam_id_info(std::string api_url, std::string _c_uid)
{
std::string u_str = api_url + _c_uid;
std::string strRsp;
std::string u_str = api_url + _c_uid;
std::string strRsp;
init_curl();
CURLcode res = CURLE_QUOTE_ERROR;
int retry = 3;
@ -78,13 +80,14 @@ std::string xsteam_curl::get_steam_id_info(std::string api_url,std::string _c_ui
return strRsp;
}
bool xsteam_curl::get_steam_header_ico(std::string logo_url,std::string _c_uid)
bool xsteam_curl::get_steam_header_ico(std::string logo_url, std::string _c_uid)
{
std::string base_str=QDir::currentPath().toStdString();
std::string base_str = QDir::currentPath().toStdString();
QDir dir(QString::fromStdString(base_str + "/save/img"));
std::string u_str = logo_url + _c_uid + "/header.jpg";
std::string s_str = base_str + "/save/img/" + _c_uid + ".jpg";
if(!dir.exists()){
std::string u_str = logo_url + _c_uid + "/header.jpg";
std::string s_str = base_str + "/save/img/" + _c_uid + ".jpg";
if (!dir.exists())
{
QDir().mkpath(QString::fromStdString(base_str + "/save/img"));
}
init_curl();
@ -118,7 +121,47 @@ bool xsteam_curl::get_steam_header_ico(std::string logo_url,std::string _c_uid)
return true;
}
catch (std::runtime_error &e)
{
{
return false;
}
}
bool xsteam_curl::get_url_state(std::string url)
{
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
std::string strTmpStr;
std::string strRsp;
int retry = 3;
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &strTmpStr);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
res = curl_easy_perform(curl);
if (strTmpStr.data() == nullptr)
{
if (retry == 0)
{
return false;
}
res = curl_easy_perform(curl);
retry--;
}
if (QString::fromStdString(strTmpStr).contains(QStringLiteral("404"), Qt::CaseSensitive) ||
QString::fromStdString(strTmpStr).contains(QStringLiteral("500"), Qt::CaseSensitive) ||
QString::fromStdString(strTmpStr).contains(QStringLiteral("403"), Qt::CaseSensitive) ||
QString::fromStdString(strTmpStr).contains(QStringLiteral("502"), Qt::CaseSensitive) ||
res == CURLE_QUOTE_ERROR)
{
return false;
}else{
return true;
}
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return false;
}

View File

@ -20,6 +20,7 @@ public:
~xsteam_curl();
std::string get_steam_id_info(std::string,std::string _c_uid);
bool get_steam_header_ico(std::string,std::string _c_uid);
bool get_url_state(std::string url);
private:
void init_curl();
CURL *curl;

View File

@ -257,7 +257,6 @@ bool xsteam_curl_steam_id_app_info(UidData &u_data)
}
if (u_data.name != "")
{
//_data.u_data.push_back(u_data);
return true;
}
return false;

View File

@ -92,6 +92,7 @@ bool xsteam_git::branch_or_tags_remote_array()
out << std::setw(4) << ref_name.substr(local_head_str.size()) << "\n";
}
}
_data.s_ex_data[src_name].clear();
_data.s_ex_data.insert(std::pair<std::string, std::vector<std::string>>(src_name, tags));
out.close();
free_git_ext();

View File

@ -0,0 +1,13 @@
#include "xsteam_push_manifest.h"
xsteam_push_manifest::xsteam_push_manifest(/* args */)
{
init_push_manifest_ui();
}
xsteam_push_manifest::~xsteam_push_manifest()
{
}
void xsteam_push_manifest::init_push_manifest_ui(){
setWindowTitle(tr("XSteam清单分享"));
}

View File

@ -0,0 +1,36 @@
#ifndef XSTEAM_PUSH_MANIFEST_H
#define XSTEAM_PUSH_MANIFEST_H
#include <QDialog>
#include <QMutex>
class xsteam_push_manifest:public QDialog
{
Q_OBJECT
public:
static xsteam_push_manifest *Instance()
{
if (!_instance)
{
static QMutex mutex;
mutex.lock();
if (!_instance)
{
_instance = new xsteam_push_manifest();
}
mutex.unlock();
}
return _instance;
}
private:
xsteam_push_manifest();
~xsteam_push_manifest();
xsteam_push_manifest(const xsteam_push_manifest &other);
const xsteam_push_manifest &operator=(const xsteam_push_manifest &other);
static xsteam_push_manifest* _instance;
static QMutex mutex;
void init_push_manifest_ui();
};
xsteam_push_manifest *xsteam_push_manifest::_instance = {};
QMutex xsteam_push_manifest::mutex;
#endif //XSTEAM_PUSH_MANIFEST_H

View File

@ -37,8 +37,9 @@ void xsteam_ui::xsteam_init_main_layout()
}
void xsteam_ui::xsteam_init_info_layout()
{
info_layout=new QHBoxLayout();
info_txt_tag=new QLabel(tr("本工具建议配合SteamTools和Steam++使用"));
info_layout = new QHBoxLayout();
info_txt_tag = new QLabel(tr("本工具建议配合SteamTools和Steam++使用"));
info_txt_tag->setObjectName("INFO");
info_layout->addItem(sparcer_item);
info_layout->addWidget(info_txt_tag);
info_layout->addItem(sparcer_item);
@ -49,6 +50,7 @@ void xsteam_ui::xsteam_init_mind_layout()
server_tag = new QLabel(tr("源数据:"));
server_tag->setObjectName("SRC_SERVER");
server_txt = new QComboBox();
server_state=new QLabel();
btn_server_edit = new QPushButton(tr("编辑源"));
btn_server_edit->setObjectName("EDIT");
btn_fetch_src_data = new QPushButton(tr("拉取"));
@ -59,14 +61,19 @@ void xsteam_ui::xsteam_init_mind_layout()
btn_run_steam->setObjectName("RUN_STEAM");
btn_run_steamdb = new QPushButton(tr("SteamDB"));
btn_run_steamdb->setObjectName("STEAM_DB");
btn_push_manifest = new QPushButton(tr("清单分享"));
btn_push_manifest->setObjectName("PUSH_MANIFEST");
btn_push_manifest->setVisible(false);
server_layout->addWidget(server_tag);
server_layout->addWidget(server_txt);
server_layout->addWidget(server_state);
server_layout->addWidget(btn_fetch_src_data);
server_layout->addWidget(btn_server_edit);
server_layout->addWidget(btn_run_steam);
server_layout->addWidget(btn_run_steamtools);
server_layout->addWidget(btn_run_steamdb);
server_layout->addWidget(btn_push_manifest);
server_layout->setStretch(0, 1);
server_layout->setStretch(1, 7);
server_layout->setStretch(2, 1);
@ -132,7 +139,7 @@ void xsteam_ui::xsteam_init_mind_layout()
ip_data_layout->setStretch(0, 8);
ip_data_layout->setStretch(1, 2);
mind_layout->addLayout(server_layout);
mind_layout->addLayout(info_layout);
mind_layout->addLayout(ip_data_layout);
@ -197,6 +204,39 @@ void xsteam_ui::xsteam_init_connect()
connect(ip_all_dlc_table, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slots_rightMenu(QPoint)));
connect(ip_in_dlc_table, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slots_rightMenu(QPoint)));
connect(btn_dlc_push, SIGNAL(clicked()), this, SLOT(slots_get_uid_dlcs()));
connect(btn_push_manifest, SIGNAL(clicked()), this, SLOT(slots_push_manifest()));
connect(server_txt, SIGNAL(currentIndexChanged(int)), this, SLOT(slots_change_src_state(int)));
}
void xsteam_ui::slots_change_src_state(int index)
{
QPixmap xs_pixmap;
std::string url;
xs_pixmap.load(":res/img/btn/net_wait.png");
xs_pixmap = xs_pixmap.scaled(20,20,Qt::KeepAspectRatio,Qt::SmoothTransformation);
server_state->setPixmap(xs_pixmap);
for (auto &i : _data.s_data)
{
if (i.src_name == server_txt->itemText(index))
{
url = i.src_url;
break;
}
}
if (url != "")
{
QFuture<void> future = QtConcurrent::run([=](std::string _url,QPixmap _pixmap) {
xsteam_curl* xs_curl=new xsteam_curl();
if(xs_curl->get_url_state(_url)){
_pixmap.load(":/res/img/btn/net_ok.png");
}else{
_pixmap.load(":/res/img/btn/net_error.png");
}
_pixmap=_pixmap.scaled(20,20,Qt::KeepAspectRatio,Qt::SmoothTransformation);
server_state->setPixmap(_pixmap);
delete xs_curl;
xs_curl=nullptr;
},url,xs_pixmap);
}
}
void xsteam_ui::slots_get_uid_dlcs()
{
@ -417,9 +457,9 @@ void xsteam_ui::slots_server_combobox_load_data()
server_txt->setCurrentIndex(0);
}
void xsteam_ui::table_load_ui_data()
{
{
for (auto x : _data.u_data)
{
{
ip_uid_table->item_append(x, VIEW_MODE::UID_INFO);
}
}
@ -436,6 +476,13 @@ void xsteam_ui::slots_run_steam_steamtools()
xsteam_run_steam_steamtools(RUN_MODE::STEAMTOOLS);
}
}
void xsteam_ui::slots_push_manifest()
{
xs_push_manifest = xsteam_push_manifest::Instance();
xs_push_manifest->setMaximumSize(((QWidget *)this->parent())->width(), ((QWidget *)this->parent())->height() - 25);
xs_push_manifest->setGeometry(((QWidget *)this->parent())->geometry());
xs_push_manifest->exec();
}
void xsteam_ui::slots_open_server_edit()
{
xs_src_edit_ui = xsteam_src_edit_ui::Instance();
@ -458,6 +505,7 @@ void xsteam_ui::slots_open_about()
xs_about_ui->setGeometry(((QWidget *)this->parent())->geometry());
xs_about_ui->exec();
}
void xsteam_ui::slots_table_append(UidData u_data)
{
if (xs_state == PUSH_MODE::PUSH_ADD)
@ -480,6 +528,8 @@ void xsteam_ui::slots_table_append(UidData u_data)
break;
}
}
ip_uid_table->item_clear();
table_load_ui_data();
slots_msg_text(u_data.uid + "更新完毕!");
}
QFuture<void> future = QtConcurrent::run([=]()

View File

@ -16,6 +16,7 @@
#include "xsteam_about_ui.h"
#include "xsteam_view.h"
#include "xsteam_git_fetch.h"
#include "xsteam_push_manifest.h"
#include <version.h>
class xsteam_ui:public QWidget{
@ -40,6 +41,7 @@ private:
QHBoxLayout* server_layout;
QLabel* server_tag;
QComboBox* server_txt;
QLabel* server_state;
QPushButton* btn_server_edit;
QPushButton* btn_fetch_src_data;
QPushButton* btn_run_steam;
@ -55,6 +57,7 @@ private:
QPushButton* btn_uid_update;
QPushButton* btn_dlc_push;
QPushButton* btn_run_steamdb;
QPushButton* btn_push_manifest;
QHBoxLayout* ip_data_layout;
//入库游戏列表
@ -79,6 +82,7 @@ private:
xsteam_set_ui * xs_sets_ui;
xsteam_about_ui* xs_about_ui;
xsteam_git_fetch* xs_git_fetch;
xsteam_push_manifest* xs_push_manifest;
QSpacerItem * sparcer_item = new QSpacerItem(0,0,QSizePolicy::Expanding,QSizePolicy::Fixed);
UidData xs_data;
@ -88,6 +92,7 @@ private slots:
void slots_open_setting();
void slots_open_about();
void slots_open_steamdb();
void slots_push_manifest();
void slots_imput_uid_push();
void slots_server_combobox_load_data();
void slots_disable_enable_function(bool state);
@ -102,6 +107,7 @@ private slots:
void slots_in_dlc_delete();
void slots_in_dlc_add();
void slots_imput_update_uid_push();
void slots_change_src_state(int);
signals:
void signals_src_combobox_update();
};