github.com/jstaf/onedriver@v0.14.2-0.20240420231225-f07678f9e6ef/cmd/common/common.go (about)

     1  // common functions used by both binaries
     2  package common
     3  
     4  import (
     5  	"errors"
     6  	"fmt"
     7  	"io/ioutil"
     8  	"os"
     9  	"regexp"
    10  
    11  	"github.com/rs/zerolog"
    12  	"github.com/rs/zerolog/log"
    13  )
    14  
    15  const version = "0.14.1"
    16  
    17  var commit string
    18  
    19  // Version returns the current version string
    20  func Version() string {
    21  	clen := 0
    22  	if len(commit) > 7 {
    23  		clen = 8
    24  	}
    25  	return fmt.Sprintf("v%s %s", version, commit[:clen])
    26  }
    27  
    28  // StringToLevel converts a string to a zerolog.LogLevel that can be used with zerolog
    29  func StringToLevel(input string) zerolog.Level {
    30  	level, err := zerolog.ParseLevel(input)
    31  	if err != nil {
    32  		log.Error().Err(err).Msg("Could not parse log level, defaulting to \"debug\"")
    33  		return zerolog.DebugLevel
    34  	}
    35  	return level
    36  }
    37  
    38  // LogLevels returns the available logging levels
    39  func LogLevels() []string {
    40  	return []string{"trace", "debug", "info", "warn", "error", "fatal"}
    41  }
    42  
    43  // TemplateXDGVolumeInfo returns
    44  func TemplateXDGVolumeInfo(name string) string {
    45  	xdgVolumeInfo := fmt.Sprintf("[Volume Info]\nName=%s\n", name)
    46  	if _, err := os.Stat("/usr/share/icons/onedriver/onedriver.png"); err == nil {
    47  		xdgVolumeInfo += "IconFile=/usr/share/icons/onedriver/onedriver.png\n"
    48  	}
    49  	return xdgVolumeInfo
    50  }
    51  
    52  // GetXDGVolumeInfoName returns the name of the drive according to whatever the
    53  // user has named it.
    54  func GetXDGVolumeInfoName(path string) (string, error) {
    55  	contents, err := ioutil.ReadFile(path)
    56  	if err != nil {
    57  		return "", err
    58  	}
    59  	regex := regexp.MustCompile("Name=(.*)")
    60  	name := regex.FindString(string(contents))
    61  	if len(name) < 5 {
    62  		return "", errors.New("could not find \"Name=\" key")
    63  	}
    64  	return name[5:], nil
    65  }