|
@@ -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) {
|