-
-
-function timeUnitToSeconds(value, unit)
-{
- let seconds = value;
- switch (unit)
- {
- case 'd':
- seconds *= 24;
- case 'h':
- seconds *= 60;
- case 'm':
- seconds *= 60;
- }
- return seconds;
-}
-
-function isLargerUnit(unit1, unit2)
-{
- return (unit1 == 'd' && unit2 != 'd')
- || (unit1 == 'h' && ['s','m'].includes(unit2))
- || (unit1 == 'm' && unit2 == 's');
-}
+import { extractTime } from "@/utils/timeControl";
export function checkChallenge(c)
{
if (isNaN(vid) || vid <= 0)
return "Please select a variant";
- const tcParts = c.timeControl.replace(/ /g,"").split('+');
- const mainTime = tcParts[0].match(/([0-9]+)([smhd])/);
- if (!mainTime)
+ const tc = extractTime(c.timeControl);
+ if (!tc)
return "Wrong time control";
- const mainTimeValue = parseInt(mainTime[1]);
- const mainTimeUnit = mainTime[2];
- if (isNaN(mainTimeValue) || mainTimeValue <= 0)
- return "Main time should be strictly positive";
- c.mainTime = timeUnitToSeconds(mainTimeValue, mainTimeUnit);
- if (tcParts.length >= 2)
- {
- const increment = tcParts[1].match(/([0-9]+)([smhd])/);
- if (!increment)
- return "Wrong time control";
- const incrementValue = parseInt(increment[1]);
- const incrementUnit = increment[2];
- if (isLargerUnit(incrementUnit, mainTimeUnit))
- return "Increment unit cannot be larger than main unit";
- if (isNaN(incrementValue) || incrementValue < 0)
- return "Increment must be positive";
- c.increment = timeUnitToSeconds(incrementValue, incrementUnit);
- }
+ // Less than 3 days ==> live game (TODO: heuristic... 40 moves also)
+ c.liveGame = (tc.mainTime + 40 * tc.increment < 3*24*60*60);
// Basic alphanumeric check for players names
let playerCount = 0;
- for (p of c.players)
+ for (const pname of c.to)
{
- if (p.name.length > 0)
+ if (pname.length > 0)
{
// TODO: slightly redundant (see data/userCheck.js)
- if (!p.name.match(/^[\w]+$/))
+ if (!pname.match(/^[\w]+$/))
return "Wrong characters in players names";
playerCount++;
}
if (!V.IsGoodFen(c.fen))
return "Bad FEN string";
}
- else //generate a FEN
- c.fen = V.GenRandInitFen();
+ else
+ c.fen = "";
}