1
0
mirror of https://github.com/osmarks/mycorrhiza.git synced 2025-01-05 17:40:26 +00:00
mycorrhiza/shroom/unattach.go

43 lines
1.1 KiB
Go
Raw Normal View History

2021-02-20 14:03:54 +00:00
package shroom
import (
"fmt"
"github.com/bouncepaw/mycorrhiza/history"
"github.com/bouncepaw/mycorrhiza/hyphae"
"github.com/bouncepaw/mycorrhiza/l18n"
2021-02-20 14:03:54 +00:00
"github.com/bouncepaw/mycorrhiza/user"
)
// UnattachHypha unattaches hypha and makes a history record about that.
func UnattachHypha(u *user.User, h hyphae.Hypher, lc *l18n.Localizer) (hop *history.Op, errtitle string) {
2021-02-20 14:03:54 +00:00
hop = history.Operation(history.TypeUnattachHypha)
if errtitle, err := CanUnattach(u, h, lc); errtitle != "" {
2021-02-26 16:43:45 +00:00
hop.WithErrAbort(err)
2021-02-20 14:03:54 +00:00
return hop, errtitle
}
2022-02-04 17:06:37 +00:00
H := h.(*hyphae.NonEmptyHypha)
2021-02-20 14:03:54 +00:00
hop.
WithFilesRemoved(H.BinaryPath()).
2022-02-03 22:29:01 +00:00
WithMsg(fmt.Sprintf("Unattach %s", h.CanonicalName())).
2021-02-20 14:03:54 +00:00
WithUser(u).
Apply()
if len(hop.Errs) > 0 {
rejectUnattachLog(h, u, "fail")
2021-02-26 16:43:45 +00:00
// FIXME: something may be wrong here
return hop.WithErrAbort(fmt.Errorf("Could not unattach this hypha due to internal server errors: <code>%v</code>", hop.Errs)), "Error"
2021-02-20 14:03:54 +00:00
}
if H.BinaryPath() != "" {
H.SetBinaryPath("")
2021-02-20 14:03:54 +00:00
}
// If nothing is left of the hypha
if H.TextPath == "" {
2022-02-03 21:26:08 +00:00
hyphae.DeleteHypha(h)
2021-02-20 14:03:54 +00:00
}
return hop, ""
}