diff --git a/calc/calc.go b/calc/calc.go new file mode 100644 index 0000000..02cf571 --- /dev/null +++ b/calc/calc.go @@ -0,0 +1,49 @@ +package calc + +import ( + "b612.me/starlog" + "b612.me/staros" + "errors" + "fmt" + "github.com/spf13/cobra" + "strconv" + "strings" +) + +var Cmd = &cobra.Command{ + Use: "calc", + Short: "计算器", + Long: "简单的计算器", + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) == 0 { + starlog.Errorln("请至少输入一个算式") + return errors.New("no sentense") + } + var res []string + printRes := func() { + for k, v := range res { + fmt.Println(args[k], "=", v) + } + } + for k, v := range args { + for i := k; i > 0; i-- { + v = strings.ReplaceAll(v, "$"+strconv.Itoa(i), res[i-1]) + } + v = strings.ReplaceAll(v, "x", "*") + v = strings.ReplaceAll(v, "X", "*") + v = strings.ReplaceAll(v, "×", "*") + v = strings.ReplaceAll(v, "÷", "*") + v = strings.ReplaceAll(v, "(", "(") + v = strings.ReplaceAll(v, ")", ")") + c, err := staros.Calc(v) + if err != nil { + printRes() + starlog.Errorf("calc %s Error:%v\n", v, err) + return err + } + res = append(res, strconv.FormatFloat(c, 'f', -1, 64)) + } + printRes() + return nil + }, +} diff --git a/ftp/ftp.go b/ftp/ftp.go index 8591fe0..fcd78a5 100644 --- a/ftp/ftp.go +++ b/ftp/ftp.go @@ -30,7 +30,6 @@ var Cmd = &cobra.Command{ Hostname: ip, Auth: &server.SimpleAuth{Name: username, Password: pwd}, } - log.Printf("Starting ftp server on %v:%v", opts.Hostname, opts.Port) log.Printf("Username %v, Password %v", username, pwd) server := server.NewServer(opts) diff --git a/httpserver/mime.go b/httpserver/mime.go index 4a7d6c0..41ee371 100644 --- a/httpserver/mime.go +++ b/httpserver/mime.go @@ -5,7 +5,7 @@ import "path/filepath" func (h *HttpServer) FileType(name string) string { ext := filepath.Ext(name) if len(ext) == 0 || ext == "." { - return "文件" + return "其他文件" } ext = ext[1:] mimeMap := map[string]string{ diff --git a/httpserver/server.go b/httpserver/server.go index afcbc31..cd3ca9c 100644 --- a/httpserver/server.go +++ b/httpserver/server.go @@ -82,11 +82,31 @@ var htmlTitle string = ` padding: 12px; text-align: left; border-bottom: 1px solid #ddd; + position: relative; } - th:hover { - cursor: pointer; - background-color: #ddd; + th[data-sort]:before { + content: "▼"; + display: inline-block; + height: 20px; + width: 20px; + margin-right: 10px; + vertical-align: middle; + position: absolute; + right: 0; + top: 50%%; + transform: translateY(-50%%); + opacity: 0.3; + transition: all 0.2s ease-in-out; + } + + th[data-sort].asc:before { + content: "▲"; + opacity: 1; + } + + th:hover:before { + opacity: 1; } .filename { @@ -112,49 +132,69 @@ var htmlTitle string = ` - - - - + + + + ` var htmlTail = `
NameModifiedSizeTypeNameModifiedSizeType
+
+
+	

B612.Me © Apache 2.0 License

+
- @@ -444,14 +529,14 @@ func (h *HttpServer) getFolder(log *starlog.StarLogger, w http.ResponseWriter, r if h.uploadFolder != "" { upload = `Upload Web Page Is Openned!` } - w.Write([]byte(fmt.Sprintf(htmlTitle, r.URL.Path, version, r.URL.Path, upload))) + w.Write([]byte(fmt.Sprintf(htmlTitle, r.URL.Path, version, "Index of "+r.URL.Path, upload))) if r.URL.Path != "/" { p := r.URL.Path if p[len(p)-1:] != "/" { p += "/" } w.Write([]byte(fmt.Sprintf(`%s%s%s%s`, - p+"..", "..", "-", "-", "上层文件夹"))) + p+"..", "../", "-", "-", "上层文件夹"))) } if r.URL.Path == "/" { r.URL.Path = "" @@ -466,7 +551,7 @@ func (h *HttpServer) getFolder(log *starlog.StarLogger, w http.ResponseWriter, r r.URL.Path+"/"+v.Name(), v.Name(), v.ModTime().Format("2006-01-02 15:04:05"), fmt.Sprintf("%d (%s)", v.Size(), h.trimSize(v.Size())), h.FileType(v.Name())))) } else { w.Write([]byte(fmt.Sprintf(`%s%s%s%s`, - r.URL.Path+"/"+v.Name(), v.Name(), v.ModTime().Format("2006-01-02 15:04:05"), "-", "文件夹"))) + r.URL.Path+"/"+v.Name(), v.Name()+"/", v.ModTime().Format("2006-01-02 15:04:05"), "-", "文件夹"))) } } } @@ -477,6 +562,7 @@ func (h *HttpServer) getFolder(log *starlog.StarLogger, w http.ResponseWriter, r func (h *HttpServer) getFile(log *starlog.StarLogger, w http.ResponseWriter, r *http.Request, fullpath string) error { if !staros.Exists(fullpath) { w.WriteHeader(404) + w.Write([]byte(`B612 Http Server

404 NOT FOUND


`)) return errors.New("File Not Found! 404 ERROR") } //starlog.Debugln(r.Header) @@ -485,7 +571,7 @@ func (h *HttpServer) getFile(log *starlog.StarLogger, w http.ResponseWriter, r * if err != nil { log.Errorf("Failed to open file %s,reason:%v\n", r.URL.Path, err) w.WriteHeader(502) - w.Write([]byte("

502 SERVER ERROR

")) + w.Write([]byte(`B612 Http Server

502 SERVER ERROR


`)) return err } defer fp.Close() @@ -495,11 +581,11 @@ func (h *HttpServer) getFile(log *starlog.StarLogger, w http.ResponseWriter, r * var tani string tani = fmt.Sprintf("%v Byte", transferData) if f64 := float64(transferData) / 1024; f64 > 1 { - tani = fmt.Sprintf("%v KB", f64) + tani = fmt.Sprintf("%v KiB", f64) if f64 = float64(f64) / 1024; f64 > 1 { - tani = fmt.Sprintf("%v MB", f64) + tani = fmt.Sprintf("%v MiB", f64) if f64 = float64(f64) / 1024; f64 > 1 { - tani = fmt.Sprintf("%v GB", f64) + tani = fmt.Sprintf("%v GiB", f64) } } } @@ -575,11 +661,11 @@ func (h *HttpServer) trimSize(size int64) string { var tani string tani = fmt.Sprintf("%v Byte", size) if f64 := float64(size) / 1024; f64 > 1 { - tani = fmt.Sprintf("%.3f KB", math.Trunc(f64*1e3+0.5)*1e-3) + tani = fmt.Sprintf("%.3f KiB", math.Trunc(f64*1e3+0.5)*1e-3) if f64 = float64(f64) / 1024; f64 > 1 { - tani = fmt.Sprintf("%.3f MB", math.Trunc(f64*1e3+0.5)*1e-3) + tani = fmt.Sprintf("%.3f MiB", math.Trunc(f64*1e3+0.5)*1e-3) if f64 = float64(f64) / 1024; f64 > 1 { - tani = fmt.Sprintf("%.3f GB", math.Trunc(f64*1e3+0.5)*1e-3) + tani = fmt.Sprintf("%.3f GiB", math.Trunc(f64*1e3+0.5)*1e-3) } } } diff --git a/main.go b/main.go index d4f6f8e..843f9cd 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,7 @@ import ( "b612.me/apps/b612/base64" "b612.me/apps/b612/base85" "b612.me/apps/b612/base91" + "b612.me/apps/b612/calc" "b612.me/apps/b612/detach" "b612.me/apps/b612/df" "b612.me/apps/b612/dfinder" @@ -20,6 +21,9 @@ import ( "b612.me/apps/b612/tcping" "b612.me/apps/b612/uac" "b612.me/apps/b612/vic" + "b612.me/stario" + "b612.me/starlog" + "github.com/inconshreveable/mousetrap" "github.com/spf13/cobra" ) @@ -29,11 +33,17 @@ var cmdRoot = &cobra.Command{ } func init() { + cobra.MousetrapHelpText = "" cmdRoot.AddCommand(tcping.Cmd, uac.Cmd, httpserver.Cmd, httpreverse.Cmd, base64.Cmd, base85.Cmd, base91.Cmd, attach.Cmd, detach.Cmd, df.Cmd, dfinder.Cmd, - ftp.Cmd, generate.Cmd, hash.Cmd, image.Cmd, merge.Cmd, search.Cmd, split.Cmd, vic.Cmd) + ftp.Cmd, generate.Cmd, hash.Cmd, image.Cmd, merge.Cmd, search.Cmd, split.Cmd, vic.Cmd, + calc.Cmd) } func main() { + starlog.SetLevelColor(starlog.LvError, []starlog.Attr{starlog.FgHiMagenta}) cmdRoot.Execute() + if mousetrap.StartedByExplorer() { + stario.StopUntil("Press Any Key to Continue...", "", true) + } } diff --git a/ping/ping.go b/ping/ping.go new file mode 100644 index 0000000..1d90f44 --- /dev/null +++ b/ping/ping.go @@ -0,0 +1 @@ +package ping