changeset 19559:31a0fd7bc408 draft

(svn r24466) -Codechange [FS#5236]: add general function for ContentType -> Subdirectory conversion (LordAro)
author yexo <yexo@openttd.org>
date Mon, 13 Aug 2012 18:49:38 +0000
parents e60800dc82e0
children b64f37b0e118
files src/network/core/tcp_content.cpp src/network/core/tcp_content.h src/network/network_content.cpp
diffstat 3 files changed, 32 insertions(+), 49 deletions(-) [+]
line wrap: on
line diff
--- a/src/network/core/tcp_content.cpp
+++ b/src/network/core/tcp_content.cpp
@@ -163,4 +163,30 @@
 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 */
--- a/src/network/core/tcp_content.h
+++ b/src/network/core/tcp_content.h
@@ -206,6 +206,8 @@
 	void ReceivePackets();
 };
 
+Subdirectory GetContentInfoSubDir(ContentType type);
+
 #endif /* ENABLE_NETWORK */
 
 #endif /* NETWORK_CORE_TCP_CONTENT_H */
--- a/src/network/network_content.cpp
+++ b/src/network/network_content.cpp
@@ -384,20 +384,8 @@
  */
 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 @@
 	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));