Skip to content

Commit ecc65aa

Browse files
committedNov 13, 2021
added downloading progressbar
1 parent 09fe6d5 commit ecc65aa

10 files changed

+255
-267
lines changed
 

‎MCinaBox_Qt.pro.user

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE QtCreatorProject>
3-
<!-- Written by QtCreator 5.0.2, 2021-11-06T10:32:45. -->
3+
<!-- Written by QtCreator 5.0.2, 2021-11-07T23:27:27. -->
44
<qtcreator>
55
<data>
66
<variable>EnvironmentId</variable>

‎checker.cpp

+26-6
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,18 @@
1313

1414
checker::checker(QObject *parent){}
1515

16+
int checker::to_pthread(){return pthread;}
17+
void checker::set_pthread(int i){pthread=i;}
18+
int checker::to_total(){return link_list.count();}
19+
int checker::to_downloaded(){return downloading-pthread;}
20+
1621
void checker::run(){
1722
QEventLoop eventloop;
1823
check_game();
1924
check_library();
2025
check_asset();
2126
if (link_list.count() > 0){
22-
downloaded = 0;
27+
finished_pthread = 0;
2328
new_game_downloader new_game_downloader[pthread];
2429
for (downloading = 0; downloading < pthread; downloading++){
2530
new_game_downloader[downloading].index = downloading;
@@ -28,18 +33,33 @@ void checker::run(){
2833
new_game_downloader[downloading].path_list = &path_list;
2934
new_game_downloader[downloading].sha1_list = &sha1_list;
3035
}
36+
downloading-=1;
37+
emit fresh_downloaded();
38+
for (int i=0; i < pthread; i++){
39+
connect(&new_game_downloader[i],SIGNAL(finished()),this,SLOT(pthread_finished()));
40+
}
41+
for (int i=0; i < pthread; i++){
42+
connect(&new_game_downloader[i],SIGNAL(completed_one()),this,SLOT(pthread_Completed_one()));
43+
}
44+
connect(this,SIGNAL(download_Completed()),&eventloop,SLOT(quit()));
3145
for (int i = 0; i < pthread; i++){
3246
new_game_downloader[i].start();
3347
}
34-
connect(new_game_downloader,SIGNAL(finished()),this,SLOT(pthread_Completed()));
35-
connect(this,SIGNAL(download_Completed()),&eventloop,SLOT(quit()));
3648
eventloop.exec();
49+
link_list.clear();
50+
path_list.clear();
51+
sha1_list.clear();
3752
}
3853
}
3954

40-
void checker::pthread_Completed(){
41-
downloaded++;
42-
if (downloaded == link_list.count()) emit download_Completed();
55+
void checker::pthread_Completed_one(){
56+
qDebug()<<downloading<<"/"<<link_list.count();
57+
emit fresh_downloaded();
58+
}
59+
60+
void checker::pthread_finished(){
61+
finished_pthread++;
62+
if (finished_pthread == pthread) emit download_Completed();
4363
}
4464

4565
void checker::check_game(){

‎checker.h

+12-4
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,22 @@ class checker : public QThread
1616
void check_library();
1717
void check_asset();
1818
QStringList link_list,path_list,sha1_list;
19-
int downloaded;
19+
Q_INVOKABLE int to_total();
2020
int downloading;
21-
int pthread = 1;
21+
Q_INVOKABLE int to_downloaded();
22+
Q_PROPERTY(int pthread READ to_pthread WRITE set_pthread NOTIFY pthread_Changed)
23+
int pthread = 30;
24+
int to_pthread();
25+
int finished_pthread;
26+
void set_pthread(int i);
2227
public slots:
23-
void pthread_Completed();
24-
28+
void pthread_Completed_one();
29+
void pthread_finished();
2530
signals:
31+
void fresh_downloaded();
2632
void download_Completed();
33+
34+
void pthread_Changed();
2735
};
2836

2937
#endif // CHECKER_H

‎downloader.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ void new_game_downloader::run(){
3737
file.write(buff);
3838
file.close();
3939
*downloading+=1;
40-
index = *downloading; qDebug()<<index<<"/"<<link_list->count();
40+
index = *downloading;
41+
emit completed_one();
4142
}
4243
else{
4344
qDebug()<<"hash error";

‎downloader.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class new_game_downloader : public QThread
1919
public slots:
2020

2121
signals:
22-
22+
void completed_one();
2323
};
2424

2525
#endif // DOWNLOADER_H

‎downloader_icon.svg

+62-39
Loading

‎game_version_manager.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@ void install_new_game::new_game_json_http_get_Completed(QNetworkReply* reply){
9696
game_json.open(QIODevice::WriteOnly);
9797
game_json.write(reply->readAll());
9898
game_json.close();
99-
checker checker;
100-
checker.game_name = new_game_name;
101-
checker.run();
99+
checker_p->game_name = new_game_name;
100+
checker_p->run();
102101
game_version_manager_p->fresh_game_version_list();
103102
}

‎game_version_manager.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ class game_version_manager : public QThread
2929
void run();
3030
Q_INVOKABLE QString get_game_version_string(int i);
3131
Q_INVOKABLE int count_game_version_list();
32+
Q_INVOKABLE void fresh_game_version_list();
3233
public slots:
33-
void fresh_game_version_list();
34+
3435
signals:
3536
void game_version_list_Changed();
3637

@@ -56,6 +57,7 @@ class install_new_game : public QObject
5657
Q_INVOKABLE void get_new_game_list();
5758
Q_INVOKABLE void get_new_game_json();
5859
game_version_manager *game_version_manager_p;
60+
checker *checker_p;
5961
public slots:
6062
void new_game_list_http_get_Completed(QNetworkReply* reply);
6163
void new_game_json_http_get_Completed(QNetworkReply* reply);

‎main.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,10 @@ int main(int argc, char *argv[])
5959
checker checker;
6060
//load game version list
6161
game_version_manager game_version_manager;
62-
game_version_manager.start();
62+
//game_version_manager.start();
6363
//get new game list
6464
install_new_game install_new_game;
65+
install_new_game.checker_p = &checker;
6566
install_new_game.game_version_manager_p = &game_version_manager;
6667
QGuiApplication app(argc, argv);
6768

@@ -78,6 +79,7 @@ int main(int argc, char *argv[])
7879
QQmlApplicationEngine engine;
7980

8081
engine.rootContext()->setContextProperty("game_version_manager",&game_version_manager);
82+
engine.rootContext()->setContextProperty("checker",&checker);
8183
engine.rootContext()->setContextProperty("user_manager",&user_manager);
8284
engine.rootContext()->setContextProperty("install_new_game",&install_new_game);
8385

‎main.qml

+143-210
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)
Please sign in to comment.