incomplete code, because yes
This commit is contained in:
parent
c690c681c5
commit
4b1a31e70b
|
@ -2810,6 +2810,7 @@ class FurnaceGUI {
|
||||||
void resetColors();
|
void resetColors();
|
||||||
void resetKeybinds();
|
void resetKeybinds();
|
||||||
|
|
||||||
|
bool splitBackupName(const char* input, String& backupName, struct tm& backupTime);
|
||||||
void purgeBackups(int year, int month, int day);
|
void purgeBackups(int year, int month, int day);
|
||||||
|
|
||||||
void readConfig(DivConfig& conf, FurnaceGUISettingGroups groups=GUI_SETTINGS_ALL);
|
void readConfig(DivConfig& conf, FurnaceGUISettingGroups groups=GUI_SETTINGS_ALL);
|
||||||
|
|
|
@ -336,6 +336,101 @@ String stripName(String what) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FurnaceGUI::splitBackupName(const char* input, String& backupName, struct tm& backupTime) {
|
||||||
|
size_t len=strlen(input);
|
||||||
|
if (len<4) return false;
|
||||||
|
|
||||||
|
const char* firstHyphen=NULL;
|
||||||
|
const char* secondHyphen=NULL;
|
||||||
|
bool whichHyphen=false;
|
||||||
|
bool isDateValid=true;
|
||||||
|
// -YYYYMMDD-hhmmss.fur
|
||||||
|
if (strcmp(&input[len-4],".fur")!=0) return false;
|
||||||
|
// find two hyphens
|
||||||
|
for (const char* i=input+len; i!=input; i--) {
|
||||||
|
if ((*i)=='-') {
|
||||||
|
if (whichHyphen) {
|
||||||
|
firstHyphen=i;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
secondHyphen=i;
|
||||||
|
whichHyphen=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (firstHyphen==NULL) return false;
|
||||||
|
if (secondHyphen==NULL) return false;
|
||||||
|
|
||||||
|
// get the time
|
||||||
|
int whichChar=0;
|
||||||
|
for (const char* i=secondHyphen+1; *i; i++) {
|
||||||
|
if ((*i)<'0' || (*i)>'9') {
|
||||||
|
isDateValid=false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (whichChar++) {
|
||||||
|
case 0:
|
||||||
|
backupTime.tm_hour=((*i)-'0')*10;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
backupTime.tm_hour+=(*i)-'0';
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
backupTime.tm_min=((*i)-'0')*10;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
backupTime.tm_min+=(*i)-'0';
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
backupTime.tm_sec=((*i)-'0')*10;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
backupTime.tm_sec+=(*i)-'0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (whichChar>=6) break;
|
||||||
|
}
|
||||||
|
if (whichChar!=6) return false;
|
||||||
|
if (!isDateValid) return false;
|
||||||
|
if (backupTime.tm_hour>23) return false;
|
||||||
|
if (backupTime.tm_min>59) return false;
|
||||||
|
// intentional
|
||||||
|
if (backupTime.tm_sec>60) return false;
|
||||||
|
|
||||||
|
// get the date
|
||||||
|
String theDate="";
|
||||||
|
for (const char* i=firstHyphen+1; *i; i++) {
|
||||||
|
if ((*i)=='-') break;
|
||||||
|
if ((*i)<'0' || (*i)>'9') {
|
||||||
|
isDateValid=false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
theDate+=*i;
|
||||||
|
}
|
||||||
|
if (!isDateValid) return false;
|
||||||
|
if (theDate.size()<5) return false;
|
||||||
|
if (theDate.size()>14) return false;
|
||||||
|
String mmdd=theDate.substr(theDate.size()-4);
|
||||||
|
if (mmdd.size()!=4) return false;
|
||||||
|
backupTime.tm_mon=(mmdd[0]-'0')*10+(mmdd[1]-'0')-1;
|
||||||
|
backupTime.tm_mday=(mmdd[2]-'0')*10+(mmdd[3]-'0');
|
||||||
|
if (backupTime.tm_mon>12) return false;
|
||||||
|
if (backupTime.tm_mday>31) return false;
|
||||||
|
String yyyy=theDate.substr(0,theDate.size()-4);
|
||||||
|
try {
|
||||||
|
backupTime.tm_year=std::stoi(yyyy)-1900;
|
||||||
|
} catch (std::exception& e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
backupName="";
|
||||||
|
for (const char* i=input; i!=firstHyphen && (*i); i++) {
|
||||||
|
backupName+=*i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void FurnaceGUI::purgeBackups(int year, int month, int day) {
|
void FurnaceGUI::purgeBackups(int year, int month, int day) {
|
||||||
refreshBackups=true;
|
refreshBackups=true;
|
||||||
}
|
}
|
||||||
|
@ -4205,91 +4300,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (next==NULL) break;
|
if (next==NULL) break;
|
||||||
if (strcmp(next->d_name,".")==0) continue;
|
if (strcmp(next->d_name,".")==0) continue;
|
||||||
if (strcmp(next->d_name,"..")==0) continue;
|
if (strcmp(next->d_name,"..")==0) continue;
|
||||||
size_t len=strlen(next->d_name);
|
if (!splitBackupName(next->d_name,nextEntry.name,nextEntry.lastEntryTime)) continue;
|
||||||
if (len<4) continue;
|
|
||||||
|
|
||||||
const char* firstHyphen=NULL;
|
|
||||||
const char* secondHyphen=NULL;
|
|
||||||
bool whichHyphen=false;
|
|
||||||
bool isDateValid=true;
|
|
||||||
// -YYYYMMDD-hhmmss.fur
|
|
||||||
if (strcmp(&next->d_name[len-4],".fur")!=0) continue;
|
|
||||||
// find two hyphens
|
|
||||||
for (const char* i=next->d_name+len; i!=next->d_name; i--) {
|
|
||||||
if ((*i)=='-') {
|
|
||||||
if (whichHyphen) {
|
|
||||||
firstHyphen=i;
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
secondHyphen=i;
|
|
||||||
whichHyphen=true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (firstHyphen==NULL) continue;
|
|
||||||
if (secondHyphen==NULL) continue;
|
|
||||||
|
|
||||||
// get the time
|
|
||||||
int whichChar=0;
|
|
||||||
for (const char* i=secondHyphen+1; *i; i++) {
|
|
||||||
if ((*i)<'0' || (*i)>'9') {
|
|
||||||
isDateValid=false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
switch (whichChar++) {
|
|
||||||
case 0:
|
|
||||||
nextEntry.lastEntryTime.tm_hour=((*i)-'0')*10;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
nextEntry.lastEntryTime.tm_hour+=(*i)-'0';
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
nextEntry.lastEntryTime.tm_min=((*i)-'0')*10;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
nextEntry.lastEntryTime.tm_min+=(*i)-'0';
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
nextEntry.lastEntryTime.tm_sec=((*i)-'0')*10;
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
nextEntry.lastEntryTime.tm_sec+=(*i)-'0';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (whichChar>=6) break;
|
|
||||||
}
|
|
||||||
if (whichChar!=6) continue;
|
|
||||||
if (!isDateValid) continue;
|
|
||||||
if (nextEntry.lastEntryTime.tm_hour>23) continue;
|
|
||||||
if (nextEntry.lastEntryTime.tm_min>59) continue;
|
|
||||||
// intentional
|
|
||||||
if (nextEntry.lastEntryTime.tm_sec>60) continue;
|
|
||||||
|
|
||||||
// get the date
|
|
||||||
String theDate="";
|
|
||||||
for (const char* i=firstHyphen+1; *i; i++) {
|
|
||||||
if ((*i)=='-') break;
|
|
||||||
if ((*i)<'0' || (*i)>'9') {
|
|
||||||
isDateValid=false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
theDate+=*i;
|
|
||||||
}
|
|
||||||
if (!isDateValid) continue;
|
|
||||||
if (theDate.size()<5) continue;
|
|
||||||
if (theDate.size()>14) continue;
|
|
||||||
String mmdd=theDate.substr(theDate.size()-4);
|
|
||||||
if (mmdd.size()!=4) continue;
|
|
||||||
nextEntry.lastEntryTime.tm_mon=(mmdd[0]-'0')*10+(mmdd[1]-'0')-1;
|
|
||||||
nextEntry.lastEntryTime.tm_mday=(mmdd[2]-'0')*10+(mmdd[3]-'0');
|
|
||||||
if (nextEntry.lastEntryTime.tm_mon>12) continue;
|
|
||||||
if (nextEntry.lastEntryTime.tm_mday>31) continue;
|
|
||||||
String yyyy=theDate.substr(0,theDate.size()-4);
|
|
||||||
try {
|
|
||||||
nextEntry.lastEntryTime.tm_year=std::stoi(yyyy)-1900;
|
|
||||||
} catch (std::exception& e) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
String nextPath=backupPath+DIR_SEPARATOR_STR+next->d_name;
|
String nextPath=backupPath+DIR_SEPARATOR_STR+next->d_name;
|
||||||
|
|
||||||
|
@ -4297,11 +4308,6 @@ void FurnaceGUI::drawSettings() {
|
||||||
nextEntry.size=nextStat.st_size;
|
nextEntry.size=nextStat.st_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
nextEntry.name="";
|
|
||||||
for (const char* i=next->d_name; i!=firstHyphen && (*i); i++) {
|
|
||||||
nextEntry.name+=*i;
|
|
||||||
}
|
|
||||||
|
|
||||||
backupEntryLock.lock();
|
backupEntryLock.lock();
|
||||||
backupEntries.push_back(nextEntry);
|
backupEntries.push_back(nextEntry);
|
||||||
totalBackupSize+=nextEntry.size;
|
totalBackupSize+=nextEntry.size;
|
||||||
|
|
Loading…
Reference in a new issue