From 1db063759b3f5fe825768e52f1a415aa429fcd78 Mon Sep 17 00:00:00 2001 From: Martin Dosch Date: Sun, 15 Jul 2018 11:03:19 +0200 Subject: [PATCH] Added possibility to specify config via command line option. --- feed-to-muc.go | 78 ++++++++++++++++++++++++++++---------------------- getarticles.go | 42 +++++++++++++++++++++++++-- 2 files changed, 84 insertions(+), 36 deletions(-) diff --git a/feed-to-muc.go b/feed-to-muc.go index f64c9c3..9474f32 100644 --- a/feed-to-muc.go +++ b/feed-to-muc.go @@ -5,6 +5,7 @@ package main import ( "encoding/json" + "flag" "log" "os" "os/user" @@ -17,7 +18,7 @@ import ( func main() { var err error - var configPath string + var configPath, configFile string type configuration struct { ServerAddress string @@ -29,50 +30,59 @@ func main() { Feeds []string } - // Get systems user config path. - osConfigDir := os.Getenv("$XDG_CONFIG_HOME") - if osConfigDir != "" { - // Create configPath if not yet existing. - configPath = osConfigDir + "/.config/feed-to-muc/" - if _, err := os.Stat(configPath); os.IsNotExist(err) { - err = os.MkdirAll(configPath, 0700) + // Read path to config from command line option. + configFilePtr := flag.String("config", "none", "path to configuration file") + flag.Parse() + + if *configFilePtr != "none" { + configFile = *configFilePtr + } else { + // Get systems user config path. + osConfigDir := os.Getenv("$XDG_CONFIG_HOME") + if osConfigDir != "" { + // Create configPath if not yet existing. + configPath = osConfigDir + "/.config/feed-to-muc/" + if _, err := os.Stat(configPath); os.IsNotExist(err) { + err = os.MkdirAll(configPath, 0700) + if err != nil { + log.Fatal("Error: ", err) + } + } + + } else { // Get the current user. + curUser, err := user.Current() if err != nil { log.Fatal("Error: ", err) + return } - } + // Get home directory. + home := curUser.HomeDir - } else { // Get the current user. - curUser, err := user.Current() - if err != nil { - log.Fatal("Error: ", err) - return - } - // Get home directory. - home := curUser.HomeDir - - if home == "" { - log.Fatal("Error: No home directory available.") - return - } - - // Create configPath if not yet existing. - configPath = home + "/.config/feed-to-muc/" - if _, err := os.Stat(configPath + "config.json"); os.IsNotExist(err) { - err = os.MkdirAll(configPath, 0700) - if err != nil { - log.Fatal("Error: ", err) + if home == "" { + log.Fatal("Error: No home directory available.") + return } - } + // Create configPath if not yet existing. + configPath = home + "/.config/feed-to-muc/" + if _, err := os.Stat(configPath + "config.json"); os.IsNotExist(err) { + err = os.MkdirAll(configPath, 0700) + if err != nil { + log.Fatal("Error: ", err) + } + } + + } + configFile = configPath + "config.json" } // Check that config file is existing. - if _, err := os.Stat(configPath + "config.json"); os.IsNotExist(err) { + if _, err := os.Stat(configFile); os.IsNotExist(err) { log.Fatal("Error: ", err) } // Read configuration file into variable config. - file, _ := os.Open(configPath + "config.json") + file, _ := os.Open(configFile) defer file.Close() decoder := json.NewDecoder(file) config := configuration{} @@ -80,7 +90,7 @@ func main() { log.Fatal("Error: ", err) } - if _, err := os.Stat(configPath + "config.json"); os.IsNotExist(err) { + if _, err := os.Stat(configFile); os.IsNotExist(err) { err = os.MkdirAll(configPath, 0700) if err != nil { log.Fatal("Error: ", err) @@ -124,7 +134,7 @@ func main() { } for i := 0; i < len(config.Feeds); i++ { - output, err := getArticles(config.Feeds[i], config.MaxArticles, configPath) + output, err := getArticles(config.Feeds[i], config.MaxArticles) if err != nil { log.Fatal(err) } diff --git a/getarticles.go b/getarticles.go index 39fbeed..26fd710 100644 --- a/getarticles.go +++ b/getarticles.go @@ -8,6 +8,7 @@ import ( "hash/fnv" "log" "os" + "os/user" "strconv" "strings" "time" @@ -17,18 +18,55 @@ import ( ) //func getArticles(max int) ([]string, error) { -func getArticles(feedURL string, max int, cachePath string) (string, error) { +func getArticles(feedURL string, max int) (string, error) { type feedCache struct { LastChange string } - var output string + var output, cachePath string var last time.Time var lastUpdate feedCache var file *os.File var updateTime time.Time + // Get systems user cache path. + osCacheDir := os.Getenv("$XDG_CACHE_HOME") + if osCacheDir != "" { + // Create configPath if not yet existing. + cachePath = osCacheDir + "/feed-to-muc/" + if _, err := os.Stat(cachePath); os.IsNotExist(err) { + err = os.MkdirAll(cachePath, 0700) + if err != nil { + log.Fatal("Error: ", err) + } + } + + } else { // Get the current user. + curUser, err := user.Current() + if err != nil { + log.Fatal("Error: ", err) + return "", err + } + // Get home directory. + home := curUser.HomeDir + + if home == "" { + log.Fatal("Error: No home directory available.") + return "", err + } + + // Create cachePath if not yet existing. + cachePath = home + "/.cache/feed-to-muc/" + if _, err := os.Stat(cachePath); os.IsNotExist(err) { + err = os.MkdirAll(cachePath, 0700) + if err != nil { + log.Fatal("Error: ", err) + } + } + + } + // Create a hash as identifier for the feed. // The identifier will be used as filename for caching the update time. // ToDo: cachePath should probably be moved to ~/.cache/feed-to-muc