├── .clang-format
├── .gitignore
├── .gitmodules
├── Downloader
├── Downloader.vcxproj
├── Downloader.vcxproj.filters
├── Downloader.vcxproj.user
├── Resource.aps
├── Resource.rc
├── libraries
│ ├── curl
│ │ ├── curl.h
│ │ ├── curlver.h
│ │ ├── easy.h
│ │ ├── header.h
│ │ ├── libcurl-x64.lib
│ │ ├── libcurl-x86.lib
│ │ ├── mprintf.h
│ │ ├── multi.h
│ │ ├── options.h
│ │ ├── stdcheaders.h
│ │ ├── system.h
│ │ ├── typecheck-gcc.h
│ │ ├── urlapi.h
│ │ └── websockets.h
│ ├── detours
│ │ ├── detours-x64.lib
│ │ ├── detours-x86.lib
│ │ ├── detours.h
│ │ └── detver.h
│ ├── imgui-notify
│ │ ├── fa_solid_900.h
│ │ ├── font_awesome_5.h
│ │ └── imgui_notify.h
│ └── json
│ │ └── json.hpp
├── res
│ ├── MiSans-Normal.ttf
│ └── language
│ │ ├── en_us.json
│ │ └── zh_cn.json
├── resource.h
├── src
│ ├── HookManager.hpp
│ ├── Logger.h
│ ├── api
│ │ ├── Bancho.cpp
│ │ ├── Bancho.h
│ │ ├── Chimu.cpp
│ │ ├── Chimu.h
│ │ ├── Provider.cpp
│ │ ├── Provider.h
│ │ ├── Sayobot.cpp
│ │ ├── Sayobot.h
│ │ └── chimu
│ │ │ ├── Map.hpp
│ │ │ └── Mapset.hpp
│ ├── config
│ │ ├── Field.cpp
│ │ ├── Field.h
│ │ └── I18nManager.h
│ ├── dllmain.cpp
│ ├── dlver.h.default
│ ├── features
│ │ ├── About.cpp
│ │ ├── About.h
│ │ ├── CustomHotkey.cpp
│ │ ├── CustomHotkey.h
│ │ ├── DownloadQueue.cpp
│ │ ├── DownloadQueue.h
│ │ ├── Downloader.cpp
│ │ ├── Downloader.h
│ │ ├── Feature.h
│ │ ├── HandleLinkHook.cpp
│ │ ├── HandleLinkHook.h
│ │ ├── MultiDownload.cpp
│ │ ├── MultiDownload.h
│ │ ├── Settings.cpp
│ │ └── Settings.h
│ ├── framework.h
│ ├── main.hpp
│ ├── misc
│ │ ├── Color.h
│ │ ├── Hotkey.hpp
│ │ ├── ISerializable.h
│ │ ├── ResourcesLoader.hpp
│ │ ├── VersionManager.cpp
│ │ ├── VersionManager.h
│ │ └── glob.h
│ ├── network
│ │ ├── HttpRequest.cpp
│ │ └── HttpRequest.h
│ ├── osu
│ │ ├── Account.cpp
│ │ ├── Account.h
│ │ ├── Beatmap.cpp
│ │ ├── Beatmap.h
│ │ ├── BeatmapManager.cpp
│ │ ├── BeatmapManager.h
│ │ ├── LinkParser.hpp
│ │ ├── OsuConfigManager.cpp
│ │ └── OsuConfigManager.h
│ ├── pch.cpp
│ ├── pch.h
│ ├── renderer
│ │ ├── backend
│ │ │ ├── DirectX.cpp
│ │ │ ├── DirectX.h
│ │ │ ├── OpenGL.cpp
│ │ │ └── OpenGL.h
│ │ ├── renderer.cpp
│ │ └── renderer.h
│ ├── ui
│ │ ├── BeatmapIdSearchUi.cpp
│ │ ├── BeatmapIdSearchUi.h
│ │ ├── BlockingInput.hpp
│ │ ├── MainUi.cpp
│ │ ├── MainUi.h
│ │ ├── SearchResultUi.cpp
│ │ └── SearchResultUi.h
│ └── utils
│ │ ├── MD5.hpp
│ │ ├── Utils.cpp
│ │ ├── Utils.h
│ │ ├── gui_utils.cpp
│ │ └── gui_utils.h
└── update_version.py
├── Injector
├── Injector.vcxproj
├── Injector.vcxproj.filters
├── Injector.vcxproj.user
└── src
│ └── main.cpp
├── OsuBeatmapDownloader.sln
├── README.md
├── README_zh_cn.md
└── docs
└── img
├── en_us
├── 1.png
├── 2.png
└── 3.png
└── zh_cn
├── 1.png
├── 2.png
└── 3.png
/.clang-format:
--------------------------------------------------------------------------------
1 | ---
2 | Language: Cpp
3 | BasedOnStyle: LLVM
4 | AccessModifierOffset: -4
5 | AlignConsecutiveAssignments: false
6 | AlignConsecutiveDeclarations: false
7 | AlignOperands: false
8 | AlignTrailingComments: false
9 | AlwaysBreakTemplateDeclarations: Yes
10 | BraceWrapping:
11 | AfterCaseLabel: false
12 | AfterClass: false
13 | AfterControlStatement: false
14 | AfterEnum: false
15 | AfterFunction: false
16 | AfterNamespace: false
17 | AfterStruct: false
18 | AfterUnion: false
19 | AfterExternBlock: false
20 | BeforeCatch: false
21 | BeforeElse: false
22 | BeforeLambdaBody: false
23 | BeforeWhile: false
24 | SplitEmptyFunction: true
25 | SplitEmptyRecord: true
26 | SplitEmptyNamespace: true
27 | BreakBeforeBraces: Custom
28 | BreakConstructorInitializers: AfterColon
29 | ColumnLimit: 144
30 | IncludeCategories:
31 | - Regex: '^<.*'
32 | Priority: 1
33 | - Regex: '^".*'
34 | Priority: 2
35 | - Regex: '.*'
36 | Priority: 3
37 | IncludeIsMainRegex: '([-_](test|unittest))?$'
38 | IndentWidth: 4
39 | MacroBlockBegin: ''
40 | MacroBlockEnd: ''
41 | MaxEmptyLinesToKeep: 2
42 | SpacesInAngles: false
43 | TabWidth: 4
44 | ...
45 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /.vs
2 | /.vscode
3 | /.idea
4 | /bin
5 | /Downloader/src/dlver.h
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "imgui"]
2 | path = Downloader/libraries/imgui
3 | url = https://github.com/ocornut/imgui.git
4 | [submodule "utility"]
5 | path = Downloader/libraries/utility
6 | url = https://github.com/KyuubiRan/utility
7 |
--------------------------------------------------------------------------------
/Downloader/Downloader.vcxproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | true
5 |
6 |
7 | true
8 | WindowsLocalDebugger
9 | NativeOnly
10 |
11 |
12 | true
13 | WindowsLocalDebugger
14 | NativeOnly
15 |
16 |
--------------------------------------------------------------------------------
/Downloader/Resource.aps:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KyuubiRan/BeatmapDownloader/9892bf62b4243184edb56a404ea8c14f58c37ef6/Downloader/Resource.aps
--------------------------------------------------------------------------------
/Downloader/Resource.rc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KyuubiRan/BeatmapDownloader/9892bf62b4243184edb56a404ea8c14f58c37ef6/Downloader/Resource.rc
--------------------------------------------------------------------------------
/Downloader/libraries/curl/curlver.h:
--------------------------------------------------------------------------------
1 | #ifndef CURLINC_CURLVER_H
2 | #define CURLINC_CURLVER_H
3 | /***************************************************************************
4 | * _ _ ____ _
5 | * Project ___| | | | _ \| |
6 | * / __| | | | |_) | |
7 | * | (__| |_| | _ <| |___
8 | * \___|\___/|_| \_\_____|
9 | *
10 | * Copyright (C) Daniel Stenberg, , et al.
11 | *
12 | * This software is licensed as described in the file COPYING, which
13 | * you should have received as part of this distribution. The terms
14 | * are also available at https://curl.se/docs/copyright.html.
15 | *
16 | * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17 | * copies of the Software, and permit persons to whom the Software is
18 | * furnished to do so, under the terms of the COPYING file.
19 | *
20 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21 | * KIND, either express or implied.
22 | *
23 | * SPDX-License-Identifier: curl
24 | *
25 | ***************************************************************************/
26 |
27 | /* This header file contains nothing but libcurl version info, generated by
28 | a script at release-time. This was made its own header file in 7.11.2 */
29 |
30 | /* This is the global package copyright */
31 | #define LIBCURL_COPYRIGHT "Daniel Stenberg, ."
32 |
33 | /* This is the version number of the libcurl package from which this header
34 | file origins: */
35 | #define LIBCURL_VERSION "8.1.2"
36 |
37 | /* The numeric version number is also available "in parts" by using these
38 | defines: */
39 | #define LIBCURL_VERSION_MAJOR 8
40 | #define LIBCURL_VERSION_MINOR 1
41 | #define LIBCURL_VERSION_PATCH 2
42 |
43 | /* This is the numeric version of the libcurl version number, meant for easier
44 | parsing and comparisons by programs. The LIBCURL_VERSION_NUM define will
45 | always follow this syntax:
46 |
47 | 0xXXYYZZ
48 |
49 | Where XX, YY and ZZ are the main version, release and patch numbers in
50 | hexadecimal (using 8 bits each). All three numbers are always represented
51 | using two digits. 1.2 would appear as "0x010200" while version 9.11.7
52 | appears as "0x090b07".
53 |
54 | This 6-digit (24 bits) hexadecimal number does not show pre-release number,
55 | and it is always a greater number in a more recent release. It makes
56 | comparisons with greater than and less than work.
57 |
58 | Note: This define is the full hex number and _does not_ use the
59 | CURL_VERSION_BITS() macro since curl's own configure script greps for it
60 | and needs it to contain the full number.
61 | */
62 | #define LIBCURL_VERSION_NUM 0x080102
63 |
64 | /*
65 | * This is the date and time when the full source package was created. The
66 | * timestamp is not stored in git, as the timestamp is properly set in the
67 | * tarballs by the maketgz script.
68 | *
69 | * The format of the date follows this template:
70 | *
71 | * "2007-11-23"
72 | */
73 | #define LIBCURL_TIMESTAMP "2023-05-30"
74 |
75 | #define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z))
76 | #define CURL_AT_LEAST_VERSION(x,y,z) \
77 | (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z))
78 |
79 | #endif /* CURLINC_CURLVER_H */
80 |
--------------------------------------------------------------------------------
/Downloader/libraries/curl/easy.h:
--------------------------------------------------------------------------------
1 | #ifndef CURLINC_EASY_H
2 | #define CURLINC_EASY_H
3 | /***************************************************************************
4 | * _ _ ____ _
5 | * Project ___| | | | _ \| |
6 | * / __| | | | |_) | |
7 | * | (__| |_| | _ <| |___
8 | * \___|\___/|_| \_\_____|
9 | *
10 | * Copyright (C) Daniel Stenberg, , et al.
11 | *
12 | * This software is licensed as described in the file COPYING, which
13 | * you should have received as part of this distribution. The terms
14 | * are also available at https://curl.se/docs/copyright.html.
15 | *
16 | * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17 | * copies of the Software, and permit persons to whom the Software is
18 | * furnished to do so, under the terms of the COPYING file.
19 | *
20 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21 | * KIND, either express or implied.
22 | *
23 | * SPDX-License-Identifier: curl
24 | *
25 | ***************************************************************************/
26 | #ifdef __cplusplus
27 | extern "C" {
28 | #endif
29 |
30 | /* Flag bits in the curl_blob struct: */
31 | #define CURL_BLOB_COPY 1 /* tell libcurl to copy the data */
32 | #define CURL_BLOB_NOCOPY 0 /* tell libcurl to NOT copy the data */
33 |
34 | struct curl_blob {
35 | void *data;
36 | size_t len;
37 | unsigned int flags; /* bit 0 is defined, the rest are reserved and should be
38 | left zeroes */
39 | };
40 |
41 | CURL_EXTERN CURL *curl_easy_init(void);
42 | CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
43 | CURL_EXTERN CURLcode curl_easy_perform(CURL *curl);
44 | CURL_EXTERN void curl_easy_cleanup(CURL *curl);
45 |
46 | /*
47 | * NAME curl_easy_getinfo()
48 | *
49 | * DESCRIPTION
50 | *
51 | * Request internal information from the curl session with this function.
52 | * The third argument MUST be pointing to the specific type of the used option
53 | * which is documented in each man page of the option. The data pointed to
54 | * will be filled in accordingly and can be relied upon only if the function
55 | * returns CURLE_OK. This function is intended to get used *AFTER* a performed
56 | * transfer, all results from this function are undefined until the transfer
57 | * is completed.
58 | */
59 | CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...);
60 |
61 |
62 | /*
63 | * NAME curl_easy_duphandle()
64 | *
65 | * DESCRIPTION
66 | *
67 | * Creates a new curl session handle with the same options set for the handle
68 | * passed in. Duplicating a handle could only be a matter of cloning data and
69 | * options, internal state info and things like persistent connections cannot
70 | * be transferred. It is useful in multithreaded applications when you can run
71 | * curl_easy_duphandle() for each new thread to avoid a series of identical
72 | * curl_easy_setopt() invokes in every thread.
73 | */
74 | CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl);
75 |
76 | /*
77 | * NAME curl_easy_reset()
78 | *
79 | * DESCRIPTION
80 | *
81 | * Re-initializes a CURL handle to the default values. This puts back the
82 | * handle to the same state as it was in when it was just created.
83 | *
84 | * It does keep: live connections, the Session ID cache, the DNS cache and the
85 | * cookies.
86 | */
87 | CURL_EXTERN void curl_easy_reset(CURL *curl);
88 |
89 | /*
90 | * NAME curl_easy_recv()
91 | *
92 | * DESCRIPTION
93 | *
94 | * Receives data from the connected socket. Use after successful
95 | * curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
96 | */
97 | CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen,
98 | size_t *n);
99 |
100 | /*
101 | * NAME curl_easy_send()
102 | *
103 | * DESCRIPTION
104 | *
105 | * Sends data over the connected socket. Use after successful
106 | * curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
107 | */
108 | CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer,
109 | size_t buflen, size_t *n);
110 |
111 |
112 | /*
113 | * NAME curl_easy_upkeep()
114 | *
115 | * DESCRIPTION
116 | *
117 | * Performs connection upkeep for the given session handle.
118 | */
119 | CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl);
120 |
121 | #ifdef __cplusplus
122 | } /* end of extern "C" */
123 | #endif
124 |
125 | #endif
126 |
--------------------------------------------------------------------------------
/Downloader/libraries/curl/header.h:
--------------------------------------------------------------------------------
1 | #ifndef CURLINC_HEADER_H
2 | #define CURLINC_HEADER_H
3 | /***************************************************************************
4 | * _ _ ____ _
5 | * Project ___| | | | _ \| |
6 | * / __| | | | |_) | |
7 | * | (__| |_| | _ <| |___
8 | * \___|\___/|_| \_\_____|
9 | *
10 | * Copyright (C) Daniel Stenberg, , et al.
11 | *
12 | * This software is licensed as described in the file COPYING, which
13 | * you should have received as part of this distribution. The terms
14 | * are also available at https://curl.se/docs/copyright.html.
15 | *
16 | * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17 | * copies of the Software, and permit persons to whom the Software is
18 | * furnished to do so, under the terms of the COPYING file.
19 | *
20 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21 | * KIND, either express or implied.
22 | *
23 | * SPDX-License-Identifier: curl
24 | *
25 | ***************************************************************************/
26 |
27 | #ifdef __cplusplus
28 | extern "C" {
29 | #endif
30 |
31 | struct curl_header {
32 | char *name; /* this might not use the same case */
33 | char *value;
34 | size_t amount; /* number of headers using this name */
35 | size_t index; /* ... of this instance, 0 or higher */
36 | unsigned int origin; /* see bits below */
37 | void *anchor; /* handle privately used by libcurl */
38 | };
39 |
40 | /* 'origin' bits */
41 | #define CURLH_HEADER (1<<0) /* plain server header */
42 | #define CURLH_TRAILER (1<<1) /* trailers */
43 | #define CURLH_CONNECT (1<<2) /* CONNECT headers */
44 | #define CURLH_1XX (1<<3) /* 1xx headers */
45 | #define CURLH_PSEUDO (1<<4) /* pseudo headers */
46 |
47 | typedef enum {
48 | CURLHE_OK,
49 | CURLHE_BADINDEX, /* header exists but not with this index */
50 | CURLHE_MISSING, /* no such header exists */
51 | CURLHE_NOHEADERS, /* no headers at all exist (yet) */
52 | CURLHE_NOREQUEST, /* no request with this number was used */
53 | CURLHE_OUT_OF_MEMORY, /* out of memory while processing */
54 | CURLHE_BAD_ARGUMENT, /* a function argument was not okay */
55 | CURLHE_NOT_BUILT_IN /* if API was disabled in the build */
56 | } CURLHcode;
57 |
58 | CURL_EXTERN CURLHcode curl_easy_header(CURL *easy,
59 | const char *name,
60 | size_t index,
61 | unsigned int origin,
62 | int request,
63 | struct curl_header **hout);
64 |
65 | CURL_EXTERN struct curl_header *curl_easy_nextheader(CURL *easy,
66 | unsigned int origin,
67 | int request,
68 | struct curl_header *prev);
69 |
70 | #ifdef __cplusplus
71 | } /* end of extern "C" */
72 | #endif
73 |
74 | #endif /* CURLINC_HEADER_H */
75 |
--------------------------------------------------------------------------------
/Downloader/libraries/curl/libcurl-x64.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KyuubiRan/BeatmapDownloader/9892bf62b4243184edb56a404ea8c14f58c37ef6/Downloader/libraries/curl/libcurl-x64.lib
--------------------------------------------------------------------------------
/Downloader/libraries/curl/libcurl-x86.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KyuubiRan/BeatmapDownloader/9892bf62b4243184edb56a404ea8c14f58c37ef6/Downloader/libraries/curl/libcurl-x86.lib
--------------------------------------------------------------------------------
/Downloader/libraries/curl/mprintf.h:
--------------------------------------------------------------------------------
1 | #ifndef CURLINC_MPRINTF_H
2 | #define CURLINC_MPRINTF_H
3 | /***************************************************************************
4 | * _ _ ____ _
5 | * Project ___| | | | _ \| |
6 | * / __| | | | |_) | |
7 | * | (__| |_| | _ <| |___
8 | * \___|\___/|_| \_\_____|
9 | *
10 | * Copyright (C) Daniel Stenberg, , et al.
11 | *
12 | * This software is licensed as described in the file COPYING, which
13 | * you should have received as part of this distribution. The terms
14 | * are also available at https://curl.se/docs/copyright.html.
15 | *
16 | * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17 | * copies of the Software, and permit persons to whom the Software is
18 | * furnished to do so, under the terms of the COPYING file.
19 | *
20 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21 | * KIND, either express or implied.
22 | *
23 | * SPDX-License-Identifier: curl
24 | *
25 | ***************************************************************************/
26 |
27 | #include
28 | #include /* needed for FILE */
29 | #include "curl.h" /* for CURL_EXTERN */
30 |
31 | #ifdef __cplusplus
32 | extern "C" {
33 | #endif
34 |
35 | CURL_EXTERN int curl_mprintf(const char *format, ...);
36 | CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...);
37 | CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...);
38 | CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength,
39 | const char *format, ...);
40 | CURL_EXTERN int curl_mvprintf(const char *format, va_list args);
41 | CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args);
42 | CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args);
43 | CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength,
44 | const char *format, va_list args);
45 | CURL_EXTERN char *curl_maprintf(const char *format, ...);
46 | CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args);
47 |
48 | #ifdef __cplusplus
49 | } /* end of extern "C" */
50 | #endif
51 |
52 | #endif /* CURLINC_MPRINTF_H */
53 |
--------------------------------------------------------------------------------
/Downloader/libraries/curl/options.h:
--------------------------------------------------------------------------------
1 | #ifndef CURLINC_OPTIONS_H
2 | #define CURLINC_OPTIONS_H
3 | /***************************************************************************
4 | * _ _ ____ _
5 | * Project ___| | | | _ \| |
6 | * / __| | | | |_) | |
7 | * | (__| |_| | _ <| |___
8 | * \___|\___/|_| \_\_____|
9 | *
10 | * Copyright (C) Daniel Stenberg, , et al.
11 | *
12 | * This software is licensed as described in the file COPYING, which
13 | * you should have received as part of this distribution. The terms
14 | * are also available at https://curl.se/docs/copyright.html.
15 | *
16 | * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17 | * copies of the Software, and permit persons to whom the Software is
18 | * furnished to do so, under the terms of the COPYING file.
19 | *
20 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21 | * KIND, either express or implied.
22 | *
23 | * SPDX-License-Identifier: curl
24 | *
25 | ***************************************************************************/
26 |
27 | #ifdef __cplusplus
28 | extern "C" {
29 | #endif
30 |
31 | typedef enum {
32 | CURLOT_LONG, /* long (a range of values) */
33 | CURLOT_VALUES, /* (a defined set or bitmask) */
34 | CURLOT_OFF_T, /* curl_off_t (a range of values) */
35 | CURLOT_OBJECT, /* pointer (void *) */
36 | CURLOT_STRING, /* (char * to null-terminated buffer) */
37 | CURLOT_SLIST, /* (struct curl_slist *) */
38 | CURLOT_CBPTR, /* (void * passed as-is to a callback) */
39 | CURLOT_BLOB, /* blob (struct curl_blob *) */
40 | CURLOT_FUNCTION /* function pointer */
41 | } curl_easytype;
42 |
43 | /* Flag bits */
44 |
45 | /* "alias" means it is provided for old programs to remain functional,
46 | we prefer another name */
47 | #define CURLOT_FLAG_ALIAS (1<<0)
48 |
49 | /* The CURLOPTTYPE_* id ranges can still be used to figure out what type/size
50 | to use for curl_easy_setopt() for the given id */
51 | struct curl_easyoption {
52 | const char *name;
53 | CURLoption id;
54 | curl_easytype type;
55 | unsigned int flags;
56 | };
57 |
58 | CURL_EXTERN const struct curl_easyoption *
59 | curl_easy_option_by_name(const char *name);
60 |
61 | CURL_EXTERN const struct curl_easyoption *
62 | curl_easy_option_by_id(CURLoption id);
63 |
64 | CURL_EXTERN const struct curl_easyoption *
65 | curl_easy_option_next(const struct curl_easyoption *prev);
66 |
67 | #ifdef __cplusplus
68 | } /* end of extern "C" */
69 | #endif
70 | #endif /* CURLINC_OPTIONS_H */
71 |
--------------------------------------------------------------------------------
/Downloader/libraries/curl/stdcheaders.h:
--------------------------------------------------------------------------------
1 | #ifndef CURLINC_STDCHEADERS_H
2 | #define CURLINC_STDCHEADERS_H
3 | /***************************************************************************
4 | * _ _ ____ _
5 | * Project ___| | | | _ \| |
6 | * / __| | | | |_) | |
7 | * | (__| |_| | _ <| |___
8 | * \___|\___/|_| \_\_____|
9 | *
10 | * Copyright (C) Daniel Stenberg, , et al.
11 | *
12 | * This software is licensed as described in the file COPYING, which
13 | * you should have received as part of this distribution. The terms
14 | * are also available at https://curl.se/docs/copyright.html.
15 | *
16 | * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17 | * copies of the Software, and permit persons to whom the Software is
18 | * furnished to do so, under the terms of the COPYING file.
19 | *
20 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21 | * KIND, either express or implied.
22 | *
23 | * SPDX-License-Identifier: curl
24 | *
25 | ***************************************************************************/
26 |
27 | #include
28 |
29 | size_t fread(void *, size_t, size_t, FILE *);
30 | size_t fwrite(const void *, size_t, size_t, FILE *);
31 |
32 | int strcasecmp(const char *, const char *);
33 | int strncasecmp(const char *, const char *, size_t);
34 |
35 | #endif /* CURLINC_STDCHEADERS_H */
36 |
--------------------------------------------------------------------------------
/Downloader/libraries/curl/urlapi.h:
--------------------------------------------------------------------------------
1 | #ifndef CURLINC_URLAPI_H
2 | #define CURLINC_URLAPI_H
3 | /***************************************************************************
4 | * _ _ ____ _
5 | * Project ___| | | | _ \| |
6 | * / __| | | | |_) | |
7 | * | (__| |_| | _ <| |___
8 | * \___|\___/|_| \_\_____|
9 | *
10 | * Copyright (C) Daniel Stenberg, , et al.
11 | *
12 | * This software is licensed as described in the file COPYING, which
13 | * you should have received as part of this distribution. The terms
14 | * are also available at https://curl.se/docs/copyright.html.
15 | *
16 | * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17 | * copies of the Software, and permit persons to whom the Software is
18 | * furnished to do so, under the terms of the COPYING file.
19 | *
20 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21 | * KIND, either express or implied.
22 | *
23 | * SPDX-License-Identifier: curl
24 | *
25 | ***************************************************************************/
26 |
27 | #include "curl.h"
28 |
29 | #ifdef __cplusplus
30 | extern "C" {
31 | #endif
32 |
33 | /* the error codes for the URL API */
34 | typedef enum {
35 | CURLUE_OK,
36 | CURLUE_BAD_HANDLE, /* 1 */
37 | CURLUE_BAD_PARTPOINTER, /* 2 */
38 | CURLUE_MALFORMED_INPUT, /* 3 */
39 | CURLUE_BAD_PORT_NUMBER, /* 4 */
40 | CURLUE_UNSUPPORTED_SCHEME, /* 5 */
41 | CURLUE_URLDECODE, /* 6 */
42 | CURLUE_OUT_OF_MEMORY, /* 7 */
43 | CURLUE_USER_NOT_ALLOWED, /* 8 */
44 | CURLUE_UNKNOWN_PART, /* 9 */
45 | CURLUE_NO_SCHEME, /* 10 */
46 | CURLUE_NO_USER, /* 11 */
47 | CURLUE_NO_PASSWORD, /* 12 */
48 | CURLUE_NO_OPTIONS, /* 13 */
49 | CURLUE_NO_HOST, /* 14 */
50 | CURLUE_NO_PORT, /* 15 */
51 | CURLUE_NO_QUERY, /* 16 */
52 | CURLUE_NO_FRAGMENT, /* 17 */
53 | CURLUE_NO_ZONEID, /* 18 */
54 | CURLUE_BAD_FILE_URL, /* 19 */
55 | CURLUE_BAD_FRAGMENT, /* 20 */
56 | CURLUE_BAD_HOSTNAME, /* 21 */
57 | CURLUE_BAD_IPV6, /* 22 */
58 | CURLUE_BAD_LOGIN, /* 23 */
59 | CURLUE_BAD_PASSWORD, /* 24 */
60 | CURLUE_BAD_PATH, /* 25 */
61 | CURLUE_BAD_QUERY, /* 26 */
62 | CURLUE_BAD_SCHEME, /* 27 */
63 | CURLUE_BAD_SLASHES, /* 28 */
64 | CURLUE_BAD_USER, /* 29 */
65 | CURLUE_LACKS_IDN, /* 30 */
66 | CURLUE_LAST
67 | } CURLUcode;
68 |
69 | typedef enum {
70 | CURLUPART_URL,
71 | CURLUPART_SCHEME,
72 | CURLUPART_USER,
73 | CURLUPART_PASSWORD,
74 | CURLUPART_OPTIONS,
75 | CURLUPART_HOST,
76 | CURLUPART_PORT,
77 | CURLUPART_PATH,
78 | CURLUPART_QUERY,
79 | CURLUPART_FRAGMENT,
80 | CURLUPART_ZONEID /* added in 7.65.0 */
81 | } CURLUPart;
82 |
83 | #define CURLU_DEFAULT_PORT (1<<0) /* return default port number */
84 | #define CURLU_NO_DEFAULT_PORT (1<<1) /* act as if no port number was set,
85 | if the port number matches the
86 | default for the scheme */
87 | #define CURLU_DEFAULT_SCHEME (1<<2) /* return default scheme if
88 | missing */
89 | #define CURLU_NON_SUPPORT_SCHEME (1<<3) /* allow non-supported scheme */
90 | #define CURLU_PATH_AS_IS (1<<4) /* leave dot sequences */
91 | #define CURLU_DISALLOW_USER (1<<5) /* no user+password allowed */
92 | #define CURLU_URLDECODE (1<<6) /* URL decode on get */
93 | #define CURLU_URLENCODE (1<<7) /* URL encode on set */
94 | #define CURLU_APPENDQUERY (1<<8) /* append a form style part */
95 | #define CURLU_GUESS_SCHEME (1<<9) /* legacy curl-style guessing */
96 | #define CURLU_NO_AUTHORITY (1<<10) /* Allow empty authority when the
97 | scheme is unknown. */
98 | #define CURLU_ALLOW_SPACE (1<<11) /* Allow spaces in the URL */
99 | #define CURLU_PUNYCODE (1<<12) /* get the host name in pynycode */
100 |
101 | typedef struct Curl_URL CURLU;
102 |
103 | /*
104 | * curl_url() creates a new CURLU handle and returns a pointer to it.
105 | * Must be freed with curl_url_cleanup().
106 | */
107 | CURL_EXTERN CURLU *curl_url(void);
108 |
109 | /*
110 | * curl_url_cleanup() frees the CURLU handle and related resources used for
111 | * the URL parsing. It will not free strings previously returned with the URL
112 | * API.
113 | */
114 | CURL_EXTERN void curl_url_cleanup(CURLU *handle);
115 |
116 | /*
117 | * curl_url_dup() duplicates a CURLU handle and returns a new copy. The new
118 | * handle must also be freed with curl_url_cleanup().
119 | */
120 | CURL_EXTERN CURLU *curl_url_dup(const CURLU *in);
121 |
122 | /*
123 | * curl_url_get() extracts a specific part of the URL from a CURLU
124 | * handle. Returns error code. The returned pointer MUST be freed with
125 | * curl_free() afterwards.
126 | */
127 | CURL_EXTERN CURLUcode curl_url_get(const CURLU *handle, CURLUPart what,
128 | char **part, unsigned int flags);
129 |
130 | /*
131 | * curl_url_set() sets a specific part of the URL in a CURLU handle. Returns
132 | * error code. The passed in string will be copied. Passing a NULL instead of
133 | * a part string, clears that part.
134 | */
135 | CURL_EXTERN CURLUcode curl_url_set(CURLU *handle, CURLUPart what,
136 | const char *part, unsigned int flags);
137 |
138 | /*
139 | * curl_url_strerror() turns a CURLUcode value into the equivalent human
140 | * readable error string. This is useful for printing meaningful error
141 | * messages.
142 | */
143 | CURL_EXTERN const char *curl_url_strerror(CURLUcode);
144 |
145 | #ifdef __cplusplus
146 | } /* end of extern "C" */
147 | #endif
148 |
149 | #endif /* CURLINC_URLAPI_H */
150 |
--------------------------------------------------------------------------------
/Downloader/libraries/curl/websockets.h:
--------------------------------------------------------------------------------
1 | #ifndef CURLINC_WEBSOCKETS_H
2 | #define CURLINC_WEBSOCKETS_H
3 | /***************************************************************************
4 | * _ _ ____ _
5 | * Project ___| | | | _ \| |
6 | * / __| | | | |_) | |
7 | * | (__| |_| | _ <| |___
8 | * \___|\___/|_| \_\_____|
9 | *
10 | * Copyright (C) Daniel Stenberg, , et al.
11 | *
12 | * This software is licensed as described in the file COPYING, which
13 | * you should have received as part of this distribution. The terms
14 | * are also available at https://curl.se/docs/copyright.html.
15 | *
16 | * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17 | * copies of the Software, and permit persons to whom the Software is
18 | * furnished to do so, under the terms of the COPYING file.
19 | *
20 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21 | * KIND, either express or implied.
22 | *
23 | * SPDX-License-Identifier: curl
24 | *
25 | ***************************************************************************/
26 |
27 | #ifdef __cplusplus
28 | extern "C" {
29 | #endif
30 |
31 | struct curl_ws_frame {
32 | int age; /* zero */
33 | int flags; /* See the CURLWS_* defines */
34 | curl_off_t offset; /* the offset of this data into the frame */
35 | curl_off_t bytesleft; /* number of pending bytes left of the payload */
36 | size_t len; /* size of the current data chunk */
37 | };
38 |
39 | /* flag bits */
40 | #define CURLWS_TEXT (1<<0)
41 | #define CURLWS_BINARY (1<<1)
42 | #define CURLWS_CONT (1<<2)
43 | #define CURLWS_CLOSE (1<<3)
44 | #define CURLWS_PING (1<<4)
45 | #define CURLWS_OFFSET (1<<5)
46 |
47 | /*
48 | * NAME curl_ws_recv()
49 | *
50 | * DESCRIPTION
51 | *
52 | * Receives data from the websocket connection. Use after successful
53 | * curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
54 | */
55 | CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen,
56 | size_t *recv,
57 | struct curl_ws_frame **metap);
58 |
59 | /* sendflags for curl_ws_send() */
60 | #define CURLWS_PONG (1<<6)
61 |
62 | /*
63 | * NAME curl_easy_send()
64 | *
65 | * DESCRIPTION
66 | *
67 | * Sends data over the websocket connection. Use after successful
68 | * curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
69 | */
70 | CURL_EXTERN CURLcode curl_ws_send(CURL *curl, const void *buffer,
71 | size_t buflen, size_t *sent,
72 | curl_off_t framesize,
73 | unsigned int sendflags);
74 |
75 | /* bits for the CURLOPT_WS_OPTIONS bitmask: */
76 | #define CURLWS_RAW_MODE (1<<0)
77 |
78 | CURL_EXTERN struct curl_ws_frame *curl_ws_meta(CURL *curl);
79 |
80 | #ifdef __cplusplus
81 | }
82 | #endif
83 |
84 | #endif /* CURLINC_WEBSOCKETS_H */
85 |
--------------------------------------------------------------------------------
/Downloader/libraries/detours/detours-x64.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KyuubiRan/BeatmapDownloader/9892bf62b4243184edb56a404ea8c14f58c37ef6/Downloader/libraries/detours/detours-x64.lib
--------------------------------------------------------------------------------
/Downloader/libraries/detours/detours-x86.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KyuubiRan/BeatmapDownloader/9892bf62b4243184edb56a404ea8c14f58c37ef6/Downloader/libraries/detours/detours-x86.lib
--------------------------------------------------------------------------------
/Downloader/libraries/detours/detver.h:
--------------------------------------------------------------------------------
1 | //////////////////////////////////////////////////////////////////////////////
2 | //
3 | // Common version parameters.
4 | //
5 | // Microsoft Research Detours Package, Version 4.0.1
6 | //
7 | // Copyright (c) Microsoft Corporation. All rights reserved.
8 | //
9 |
10 | #define _USING_V110_SDK71_ 1
11 | #include "winver.h"
12 | #if 0
13 | #include
14 | #include
15 | #else
16 | #ifndef DETOURS_STRINGIFY
17 | #define DETOURS_STRINGIFY_(x) #x
18 | #define DETOURS_STRINGIFY(x) DETOURS_STRINGIFY_(x)
19 | #endif
20 |
21 | #define VER_FILEFLAGSMASK 0x3fL
22 | #define VER_FILEFLAGS 0x0L
23 | #define VER_FILEOS 0x00040004L
24 | #define VER_FILETYPE 0x00000002L
25 | #define VER_FILESUBTYPE 0x00000000L
26 | #endif
27 | #define VER_DETOURS_BITS DETOURS_STRINGIFY(DETOURS_BITS)
28 |
--------------------------------------------------------------------------------
/Downloader/res/MiSans-Normal.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KyuubiRan/BeatmapDownloader/9892bf62b4243184edb56a404ea8c14f58c37ef6/Downloader/res/MiSans-Normal.ttf
--------------------------------------------------------------------------------
/Downloader/res/language/en_us.json:
--------------------------------------------------------------------------------
1 | {
2 | "Download": "Download",
3 | "Downloader": "Downloader",
4 | "OsuBeatmapDownloader": "Osu! Beatmap Downloader",
5 | "Settings": "Settings",
6 | "Mirror": "Download Mirror",
7 | "About": "About",
8 | "ProjectAuthor": "Author: KyuubiRan",
9 | "ProjectLink": "Project link:",
10 | "Language": "Language",
11 | "Enabled": "Enabled",
12 | "Disabled": "Disabled",
13 | "Domain": "Domain",
14 | "HandleLink": "Handle download link",
15 | "HandleLinkDesc": "If enabled, the download link will be handled by the downloader.\nYou can hold the Ctrl and click the link to skip handle the link.",
16 | "HandleLinkDomainDesc": "If you are in private server, you should change this, otherwise, keep it default.",
17 | "GrantOsuAccount": "Grant osu! account",
18 | "GrantOsuAccountDesc": "Grant osu! account, then you can download beatmaps by officially, just like osu!direct.\nNOTICE: If you are in private server, please don not enable this.",
19 | "NotGrantOsuAccountButUseOfficialWarn": "WARNING: You are NOT grant osu! account but using official download!\nThe all of download tasks will AUTO CANCELLED!",
20 | "ProxyServerType": "Set Proxy Server",
21 | "ProxyServerDesc": "Use proxy server to search/download beatmaps.",
22 | "ProxyServer": "Proxy Server",
23 | "ProxyServerPassword": "Proxy Server Password",
24 | "EnableCustomUserAgent": "Enable Custom User-Agent",
25 | "CustomUserAgentDesc": "Enable Custom User-Agent, If you don't know what it is, please keep it disabled.",
26 | "DownloadType": "Download Type",
27 | "Title": "Title: %s",
28 | "Artist": "Artist: %s",
29 | "Mapper": "Mapper: %s",
30 | "Cancel": "Cancel",
31 | "ReDownload": "Re-Download",
32 | "ViewWebsite": "View Website",
33 | "BeatmapInfo": "Beatmap Info",
34 | "DownloadQueue": "Queue",
35 | "CancelDownload": "Cancel Download",
36 | "Hotkey": "Hotkey",
37 | "HotkeyDesc": "[%s] Toggle MainUi Show.\n[%s] Toggle BeatmapIdSearchUi Show.\nHold [Ctrl] + Click the link to skip handle the link.\nHold [SHIFT] + Click the link to direct download the beatmap(except exists beatmap).",
38 | "Empty": "Nothing here~",
39 | "SearchBeatmapId": "Beatmap Id Searcher",
40 | "Search": "Search",
41 | "SearchBeatmapIdDesc": "Search beatmap by id.By BeatmapSetsId: beatmapsets123456 | s123456。\nBy BeatmapId: beatmaps123456 | b123456\nOnly number id: by left combo box selected.",
42 | "Clear": "Clear",
43 | "Username": "Username",
44 | "Password": "Password",
45 | "Toast": "Toast",
46 | "EnableToast": "Enable Toast",
47 | "ToastDuration": "Toast Duration",
48 | "Debug": "Debug",
49 | "EnableConsole": "Enable Console",
50 | "RestartToApply": "Restart to apply changes.",
51 | "DownloaderLoadSuccess": "Welcome to use BeatmapDownloader!",
52 | "Success": "Success",
53 | "Warning": "Warning",
54 | "Info": "Info",
55 | "Error": "Error",
56 | "DownloadFailedOORT": "Download beatmapsets(%d) failed! (out of retry times)",
57 | "DownloadSuccess": "Finished download beatmapsets: %d!",
58 | "StartDownload": "Start download beatmapsets: %d",
59 | "SearchFailed": "Search beatmap(%s=%d) failed!",
60 | "CurlError": "Curl request error: %d",
61 | "OsuPath": "Custom Osu! Path",
62 | "OsuPathDesc": "Use custom osu! path, or empty to auto detect the path.\nIf you don't know what it is, please keep it empty.",
63 | "MoveToOsuFolder": "Move Downloaded Beatmap",
64 | "MoveToOsuFolderDesc": "Move downloaded beatmap to osu! Songs folder instead open the .osz file.",
65 | "MultiDL": "Multi DL",
66 | "MultiDownloader": "Multi Downloader",
67 | "MultiDownloaderDesc": "Download multiple beatmaps line by line.\ne.g.:\ns123456\n123456\nhttps://osu.ppy.sh/beatmapsets/123456",
68 | "Type": "Type",
69 | "IDSearchDefaultType": "Only Number ID Search Type",
70 | "Mode": "Mode",
71 | "BPDownloader": "BP Downloader",
72 | "BPDownloadFailedUserNotFound": "BP Download failed: User(%d) not found!",
73 | "BPDownloadFailedResponseCodeNotOk": "BP Download failed: Response code: %d",
74 | "BPDownloadFailedParseFailed": "BP Download failed: Parse response body failed!",
75 | "ExistsBeatmapSkipAutoDownload": "Already has beatmapsets(%d), skip auto download.",
76 | "Connecting": "Connecting",
77 | "Range": "Range",
78 | "InvalidOsuPath": "Invalid custom osu! path, will not be applied!",
79 | "BPDLRangeDesc": "BP download range, 0~100",
80 | "InvalidDLRange": "Invalid download range! Begin=%d, End=%d",
81 | "StartDownloadBP": "Start download bp(uid=%d): From %d to %d",
82 | "InvalidInput": "Invalid input: %s",
83 | "FavoriteDownloader": "Favorite Beatmap Downloader",
84 | "MapperDownloader": "Mapper Beatmap Downloader",
85 | "FavDownloadFailedUserNotFound": "Favorite Download failed: User(%d) not found!",
86 | "FavDownloadFailedResponseCodeNotOk": "Favorite Download failed: Response code: %d",
87 | "FavDownloadFailedParseFailed": "Favorite Download failed: Parse response body failed!",
88 | "StartDownloadFav": "Start download favorite(uid=%d): From %d to %d",
89 | "MapperDownloadFailedUserNotFound": "Mapper Download failed: User(%d) not found!",
90 | "MapperDownloadFailedResponseCodeNotOk": "Mapper Download failed: Response code: %d",
91 | "MapperDownloadFailedParseFailed": "Mapper Download failed: Parse response body failed!",
92 | "StartDownloadMapper": "Start download mapper(uid=%d): From %d to %d, Beatmap Status: %s",
93 | "BeatmapStatus": "Beatmap Status",
94 | "BeatmapStatusDesc": "Ranked: Ranked Beatmaps\nLoved: Loved Beatmaps\nGuest: Guest Participation Beatmaps\nPending: Pending Beatmaps\nGraveyard: Graveyarded Beatmaps\nNominated: Nominated Ranked Beatmaps",
95 | "StartDownloadMostPlayed": "Start download most played(uid=%d): From %d to %d",
96 | "MostPlayedDownloader": "Most Played Beatmaps Downloader",
97 | "MostPlayedDownloadFailedUserNotFound": "Most Played Download failed: User(%d) not found!",
98 | "MostPlayedDownloadFailedResponseCodeNotOk": "Most Played Download failed: Response code: %d",
99 | "MostPlayedDownloadFailedParseFailed": "Most Played Download failed: Parse response body failed!",
100 | "MainMenuHotkey": "Toggle Main Menu UI Show",
101 | "IdSearchHotkey": "Toggle Sid/Bid Search UI Show",
102 | "Main": "Main",
103 | "Theme": "Theme",
104 | "Paste": "Paste",
105 | "VersionChecking": "Checking update for BeatmapDownloader...",
106 | "VersionIsLatest": "BeatmapDownloader is up to date!",
107 | "FoundNewVersion": "Found new version: %s(%d)",
108 | "VersionCheckFailed": "Cannot check latest version! code:%d",
109 | "CurrentVersion": "Current Version: %s(%d)",
110 | "GotoDownload": "Goto Download",
111 | "CheckUpdate": "Check Update",
112 | "AlreadyHasDownloadTask": "Already has download task: %d %s-%s [%s]",
113 | "BeatmapPackId": "Beatmap Pack ID",
114 | "BeatmapPackDownloader": "Beatmap Pack Downloader",
115 | "BeatmapPackDownloadFailedNoSuchPackFound": "No such beatmap pack ID=%d(%s) found!",
116 | "StartDownloadPack": "Start download beatmap pack: %d(%s)",
117 | "BeatmapPackDownloadFailedResponseCodeNotOk": "Beatmap Pack Download failed: Response code: %d"
118 | }
--------------------------------------------------------------------------------
/Downloader/res/language/zh_cn.json:
--------------------------------------------------------------------------------
1 | {
2 | "Download": "下载",
3 | "Downloader": "下载器",
4 | "OsuBeatmapDownloader": "Osu! 谱面下载器",
5 | "Settings": "设置",
6 | "Mirror": "镜像站",
7 | "About": "关于",
8 | "ProjectAuthor": "作者: KyuubiRan",
9 | "ProjectLink": "项目链接:",
10 | "Language": "语言",
11 | "Enabled": "启用",
12 | "Disabled": "禁用",
13 | "Domain": "域名",
14 | "HandleLink": "代理下载链接",
15 | "HandleLinkDesc": "如果启用,下载器会代理谱面链接。\n你可以通过按住Ctrl键点击链接来临时跳过代理。",
16 | "HandleLinkDomainDesc": "如果你在游玩私服,请修改此项,否则请保持默认。",
17 | "GrantOsuAccount": "授权使用osu!账号",
18 | "GrantOsuAccountDesc": "授权使用osu!账号,你可以选择使用osu!官方渠道下载谱面,就像osu!direct一样。\n注意:如果你在游玩私有服务器,请不要勾选此项。",
19 | "NotGrantOsuAccountButUseOfficialWarn": "警告:你没有授权使用osu!账号,但是你选择了官方下载渠道。\n所有的下载任务将会被自动取消!",
20 | "ProxyServerType": "设置代理服务器",
21 | "ProxyServerDesc": "使用代理服务器下载/搜索谱面。",
22 | "ProxyServer": "代理服务器",
23 | "ProxyServerPassword": "代理服务器密码",
24 | "EnableCustomUserAgent": "启用自定义User-Agent",
25 | "CustomUserAgentDesc": "启用自定义User-Agent,如果你不知道它是什么,请禁用它。",
26 | "DownloadType": "下载类型",
27 | "Title": "标题: %s",
28 | "Artist": "艺术家: %s",
29 | "Mapper": "谱面作者: %s",
30 | "Cancel": "取消",
31 | "ReDownload": "重新下载",
32 | "ViewWebsite": "查看网页",
33 | "BeatmapInfo": "谱面信息",
34 | "DownloadQueue": "下载队列",
35 | "CancelDownload": "取消下载",
36 | "Hotkey": "快捷键",
37 | "HotkeyDesc": "[%s] 切换主菜单显示。\n[%s] 切换谱面ID搜索显示。\n长按 [Ctrl] + 点击链接跳过代理搜图。\n长按 [Shift] + 点击链接直接开始下载(已经存在的谱面除外)",
38 | "Empty": "空空如也~",
39 | "SearchBeatmapId": "谱面ID搜索器",
40 | "Search": "搜索",
41 | "SearchBeatmapIdDesc": "根据ID来搜索谱面。支持的格式如下:\n根据BeatmapSetsId: beatmapsets123456 | s123456。\n根据BeatmapId: beatmaps123456 | b123456。\n如果只有数字id:按照左边的选择框来搜索。",
42 | "Clear": "清除",
43 | "Username": "用户名",
44 | "Password": "密码",
45 | "Toast": "通知",
46 | "EnableToast": "启用通知",
47 | "ToastDuration": "通知显示时间",
48 | "Debug": "调试",
49 | "EnableConsole": "启用控制台",
50 | "RestartToApply": "重启后生效",
51 | "DownloaderLoadSuccess": "欢迎使用谱面下载器!",
52 | "Success": "成功",
53 | "Warning": "警告",
54 | "Info": "信息",
55 | "Error": "错误",
56 | "DownloadFailedOORT": "下载谱面集合(%d)失败!(超出最大重试次数)",
57 | "DownloadSuccess": "谱面集合(%d)下载完成!",
58 | "StartDownload": "开始下载谱面集合: %d",
59 | "SearchFailed": "谱面(%s=%d)搜索失败!",
60 | "CurlError": "Curl 请求出错: %d",
61 | "OsuPath": "自定义osu!路径",
62 | "OsuPathDesc": "使用自定义路径,如果它为空,则自动检测路径。\n如果你不知道它是什么,请将它留空。",
63 | "MoveToOsuFolder": "移动下载的谱面",
64 | "MoveToOsuFolderDesc": "移动下载完的谱面到osu!的Songs目录下,而不是打开它。",
65 | "MultiDL": "批量下载",
66 | "MultiDownloader": "批量下载器",
67 | "MultiDownloaderDesc": "按着行来搜索谱面并进行下载。\n举例:\ns123456\n123456\nhttps://osu.ppy.sh/beatmapsets/123456",
68 | "Type": "类型",
69 | "IDSearchDefaultType": "仅数字ID识别类型",
70 | "Mode": "模式",
71 | "BPDownloader": "BP下载器",
72 | "BPDownloadFailedUserNotFound": "BP下载失败:找不到用户(%d)!",
73 | "BPDownloadFailedResponseCodeNotOk": "BP下载失败:响应码:%d",
74 | "BPDownloadFailedParseFailed": "BP下载失败:解析响应体失败!",
75 | "ExistsBeatmapSkipAutoDownload": "已存在的谱面集(%d),跳过自动下载。",
76 | "Connecting": "连接中",
77 | "Range": "范围",
78 | "InvalidOsuPath": "无效的osu!路径,将不会应用变更!",
79 | "BPDLRangeDesc": "BP抓取范围,0~100",
80 | "InvalidDLRange": "无效的范围!起始=%d,结束=%d",
81 | "StartDownloadBP": "开始下载BP(uid=%d):从 %d 到 %d",
82 | "InvalidInput": "无效的输入:%s",
83 | "FavoriteDownloader": "收藏谱面下载器",
84 | "MapperDownloader": "谱师谱面下载器",
85 | "FavDownloadFailedUserNotFound": "收藏谱面下载失败:找不到用户(%d)!",
86 | "FavDownloadFailedResponseCodeNotOk": "收藏谱面下载失败:响应码:%d",
87 | "FavDownloadFailedParseFailed": "收藏谱面下载失败:解析响应体失败!",
88 | "StartDownloadFav": "开始下载收藏谱面(uid=%d):从 %d 到 %d",
89 | "MapperDownloadFailedUserNotFound": "谱师谱面下载失败:找不到用户(%d)!",
90 | "MapperDownloadFailedResponseCodeNotOk": "谱师谱面下载失败:响应码:%d",
91 | "MapperDownloadFailedParseFailed": "谱师谱面下载失败:找不到用户(%d)!",
92 | "StartDownloadMapper": "开始下载谱师谱面(uid=%d):从 %d 到 %d,谱面状态:%s",
93 | "BeatmapStatus": "谱面状态",
94 | "BeatmapStatusDesc": "Ranked:上架 (Ranked) 谱面\nLoved:社区喜爱 (Loved) 谱面\nGuest:客串制作的谱面\nPending:待定 (Pending) 谱面\nGraveyard:已停更的谱面\nNominated:提名并上架 (Ranked) 的谱面",
95 | "StartDownloadMostPlayed": "开始下载最多游玩谱面(uid=%d):从 %d 到 %d",
96 | "MostPlayedDownloader": "最多游玩谱面下载器",
97 | "MostPlayedDownloadFailedUserNotFound": "最多游玩谱面下载失败:找不到用户(%d)!",
98 | "MostPlayedDownloadFailedResponseCodeNotOk": "最多游玩谱面下载失败:响应码:%d",
99 | "MostPlayedDownloadFailedParseFailed": "最多游玩谱面下载失败:解析响应体失败!",
100 | "MainMenuHotkey": "切换主菜单显示",
101 | "IdSearchHotkey": "切换Sid/Bid搜索界面显示",
102 | "Main": "主要",
103 | "Theme": "主题",
104 | "Paste": "粘贴",
105 | "VersionChecking": "正在检查新版本...",
106 | "VersionIsLatest": "谱面下载器已是最新版本!",
107 | "FoundNewVersion": "发现新版本:%s(%d)",
108 | "VersionCheckFailed": "版本更新检查失败!代码:%d",
109 | "CurrentVersion": "当前版本:%s(%d)",
110 | "GotoDownload": "前往下载",
111 | "CheckUpdate": "检查更新",
112 | "AlreadyHasDownloadTask": "已存在的下载任务:%d %s-%s [%s]",
113 | "BeatmapPackId": "曲包ID",
114 | "BeatmapPackDownloader": "曲包下载器",
115 | "BeatmapPackDownloadFailedNoSuchPackFound": "没有找到ID为%d(%s)的曲包!",
116 | "StartDownloadPack": "开始下载曲包:%d(%s)",
117 | "BeatmapPackDownloadFailedResponseCodeNotOk": "曲包下载失败:响应码:%d"
118 | }
--------------------------------------------------------------------------------
/Downloader/resource.h:
--------------------------------------------------------------------------------
1 | //{{NO_DEPENDENCIES}}
2 | // Microsoft Visual C++ 生成的包含文件。
3 | // 供 Resource.rc 使用
4 | //
5 | #define IDR_FONT 102
6 |
7 | #define IDR_LANG_EN_US 104
8 | #define IDR_LANG_ZH_CN 105
9 |
10 | // Next default values for new objects
11 | //
12 | #ifdef APSTUDIO_INVOKED
13 | #ifndef APSTUDIO_READONLY_SYMBOLS
14 | #define _APS_NEXT_RESOURCE_VALUE 106
15 | #define _APS_NEXT_COMMAND_VALUE 40001
16 | #define _APS_NEXT_CONTROL_VALUE 1001
17 | #define _APS_NEXT_SYMED_VALUE 101
18 | #endif
19 | #endif
20 |
--------------------------------------------------------------------------------
/Downloader/src/HookManager.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include