Skip to content

Commit fd2a35d

Browse files
committed
Add local storage
1 parent 2b3a442 commit fd2a35d

1 file changed

Lines changed: 61 additions & 21 deletions

File tree

gct.go

Lines changed: 61 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,35 @@
11
package main
22

3-
//import "github.com/google/go-github/github"
43
import (
4+
"encoding/json"
55
"fmt"
6-
"os"
7-
"net/http"
86
"io/ioutil"
9-
"strconv"
10-
"encoding/json"
7+
"net/http"
8+
"os"
119
"os/exec"
10+
"strconv"
11+
"strings"
1212
)
1313

1414
type User struct {
15-
Login string
16-
Id int
17-
Avatar_url string
18-
Name string
19-
Email string
15+
Login string
16+
Id int
17+
Avatar_url string
18+
Name string
19+
Email string
2020
}
2121

22+
const fileName = "users.json"
23+
24+
var users []User
25+
2226
func main() {
23-
userName := os.Args[1]
27+
load()
2428

25-
user, err := findUser(userName)
26-
if err != nil {
29+
login := os.Args[1]
30+
31+
user := findUser(login)
32+
if user == nil {
2733
fmt.Println("Bad user")
2834
return
2935
}
@@ -32,13 +38,38 @@ func main() {
3238
setGitConfig("user.email", user.Email)
3339
}
3440

35-
func findUser(userName string) (user *User, err error){
36-
request := "https://api.github.com/users/"+userName
37-
fmt.Println("Request "+ request)
41+
func load() {
42+
file, _ := os.Open(fileName)
43+
defer file.Close()
44+
decoder := json.NewDecoder(file)
45+
decoder.Decode(&users)
46+
}
47+
48+
func findUser(login string) *User {
49+
user := lUser(login)
50+
if user == nil {
51+
fmt.Println("Can't find user on local data.")
52+
user = dUser(login)
53+
}
54+
return user
55+
}
56+
57+
func lUser(login string) *User {
58+
for i := 0; i < len(users); i++ {
59+
if strings.EqualFold(login, users[i].Login) {
60+
return &users[i]
61+
}
62+
}
63+
return nil
64+
}
65+
66+
func dUser(login string) (user *User) {
67+
request := "https://api.github.com/users/" + login
68+
fmt.Println("Request " + request)
3869
resp, err := http.Get(request)
3970
if err != nil {
4071
fmt.Println("Can't request the user. Maybe without internet.")
41-
return nil, err
72+
return nil
4273
}
4374

4475
// calls 'resp.Body.Close()' after the ending of this funcion
@@ -49,12 +80,22 @@ func findUser(userName string) (user *User, err error){
4980
err = json.Unmarshal(body, &user)
5081
if err != nil {
5182
fmt.Println("Can't read the json")
52-
return nil, err
83+
return nil
5384
}
54-
return user, nil
85+
86+
go save(user)
87+
return user
5588
}
5689

57-
func setGitConfig(config string, value string){
90+
func save(user *User) {
91+
users = append(users, *user)
92+
file, _ := os.Create(fileName)
93+
defer file.Close()
94+
enc := json.NewEncoder(file)
95+
enc.Encode(&users)
96+
}
97+
98+
func setGitConfig(config string, value string) {
5899
if len(value) > 0 {
59100
fmt.Println(value)
60101
err := exec.Command("git", "config", config, strconv.Quote(value)).Run()
@@ -67,4 +108,3 @@ func setGitConfig(config string, value string){
67108
fmt.Printf("Can't set %s with a empty value.\n", config)
68109
}
69110
}
70-

0 commit comments

Comments
 (0)