summaryrefslogtreecommitdiff
path: root/new.go
blob: f938029db0ef04d1590505797b5712cd0bd1bfb2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package digitalocean

import (
	"os"

	"go.wit.com/gui"
	"go.wit.com/log"
)

var myDo *DigitalOcean

// This is initializes the main DO object
// You can only have one of these
func New(p *gui.Node) *DigitalOcean {
	if myDo != nil {
		return myDo
	}
	myDo = new(DigitalOcean)
	myDo.ready = false
	myDo.parent = p

	myDo.dropMap = make(map[int]*Droplet)

	// Your personal API token from DigitalOcean.
	myDo.token = os.Getenv("DIGITALOCEAN_TOKEN")

	myDo.window = p.NewWindow("DigitalOcean Control Panel")

	// make a group label and a grid
	myDo.group = myDo.window.NewGroup("droplets:").Pad()
	myDo.grid = myDo.group.NewGrid("grid", 2, 1).Pad()

	myDo.ready = true
	myDo.Hide()
	return myDo
}

// Returns true if the status is valid
func (d *DigitalOcean) Ready() bool {
	if d == nil {
		return false
	}
	return d.ready
}

func (d *DigitalOcean) Show() {
	if !d.Ready() {
		return
	}
	log.Info("digitalocean.Show() window")
	d.window.Show()
	d.hidden = false
}

func (d *DigitalOcean) Hide() {
	if !d.Ready() {
		return
	}
	log.Info("digitalocean.Hide() window")
	d.window.Hide()
	d.hidden = true
}

func (d *DigitalOcean) Toggle() {
	if !d.Ready() {
		return
	}
	log.Info("digitalocean.Hide() window")
	if d.hidden {
		d.Show()
	} else {
		d.Hide()
	}
}

func (d *DigitalOcean) Update() bool {
	if !d.Ready() {
		return false
	}
	d.ListSSHKeyID()
	if d.ListDroplets() {
		for _, droplet := range d.dpolled {
			// check if the droplet ID already exists
			if d.dropMap[droplet.ID] == nil {
				d.dropMap[droplet.ID] = d.NewDroplet(&droplet)
			} else {
				log.Log(POLL, "droplet.Update()", droplet.ID, droplet.Name, "already exists")
				d.dropMap[droplet.ID].Update(&droplet)
				continue
			}
		}
	} else {
		log.Error(d.err, "Error listing droplets")
		return false
	}
	return true
}