1
0

fix stupid loop event generator (1/inf)

This commit is contained in:
2021-02-10 21:18:47 +08:00
parent ba87ff481c
commit 6809faf429
3 changed files with 13 additions and 12 deletions

View File

@@ -203,7 +203,7 @@ class CalendarDatabase(object):
username = self.tokenOper_get_username(token) username = self.tokenOper_get_username(token)
self.cursor.execute('SELECT calendar.* FROM calendar INNER JOIN collection \ self.cursor.execute('SELECT calendar.* FROM calendar INNER JOIN collection \
ON collection.ccn_uuid = calendar.ccn_belongTo \ ON collection.ccn_uuid = calendar.ccn_belongTo \
WHERE (collection.ccn_user = ? AND calendar.ccn_loopDateTimeEnd >= ? AND calendar.ccn_loopDateTimeStart <= ?);', WHERE (collection.ccn_user = ? AND calendar.ccn_loopDateTimeEnd >= ? AND calendar.ccn_loopDateTimeStart - (calendar.ccn_eventDateTimeEnd - calendar.ccn_eventDateTimeStart) <= ?);',
(username, startDateTime, endDateTime)) (username, startDateTime, endDateTime))
return self.cursor.fetchall() return self.cursor.fetchall()
@@ -212,7 +212,7 @@ class CalendarDatabase(object):
username = self.tokenOper_get_username(token) username = self.tokenOper_get_username(token)
self.cursor.execute('SELECT calendar.ccn_uuid FROM calendar INNER JOIN collection \ self.cursor.execute('SELECT calendar.ccn_uuid FROM calendar INNER JOIN collection \
ON collection.ccn_uuid = calendar.ccn_belongTo \ ON collection.ccn_uuid = calendar.ccn_belongTo \
WHERE (collection.ccn_user = ? AND calendar.ccn_loopDateTimeEnd >= ? AND calendar.ccn_loopDateTimeStart <= ?);', WHERE (collection.ccn_user = ? AND calendar.ccn_loopDateTimeEnd >= ? AND calendar.ccn_loopDateTimeStart - (calendar.ccn_eventDateTimeEnd - calendar.ccn_eventDateTimeStart) <= ?);',
(username, startDateTime, endDateTime)) (username, startDateTime, endDateTime))
return tuple(map(lambda x: x[0], self.cursor.fetchall())) return tuple(map(lambda x: x[0], self.cursor.fetchall()))

View File

@@ -112,9 +112,9 @@ function ccn_datetime_ResolveLoopRules4Event(loopRules, loopDateTimeStart, loopD
var isSpecial = (originalMonth == 2 && originalDay == 29); var isSpecial = (originalMonth == 2 && originalDay == 29);
var realLoopSpan = isSpecial ? LCM(4, loopSpan) : loopSpan; var realLoopSpan = isSpecial ? LCM(4, loopSpan) : loopSpan;
var fullSpanCount = Math.floor(yearCount / realLoopSpan); //var fullSpanCount = Math.floor(yearCount / realLoopSpan);
var remainYear = year % realLoopSpan; var remainYear = year % realLoopSpan;
detectDateTime.setUTCFullYear(fullSpanCount + detectDateTime.getUTCFullYear(), 1, 1); //detectDateTime.setUTCFullYear(fullSpanCount + detectDateTime.getUTCFullYear(), 1, 1);
if (remainYear != 0) if (remainYear != 0)
detectDateTime.setUTCFullYear(realLoopSpan - remainYear + detectDateTime.getUTCFullYear(), 1, 1); detectDateTime.setUTCFullYear(realLoopSpan - remainYear + detectDateTime.getUTCFullYear(), 1, 1);
@@ -138,9 +138,9 @@ function ccn_datetime_ResolveLoopRules4Event(loopRules, loopDateTimeStart, loopD
var monthsCount = ccn_datetime_MonthsCount(detectDateTime.getUTCFullYear(). detectDateTime.getUTCMonth() + 1) - var monthsCount = ccn_datetime_MonthsCount(detectDateTime.getUTCFullYear(). detectDateTime.getUTCMonth() + 1) -
ccn_datetime_MonthsCount(originalYear, originalMonth); ccn_datetime_MonthsCount(originalYear, originalMonth);
var fullSpanCount = Math.floor(monthsCount / loopSpan); //var fullSpanCount = Math.floor(monthsCount / loopSpan);
var remainMonth = monthsCount % loopSpan; var remainMonth = monthsCount % loopSpan;
detectDateTime.setUTCMonth(fullSpanCount * loopSpan + detectDateTime.getUTCMonth(), 1); //detectDateTime.setUTCMonth(fullSpanCount * loopSpan + detectDateTime.getUTCMonth(), 1);
if (remainMonth != 0) if (remainMonth != 0)
detectDateTime.setUTCMonth(loopSpan - remainMonth + detectDateTime.getUTCMonth(), 1); detectDateTime.setUTCMonth(loopSpan - remainMonth + detectDateTime.getUTCMonth(), 1);
@@ -193,11 +193,11 @@ function ccn_datetime_ResolveLoopRules4Event(loopRules, loopDateTimeStart, loopD
var daysCount = ccn_datetime_DaysCount(detectDateTime.getUTCFullYear(), detectDateTime.getUTCMonth() + 1, detectDateTime.getDate()) - var daysCount = ccn_datetime_DaysCount(detectDateTime.getUTCFullYear(), detectDateTime.getUTCMonth() + 1, detectDateTime.getDate()) -
ccn_datetime_DaysCount(originalYear, originalMonth, originalDay); ccn_datetime_DaysCount(originalYear, originalMonth, originalDay);
var fullSpanCount = Math.floor(daysCount / (7 * loopSpan)); //var fullSpanCount = Math.floor(daysCount / (7 * loopSpan));
var remainFullSpanCount = Math.floor((daysCount % (7 * loopSpan)) / 7); var remainFullSpanCount = Math.floor((daysCount % (7 * loopSpan)) / 7);
var remainDays = (daysCount % (7 * loopSpan)) % 7; var remainDays = (daysCount % (7 * loopSpan)) % 7;
detectDateTime.setUTCDate((7 * loopSpan * fullSpanCount) + detectDateTime.getUTCDate()); //detectDateTime.setUTCDate((7 * loopSpan * fullSpanCount) + detectDateTime.getUTCDate());
if (remainFullSpanCount != 0) { if (remainFullSpanCount != 0) {
detectDateTime.setUTCDate((loopSpan - remainFullSpanCount) * 7 + detectDateTime.getUTCDate()); detectDateTime.setUTCDate((loopSpan - remainFullSpanCount) * 7 + detectDateTime.getUTCDate());
} }
@@ -219,11 +219,11 @@ function ccn_datetime_ResolveLoopRules4Event(loopRules, loopDateTimeStart, loopD
} else if (ccn_datetime_precompiledLoopRules.day.test(loopRules)) { } else if (ccn_datetime_precompiledLoopRules.day.test(loopRules)) {
var loopSpan = parseInt(RegExp.$1); var loopSpan = parseInt(RegExp.$1);
var daysCount = ccn_datetime_DaysCount(detectDateTime.getUTCFullYear(), detectDateTime.getUTCMonth() + 1, detectDateTime.getDate()) - var daysCount = ccn_datetime_DaysCount(detectDateTime.getUTCFullYear(), detectDateTime.getUTCMonth() + 1, detectDateTime.getUTCDate()) -
ccn_datetime_DaysCount(originalYear, originalMonth, originalDay); ccn_datetime_DaysCount(originalYear, originalMonth, originalDay);
var fullSpanCount = Math.floor(daysCount / loopSpan); //var fullSpanCount = Math.floor(daysCount / loopSpan);
var remainDays = daysCount % loopSpan; var remainDays = daysCount % loopSpan;
detectDateTime.setUTCDate(fullSpanCount * loopSpan + detectDateTime.getUTCDate()); //detectDateTime.setUTCDate(fullSpanCount * loopSpan + detectDateTime.getUTCDate());
if (remainDays != 0) if (remainDays != 0)
detectDateTime.setUTCDate(loopSpan - remainDays + detectDateTime.getUTCDate()); detectDateTime.setUTCDate(loopSpan - remainDays + detectDateTime.getUTCDate());

View File

@@ -118,9 +118,10 @@ function ccn_calendar_calendar_Analyse() {
for(var index in ccn_calendar_calendar_listCache) { for(var index in ccn_calendar_calendar_listCache) {
var item = ccn_calendar_calendar_listCache[index]; var item = ccn_calendar_calendar_listCache[index];
var minStartTimestamp = startTimestamp - (item[6] - item[5]);
var result = ccn_datetime_ResolveLoopRules4Event( var result = ccn_datetime_ResolveLoopRules4Event(
item[8], item[8],
Math.max(item[6] - item[5] + startTimestamp, item[9]), item[9] < minStartTimestamp ? minStartTimestamp : item[9],
Math.min(item[10], endTimestamp), Math.min(item[10], endTimestamp),
item[5], item[5],
item[6], item[6],