summaryrefslogtreecommitdiff
path: root/src/base_media_func.h
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-08-20 17:02:44 +0000
committerrubidium <rubidium@openttd.org>2009-08-20 17:02:44 +0000
commit2fd1b000e5d179418cb831a13392545d77ea3b48 (patch)
treeb8349df74006922d7b819989e9e2e141beaef5b0 /src/base_media_func.h
parent367ff2375af6a7eeac122186335a193361bf06f2 (diff)
downloadopenttd-2fd1b000e5d179418cb831a13392545d77ea3b48.tar.xz
(svn r17241) -Change: make a distinction between missing and corrupted data files. If (at least) one data file is missing do not consider the set to be useable. Do also no autodetect sets with missing files.
Diffstat (limited to 'src/base_media_func.h')
-rw-r--r--src/base_media_func.h37
1 files changed, 25 insertions, 12 deletions
diff --git a/src/base_media_func.h b/src/base_media_func.h
index ba0925952..ea3e41366 100644
--- a/src/base_media_func.h
+++ b/src/base_media_func.h
@@ -95,7 +95,17 @@ bool BaseSet<T, Tnum_files>::FillSetDetails(IniFile *ini, const char *path)
file->missing_warning = strdup(item->value);
}
- if (file->CheckMD5()) this->found_files++;
+ switch (file->CheckMD5()) {
+ case MD5File::CR_MATCH:
+ this->valid_files++;
+ /* FALL THROUGH */
+ case MD5File::CR_MISMATCH:
+ this->found_files++;
+ break;
+
+ case MD5File::CR_NO_FILE:
+ break;
+ }
}
return true;
@@ -129,8 +139,8 @@ bool BaseMedia<Tbase_set>::AddFile(const char *filename, size_t basepath_length)
}
if (duplicate != NULL) {
/* The more complete set takes precedence over the version number. */
- if ((duplicate->found_files == set->found_files && duplicate->version >= set->version) ||
- duplicate->found_files > set->found_files) {
+ if ((duplicate->valid_files == set->valid_files && duplicate->version >= set->version) ||
+ duplicate->valid_files > set->valid_files) {
DEBUG(grf, 1, "Not adding %s (%i) as base " SET_TYPE " set (duplicate)", set->name, set->version);
delete set;
} else {
@@ -191,12 +201,15 @@ template <class Tbase_set>
{
p += seprintf(p, last, "List of " SET_TYPE " sets:\n");
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != NULL; s = s->next) {
- if (!s->IsUseable()) continue;
-
p += seprintf(p, last, "%18s: %s", s->name, s->description);
- int missing = s->GetNumMissing();
- if (missing != 0) {
- p += seprintf(p, last, " (missing %i file%s)\n", missing, missing == 1 ? "" : "s");
+ int invalid = s->GetNumInvalid();
+ if (invalid != 0) {
+ int missing = s->GetNumMissing();
+ if (missing == 0) {
+ p += seprintf(p, last, " (%i corrupt file%s)\n", invalid, invalid == 1 ? "" : "s");
+ } else {
+ p += seprintf(p, last, " (unuseable: %i missing file%s)\n", missing, missing == 1 ? "" : "s");
+ }
} else {
p += seprintf(p, last, "\n");
}
@@ -213,7 +226,7 @@ template <class Tbase_set>
/* static */ bool BaseMedia<Tbase_set>::HasSet(const ContentInfo *ci, bool md5sum)
{
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != NULL; s = s->next) {
- if (!s->IsUseable()) continue;
+ if (s->GetNumMissing() != 0) continue;
if (s->shortname != ci->unique_id) continue;
if (!md5sum) return true;
@@ -246,7 +259,7 @@ template <class Tbase_set>
{
int n = 0;
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != NULL; s = s->next) {
- if (s != BaseMedia<Tbase_set>::used_set && !s->IsUseable()) continue;
+ if (s != BaseMedia<Tbase_set>::used_set && s->GetNumMissing() != 0) continue;
n++;
}
return n;
@@ -258,7 +271,7 @@ template <class Tbase_set>
int n = 0;
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != NULL; s = s->next) {
if (s == BaseMedia<Tbase_set>::used_set) return n;
- if (!s->IsUseable()) continue;
+ if (s->GetNumMissing() != 0) continue;
n++;
}
return -1;
@@ -268,7 +281,7 @@ template <class Tbase_set>
/* static */ const Tbase_set *BaseMedia<Tbase_set>::GetSet(int index)
{
for (const Tbase_set *s = BaseMedia<Tbase_set>::available_sets; s != NULL; s = s->next) {
- if (s != BaseMedia<Tbase_set>::used_set && !s->IsUseable()) continue;
+ if (s != BaseMedia<Tbase_set>::used_set && s->GetNumMissing() != 0) continue;
if (index == 0) return s;
index--;
}