diff options
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/core/tcp_content.h | 4 | ||||
-rw-r--r-- | src/network/network_content.cpp | 25 | ||||
-rw-r--r-- | src/network/network_content.h | 4 | ||||
-rw-r--r-- | src/network/network_content_gui.cpp | 19 |
4 files changed, 28 insertions, 24 deletions
diff --git a/src/network/core/tcp_content.h b/src/network/core/tcp_content.h index e084f5fc7..4d304017a 100644 --- a/src/network/core/tcp_content.h +++ b/src/network/core/tcp_content.h @@ -71,7 +71,7 @@ struct ContentInfo { uint8 tag_count; ///< Number of tags char (*tags)[32]; ///< Malloced array of tags (strings) State state; ///< Whether the content info is selected (for download) - bool update; ///< This item is an update + bool upgrade; ///< This item is an upgrade /** Clear everything in the struct */ ContentInfo(); @@ -103,7 +103,7 @@ class NetworkContentSocketHandler : public NetworkTCPSocketHandler { protected: struct sockaddr_in client_addr; ///< The address we're connected to. NetworkRecvStatus CloseConnection(); - void Close(); + virtual void Close(); /** * Client requesting a list of content info: diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 978f9b9e9..66c2c2d5d 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -100,7 +100,7 @@ DEF_CONTENT_RECEIVE_COMMAND(Client, PACKET_CONTENT_SERVER_INFO) ci->state = ContentInfo::ALREADY_HERE; } else { ci->state = ContentInfo::UNSELECTED; - if (proc(ci, false)) ci->update = true; + if (proc(ci, false)) ci->upgrade = true; } } else { ci->state = ContentInfo::UNSELECTED; @@ -116,6 +116,7 @@ DEF_CONTENT_RECEIVE_COMMAND(Client, PACKET_CONTENT_SERVER_INFO) memcmp(ci->md5sum, ici->md5sum, sizeof(ci->md5sum)) == 0) { /* Preserve the name if possible */ if (StrEmpty(ci->name)) strecpy(ci->name, ici->name, lastof(ci->name)); + if (ici->IsSelected()) ci->state = ici->state; delete ici; *iter = ci; @@ -145,6 +146,14 @@ DEF_CONTENT_RECEIVE_COMMAND(Client, PACKET_CONTENT_SERVER_INFO) void ClientNetworkContentSocketHandler::RequestContentList(ContentType type) { + if (type == CONTENT_TYPE_END) { + this->RequestContentList(CONTENT_TYPE_BASE_GRAPHICS); + this->RequestContentList(CONTENT_TYPE_AI); + this->RequestContentList(CONTENT_TYPE_NEWGRF); + this->RequestContentList(CONTENT_TYPE_AI_LIBRARY); + return; + } + this->Connect(); Packet *p = new Packet(PACKET_CONTENT_CLIENT_INFO_LIST); @@ -457,10 +466,12 @@ void ClientNetworkContentSocketHandler::Connect() /** * Disconnect from the content server. */ -void ClientNetworkContentSocketHandler::Disconnect() +void ClientNetworkContentSocketHandler::Close() { if (this->sock == INVALID_SOCKET) return; - this->Close(); + NetworkContentSocketHandler::Close(); + + this->OnDisconnect(); } /** @@ -532,7 +543,7 @@ ContentInfo *ClientNetworkContentSocketHandler::GetContent(ContentID cid) void ClientNetworkContentSocketHandler::Select(ContentID cid) { ContentInfo *ci = this->GetContent(cid); - if (ci->state != ContentInfo::UNSELECTED) return; + if (ci == NULL || ci->state != ContentInfo::UNSELECTED) return; ci->state = ContentInfo::SELECTED; this->CheckDependencyState(ci); @@ -545,7 +556,7 @@ void ClientNetworkContentSocketHandler::Select(ContentID cid) void ClientNetworkContentSocketHandler::Unselect(ContentID cid) { ContentInfo *ci = this->GetContent(cid); - if (!ci->IsSelected()) return; + if (ci == NULL || !ci->IsSelected()) return; ci->state = ContentInfo::UNSELECTED; this->CheckDependencyState(ci); @@ -564,11 +575,11 @@ void ClientNetworkContentSocketHandler::SelectAll() } /** Select everything that's an update for something we've got */ -void ClientNetworkContentSocketHandler::SelectUpdate() +void ClientNetworkContentSocketHandler::SelectUpgrade() { for (ContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) { ContentInfo *ci = *iter; - if (ci->state == ContentInfo::UNSELECTED && ci->update) { + if (ci->state == ContentInfo::UNSELECTED && ci->upgrade) { ci->state = ContentInfo::SELECTED; this->CheckDependencyState(ci); } diff --git a/src/network/network_content.h b/src/network/network_content.h index a566dafc4..ac169313f 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -90,7 +90,7 @@ public: void Connect(); void SendReceive(); - void Disconnect(); + void Close(); void RequestContentList(ContentType type); void RequestContentList(uint count, const ContentID *content_ids); @@ -101,7 +101,7 @@ public: void Select(ContentID cid); void Unselect(ContentID cid); void SelectAll(); - void SelectUpdate(); + void SelectUpgrade(); void UnselectAll(); void ToggleSelectedState(const ContentInfo *ci); diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index fa8b80d04..8b930168a 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -225,7 +225,7 @@ public: /* To sum all the bytes we intend to download */ uint filesize = 0; bool show_select_all = false; - bool show_select_update = false; + bool show_select_upgrade = false; for (ConstContentIterator iter = _network_content_client.Begin(); iter != _network_content_client.End(); iter++) { const ContentInfo *ci = *iter; switch (ci->state) { @@ -236,7 +236,7 @@ public: case ContentInfo::UNSELECTED: show_select_all = true; - show_select_update |= ci->update; + show_select_upgrade |= ci->upgrade; break; default: @@ -247,7 +247,7 @@ public: this->SetWidgetDisabledState(NCLWW_DOWNLOAD, filesize == 0); this->SetWidgetDisabledState(NCLWW_UNSELECT, filesize == 0); this->SetWidgetDisabledState(NCLWW_SELECT_ALL, !show_select_all); - this->SetWidgetDisabledState(NCLWW_SELECT_UPDATE, !show_select_update); + this->SetWidgetDisabledState(NCLWW_SELECT_UPDATE, !show_select_upgrade); this->DrawWidgets(); @@ -292,7 +292,7 @@ public: const uint max_y = this->widget[NCLWW_DETAILS].bottom - 15; y = this->widget[NCLWW_DETAILS].top + 55; - if (this->selected->update) { + if (this->selected->upgrade) { SetDParam(0, STR_CONTENT_TYPE_BASE_GRAPHICS + this->selected->type - CONTENT_TYPE_BASE_GRAPHICS); y += DrawStringMultiLine(this->widget[NCLWW_DETAILS].left + 5, y, STR_CONTENT_DETAIL_UPDATE, this->widget[NCLWW_DETAILS].right - this->widget[NCLWW_DETAILS].left - 5, max_y - y); y += 11; @@ -413,7 +413,7 @@ public: break; case NCLWW_SELECT_UPDATE: - _network_content_client.SelectUpdate(); + _network_content_client.SelectUpgrade(); this->SetDirty(); break; @@ -565,14 +565,7 @@ void ShowNetworkContentListWindow(ContentVector *cv, ContentType type) { #if defined(WITH_ZLIB) if (cv == NULL) { - if (type == CONTENT_TYPE_END) { - _network_content_client.RequestContentList(CONTENT_TYPE_BASE_GRAPHICS); - _network_content_client.RequestContentList(CONTENT_TYPE_AI); - _network_content_client.RequestContentList(CONTENT_TYPE_NEWGRF); - _network_content_client.RequestContentList(CONTENT_TYPE_AI_LIBRARY); - } else { - _network_content_client.RequestContentList(type); - } + _network_content_client.RequestContentList(type); } else { _network_content_client.RequestContentList(cv, true); } |