Skip to content

Commit c7bf80f

Browse files
committed
S3 Implementation
1 parent 8129537 commit c7bf80f

13 files changed

Lines changed: 1503 additions & 16 deletions

File tree

configuration.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1619,10 +1619,17 @@ static struct config_array_setting *populate_settings_array(
16191619

16201620
#ifdef HAVE_NETWORKING
16211621
SETTING_ARRAY("netplay_mitm_server", settings->arrays.netplay_mitm_server, false, NULL, true);
1622+
#ifdef HAVE_CLOUDSYNC
16221623
SETTING_ARRAY("webdav_url", settings->arrays.webdav_url, false, NULL, true);
16231624
SETTING_ARRAY("webdav_username", settings->arrays.webdav_username, false, NULL, true);
16241625
SETTING_ARRAY("webdav_password", settings->arrays.webdav_password, false, NULL, true);
16251626
SETTING_ARRAY("google_drive_refresh_token", settings->arrays.google_drive_refresh_token, false, NULL, true);
1627+
#ifdef HAVE_S3
1628+
SETTING_ARRAY("s3_url", settings->arrays.s3_url, false, NULL, true);
1629+
SETTING_ARRAY("access_key_id", settings->arrays.access_key_id, false, NULL, true);
1630+
SETTING_ARRAY("secret_access_key", settings->arrays.secret_access_key, false, NULL, true);
1631+
#endif
1632+
#endif
16261633
SETTING_ARRAY("youtube_stream_key", settings->arrays.youtube_stream_key, true, NULL, true);
16271634
SETTING_ARRAY("twitch_stream_key", settings->arrays.twitch_stream_key, true, NULL, true);
16281635
SETTING_ARRAY("facebook_stream_key", settings->arrays.facebook_stream_key, true, NULL, true);

configuration.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,10 +541,19 @@ typedef struct settings
541541
char audio_device[NAME_MAX_LENGTH];
542542
char camera_device[NAME_MAX_LENGTH];
543543
char netplay_mitm_server[NAME_MAX_LENGTH];
544+
#ifdef HAVE_NETWORKING
545+
#ifdef HAVE_CLOUDSYNC
544546
char webdav_url[NAME_MAX_LENGTH];
545547
char webdav_username[NAME_MAX_LENGTH];
546548
char webdav_password[NAME_MAX_LENGTH];
547549
char google_drive_refresh_token[2048];
550+
#ifdef HAVE_S3
551+
char s3_url[NAME_MAX_LENGTH];
552+
char access_key_id[128];
553+
char secret_access_key[186]; /* TODO/RESEARCH - check size, ex https://github.com/winscp/winscp/pull/15/files */
554+
#endif
555+
#endif
556+
#endif
548557

549558
char crt_switch_timings[NAME_MAX_LENGTH];
550559
char input_reserved_devices[MAX_USERS][NAME_MAX_LENGTH];

griffin/griffin.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,6 +1721,9 @@ CLOUD SYNC
17211721
#ifdef HAVE_SMBCLIENT
17221722
#include "../network/cloud_sync/smb.c"
17231723
#endif
1724+
#ifdef HAVE_S3
1725+
#include "../network/cloud_sync/s3.c"
1726+
#endif
17241727
#endif
17251728

17261729
/*============================================================

intl/msg_hash_lbl.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3550,6 +3550,18 @@ MSG_HASH(
35503550
MENU_ENUM_LABEL_CLOUD_SYNC_PASSWORD,
35513551
"cloud_sync_password"
35523552
)
3553+
MSG_HASH(
3554+
MENU_ENUM_LABEL_CLOUD_SYNC_ACCESS_KEY_ID,
3555+
"cloud_sync_access_key_id"
3556+
)
3557+
MSG_HASH(
3558+
MENU_ENUM_LABEL_CLOUD_SYNC_SECRET_ACCESS_KEY,
3559+
"cloud_sync_secret_access_key"
3560+
)
3561+
MSG_HASH(
3562+
MENU_ENUM_LABEL_CLOUD_SYNC_S3_URL,
3563+
"cloud_sync_s3_url"
3564+
)
35533565
MSG_HASH(
35543566
MENU_ENUM_LABEL_SCAN_DIRECTORY,
35553567
"scan_directory"

intl/msg_hash_us.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,6 +1158,30 @@ MSG_HASH(
11581158
MENU_ENUM_SUBLABEL_CLOUD_SYNC_PASSWORD,
11591159
"Your password for your cloud storage account."
11601160
)
1161+
MSG_HASH(
1162+
MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_ACCESS_KEY_ID,
1163+
"Access Key ID"
1164+
)
1165+
MSG_HASH(
1166+
MENU_ENUM_SUBLABEL_CLOUD_SYNC_ACCESS_KEY_ID,
1167+
"Your access key ID for your cloud storage account."
1168+
)
1169+
MSG_HASH(
1170+
MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_SECRET_ACCESS_KEY,
1171+
"Secret Access Key"
1172+
)
1173+
MSG_HASH(
1174+
MENU_ENUM_SUBLABEL_CLOUD_SYNC_SECRET_ACCESS_KEY,
1175+
"Your secret access key for your cloud storage account."
1176+
)
1177+
MSG_HASH(
1178+
MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_S3_URL,
1179+
"S3 URL"
1180+
)
1181+
MSG_HASH(
1182+
MENU_ENUM_SUBLABEL_CLOUD_SYNC_S3_URL,
1183+
"Your S3 endpoint URL for cloud storage."
1184+
)
11611185
MSG_HASH(
11621186
MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS,
11631187
"Logging"

menu/cbs/menu_cbs_sublabel.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,8 +270,11 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_sync_thumbs, MENU_
270270
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_sync_system, MENU_ENUM_SUBLABEL_CLOUD_SYNC_SYNC_SYSTEM)
271271
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_driver, MENU_ENUM_SUBLABEL_CLOUD_SYNC_DRIVER)
272272
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_url, MENU_ENUM_SUBLABEL_CLOUD_SYNC_URL)
273+
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_s3_url, MENU_ENUM_SUBLABEL_CLOUD_SYNC_S3_URL)
273274
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_username, MENU_ENUM_SUBLABEL_CLOUD_SYNC_USERNAME)
274275
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_password, MENU_ENUM_SUBLABEL_CLOUD_SYNC_PASSWORD)
276+
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_access_key_id, MENU_ENUM_SUBLABEL_CLOUD_SYNC_ACCESS_KEY_ID)
277+
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_cloud_sync_secret_access_key, MENU_ENUM_SUBLABEL_CLOUD_SYNC_SECRET_ACCESS_KEY)
275278
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_logging_settings_list, MENU_ENUM_SUBLABEL_LOGGING_SETTINGS)
276279
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_user_interface_settings_list, MENU_ENUM_SUBLABEL_USER_INTERFACE_SETTINGS)
277280
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_ai_service_settings_list, MENU_ENUM_SUBLABEL_AI_SERVICE_SETTINGS)
@@ -5254,12 +5257,21 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
52545257
case MENU_ENUM_LABEL_CLOUD_SYNC_URL:
52555258
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cloud_sync_url);
52565259
break;
5260+
case MENU_ENUM_LABEL_CLOUD_SYNC_S3_URL:
5261+
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cloud_sync_s3_url);
5262+
break;
52575263
case MENU_ENUM_LABEL_CLOUD_SYNC_USERNAME:
52585264
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cloud_sync_username);
52595265
break;
52605266
case MENU_ENUM_LABEL_CLOUD_SYNC_PASSWORD:
52615267
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cloud_sync_password);
52625268
break;
5269+
case MENU_ENUM_LABEL_CLOUD_SYNC_ACCESS_KEY_ID:
5270+
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cloud_sync_access_key_id);
5271+
break;
5272+
case MENU_ENUM_LABEL_CLOUD_SYNC_SECRET_ACCESS_KEY:
5273+
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cloud_sync_secret_access_key);
5274+
break;
52635275
case MENU_ENUM_LABEL_LOGGING_SETTINGS:
52645276
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_logging_settings_list);
52655277
break;

menu/menu_displaylist.c

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10364,7 +10364,7 @@ unsigned menu_displaylist_build_list(
1036410364
MENU_ENUM_LABEL_VIDEO_HDR_SCANLINES,
1036510365
PARSE_ONLY_BOOL, false) == 0)
1036610366
count++;
10367-
10367+
1036810368
if(settings->bools.video_hdr_scanlines)
1036910369
{
1037010370
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
@@ -11345,22 +11345,50 @@ unsigned menu_displaylist_build_list(
1134511345
case DISPLAYLIST_CLOUD_SYNC_SETTINGS_LIST:
1134611346
{
1134711347
menu_displaylist_build_info_selective_t build_list[] = {
11348-
{MENU_ENUM_LABEL_CLOUD_SYNC_ENABLE, PARSE_ONLY_BOOL, true},
11349-
{MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_MODE, PARSE_ONLY_UINT, true},
11350-
{MENU_ENUM_LABEL_CLOUD_SYNC_DESTRUCTIVE, PARSE_ONLY_BOOL, true},
11351-
{MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_SAVES, PARSE_ONLY_BOOL, true},
11352-
{MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_CONFIGS, PARSE_ONLY_BOOL, true},
11353-
{MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_THUMBS, PARSE_ONLY_BOOL, true},
11354-
{MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_SYSTEM, PARSE_ONLY_BOOL, true},
11355-
{MENU_ENUM_LABEL_CLOUD_SYNC_DRIVER, PARSE_ONLY_STRING_OPTIONS, true},
11356-
{MENU_ENUM_LABEL_CLOUD_SYNC_URL, PARSE_ONLY_STRING, false},
11357-
{MENU_ENUM_LABEL_CLOUD_SYNC_USERNAME, PARSE_ONLY_STRING, false},
11358-
{MENU_ENUM_LABEL_CLOUD_SYNC_PASSWORD, PARSE_ONLY_STRING, false},
11348+
{MENU_ENUM_LABEL_CLOUD_SYNC_ENABLE, PARSE_ONLY_BOOL, true},
11349+
{MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_MODE, PARSE_ONLY_UINT, true},
11350+
{MENU_ENUM_LABEL_CLOUD_SYNC_DESTRUCTIVE, PARSE_ONLY_BOOL, true},
11351+
{MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_SAVES, PARSE_ONLY_BOOL, true},
11352+
{MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_CONFIGS, PARSE_ONLY_BOOL, true},
11353+
{MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_THUMBS, PARSE_ONLY_BOOL, true},
11354+
{MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_SYSTEM, PARSE_ONLY_BOOL, true},
11355+
{MENU_ENUM_LABEL_CLOUD_SYNC_DRIVER, PARSE_ONLY_STRING_OPTIONS, true},
11356+
{MENU_ENUM_LABEL_CLOUD_SYNC_URL, PARSE_ONLY_STRING, false},
11357+
{MENU_ENUM_LABEL_CLOUD_SYNC_USERNAME, PARSE_ONLY_STRING, false},
11358+
{MENU_ENUM_LABEL_CLOUD_SYNC_PASSWORD, PARSE_ONLY_STRING, false},
11359+
{MENU_ENUM_LABEL_CLOUD_SYNC_S3_URL, PARSE_ONLY_STRING, false},
11360+
{MENU_ENUM_LABEL_CLOUD_SYNC_ACCESS_KEY_ID, PARSE_ONLY_STRING, false},
11361+
{MENU_ENUM_LABEL_CLOUD_SYNC_SECRET_ACCESS_KEY, PARSE_ONLY_STRING, false},
1135911362
};
1136011363

11361-
if (string_is_equal(settings->arrays.cloud_sync_driver, "webdav"))
11362-
for (i = 0; i < ARRAY_SIZE(build_list); i++)
11363-
build_list[i].checked = true;
11364+
for (i = 0; i < ARRAY_SIZE(build_list); i++)
11365+
switch(build_list[i].enum_idx)
11366+
{
11367+
case MENU_ENUM_LABEL_CLOUD_SYNC_ENABLE:
11368+
case MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_MODE:
11369+
case MENU_ENUM_LABEL_CLOUD_SYNC_DESTRUCTIVE:
11370+
case MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_SAVES:
11371+
case MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_CONFIGS:
11372+
case MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_THUMBS:
11373+
case MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_SYSTEM:
11374+
case MENU_ENUM_LABEL_CLOUD_SYNC_DRIVER:
11375+
if (string_is_equal(settings->arrays.cloud_sync_driver, "webdav")
11376+
|| string_is_equal(settings->arrays.cloud_sync_driver, "s3"))
11377+
build_list[i].checked = true;
11378+
break;
11379+
case MENU_ENUM_LABEL_CLOUD_SYNC_USERNAME:
11380+
case MENU_ENUM_LABEL_CLOUD_SYNC_URL:
11381+
case MENU_ENUM_LABEL_CLOUD_SYNC_PASSWORD:
11382+
if (string_is_equal(settings->arrays.cloud_sync_driver, "webdav"))
11383+
build_list[i].checked = true;
11384+
break;
11385+
case MENU_ENUM_LABEL_CLOUD_SYNC_S3_URL:
11386+
case MENU_ENUM_LABEL_CLOUD_SYNC_ACCESS_KEY_ID:
11387+
case MENU_ENUM_LABEL_CLOUD_SYNC_SECRET_ACCESS_KEY:
11388+
if (string_is_equal(settings->arrays.cloud_sync_driver, "s3"))
11389+
build_list[i].checked = true;
11390+
break;
11391+
}
1136411392

1136511393
for (i = 0; i < ARRAY_SIZE(build_list); i++)
1136611394
{

menu/menu_setting.c

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12282,6 +12282,59 @@ static bool setting_append_list(
1228212282
(*list)[list_info->index - 1].ui_type = ST_UI_TYPE_PASSWORD_LINE_EDIT;
1228312283
(*list)[list_info->index - 1].action_start = setting_generic_action_start_default;
1228412284

12285+
#ifdef HAVE_S3
12286+
/* AWS */
12287+
CONFIG_STRING(
12288+
list, list_info,
12289+
settings->arrays.s3_url,
12290+
sizeof(settings->arrays.s3_url),
12291+
MENU_ENUM_LABEL_CLOUD_SYNC_S3_URL,
12292+
MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_S3_URL,
12293+
"",
12294+
&group_info,
12295+
&subgroup_info,
12296+
parent_group,
12297+
general_write_handler,
12298+
general_read_handler);
12299+
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT);
12300+
(*list)[list_info->index - 1].ui_type = ST_UI_TYPE_STRING_LINE_EDIT;
12301+
(*list)[list_info->index - 1].action_start = setting_generic_action_start_default;
12302+
12303+
CONFIG_STRING(
12304+
list, list_info,
12305+
settings->arrays.access_key_id,
12306+
sizeof(settings->arrays.access_key_id),
12307+
MENU_ENUM_LABEL_CLOUD_SYNC_ACCESS_KEY_ID,
12308+
MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_ACCESS_KEY_ID,
12309+
"",
12310+
&group_info,
12311+
&subgroup_info,
12312+
parent_group,
12313+
general_write_handler,
12314+
general_read_handler);
12315+
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT);
12316+
(*list)[list_info->index - 1].ui_type = ST_UI_TYPE_STRING_LINE_EDIT;
12317+
(*list)[list_info->index - 1].action_start = setting_generic_action_start_default;
12318+
12319+
CONFIG_STRING(
12320+
list, list_info,
12321+
settings->arrays.secret_access_key,
12322+
sizeof(settings->arrays.secret_access_key),
12323+
MENU_ENUM_LABEL_CLOUD_SYNC_SECRET_ACCESS_KEY,
12324+
MENU_ENUM_LABEL_VALUE_CLOUD_SYNC_SECRET_ACCESS_KEY,
12325+
"",
12326+
&group_info,
12327+
&subgroup_info,
12328+
parent_group,
12329+
general_write_handler,
12330+
general_read_handler);
12331+
(*list)[list_info->index - 1].get_string_representation =
12332+
&setting_get_string_representation_password;
12333+
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT);
12334+
(*list)[list_info->index - 1].ui_type = ST_UI_TYPE_PASSWORD_LINE_EDIT;
12335+
(*list)[list_info->index - 1].action_start = setting_generic_action_start_default;
12336+
#endif
12337+
1228512338
END_SUB_GROUP(list, list_info, parent_group);
1228612339
END_GROUP(list, list_info, parent_group);
1228712340
#endif

msg_hash.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1536,7 +1536,7 @@ enum msg_hash_enums
15361536
MENU_ENUM_LABEL_VALUE_VIDEO_HDR_SUBPIXEL_LAYOUT_RGB,
15371537
MENU_ENUM_LABEL_VALUE_VIDEO_HDR_SUBPIXEL_LAYOUT_RBG,
15381538
MENU_ENUM_LABEL_VALUE_VIDEO_HDR_SUBPIXEL_LAYOUT_BGR,
1539-
1539+
15401540
MENU_LBL_H(PARENT_DIRECTORY),
15411541
MENU_LBL_H(FILE_BROWSER_OPEN_UWP_PERMISSIONS),
15421542
MENU_LABEL(FILE_BROWSER_OPEN_PICKER),
@@ -3212,6 +3212,9 @@ enum msg_hash_enums
32123212
MENU_LABEL(CLOUD_SYNC_SYNC_NOW),
32133213
MENU_LABEL(CLOUD_SYNC_RESOLVE_KEEP_LOCAL),
32143214
MENU_LABEL(CLOUD_SYNC_RESOLVE_KEEP_SERVER),
3215+
MENU_LABEL(CLOUD_SYNC_S3_URL),
3216+
MENU_LABEL(CLOUD_SYNC_ACCESS_KEY_ID),
3217+
MENU_LABEL(CLOUD_SYNC_SECRET_ACCESS_KEY),
32153218
MENU_LABEL(RECORDING_SETTINGS),
32163219
MENU_LABEL(OVERLAY_SETTINGS),
32173220
MENU_LABEL(REWIND_SETTINGS),

0 commit comments

Comments
 (0)