Merge branch 'master' into 3.0.1-hotfix

This commit is contained in:
Alex Taber
2024-06-17 20:29:27 -04:00
committed by GitHub
7 changed files with 184 additions and 10 deletions

View File

@@ -28,6 +28,7 @@
#define COLORS_H
#include "common.h"
#include "config.h"
typedef u32 Color;

45
include/config.h Normal file
View File

@@ -0,0 +1,45 @@
/*
* This file is part of Anemone3DS
* Copyright (C) 2016-2024 Contributors in CONTRIBUTORS.md
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version.
*/
#ifndef CONFIG_H
#define CONFIG_H
#include "common.h"
#include "fs.h"
#include <jansson.h>
typedef struct {
u32 background_color;
u32 accent_color;
u32 red_color;
u32 yellow_color;
} Config_s;
extern Config_s config;
void load_config(void);
#endif

View File

@@ -29,6 +29,7 @@
#include "common.h"
#include "badges.h"
#include "config.h"
#define ILLEGAL_CHARS "><\"?;:/\\+,.|[=]*\n\r"
@@ -54,6 +55,7 @@ typedef struct {
u32 coppa : 1;
} Parental_Restrictions_s;
Result init_sd(void);
Result open_archives(void);
Result open_badge_extdata(void);
Result close_archives(void);

View File

@@ -30,11 +30,11 @@ Color colors[COLOR_AMOUNT] = {0};
void init_colors(void)
{
colors[COLOR_BACKGROUND] = C2D_Color32(35, 28, 32, 255); //silver-y black
colors[COLOR_ACCENT] = C2D_Color32(12, 58, 111, 255);
colors[COLOR_BACKGROUND] = config.background_color;
colors[COLOR_ACCENT] = config.accent_color;
colors[COLOR_WHITE] = C2D_Color32(255, 255, 255, 255);
colors[COLOR_CURSOR] = C2D_Color32(200, 200, 200, 255);
colors[COLOR_BLACK] = C2D_Color32(0, 0, 0, 255);
colors[COLOR_RED] = C2D_Color32(229, 66, 66, 255);
colors[COLOR_YELLOW] = C2D_Color32(239, 220, 11, 255);
colors[COLOR_RED] = config.red_color;
colors[COLOR_YELLOW] = config.yellow_color;
}

117
source/config.c Normal file
View File

@@ -0,0 +1,117 @@
/*
* This file is part of Anemone3DS
* Copyright (C) 2016-2024 Contributors in CONTRIBUTORS.md
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version.
*/
#include "config.h"
Config_s config;
void load_config(void)
{
memset(&config, 0, sizeof(Config_s));
char *json_buf = NULL;
u32 json_len = file_to_buf(fsMakePath(PATH_ASCII, "/3ds/" APP_TITLE "/config.json"), ArchiveSD, &json_buf);
if (json_len)
{
json_error_t error;
json_t *root = json_loadb(json_buf, json_len, 0, &error);
if (root)
{
const char *key;
json_t *value;
json_object_foreach(root, key, value)
{
if (json_is_array(value) && !strcmp(key, "Accent Color") && json_array_size(value) == 4)
{
if (json_is_integer(json_array_get(value, 0)) && json_is_integer(json_array_get(value, 1))
&& json_is_integer(json_array_get(value, 2)) && json_is_integer(json_array_get(value, 3)))
{
u8 r = min(255, json_integer_value(json_array_get(value, 0)));
u8 g = min(255, json_integer_value(json_array_get(value, 1)));
u8 b = min(255, json_integer_value(json_array_get(value, 2)));
u8 a = min(255, json_integer_value(json_array_get(value, 3)));
config.accent_color = C2D_Color32(r, g, b, a);
}
}
else if (json_is_array(value) && !strcmp(key, "Background Color") && json_array_size(value) == 4)
{
if (json_is_integer(json_array_get(value, 0)) && json_is_integer(json_array_get(value, 1))
&& json_is_integer(json_array_get(value, 2)) && json_is_integer(json_array_get(value, 3)))
{
u8 r = min(255, json_integer_value(json_array_get(value, 0)));
u8 g = min(255, json_integer_value(json_array_get(value, 1)));
u8 b = min(255, json_integer_value(json_array_get(value, 2)));
u8 a = min(255, json_integer_value(json_array_get(value, 3)));
config.background_color = C2D_Color32(r, g, b, a);
}
}
else if (json_is_array(value) && !strcmp(key, "Red Color") && json_array_size(value) == 4)
{
if (json_is_integer(json_array_get(value, 0)) && json_is_integer(json_array_get(value, 1))
&& json_is_integer(json_array_get(value, 2)) && json_is_integer(json_array_get(value, 3)))
{
u8 r = min(255, json_integer_value(json_array_get(value, 0)));
u8 g = min(255, json_integer_value(json_array_get(value, 1)));
u8 b = min(255, json_integer_value(json_array_get(value, 2)));
u8 a = min(255, json_integer_value(json_array_get(value, 3)));
config.red_color = C2D_Color32(r, g, b, a);
}
}
else if (json_is_array(value) && !strcmp(key, "Yellow Color") && json_array_size(value) == 4)
{
if (json_is_integer(json_array_get(value, 0)) && json_is_integer(json_array_get(value, 1))
&& json_is_integer(json_array_get(value, 2)) && json_is_integer(json_array_get(value, 3)))
{
u8 r = min(255, json_integer_value(json_array_get(value, 0)));
u8 g = min(255, json_integer_value(json_array_get(value, 1)));
u8 b = min(255, json_integer_value(json_array_get(value, 2)));
u8 a = min(255, json_integer_value(json_array_get(value, 3)));
config.yellow_color = C2D_Color32(r, g, b, a);
}
}
}
} else
{
DEBUG(error.text);
}
}
if (config.accent_color == 0)
config.accent_color = C2D_Color32(12, 58, 111, 255);
if (config.background_color == 0)
config.background_color = C2D_Color32(35, 28, 32, 255); //silver-y black
if (config.red_color == 0)
config.red_color = C2D_Color32(229, 66, 66, 255);
if (config.yellow_color == 0)
config.yellow_color = C2D_Color32(239, 220, 11, 255);
if (json_buf) free(json_buf);
}

View File

@@ -67,6 +67,20 @@ Result createExtSaveData(u32 extdataID)
return cmdbuf[1];
}
Result init_sd(void)
{
Result res;
if(R_FAILED(res = FSUSER_OpenArchive(&ArchiveSD, ARCHIVE_SDMC, fsMakePath(PATH_EMPTY, "")))) return res;
load_config();
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/3ds"), FS_ATTRIBUTE_DIRECTORY);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/3ds/" APP_TITLE), FS_ATTRIBUTE_DIRECTORY);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/3ds/" APP_TITLE "/cache"), FS_ATTRIBUTE_DIRECTORY);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/3ds/" APP_TITLE "/BadgeBackups"), FS_ATTRIBUTE_DIRECTORY);
return 0;
}
Result open_archives(void)
{
romfsInit();
@@ -103,16 +117,10 @@ Result open_archives(void)
archive2 = 0x00;
}
if(R_FAILED(res = FSUSER_OpenArchive(&ArchiveSD, ARCHIVE_SDMC, fsMakePath(PATH_EMPTY, "")))) return res;
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/Themes"), FS_ATTRIBUTE_DIRECTORY);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/Splashes"), FS_ATTRIBUTE_DIRECTORY);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/Badges"), FS_ATTRIBUTE_DIRECTORY);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/Badges/ThemePlaza Badges"), FS_ATTRIBUTE_DIRECTORY);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/3ds"), FS_ATTRIBUTE_DIRECTORY);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/3ds/" APP_TITLE), FS_ATTRIBUTE_DIRECTORY);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/3ds/" APP_TITLE "/cache"), FS_ATTRIBUTE_DIRECTORY);
FSUSER_CreateDirectory(ArchiveSD, fsMakePath(PATH_ASCII, "/3ds/" APP_TITLE "/BadgeBackups"), FS_ATTRIBUTE_DIRECTORY);
u32 homeMenuPath[3] = {MEDIATYPE_SD, archive2, 0};
home.type = PATH_BINARY;

View File

@@ -88,6 +88,7 @@ static void init_services(void)
APT_GetAppCpuTimeLimit(&old_time_limit);
APT_SetAppCpuTimeLimit(30);
httpcInit(0);
init_sd();
archive_result = open_archives();
badge_archive_result = open_badge_extdata();
if(envIsHomebrew())