diff --git a/kernel/av/av.go b/kernel/av/av.go index 11cff4a09..8a475dce6 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -23,6 +23,7 @@ import ( "math" "os" "path/filepath" + "regexp" "strconv" "strings" "time" @@ -747,27 +748,18 @@ func (av *AttributeView) GetBlockKey() (ret *Key) { return } -func (av *AttributeView) GetDuplicateViewName(masterViewName string) string { - count := 1 - ret := masterViewName + " (" + strconv.Itoa(count) + ")" - - existViewByName := func(name string) bool { - for _, v := range av.Views { - if v.Name == name { - return true - } - } - return false +func (av *AttributeView) GetDuplicateViewName(masterViewName string) (ret string) { + ret = masterViewName + " (1)" + r := regexp.MustCompile("^(.*) \\((\\d+)\\)$") + m := r.FindStringSubmatch(masterViewName) + if nil == m || 3 > len(m) { + return } - for i := 0; i < 32; i++ { - if !existViewByName(ret) { - return ret - } - count++ - ret = masterViewName + " (" + strconv.Itoa(count) + ")" - } - return ret + num, _ := strconv.Atoi(m[2]) + num++ + ret = fmt.Sprintf("%s (%d)", m[1], num) + return } func GetAttributeViewDataPath(avID string) (ret string) { diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 079c327bd..04d6ea42c 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -770,7 +770,7 @@ func (tx *Transaction) doSetAttrViewViewName(operation *Operation) (ret *TxErr) return &TxErr{code: TxErrWriteAttributeView, id: viewID} } - view.Name = operation.Data.(string) + view.Name = strings.TrimSpace(operation.Data.(string)) if err = av.SaveAttributeView(attrView); nil != err { logging.LogErrorf("save attribute view [%s] failed: %s", avID, err) return &TxErr{code: TxErrWriteAttributeView, msg: err.Error(), id: avID} @@ -816,14 +816,7 @@ func setAttributeViewName(operation *Operation) (err error) { return } - view, err := attrView.GetCurrentView() - if nil != err { - return - } - - attrView.Name = operation.Data.(string) - view.Name = operation.Data.(string) - + attrView.Name = strings.TrimSpace(operation.Data.(string)) err = av.SaveAttributeView(attrView) return } @@ -1493,7 +1486,7 @@ func updateAttributeViewColumn(operation *Operation) (err error) { case av.KeyTypeBlock, av.KeyTypeText, av.KeyTypeNumber, av.KeyTypeDate, av.KeyTypeSelect, av.KeyTypeMSelect, av.KeyTypeURL, av.KeyTypeEmail, av.KeyTypePhone, av.KeyTypeMAsset, av.KeyTypeTemplate, av.KeyTypeCreated, av.KeyTypeUpdated, av.KeyTypeCheckbox: for _, keyValues := range attrView.KeyValues { if keyValues.Key.ID == operation.ID { - keyValues.Key.Name = operation.Name + keyValues.Key.Name = strings.TrimSpace(operation.Name) keyValues.Key.Type = colType break }