59
60
// for easier stubbing during testing
60
61
var activeSnapByName = snappy.ActiveSnapByName
62
func (h *Handler) packagePayload(pkgName string) (snapPkg, error) {
63
func (h *Handler) packagePayload(resource string) (snapPkg, error) {
64
var pkgName, namespace string
65
if s := strings.Split(resource, "."); len(s) == 2 {
63
72
snapQ := activeSnapByName(pkgName)
65
return h.snapQueryToPayload(snapQ), nil
74
// the second check is for locally installed snaps that lose their origin.
75
if snapQ.Namespace() == namespace || snapQ.Type() != snappy.SnapTypeApp {
76
return h.snapQueryToPayload(snapQ), nil
68
80
mStore := snappy.NewMetaStoreRepository()
69
found, err := mStore.Details(pkgName)
81
found, err := mStore.Details(resource)
70
82
if err == nil && len(found) != 0 {
71
83
return h.snapQueryToPayload(found[0]), nil
99
111
if alias := remote.Alias; alias != nil {
100
112
remoteSnapQs = append(remoteSnapQs, h.snapQueryToPayload(alias))
103
TODO reenable once we can filter by type
104
for _, part := range remote.Parts {
105
remoteSnapQs = append(remoteSnapQs, h.snapQueryToPayload(part))
114
for _, part := range remote.Parts {
115
remoteSnapQs = append(remoteSnapQs, h.snapQueryToPayload(part))
111
120
return mergeSnaps(installedSnapQs, remoteSnapQs, installedOnly), nil
114
func (h *Handler) doRemovePackage(progress *webprogress.WebProgress, pkgName string) {
123
func (h *Handler) doRemovePackage(progress *webprogress.WebProgress, ID string) {
124
pkgName := strings.Split(ID, ".")[0]
115
126
err := snappy.Remove(pkgName, 0, progress)
116
127
progress.ErrorChan <- err
117
128
close(progress.ErrorChan)
120
func (h *Handler) removePackage(pkgName string) error {
121
progress, err := h.statusTracker.Add(pkgName, webprogress.OperationRemove)
131
func (h *Handler) removePackage(ID string) error {
132
progress, err := h.statusTracker.Add(ID, webprogress.OperationRemove)
126
go h.doRemovePackage(progress, pkgName)
137
go h.doRemovePackage(progress, ID)
131
func (h *Handler) doInstallPackage(progress *webprogress.WebProgress, pkgName string) {
132
_, err := snappy.Install(pkgName, 0, progress)
142
func (h *Handler) doInstallPackage(progress *webprogress.WebProgress, ID string) {
143
_, err := snappy.Install(ID, 0, progress)
133
144
progress.ErrorChan <- err
134
145
close(progress.ErrorChan)
137
func (h *Handler) installPackage(pkgName string) error {
138
progress, err := h.statusTracker.Add(pkgName, webprogress.OperationInstall)
148
func (h *Handler) installPackage(ID string) error {
149
progress, err := h.statusTracker.Add(ID, webprogress.OperationInstall)
143
go h.doInstallPackage(progress, pkgName)
154
go h.doInstallPackage(progress, ID)
214
235
snap.DownloadSize = snapQ.DownloadSize()
217
if stat, ok := h.statusTracker.Get(snap.Name); ok {
238
if stat, ok := h.statusTracker.Get(snap.ID); ok {
218
239
snap.Status = stat.Status
220
defer h.statusTracker.Remove(snap.Name)
241
defer h.statusTracker.Remove(snap.ID)
222
243
if stat.Error != nil {
223
244
snap.Message = stat.Error.Error()