utils.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package main
  2. import (
  3. "fmt"
  4. "io"
  5. "math"
  6. "os"
  7. "time"
  8. "github.com/jguer/yay/aur"
  9. "github.com/jguer/yay/config"
  10. pac "github.com/jguer/yay/pacman"
  11. )
  12. // Complete provides completion info for shells
  13. func complete() (err error) {
  14. path := os.Getenv("HOME") + "/.cache/yay/aur_" + config.YayConf.Shell + ".cache"
  15. if info, err := os.Stat(path); os.IsNotExist(err) || time.Since(info.ModTime()).Hours() > 48 {
  16. os.MkdirAll(os.Getenv("HOME")+"/.cache/yay/", 0755)
  17. out, err := os.Create(path)
  18. if err != nil {
  19. return err
  20. }
  21. if aur.CreateAURList(out) != nil {
  22. defer os.Remove(path)
  23. }
  24. err = pac.CreatePackageList(out)
  25. out.Close()
  26. return err
  27. }
  28. in, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0755)
  29. if err != nil {
  30. return err
  31. }
  32. defer in.Close()
  33. _, err = io.Copy(os.Stdout, in)
  34. return err
  35. }
  36. // Function by pyk https://github.com/pyk/byten
  37. func index(s int64) float64 {
  38. x := math.Log(float64(s)) / math.Log(1024)
  39. return math.Floor(x)
  40. }
  41. // Function by pyk https://github.com/pyk/byten
  42. func countSize(s int64, i float64) float64 {
  43. return float64(s) / math.Pow(1024, math.Floor(i))
  44. }
  45. // Size return a formated string from file size
  46. // Function by pyk https://github.com/pyk/byten
  47. func size(s int64) string {
  48. symbols := []string{"B", "KB", "MB", "GB", "TB", "PB", "EB"}
  49. i := index(s)
  50. if s < 10 {
  51. return fmt.Sprintf("%dB", s)
  52. }
  53. size := countSize(s, i)
  54. format := "%.0f"
  55. if size < 10 {
  56. format = "%.1f"
  57. }
  58. return fmt.Sprintf(format+"%s", size, symbols[int(i)])
  59. }