| 180 | } |
| 181 | |
| 182 | func (project *Project) AutoBackup() { |
| 183 | |
| 184 | if globals.ReleaseMode != ReleaseModeDemo && project.Filepath != "" && globals.Settings.Get(SettingsAutoBackup).AsBool() && time.Since(project.LastBackup) > time.Duration(globals.Settings.Get(SettingsAutoBackupTime).AsFloat())*time.Minute { |
| 185 | |
| 186 | filename := project.Filepath |
| 187 | if strings.Contains(filename, ".plan"+BackupDelineator) { |
| 188 | filename = filename[:strings.Index(filename, ".plan")] + ".plan" + BackupDelineator + time.Now().Format(FileTimeFormat) |
| 189 | } else { |
| 190 | filename += BackupDelineator + time.Now().Format(FileTimeFormat) |
| 191 | } |
| 192 | |
| 193 | ogFilepath := project.Filepath |
| 194 | project.Filepath = filename |
| 195 | project.BackingUp = true |
| 196 | project.Save() |
| 197 | project.BackingUp = false |
| 198 | project.LastBackup = time.Now() |
| 199 | project.Filepath = ogFilepath |
| 200 | |
| 201 | head := filepath.Base(filename) |
| 202 | if !strings.Contains(head, ".plan"+BackupDelineator) { |
| 203 | head += BackupDelineator |
| 204 | } else { |
| 205 | ind := strings.Index(head, ".plan"+BackupDelineator) |
| 206 | head = head[:ind] + ".plan" + BackupDelineator |
| 207 | } |
| 208 | |
| 209 | existingBackups := FilesInDirectory(filepath.Dir(project.Filepath), head) |
| 210 | |
| 211 | maxBackups := int(globals.Settings.Get(SettingsMaxAutoBackups).AsFloat()) |
| 212 | |
| 213 | if len(existingBackups) > maxBackups { |
| 214 | |
| 215 | deleteCount := len(existingBackups) - maxBackups |
| 216 | for i := 0; i < deleteCount; i++ { |
| 217 | |
| 218 | if existingBackups[0] != ogFilepath { |
| 219 | |
| 220 | if err := os.Remove(existingBackups[0]); err != nil { |
| 221 | log.Println("ERROR: Couldn't delete existing backups: ", err.Error()) |
| 222 | } |
| 223 | |
| 224 | } |
| 225 | |
| 226 | existingBackups = existingBackups[1:] |
| 227 | |
| 228 | } |
| 229 | |
| 230 | } |
| 231 | |
| 232 | } |
| 233 | |
| 234 | } |
| 235 | |
| 236 | func (project *Project) Update() { |
| 237 | |