mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 22:20:21 +00:00
(playlist.c) Omit whitespace when writing compressed JSON format playlists
This commit is contained in:
parent
fa9290cf1e
commit
25c6499c5d
160
playlist.c
160
playlist.c
@ -1274,12 +1274,28 @@ end:
|
||||
free(file);
|
||||
}
|
||||
|
||||
/* No-op versions of JSON whitespace writers,
|
||||
* used when generating compressed output */
|
||||
static JSON_Status JSON_CALL JSON_Writer_WriteNewLine_NULL(JSON_Writer writer)
|
||||
{
|
||||
return JSON_Success;
|
||||
}
|
||||
|
||||
static JSON_Status JSON_CALL JSON_Writer_WriteSpace_NULL(JSON_Writer writer, size_t numberOfSpaces)
|
||||
{
|
||||
return JSON_Success;
|
||||
}
|
||||
|
||||
static JSON_Status JSON_CALL (*json_write_new_line)(JSON_Writer writer) = JSON_Writer_WriteNewLine;
|
||||
static JSON_Status JSON_CALL (*json_write_space)(JSON_Writer writer, size_t numberOfSpaces) = JSON_Writer_WriteSpace;
|
||||
|
||||
void playlist_write_file(
|
||||
playlist_t *playlist,
|
||||
bool use_old_format, bool compress)
|
||||
{
|
||||
size_t i;
|
||||
intfstream_t *file = NULL;
|
||||
bool compressed = false;
|
||||
|
||||
/* Playlist will be written if any of the
|
||||
* following are true:
|
||||
@ -1312,6 +1328,9 @@ void playlist_write_file(
|
||||
return;
|
||||
}
|
||||
|
||||
/* Get current file compression state */
|
||||
compressed = intfstream_is_compressed(file);
|
||||
|
||||
#ifdef RARCH_INTERNAL
|
||||
if (use_old_format)
|
||||
{
|
||||
@ -1358,28 +1377,39 @@ void playlist_write_file(
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* Assign JSON whitespace functions
|
||||
* > When compressing playlists, human readability
|
||||
* is not a factor - can skip all indentation
|
||||
* and new line characters */
|
||||
json_write_new_line = compressed ?
|
||||
JSON_Writer_WriteNewLine_NULL :
|
||||
JSON_Writer_WriteNewLine;
|
||||
json_write_space = compressed ?
|
||||
JSON_Writer_WriteSpace_NULL :
|
||||
JSON_Writer_WriteSpace;
|
||||
|
||||
JSON_Writer_SetOutputEncoding(context.writer, JSON_UTF8);
|
||||
JSON_Writer_SetOutputHandler(context.writer, &JSONOutputHandler);
|
||||
JSON_Writer_SetUserData(context.writer, &context);
|
||||
|
||||
JSON_Writer_WriteStartObject(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
|
||||
JSON_Writer_WriteSpace(context.writer, 2);
|
||||
json_write_space(context.writer, 2);
|
||||
JSON_Writer_WriteString(context.writer, "version",
|
||||
STRLEN_CONST("version"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteString(context.writer, "1.4",
|
||||
STRLEN_CONST("1.4"), JSON_UTF8);
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
|
||||
JSON_Writer_WriteSpace(context.writer, 2);
|
||||
json_write_space(context.writer, 2);
|
||||
JSON_Writer_WriteString(context.writer, "default_core_path",
|
||||
STRLEN_CONST("default_core_path"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteString(context.writer,
|
||||
playlist->default_core_path
|
||||
? playlist->default_core_path
|
||||
@ -1389,13 +1419,13 @@ void playlist_write_file(
|
||||
: 0,
|
||||
JSON_UTF8);
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
|
||||
JSON_Writer_WriteSpace(context.writer, 2);
|
||||
json_write_space(context.writer, 2);
|
||||
JSON_Writer_WriteString(context.writer, "default_core_name",
|
||||
STRLEN_CONST("default_core_name"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteString(context.writer,
|
||||
playlist->default_core_name
|
||||
? playlist->default_core_name
|
||||
@ -1405,79 +1435,79 @@ void playlist_write_file(
|
||||
: 0,
|
||||
JSON_UTF8);
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
|
||||
uint_str[0] = '\0';
|
||||
snprintf(uint_str, sizeof(uint_str), "%u", playlist->label_display_mode);
|
||||
|
||||
JSON_Writer_WriteSpace(context.writer, 2);
|
||||
json_write_space(context.writer, 2);
|
||||
JSON_Writer_WriteString(context.writer, "label_display_mode",
|
||||
STRLEN_CONST("label_display_mode"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteNumber(context.writer, uint_str,
|
||||
strlen(uint_str), JSON_UTF8);
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
|
||||
uint_str[0] = '\0';
|
||||
snprintf(uint_str, sizeof(uint_str), "%u", playlist->right_thumbnail_mode);
|
||||
|
||||
JSON_Writer_WriteSpace(context.writer, 2);
|
||||
json_write_space(context.writer, 2);
|
||||
JSON_Writer_WriteString(context.writer, "right_thumbnail_mode",
|
||||
STRLEN_CONST("right_thumbnail_mode"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteNumber(context.writer, uint_str,
|
||||
strlen(uint_str), JSON_UTF8);
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
|
||||
uint_str[0] = '\0';
|
||||
snprintf(uint_str, sizeof(uint_str), "%u", playlist->left_thumbnail_mode);
|
||||
|
||||
JSON_Writer_WriteSpace(context.writer, 2);
|
||||
json_write_space(context.writer, 2);
|
||||
JSON_Writer_WriteString(context.writer, "left_thumbnail_mode",
|
||||
STRLEN_CONST("left_thumbnail_mode"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteNumber(context.writer, uint_str,
|
||||
strlen(uint_str), JSON_UTF8);
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
|
||||
uint_str[0] = '\0';
|
||||
snprintf(uint_str, sizeof(uint_str), "%u", playlist->sort_mode);
|
||||
|
||||
JSON_Writer_WriteSpace(context.writer, 2);
|
||||
json_write_space(context.writer, 2);
|
||||
JSON_Writer_WriteString(context.writer, "sort_mode",
|
||||
STRLEN_CONST("sort_mode"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteNumber(context.writer, uint_str,
|
||||
strlen(uint_str), JSON_UTF8);
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
|
||||
JSON_Writer_WriteSpace(context.writer, 2);
|
||||
json_write_space(context.writer, 2);
|
||||
JSON_Writer_WriteString(context.writer, "items",
|
||||
STRLEN_CONST("items"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteStartArray(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
|
||||
for (i = 0; i < playlist->size; i++)
|
||||
{
|
||||
JSON_Writer_WriteSpace(context.writer, 4);
|
||||
json_write_space(context.writer, 4);
|
||||
JSON_Writer_WriteStartObject(context.writer);
|
||||
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 6);
|
||||
json_write_new_line(context.writer);
|
||||
json_write_space(context.writer, 6);
|
||||
JSON_Writer_WriteString(context.writer, "path",
|
||||
STRLEN_CONST("path"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteString(context.writer,
|
||||
playlist->entries[i].path
|
||||
? playlist->entries[i].path
|
||||
@ -1488,12 +1518,12 @@ void playlist_write_file(
|
||||
JSON_UTF8);
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 6);
|
||||
json_write_new_line(context.writer);
|
||||
json_write_space(context.writer, 6);
|
||||
JSON_Writer_WriteString(context.writer, "label",
|
||||
STRLEN_CONST("label"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteString(context.writer,
|
||||
playlist->entries[i].label
|
||||
? playlist->entries[i].label
|
||||
@ -1504,12 +1534,12 @@ void playlist_write_file(
|
||||
JSON_UTF8);
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 6);
|
||||
json_write_new_line(context.writer);
|
||||
json_write_space(context.writer, 6);
|
||||
JSON_Writer_WriteString(context.writer, "core_path",
|
||||
STRLEN_CONST("core_path"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteString(context.writer,
|
||||
playlist->entries[i].core_path
|
||||
? playlist->entries[i].core_path
|
||||
@ -1520,12 +1550,12 @@ void playlist_write_file(
|
||||
JSON_UTF8);
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 6);
|
||||
json_write_new_line(context.writer);
|
||||
json_write_space(context.writer, 6);
|
||||
JSON_Writer_WriteString(context.writer, "core_name",
|
||||
STRLEN_CONST("core_name"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteString(context.writer,
|
||||
playlist->entries[i].core_name
|
||||
? playlist->entries[i].core_name
|
||||
@ -1536,12 +1566,12 @@ void playlist_write_file(
|
||||
JSON_UTF8);
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 6);
|
||||
json_write_new_line(context.writer);
|
||||
json_write_space(context.writer, 6);
|
||||
JSON_Writer_WriteString(context.writer, "crc32",
|
||||
STRLEN_CONST("crc32"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteString(context.writer, playlist->entries[i].crc32 ? playlist->entries[i].crc32 : "",
|
||||
playlist->entries[i].crc32
|
||||
? strlen(playlist->entries[i].crc32)
|
||||
@ -1549,12 +1579,12 @@ void playlist_write_file(
|
||||
JSON_UTF8);
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 6);
|
||||
json_write_new_line(context.writer);
|
||||
json_write_space(context.writer, 6);
|
||||
JSON_Writer_WriteString(context.writer, "db_name",
|
||||
STRLEN_CONST("db_name"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteString(context.writer, playlist->entries[i].db_name ? playlist->entries[i].db_name : "",
|
||||
playlist->entries[i].db_name
|
||||
? strlen(playlist->entries[i].db_name)
|
||||
@ -1564,12 +1594,12 @@ void playlist_write_file(
|
||||
if (!string_is_empty(playlist->entries[i].subsystem_ident))
|
||||
{
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 6);
|
||||
json_write_new_line(context.writer);
|
||||
json_write_space(context.writer, 6);
|
||||
JSON_Writer_WriteString(context.writer, "subsystem_ident",
|
||||
STRLEN_CONST("subsystem_ident"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteString(context.writer, playlist->entries[i].subsystem_ident ? playlist->entries[i].subsystem_ident : "",
|
||||
playlist->entries[i].subsystem_ident
|
||||
? strlen(playlist->entries[i].subsystem_ident)
|
||||
@ -1580,12 +1610,12 @@ void playlist_write_file(
|
||||
if (!string_is_empty(playlist->entries[i].subsystem_name))
|
||||
{
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 6);
|
||||
json_write_new_line(context.writer);
|
||||
json_write_space(context.writer, 6);
|
||||
JSON_Writer_WriteString(context.writer, "subsystem_name",
|
||||
STRLEN_CONST("subsystem_name"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteString(context.writer,
|
||||
playlist->entries[i].subsystem_name
|
||||
? playlist->entries[i].subsystem_name
|
||||
@ -1601,19 +1631,19 @@ void playlist_write_file(
|
||||
unsigned j;
|
||||
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 6);
|
||||
json_write_new_line(context.writer);
|
||||
json_write_space(context.writer, 6);
|
||||
JSON_Writer_WriteString(context.writer, "subsystem_roms",
|
||||
STRLEN_CONST("subsystem_roms"), JSON_UTF8);
|
||||
JSON_Writer_WriteColon(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 1);
|
||||
json_write_space(context.writer, 1);
|
||||
JSON_Writer_WriteStartArray(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
|
||||
for (j = 0; j < playlist->entries[i].subsystem_roms->size; j++)
|
||||
{
|
||||
const struct string_list *roms = playlist->entries[i].subsystem_roms;
|
||||
JSON_Writer_WriteSpace(context.writer, 8);
|
||||
json_write_space(context.writer, 8);
|
||||
JSON_Writer_WriteString(context.writer,
|
||||
!string_is_empty(roms->elems[j].data)
|
||||
? roms->elems[j].data
|
||||
@ -1626,38 +1656,38 @@ void playlist_write_file(
|
||||
if (j < playlist->entries[i].subsystem_roms->size - 1)
|
||||
{
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
}
|
||||
}
|
||||
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
JSON_Writer_WriteSpace(context.writer, 6);
|
||||
json_write_new_line(context.writer);
|
||||
json_write_space(context.writer, 6);
|
||||
JSON_Writer_WriteEndArray(context.writer);
|
||||
}
|
||||
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
|
||||
JSON_Writer_WriteSpace(context.writer, 4);
|
||||
json_write_space(context.writer, 4);
|
||||
JSON_Writer_WriteEndObject(context.writer);
|
||||
|
||||
if (i < playlist->size - 1)
|
||||
JSON_Writer_WriteComma(context.writer);
|
||||
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
}
|
||||
|
||||
JSON_Writer_WriteSpace(context.writer, 2);
|
||||
json_write_space(context.writer, 2);
|
||||
JSON_Writer_WriteEndArray(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
JSON_Writer_WriteEndObject(context.writer);
|
||||
JSON_Writer_WriteNewLine(context.writer);
|
||||
json_write_new_line(context.writer);
|
||||
JSON_Writer_Free(context.writer);
|
||||
|
||||
playlist->old_format = false;
|
||||
}
|
||||
|
||||
playlist->modified = false;
|
||||
playlist->compressed = intfstream_is_compressed(file);
|
||||
playlist->compressed = compressed;
|
||||
|
||||
RARCH_LOG("Written to playlist file: %s\n", playlist->conf_path);
|
||||
end:
|
||||
|
Loading…
x
Reference in New Issue
Block a user