Golang implementation of https://lib.rs/crates/directories
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
directories/project/project.go

146 lines
4.6 KiB

package project
import (
"errors"
"runtime"
"strings"
"git.martyn.berlin/martyn/directories/base"
)
var projectNameShort string
var projectNameReverse string
var projectNameOrg string
var projectNameProject string
// setProjectName sets the project name up and has the following components:
// short: a short name for the project, all lowercased
// reverse: a java-like reverse-domain-name style
// organisation: the name of the organisation which this project is under
// project: the "normal" project name
// example :
// setProjectName("notepad++","org.notepad-plus-plus.notepad-plus-plus","Don Ho","Notepad++")
// This is used for basing folder structures on.
func SetProjectName(short, reverse, organisation, project string) error {
projectNameShort = short
projectNameReverse = reverse
projectNameOrg = organisation
projectNameProject = project
if len(projectNameShort) < 1 || len(projectNameReverse) < 1 ||
len(projectNameProject) < 1 || len(projectNameProject) < 1 {
return errors.New("to use the directories/project package, you must call project.SetProjectName() with all four arguments set")
}
return nil
}
func projectPath() string {
switch runtime.GOOS {
case "linux":
return strings.ToLower(strings.ReplaceAll(projectNameShort, " ", "-"))
case "windows":
return projectNameOrg + "\\" + projectNameProject
case "darwin":
return projectNameReverse
}
return ""
}
func Cache() (string, error) {
if len(projectNameShort) < 1 || len(projectNameReverse) < 1 ||
len(projectNameProject) < 1 || len(projectNameProject) < 1 {
return "", errors.New("to use the directories/project package, you must call project.SetProjectName() with all four arguments set")
}
c, e := base.Cache()
if e != nil {
return "", e
}
switch runtime.GOOS {
case "linux":
return c + "/" + projectPath(), nil
case "windows":
return c + "\\" + projectPath() + "\\cache", nil
case "darwin":
return c + "/" + projectPath(), nil
}
return "", errors.New("could not determine location for Cache()")
}
func Config() (string, error) {
if len(projectNameShort) < 1 || len(projectNameReverse) < 1 ||
len(projectNameProject) < 1 || len(projectNameProject) < 1 {
return "", errors.New("to use the directories/project package, you must call project.SetProjectName() with all four arguments set")
}
c, e := base.Config()
if e != nil {
return "", e
}
switch runtime.GOOS {
case "linux":
return c + "/" + projectPath(), nil
case "windows":
return c + "\\" + projectPath() + "\\config", nil
case "darwin":
return c + "/" + projectPath(), nil
}
return "", errors.New("could not determine location for Config()")
}
func Data() (string, error) {
if len(projectNameShort) < 1 || len(projectNameReverse) < 1 ||
len(projectNameProject) < 1 || len(projectNameProject) < 1 {
return "", errors.New("to use the directories/project package, you must call project.SetProjectName() with all four arguments set")
}
c, e := base.Data()
if e != nil {
return "", e
}
switch runtime.GOOS {
case "linux":
return c + "/" + projectPath(), nil
case "windows":
return c + "\\" + projectPath() + "\\data", nil
case "darwin":
return c + "/" + projectPath(), nil
}
return "", errors.New("could not determine location for Data()")
}
func DataLocal() (string, error) {
if len(projectNameShort) < 1 || len(projectNameReverse) < 1 ||
len(projectNameProject) < 1 || len(projectNameProject) < 1 {
return "", errors.New("to use the directories/project package, you must call project.SetProjectName() with all four arguments set")
}
c, e := base.DataLocal()
if e != nil {
return "", e
}
switch runtime.GOOS {
case "linux":
return c + "/" + projectPath(), nil
case "windows":
return c + "\\" + projectPath() + "\\data", nil
case "darwin":
return c + "/" + projectPath(), nil
}
return "", errors.New("could not determine location for DataLocal()")
}
func Preferences() (string, error) {
if len(projectNameShort) < 1 || len(projectNameReverse) < 1 ||
len(projectNameProject) < 1 || len(projectNameProject) < 1 {
return "", errors.New("to use the directories/project package, you must call project.SetProjectName() with all four arguments set")
}
c, e := base.Preferences()
if e != nil {
return "", e
}
switch runtime.GOOS {
case "linux":
return c + "/" + projectPath(), nil
case "windows":
return c + "\\" + projectPath() + "\\config", nil
case "darwin":
return c + "/" + projectPath(), nil
}
return "", errors.New("could not determine location for Preferences()")
}