2
* ALR - Any Linux Repository
3
* Copyright (C) 2024 Евгений Храмов
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation, either version 3 of the License, or
8
* (at your option) any later version.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program. If not, see <http://www.gnu.org/licenses/>.
27
"github.com/pelletier/go-toml/v2"
28
"plemya-x.ru/alr/pkg/loggerctx"
31
// Paths contains various paths used by ALR
46
// GetPaths returns a Paths struct.
47
// The first time it's called, it'll generate the struct
48
// using information from the system.
49
// Subsequent calls will return the same value.
50
func GetPaths(ctx context.Context) *Paths {
52
defer pathsMtx.Unlock()
54
log := loggerctx.From(ctx)
58
cfgDir, err := os.UserConfigDir()
60
log.Fatal("Unable to detect user config directory").Err(err).Send()
63
paths.ConfigDir = filepath.Join(cfgDir, "alr")
65
err = os.MkdirAll(paths.ConfigDir, 0o755)
67
log.Fatal("Unable to create ALR config directory").Err(err).Send()
70
paths.ConfigPath = filepath.Join(paths.ConfigDir, "alr.toml")
72
if _, err := os.Stat(paths.ConfigPath); err != nil {
73
cfgFl, err := os.Create(paths.ConfigPath)
75
log.Fatal("Unable to create ALR config file").Err(err).Send()
78
err = toml.NewEncoder(cfgFl).Encode(&defaultConfig)
80
log.Fatal("Error encoding default configuration").Err(err).Send()
86
cacheDir, err := os.UserCacheDir()
88
log.Fatal("Unable to detect cache directory").Err(err).Send()
91
paths.CacheDir = filepath.Join(cacheDir, "alr")
92
paths.RepoDir = filepath.Join(paths.CacheDir, "repo")
93
paths.PkgsDir = filepath.Join(paths.CacheDir, "pkgs")
95
err = os.MkdirAll(paths.RepoDir, 0o755)
97
log.Fatal("Unable to create repo cache directory").Err(err).Send()
100
err = os.MkdirAll(paths.PkgsDir, 0o755)
102
log.Fatal("Unable to create package cache directory").Err(err).Send()
105
paths.DBPath = filepath.Join(paths.CacheDir, "db")