Merge branch 'master' into production

This commit is contained in:
HF 2022-04-01 00:13:38 +02:00
commit ff8ea6ae90
3 changed files with 74 additions and 34 deletions

View File

@ -7,6 +7,7 @@ import React, { useState, useEffect } from 'react';
import { useSelector, shallowEqual } from 'react-redux'; import { useSelector, shallowEqual } from 'react-redux';
import { t } from 'ttag'; import { t } from 'ttag';
import useInterval from './hooks/useInterval';
import { getToday, dateToString } from '../core/utils'; import { getToday, dateToString } from '../core/utils';
const keptState = { const keptState = {
@ -277,6 +278,12 @@ function Modtools() {
} }
}, []); }, []);
useInterval(() => {
if (userlvl > 0) {
getCleanerStats((stats) => setCleanerStats(stats));
}
}, 10000);
const cleanerStatusString = (!cleanerstats.running) const cleanerStatusString = (!cleanerstats.running)
? t`Status: Not running` ? t`Status: Not running`
// eslint-disable-next-line max-len // eslint-disable-next-line max-len
@ -625,6 +632,14 @@ function Modtools() {
tlccoords, tlccoords,
brccoords, brccoords,
(ret) => { (ret) => {
setCleanerStats({
running: true,
percent: 'N/A',
method: cleanAction,
tl: tlccoords,
br: brccoords,
canvasId: selectedCanvas,
});
setSubmitting(false); setSubmitting(false);
setResp(ret); setResp(ret);
}, },

View File

@ -0,0 +1,24 @@
import { useEffect, useRef } from 'react';
function useInterval(callback, delay) {
const savedCallback = useRef();
// Remember the latest callback.
useEffect(() => {
savedCallback.current = callback;
}, [callback]);
// Set up the interval.
// eslint-disable-next-line consistent-return
useEffect(() => {
function tick() {
savedCallback.current();
}
if (delay !== null) {
const id = setInterval(tick, delay);
return () => clearInterval(id);
}
}, [delay]);
}
export default useInterval;

View File

@ -28,24 +28,24 @@ const METHODS = {
* of chunk area * of chunk area
*/ */
spare: (xc, yc, clrIgnore, canvasCleaner) => { spare: (xc, yc, clrIgnore, canvasCleaner) => {
let pxl = canvasCleaner.getPixelInChunkArea(xc, yc);
if (pxl === null || pxl < clrIgnore) {
return null;
}
let rplPxl = null; let rplPxl = null;
for (let u = -1; u <= 1; u += 1) { for (let u = -1; u <= 1; u += 1) {
for (let v = -1; v <= 1; v += 1) { for (let v = -1; v <= 1; v += 1) {
const pxl = canvasCleaner.getPixelInChunkArea(xc + u, yc + v); pxl = canvasCleaner.getPixelInChunkArea(xc + u, yc + v);
if (pxl === null) { if (pxl === null
|| (u === 0 && v === 0)
) {
continue; continue;
} }
if (u === 0 && v === 0) { if (pxl >= clrIgnore) {
if (pxl < clrIgnore) { return null;
return null; }
} if (rplPxl === null) {
} else { rplPxl = pxl;
if (pxl >= clrIgnore) {
return null;
}
if (rplPxl === null) {
rplPxl = pxl;
}
} }
} }
} }
@ -53,32 +53,33 @@ const METHODS = {
}, },
spareext: (xc, yc, clrIgnore, canvasCleaner) => { spareext: (xc, yc, clrIgnore, canvasCleaner) => {
let pxl = canvasCleaner.getPixelInChunkArea(xc, yc);
if (pxl === null || pxl < clrIgnore) {
return null;
}
let rplPxl = null; let rplPxl = null;
let origPxl = null; const origPxl = pxl;
for (let u = -1; u <= 1; u += 1) { for (let u = -1; u <= 1; u += 1) {
for (let v = -1; v <= 1; v += 1) { for (let v = -1; v <= 1; v += 1) {
const pxl = canvasCleaner.getPixelInChunkArea(xc + u, yc + v); pxl = canvasCleaner.getPixelInChunkArea(xc + u, yc + v);
if (pxl === null) { if (pxl === null
|| (u === 0 && v === 0)
) {
continue; continue;
} }
if (u === 0 && v === 0) { if (rplPxl === null) {
if (pxl < clrIgnore || pxl === rplPxl) { rplPxl = pxl;
return null; continue;
} }
origPxl = pxl; if (pxl < clrIgnore) {
} else { continue;
if (rplPxl === null) { }
rplPxl = pxl; if (rplPxl < clrIgnore) {
} rplPxl = pxl;
if (pxl >= clrIgnore) { continue;
if (rplPxl < clrIgnore) { }
rplPxl = pxl; if (pxl !== rplPxl) {
continue; return null;
}
if (pxl !== rplPxl) {
return null;
}
}
} }
} }
} }