From cc5eccc5742765d929b81f9acd3cdcd8e2810d1a Mon Sep 17 00:00:00 2001 From: yexo Date: Mon, 13 Aug 2012 18:49:38 +0000 Subject: [PATCH] (svn r24466) -Codechange [FS#5236]: add general function for ContentType -> Subdirectory conversion (LordAro) --- src/network/core/tcp_content.cpp | 26 ++++++++++++++++ src/network/core/tcp_content.h | 2 ++ src/network/network_content.cpp | 53 +++----------------------------- 3 files changed, 32 insertions(+), 49 deletions(-) diff --git a/src/network/core/tcp_content.cpp b/src/network/core/tcp_content.cpp index 30284f2e70..131501a5c2 100644 --- a/src/network/core/tcp_content.cpp +++ b/src/network/core/tcp_content.cpp @@ -163,4 +163,30 @@ bool NetworkContentSocketHandler::Receive_SERVER_INFO(Packet *p) { return this-> bool NetworkContentSocketHandler::Receive_CLIENT_CONTENT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_CONTENT_CLIENT_CONTENT); } bool NetworkContentSocketHandler::Receive_SERVER_CONTENT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_CONTENT_SERVER_CONTENT); } +/** + * Helper to get the subdirectory a #ContentInfo is located in. + * @param type The type of content. + * @return The subdirectory the content is located in. + */ +Subdirectory GetContentInfoSubDir(ContentType type) +{ + switch (type) { + default: return NO_DIRECTORY; + case CONTENT_TYPE_AI: return AI_DIR; + case CONTENT_TYPE_AI_LIBRARY: return AI_LIBRARY_DIR; + case CONTENT_TYPE_GAME: return GAME_DIR; + case CONTENT_TYPE_GAME_LIBRARY: return GAME_LIBRARY_DIR; + case CONTENT_TYPE_NEWGRF: return NEWGRF_DIR; + + case CONTENT_TYPE_BASE_GRAPHICS: + case CONTENT_TYPE_BASE_SOUNDS: + case CONTENT_TYPE_BASE_MUSIC: + return BASESET_DIR; + + case CONTENT_TYPE_SCENARIO: + case CONTENT_TYPE_HEIGHTMAP: + return SCENARIO_DIR; + } +} + #endif /* ENABLE_NETWORK */ diff --git a/src/network/core/tcp_content.h b/src/network/core/tcp_content.h index 12996a02d9..8e06bedb00 100644 --- a/src/network/core/tcp_content.h +++ b/src/network/core/tcp_content.h @@ -206,6 +206,8 @@ public: void ReceivePackets(); }; +Subdirectory GetContentInfoSubDir(ContentType type); + #endif /* ENABLE_NETWORK */ #endif /* NETWORK_CORE_TCP_CONTENT_H */ diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 53672c5ec0..afbca4a37a 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -384,20 +384,8 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContentFallback(const Co */ static char *GetFullFilename(const ContentInfo *ci, bool compressed) { - Subdirectory dir; - switch (ci->type) { - default: return NULL; - case CONTENT_TYPE_BASE_GRAPHICS: dir = BASESET_DIR; break; - case CONTENT_TYPE_BASE_MUSIC: dir = BASESET_DIR; break; - case CONTENT_TYPE_BASE_SOUNDS: dir = BASESET_DIR; break; - case CONTENT_TYPE_NEWGRF: dir = NEWGRF_DIR; break; - case CONTENT_TYPE_AI: dir = AI_DIR; break; - case CONTENT_TYPE_AI_LIBRARY: dir = AI_LIBRARY_DIR; break; - case CONTENT_TYPE_SCENARIO: dir = SCENARIO_DIR; break; - case CONTENT_TYPE_HEIGHTMAP: dir = HEIGHTMAP_DIR; break; - case CONTENT_TYPE_GAME: dir = GAME_DIR; break; - case CONTENT_TYPE_GAME_LIBRARY: dir = GAME_LIBRARY_DIR; break; - } + Subdirectory dir = GetContentInfoSubDir(ci->type); + if (dir == NO_DIRECTORY) return NULL; static char buf[MAX_PATH]; FioGetFullPath(buf, lengthof(buf), SP_AUTODOWNLOAD_DIR, dir, ci->filename); @@ -544,41 +532,8 @@ void ClientNetworkContentSocketHandler::AfterDownload() if (GunzipFile(this->curInfo)) { unlink(GetFullFilename(this->curInfo, true)); - Subdirectory sd = NO_DIRECTORY; - switch (this->curInfo->type) { - case CONTENT_TYPE_AI: - sd = AI_DIR; - break; - - case CONTENT_TYPE_AI_LIBRARY: - sd = AI_LIBRARY_DIR; - break; - - case CONTENT_TYPE_GAME: - sd = GAME_DIR; - break; - - case CONTENT_TYPE_GAME_LIBRARY: - sd = GAME_LIBRARY_DIR; - break; - - case CONTENT_TYPE_BASE_GRAPHICS: - case CONTENT_TYPE_BASE_SOUNDS: - case CONTENT_TYPE_BASE_MUSIC: - sd = BASESET_DIR; - break; - - case CONTENT_TYPE_NEWGRF: - sd = NEWGRF_DIR; - break; - - case CONTENT_TYPE_SCENARIO: - case CONTENT_TYPE_HEIGHTMAP: - sd = SCENARIO_DIR; - break; - - default: NOT_REACHED(); - } + Subdirectory sd = GetContentInfoSubDir(this->curInfo->type); + if (sd == NO_DIRECTORY) NOT_REACHED(); TarScanner ts; ts.AddFile(sd, GetFullFilename(this->curInfo, false));