mirror of
https://github.com/RubyMetric/chsrc.git
synced 2025-02-02 15:51:02 +08:00
Use better output
This commit is contained in:
parent
bc7c76e161
commit
e564239fed
110
include/chsrc.h
110
include/chsrc.h
|
@ -3,7 +3,7 @@
|
|||
* License : GPLv3
|
||||
* Authors : Aoran Zeng <ccmywish@qq.com>
|
||||
* Created on : <2023-08-29>
|
||||
* Last modified : <2023-10-05>
|
||||
* Last modified : <2024-05-25>
|
||||
*
|
||||
* chsrc:
|
||||
*
|
||||
|
@ -41,10 +41,10 @@ query_program_exist (char* check_cmd, char* progname)
|
|||
|
||||
if (0!=ret) {
|
||||
// xy_warn (xy_strjoin(4, "× 命令 ", progname, " 不存在,", buf));
|
||||
xy_warn (xy_strjoin(3, "× 命令 ", progname, " 不存在"));
|
||||
puts (xy_strjoin (4, xy_str_to_red ("x "), "命令 ", xy_str_to_red (progname), " 不存在"));
|
||||
return false;
|
||||
} else {
|
||||
xy_success (xy_strjoin(3, "√ 命令 ", progname, " 存在"));
|
||||
puts (xy_strjoin (4, xy_str_to_green ("√ "), "命令 ", xy_str_to_green (progname), " 存在"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -60,17 +60,20 @@ query_program_exist (char* check_cmd, char* progname)
|
|||
int
|
||||
query_mirror_exist (SourceInfo *sources, size_t size, char *target, char *input)
|
||||
{
|
||||
if (0==size) {
|
||||
xy_error(xy_strjoin(3, "chsrc: 当前 ", target, " 无任何可用源,请联系维护者"));
|
||||
if (0==size)
|
||||
{
|
||||
xy_error (xy_strjoin (3, "当前 ", target, " 无任何可用源,请联系维护者"));
|
||||
exit (1);
|
||||
}
|
||||
|
||||
if (1==size) {
|
||||
xy_success(xy_strjoin(5, "chsrc: ", sources[0].mirror->name, " 是 ", target, " 目前唯一可用镜像站,感谢他们的慷慨支持"));
|
||||
if (1==size)
|
||||
{
|
||||
xy_success(xy_strjoin(4, sources[0].mirror->name, " 是 ", target, " 目前唯一可用镜像站,感谢他们的慷慨支持"));
|
||||
}
|
||||
|
||||
if (xy_streql("default", input) || xy_streql("def", input)) {
|
||||
xy_info ("chsrc: 默认使用维护团队测速第一的源");
|
||||
if (xy_streql("default", input) || xy_streql("def", input))
|
||||
{
|
||||
puts ("默认使用维护团队测速第一的源");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -81,15 +84,17 @@ query_mirror_exist (SourceInfo* sources, size_t size, char* target, char* input)
|
|||
for (int i=0; i<size; i++)
|
||||
{
|
||||
source = sources[i];
|
||||
if (xy_streql(source.mirror->code, input)) {
|
||||
if (xy_streql(source.mirror->code, input))
|
||||
{
|
||||
idx = i;
|
||||
exist = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!exist) {
|
||||
xy_error (xy_strjoin(3, "chsrc: 镜像站 ", input, " 不存在"));
|
||||
xy_error (xy_2strjoin("chsrc: 查看可使用源,请使用 chsrc list ", target));
|
||||
if (!exist)
|
||||
{
|
||||
xy_error (xy_strjoin(3, "镜像站 ", input, " 不存在"));
|
||||
xy_error (xy_2strjoin("查看可使用源,请使用 chsrc list ", target));
|
||||
exit (1);
|
||||
}
|
||||
return idx;
|
||||
|
@ -163,10 +168,13 @@ test_speed_url (const char* url)
|
|||
double speed = atof (split+1);
|
||||
char *speedstr = to_human_readable_speed (speed);
|
||||
|
||||
if (200!=http_code) {
|
||||
if (200!=http_code)
|
||||
{
|
||||
char* httpcodestr = xy_str_to_yellow (xy_2strjoin ("HTTP码 ", buf));
|
||||
puts (xy_strjoin (3, speedstr, " | ", httpcodestr));
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
puts (speedstr);
|
||||
}
|
||||
return speed;
|
||||
|
@ -179,8 +187,10 @@ get_max_ele_idx_in_dbl_ary (double* array, int size)
|
|||
double maxval = array[0];
|
||||
int maxidx = 0;
|
||||
|
||||
for (int i=1; i<size; i++) {
|
||||
if (array[i]>maxval) {
|
||||
for (int i=1; i<size; i++)
|
||||
{
|
||||
if (array[i]>maxval)
|
||||
{
|
||||
maxval = array[i];
|
||||
maxidx = i;
|
||||
}
|
||||
|
@ -195,7 +205,8 @@ get_max_ele_idx_in_dbl_ary (double* array, int size)
|
|||
int
|
||||
auto_select_ (SourceInfo *sources, size_t size, const char *target)
|
||||
{
|
||||
if (0==size) {
|
||||
if (0==size)
|
||||
{
|
||||
xy_error (xy_strjoin (3, "chsrc: 当前 ", target, " 无任何可用源,请联系维护者"));
|
||||
exit (1);
|
||||
}
|
||||
|
@ -209,11 +220,14 @@ auto_select_ (SourceInfo* sources, size_t size, const char* target)
|
|||
{
|
||||
SourceInfo src = sources[i];
|
||||
const char* url = src.mirror->__bigfile_url;
|
||||
if (NULL==url) {
|
||||
if (NULL==url)
|
||||
{
|
||||
chsrc_warn ( xy_strjoin(3, "开发者未提供 ", src.mirror->code, " 镜像站测速链接,跳过该站点"));
|
||||
speed = 0;
|
||||
} else {
|
||||
printf ("%s",xy_strjoin(3, "chsrc: 测速 ", src.mirror->site , " ... "));
|
||||
}
|
||||
else
|
||||
{
|
||||
printf ("%s",xy_strjoin(3, "测速 ", src.mirror->site , " ... "));
|
||||
fflush (stdout);
|
||||
speed = test_speed_url (url);
|
||||
}
|
||||
|
@ -222,9 +236,9 @@ auto_select_ (SourceInfo* sources, size_t size, const char* target)
|
|||
int fastidx = get_max_ele_idx_in_dbl_ary (speeds, size);
|
||||
|
||||
if (onlyone)
|
||||
xy_success(xy_strjoin(5, "chsrc: ", sources[fastidx].mirror->name, " 是 ", target, " 目前唯一可用镜像站,感谢他们的慷慨支持"));
|
||||
xy_success (xy_strjoin (4, sources[fastidx].mirror->name, " 是 ", target, " 目前唯一可用镜像站,感谢他们的慷慨支持"));
|
||||
else
|
||||
xy_success (xy_2strjoin("chsrc: 最快镜像站: ", sources[fastidx].mirror->name));
|
||||
puts (xy_2strjoin ("最快镜像站: ", xy_str_to_green (sources[fastidx].mirror->name)));
|
||||
|
||||
return fastidx;
|
||||
}
|
||||
|
@ -241,14 +255,16 @@ auto_select_ (SourceInfo* sources, size_t size, const char* target)
|
|||
void
|
||||
chsrc_say_selection (SourceInfo *source)
|
||||
{
|
||||
xy_info (xy_strjoin(5, "chsrc: 选中镜像站: ", source->mirror->abbr, " (", source->mirror->code, ")"));
|
||||
puts (xy_strjoin (5, "选中镜像站: ", xy_str_to_green (source->mirror->abbr), " (", xy_str_to_green (source->mirror->code), ")"));
|
||||
// puts ("--------------------------------");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
chsrc_say_thanks (SourceInfo *source)
|
||||
{
|
||||
xy_success(xy_2strjoin("chsrc: 感谢镜像提供方: ", source->mirror->name));
|
||||
puts ("--------------------------------");
|
||||
puts (xy_2strjoin ("换源完成,感谢镜像提供方: ", xy_str_to_purple (source->mirror->name)));
|
||||
}
|
||||
|
||||
|
||||
|
@ -257,11 +273,14 @@ void
|
|||
chsrc_ensure_root ()
|
||||
{
|
||||
char *euid = getenv ("$EUID");
|
||||
if (NULL==euid) {
|
||||
if (NULL==euid)
|
||||
{
|
||||
char *buf = xy_getcmd ("id -u", 0, NULL);
|
||||
if (0!=atoi(buf)) goto not_root;
|
||||
else return;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (0!=atoi(euid)) goto not_root;
|
||||
else return;
|
||||
}
|
||||
|
@ -274,7 +293,8 @@ not_root:
|
|||
static void
|
||||
chsrc_run (const char *cmd)
|
||||
{
|
||||
xy_info (xy_2strjoin ("chsrc: 运行 ", cmd));
|
||||
puts ("~~~~~~~~~~~");
|
||||
puts (xy_2strjoin ("运行 ", xy_str_to_blue (cmd)));
|
||||
system (cmd);
|
||||
}
|
||||
|
||||
|
@ -283,9 +303,12 @@ chsrc_check_file (const char* path)
|
|||
{
|
||||
char *cmd = NULL;
|
||||
path = xy_uniform_path (path);
|
||||
if(xy_on_windows) {
|
||||
if(xy_on_windows)
|
||||
{
|
||||
cmd = xy_2strjoin ("type ", path);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd = xy_2strjoin ("cat ", path);
|
||||
}
|
||||
chsrc_run (cmd);
|
||||
|
@ -296,9 +319,12 @@ chsrc_ensure_dir (const char* dir)
|
|||
{
|
||||
dir = xy_uniform_path (dir);
|
||||
char *mkdir_cmd = NULL;
|
||||
if (xy_on_windows) {
|
||||
if (xy_on_windows)
|
||||
{
|
||||
mkdir_cmd = "md ";
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
mkdir_cmd = "mkdir -p ";
|
||||
}
|
||||
char *cmd = xy_2strjoin (mkdir_cmd, dir);
|
||||
|
@ -314,9 +340,12 @@ chsrc_append_to_file (const char* str, const char* file)
|
|||
chsrc_ensure_dir (dir);
|
||||
|
||||
char *cmd = NULL;
|
||||
if (xy_on_windows) {
|
||||
if (xy_on_windows)
|
||||
{
|
||||
cmd = xy_strjoin (4, "echo ", str, " >> ", file);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd = xy_strjoin (4, "echo '", str, "' >> ", file);
|
||||
}
|
||||
chsrc_run (cmd);
|
||||
|
@ -330,9 +359,12 @@ chsrc_overwrite_file (const char* str, const char* file)
|
|||
chsrc_ensure_dir (dir);
|
||||
|
||||
char *cmd = NULL;
|
||||
if (xy_on_windows) {
|
||||
if (xy_on_windows)
|
||||
{
|
||||
cmd = xy_strjoin (4, "echo ", str, " > ", file);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd = xy_strjoin (4, "echo '", str, "' > ", file);
|
||||
}
|
||||
chsrc_run (cmd);
|
||||
|
@ -348,11 +380,13 @@ chsrc_backup (const char* path)
|
|||
// 似乎BSD的cp并没有 --backup='t' 选项
|
||||
cmd = xy_strjoin (5, "cp -f ", path, " ", path, ".bak");
|
||||
}
|
||||
else if (xy_on_windows) {
|
||||
else if (xy_on_windows)
|
||||
{
|
||||
// /Y 表示覆盖
|
||||
cmd = xy_strjoin (5, "copy /Y ", path, " ", path, ".bak" );
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
cmd = xy_strjoin (5, "cp ", path, " ", path, ".bak --backup='t'");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user