mirror of
https://github.com/RubyMetric/chsrc
synced 2025-06-08 19:54:13 +08:00
Clearer feature displaying
This commit is contained in:
parent
56559b57b2
commit
e18f8bf4fc
@ -123,6 +123,11 @@ typedef struct SourceInfo_t {
|
|||||||
|
|
||||||
#define def_sources_n(t) const size_t t##_sources_n = xy_arylen(t##_sources)
|
#define def_sources_n(t) const size_t t##_sources_n = xy_arylen(t##_sources)
|
||||||
|
|
||||||
|
enum StatusCan {
|
||||||
|
CanNotFully,
|
||||||
|
CanFully,
|
||||||
|
CanSemi
|
||||||
|
};
|
||||||
|
|
||||||
/* Target Feature Info */
|
/* Target Feature Info */
|
||||||
typedef struct FeatInfo_t {
|
typedef struct FeatInfo_t {
|
||||||
@ -130,9 +135,12 @@ typedef struct FeatInfo_t {
|
|||||||
bool can_reset; // 有的reset不是暂时没有实现,而是现在的实现根本就无法重置
|
bool can_reset; // 有的reset不是暂时没有实现,而是现在的实现根本就无法重置
|
||||||
|
|
||||||
bool can_english;
|
bool can_english;
|
||||||
char *locally;
|
|
||||||
bool can_user_define; // 用户自定义换源URL
|
bool can_user_define; // 用户自定义换源URL
|
||||||
|
|
||||||
|
enum StatusCan stcan_locally;
|
||||||
|
char *locally;
|
||||||
|
|
||||||
char *note;
|
char *note;
|
||||||
} FeatInfo;
|
} FeatInfo;
|
||||||
|
|
||||||
|
84
src/chsrc.c
84
src/chsrc.c
@ -10,7 +10,7 @@
|
|||||||
* | BlockLune <blocklune@gmail.com>
|
* | BlockLune <blocklune@gmail.com>
|
||||||
* |
|
* |
|
||||||
* Created On : <2023-08-28>
|
* Created On : <2023-08-28>
|
||||||
* Last Modified : <2024-08-16>
|
* Last Modified : <2024-08-17>
|
||||||
*
|
*
|
||||||
* chsrc: Change Source —— 全平台通用命令行换源工具
|
* chsrc: Change Source —— 全平台通用命令行换源工具
|
||||||
* ------------------------------------------------------------*/
|
* ------------------------------------------------------------*/
|
||||||
@ -106,7 +106,7 @@ Chsrc_Usage[] = {
|
|||||||
"list (或 ls, 或 l) 列出可用镜像源,和可换源软件",
|
"list (或 ls, 或 l) 列出可用镜像源,和可换源软件",
|
||||||
"list mirror/target 列出可用镜像源,或可换源软件",
|
"list mirror/target 列出可用镜像源,或可换源软件",
|
||||||
"list os/lang/ware 列出可换源的操作系统/编程语言/软件",
|
"list os/lang/ware 列出可换源的操作系统/编程语言/软件",
|
||||||
"list <target> 查看该软件可以使用哪些源",
|
"list <target> 查看该软件的可用源与支持功能",
|
||||||
"cesu <target> 对该软件所有源测速",
|
"cesu <target> 对该软件所有源测速",
|
||||||
"get <target> 查看当前软件的源使用情况",
|
"get <target> 查看当前软件的源使用情况",
|
||||||
"set <target> 换源,自动测速后挑选最快源",
|
"set <target> 换源,自动测速后挑选最快源",
|
||||||
@ -124,7 +124,7 @@ Chsrc_Usage[] = {
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
print_available_mirrors ()
|
cli_print_available_mirrors ()
|
||||||
{
|
{
|
||||||
chsrc_info ("支持以下镜像站");
|
chsrc_info ("支持以下镜像站");
|
||||||
chsrc_info ("下方 code 列,可用于指定使用某镜像站,请使用 chsrc set <target> <code>\n");
|
chsrc_info ("下方 code 列,可用于指定使用某镜像站,请使用 chsrc set <target> <code>\n");
|
||||||
@ -140,7 +140,7 @@ print_available_mirrors ()
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
print_supported_targets_ (const char ***array, size_t size)
|
cli_print_supported_targets_ (const char ***array, size_t size)
|
||||||
{
|
{
|
||||||
for (int i=0; i<size; i++)
|
for (int i=0; i<size; i++)
|
||||||
{
|
{
|
||||||
@ -157,39 +157,39 @@ print_supported_targets_ (const char ***array, size_t size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
print_supported_targets ()
|
cli_print_supported_targets ()
|
||||||
{
|
{
|
||||||
chsrc_info ("支持对以下目标换源 (同一行表示这几个命令兼容)"); puts("");
|
chsrc_info ("支持对以下目标换源 (同一行表示这几个命令兼容)"); puts("");
|
||||||
puts (xy_str_to_blue ("编程语言开发"));
|
puts (xy_str_to_blue ("编程语言开发"));
|
||||||
puts ("-------------------------");
|
puts ("-------------------------");
|
||||||
print_supported_targets_ (pl_packagers, xy_arylen(pl_packagers));
|
cli_print_supported_targets_ (pl_packagers, xy_arylen(pl_packagers));
|
||||||
puts (xy_str_to_blue ("操作系统"));
|
puts (xy_str_to_blue ("操作系统"));
|
||||||
puts ("-------------------------");
|
puts ("-------------------------");
|
||||||
print_supported_targets_ (os_systems, xy_arylen(os_systems));
|
cli_print_supported_targets_ (os_systems, xy_arylen(os_systems));
|
||||||
puts (xy_str_to_blue ("软件"));
|
puts (xy_str_to_blue ("软件"));
|
||||||
puts ("-------------------------");
|
puts ("-------------------------");
|
||||||
print_supported_targets_ (wr_softwares, xy_arylen(wr_softwares));
|
cli_print_supported_targets_ (wr_softwares, xy_arylen(wr_softwares));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
print_supported_pl ()
|
cli_print_supported_pl ()
|
||||||
{
|
{
|
||||||
chsrc_info ("支持对以下编程语言生态换源 (同一行表示这几个命令兼容)");
|
chsrc_info ("支持对以下编程语言生态换源 (同一行表示这几个命令兼容)");
|
||||||
print_supported_targets_ (pl_packagers, xy_arylen(pl_packagers));
|
cli_print_supported_targets_ (pl_packagers, xy_arylen(pl_packagers));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
print_supported_os ()
|
cli_print_supported_os ()
|
||||||
{
|
{
|
||||||
chsrc_info ("支持对以下操作系统换源 (同一行表示这几个命令兼容)");
|
chsrc_info ("支持对以下操作系统换源 (同一行表示这几个命令兼容)");
|
||||||
print_supported_targets_ (os_systems, xy_arylen(os_systems));
|
cli_print_supported_targets_ (os_systems, xy_arylen(os_systems));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
print_supported_wr ()
|
cli_print_supported_wr ()
|
||||||
{
|
{
|
||||||
chsrc_info ("支持对以下软件换源 (同一行表示这几个命令兼容)");
|
chsrc_info ("支持对以下软件换源 (同一行表示这几个命令兼容)");
|
||||||
print_supported_targets_ (wr_softwares, xy_arylen(wr_softwares));
|
cli_print_supported_targets_ (wr_softwares, xy_arylen(wr_softwares));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -214,24 +214,42 @@ cli_print_target_available_sources (SourceInfo sources[], size_t size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cli_print_target_features (FeatInfo f)
|
cli_print_target_features (FeatInfo f, const char *input_target_name)
|
||||||
{
|
{
|
||||||
printf (to_boldpurple("\nFeatures:\n\n"));
|
printf (to_boldpurple("\nFeatures:\n\n"));
|
||||||
|
|
||||||
if (f.can_get) printf (" %s%s\n", to_boldgreen("√"), to_purple(" Get: 查看当前源状态"));
|
char *get_msg = xy_2strjoin (" Get: 查看当前源状态 | chsrc get ", input_target_name);
|
||||||
else printf (" %s%s\n", to_boldred("x"), " Get: 查看当前源状态");puts("");
|
if (f.can_get) printf (" %s%s\n", to_boldgreen("✔"), to_purple(get_msg));
|
||||||
|
else printf (" %s%s\n", to_boldred("x"), get_msg);puts("");
|
||||||
|
|
||||||
if (f.can_reset) printf (" %s%s\n", to_boldgreen("√"), to_purple(" Reset: 重置回默认源"));
|
char *reset_msg = xy_2strjoin (" Reset: 重置回默认源 | chsrc reset ", input_target_name);
|
||||||
else printf (" %s%s\n", to_boldred("x"), " Reset: 重置回默认源");puts("");
|
if (f.can_reset) printf (" %s%s\n", to_boldgreen("√"), to_purple(reset_msg));
|
||||||
|
else printf (" %s%s\n", to_boldred("x"), reset_msg);puts("");
|
||||||
|
|
||||||
if (f.locally) printf (" %s%s\n", "- Locally(本项目): ", f.locally);
|
char *user_define_msg = xy_strjoin (4, " UserDefine: 用户自定义换源URL | chsrc set ", input_target_name, " https://user-define-url.org/", input_target_name);
|
||||||
else printf (" %s%s\n", to_boldred("x"), " Locally: 仅对本项目换源");puts("");
|
if (f.can_user_define) printf (" %s%s\n", to_boldgreen("✓"), to_purple(user_define_msg));
|
||||||
|
else printf (" %s%s\n", to_boldred("x"), user_define_msg);puts("");
|
||||||
|
|
||||||
if (f.can_user_define) printf (" %s%s\n", to_boldgreen("√"), to_purple(" UserDefine: 用户自定义换源URL"));
|
|
||||||
else printf (" %s%s\n", to_boldred("x"), " UserDefine: 用户自定义换源URL");puts("");
|
|
||||||
|
|
||||||
if (f.can_english) printf (" %s%s\n", to_boldgreen("√"), to_purple(" English: 英文输出"));
|
char *locally_msg = xy_2strjoin (" Locally: 仅对本项目换源 | chsrc set -local ", input_target_name);
|
||||||
else printf (" %s%s\n", to_boldred("x"), " English: 英文输出");
|
|
||||||
|
switch (f.stcan_locally) {
|
||||||
|
case CanNotFully:
|
||||||
|
printf (" %s%s\n", to_boldred(NoMark), locally_msg);puts("");
|
||||||
|
break;
|
||||||
|
case CanFully:
|
||||||
|
printf (" %s%s\n", to_boldgreen(YesMark), to_purple(locally_msg));puts("");
|
||||||
|
break;
|
||||||
|
case CanSemi:
|
||||||
|
printf (" %s%s\n\n %s\n", to_boldgreen(SemiYesMark), to_purple(locally_msg), f.locally);puts("");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
xy_unreach;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *english_msg = xy_2strjoin (" English: 英文输出 | chsrc set -en ", input_target_name);
|
||||||
|
if (f.can_english) printf (" %s%s\n", to_boldgreen(YesMark), to_purple(english_msg));
|
||||||
|
else printf (" %s%s\n", to_boldred(NoMark), english_msg);
|
||||||
|
|
||||||
|
|
||||||
if (f.note)
|
if (f.note)
|
||||||
@ -385,7 +403,7 @@ get_target (const char *input, TargetOp code, char *option)
|
|||||||
if (target->featfn)
|
if (target->featfn)
|
||||||
{
|
{
|
||||||
FeatInfo fi = target->featfn("");
|
FeatInfo fi = target->featfn("");
|
||||||
cli_print_target_features (fi);
|
cli_print_target_features (fi, input);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (TargetOp_Cesu_Source==code)
|
else if (TargetOp_Cesu_Source==code)
|
||||||
@ -483,32 +501,32 @@ main (int argc, char const *argv[])
|
|||||||
{
|
{
|
||||||
if (argc < cli_arg_Target_pos)
|
if (argc < cli_arg_Target_pos)
|
||||||
{
|
{
|
||||||
print_available_mirrors ();
|
cli_print_available_mirrors ();
|
||||||
puts ("");
|
puts ("");
|
||||||
print_supported_targets ();
|
cli_print_supported_targets ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
target = argv[cli_arg_Target_pos];
|
target = argv[cli_arg_Target_pos];
|
||||||
if (xy_streql (target, "mirrors") || xy_streql (target, "mirror"))
|
if (xy_streql (target, "mirrors") || xy_streql (target, "mirror"))
|
||||||
{
|
{
|
||||||
print_available_mirrors (); return 0;
|
cli_print_available_mirrors (); return 0;
|
||||||
}
|
}
|
||||||
else if (xy_streql (target, "targets") || xy_streql (target, "target"))
|
else if (xy_streql (target, "targets") || xy_streql (target, "target"))
|
||||||
{
|
{
|
||||||
print_supported_targets (); return 0;
|
cli_print_supported_targets (); return 0;
|
||||||
}
|
}
|
||||||
else if (xy_streql (target, "os"))
|
else if (xy_streql (target, "os"))
|
||||||
{
|
{
|
||||||
print_supported_os (); return 0;
|
cli_print_supported_os (); return 0;
|
||||||
}
|
}
|
||||||
else if (xy_streql (target, "lang") || xy_streql (target, "pl") || xy_streql (target, "language"))
|
else if (xy_streql (target, "lang") || xy_streql (target, "pl") || xy_streql (target, "language"))
|
||||||
{
|
{
|
||||||
print_supported_pl(); return 0;
|
cli_print_supported_pl(); return 0;
|
||||||
}
|
}
|
||||||
else if (xy_streql (target, "ware") || xy_streql (target, "software"))
|
else if (xy_streql (target, "ware") || xy_streql (target, "software"))
|
||||||
{
|
{
|
||||||
print_supported_wr (); return 0;
|
cli_print_supported_wr (); return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
matched = get_target (target, TargetOp_List_Source, NULL);
|
matched = get_target (target, TargetOp_List_Source, NULL);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* File Authors : Aoran Zeng <ccmywish@qq.com>
|
* File Authors : Aoran Zeng <ccmywish@qq.com>
|
||||||
* Contributors : Nil Null <nil@null.org>
|
* Contributors : Nil Null <nil@null.org>
|
||||||
* Created On : <2023-08-29>
|
* Created On : <2023-08-29>
|
||||||
* Last Modified : <2024-08-09>
|
* Last Modified : <2024-08-17>
|
||||||
* ------------------------------------------------------------*/
|
* ------------------------------------------------------------*/
|
||||||
|
|
||||||
static MirrorSite
|
static MirrorSite
|
||||||
@ -112,6 +112,7 @@ pl_ruby_feat (char *option)
|
|||||||
fi.can_get = true;
|
fi.can_get = true;
|
||||||
fi.can_reset = true;
|
fi.can_reset = true;
|
||||||
|
|
||||||
|
fi.stcan_locally = CanSemi;
|
||||||
fi.locally = "gem 不支持; bundler 支持 (From v0.1.6)";
|
fi.locally = "gem 不支持; bundler 支持 (From v0.1.6)";
|
||||||
fi.can_english = false;
|
fi.can_english = false;
|
||||||
fi.can_user_define = true;
|
fi.can_user_define = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user