diff --git a/src/data/set.cpp b/src/data/set.cpp index 28fcbbf4..39ab8d4f 100644 --- a/src/data/set.cpp +++ b/src/data/set.cpp @@ -208,7 +208,9 @@ void Set::reflect_cards (Writer& tag) { } else { set used; FOR_EACH(card, cards) { - String filename = normalize_internal_filename(clean_filename(card->identification())); + // pick a unique filename for this card + // can't use Package::newFileName, because then we get conflicts with the previous save of the same card + String filename = _("card ") + normalize_internal_filename(clean_filename(card->identification())); String full_name = filename; int i = 0; diff --git a/src/util/file_utils.cpp b/src/util/file_utils.cpp index 1fa1f9aa..db8bed05 100644 --- a/src/util/file_utils.cpp +++ b/src/util/file_utils.cpp @@ -42,11 +42,18 @@ bool is_filename_char(Char c) { String clean_filename(const String& name) { String clean; + // allow only valid characters, and remove leading whitespace + bool start = true; FOR_EACH_CONST(c, name) { - if (is_filename_char(c)) { + if (is_filename_char(c) && !(start && c == _(' '))) { + start = false; clean += c; } } + // remove trailing whitespace + while (!clean.empty() && clean[clean.size()-1] == _(' ')) { + clean.resize(clean.size()-1); + } if (clean.empty() || starts_with(clean, _("."))) { clean = _("no-name") + clean; }