Merge branch 'develop' into bugfix/61465
This commit is contained in:
commit
d35284a1b7
@ -58,7 +58,7 @@ public static class ChannelExtension
|
||||
await outputs[index].Writer.WriteAsync(item, cancellationToken);
|
||||
}
|
||||
}
|
||||
catch (OperationCanceledException ex)
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// TODO: catch error via additional channel
|
||||
// var error = Channel.CreateUnbounded<T>();
|
||||
@ -96,7 +96,7 @@ public static class ChannelExtension
|
||||
|
||||
await Task.WhenAll(inputs.Select(i => Redirect(i)).ToArray());
|
||||
}
|
||||
catch (OperationCanceledException ex)
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// TODO: catch error via additional channel
|
||||
// var error = Channel.CreateUnbounded<T>();
|
||||
|
@ -18,7 +18,7 @@ class ConfirmRoute extends React.Component {
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { forUnauthorized, history, isAuthenticated } = this.props;
|
||||
const { forUnauthorized, isAuthenticated } = this.props;
|
||||
|
||||
if (forUnauthorized && isAuthenticated) {
|
||||
this.props.logout();
|
||||
@ -42,18 +42,25 @@ class ConfirmRoute extends React.Component {
|
||||
.then((validationResult) => {
|
||||
switch (validationResult) {
|
||||
case ValidationResult.Ok:
|
||||
const confirmHeader = `${confirmLinkData}&${search.slice(1)}`;
|
||||
const confirmHeader = search.slice(1);
|
||||
const linkData = {
|
||||
...confirmLinkData,
|
||||
confirmHeader,
|
||||
};
|
||||
|
||||
console.log("checkConfirmLink", {
|
||||
confirmLinkData,
|
||||
validationResult,
|
||||
linkData,
|
||||
});
|
||||
|
||||
this.setState({
|
||||
isLoaded: true,
|
||||
linkData,
|
||||
});
|
||||
break;
|
||||
case ValidationResult.Invalid:
|
||||
console.error("invlid link");
|
||||
console.error("invlid link", { confirmLinkData, validationResult });
|
||||
window.location.href = combineUrl(
|
||||
window.DocSpaceConfig?.proxy?.url,
|
||||
path,
|
||||
@ -61,7 +68,10 @@ class ConfirmRoute extends React.Component {
|
||||
);
|
||||
break;
|
||||
case ValidationResult.Expired:
|
||||
console.error("expired link");
|
||||
console.error("expired link", {
|
||||
confirmLinkData,
|
||||
validationResult,
|
||||
});
|
||||
window.location.href = combineUrl(
|
||||
window.DocSpaceConfig?.proxy?.url,
|
||||
path,
|
||||
@ -69,7 +79,10 @@ class ConfirmRoute extends React.Component {
|
||||
);
|
||||
break;
|
||||
default:
|
||||
console.error("unknown link");
|
||||
console.error("unknown link", {
|
||||
confirmLinkData,
|
||||
validationResult,
|
||||
});
|
||||
window.location.href = combineUrl(
|
||||
window.DocSpaceConfig?.proxy?.url,
|
||||
path,
|
||||
@ -79,7 +92,7 @@ class ConfirmRoute extends React.Component {
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
console.error("FAILED checkConfirmLink", { error, confirmLinkData });
|
||||
window.location.href = combineUrl(
|
||||
window.DocSpaceConfig?.proxy?.url,
|
||||
path,
|
||||
|
@ -159,13 +159,13 @@ class FilesStore {
|
||||
if (!(this.isLoading || this.operationAction))
|
||||
switch (opt?.cmd) {
|
||||
case "create":
|
||||
this.wsModifyFolderCreate();
|
||||
this.wsModifyFolderCreate(opt);
|
||||
break;
|
||||
case "update":
|
||||
this.wsModifyFolderUpdate();
|
||||
this.wsModifyFolderUpdate(opt);
|
||||
break;
|
||||
case "delete":
|
||||
this.wsModifyFolderDelete();
|
||||
this.wsModifyFolderDelete(opt);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,6 @@ function ImageViewer({
|
||||
const isDoubleTapRef = useRef<boolean>(false);
|
||||
const setTimeoutIDTapRef = useRef<NodeJS.Timeout>();
|
||||
const startAngleRef = useRef<number>(0);
|
||||
const scaleRef = useRef<number>(1);
|
||||
const toolbarRef = useRef<ImperativeHandle>(null);
|
||||
|
||||
const [scale, setScale] = useState(1);
|
||||
@ -73,7 +72,7 @@ function ImageViewer({
|
||||
height: 0,
|
||||
x: 0,
|
||||
y: 0,
|
||||
scale: 5,
|
||||
scale: 1,
|
||||
rotate: 0,
|
||||
opacity: 1,
|
||||
}));
|
||||
@ -702,8 +701,6 @@ function ImageViewer({
|
||||
|
||||
const point = calculateAdjustBounds(dx, dy, ratio, dRotate);
|
||||
|
||||
scaleRef.current = dScale;
|
||||
|
||||
api.start({
|
||||
...point,
|
||||
scale: dScale,
|
||||
@ -813,7 +810,6 @@ function ImageViewer({
|
||||
onWheel: ({
|
||||
first,
|
||||
offset: [, yWheel],
|
||||
lastOffset: [, lYWheel],
|
||||
movement: [, mYWheel],
|
||||
pinching,
|
||||
memo,
|
||||
@ -827,8 +823,8 @@ function ImageViewer({
|
||||
)
|
||||
return memo;
|
||||
|
||||
resetToolbarVisibleTimer();
|
||||
const dScale = (-1 * yWheel) / RatioWheel;
|
||||
const lScale = (-1 * lYWheel) / RatioWheel;
|
||||
const mScale = (-1 * mYWheel) / RatioWheel;
|
||||
|
||||
if (first || !memo) {
|
||||
@ -845,7 +841,7 @@ function ImageViewer({
|
||||
const dx = memo[0] - mScale * memo[2];
|
||||
const dy = memo[1] - mScale * memo[3];
|
||||
|
||||
const ratio = dScale / lScale;
|
||||
const ratio = dScale / style.scale.get();
|
||||
|
||||
const point = calculateAdjustImage(
|
||||
calculateAdjustBounds(dx, dy, ratio),
|
||||
@ -957,6 +953,7 @@ function ImageViewer({
|
||||
<ImageViewerToolbar
|
||||
ref={toolbarRef}
|
||||
toolbar={toolbar}
|
||||
percentValue={style.scale.get()}
|
||||
generateContextMenu={generateContextMenu}
|
||||
setIsOpenContextMenu={setIsOpenContextMenu}
|
||||
toolbarEvent={toolbarEvent}
|
||||
|
@ -8,6 +8,7 @@ interface ImageViewerToolbarProps {
|
||||
right?: string,
|
||||
bottom?: string
|
||||
) => JSX.Element;
|
||||
percentValue: number;
|
||||
setIsOpenContextMenu: Dispatch<SetStateAction<boolean>>;
|
||||
toolbarEvent: (item: ToolbarItemType) => void;
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ import MediaContextMenu from "PUBLIC_DIR/images/vertical-dots.react.svg";
|
||||
function ImageViewerToolbar(
|
||||
{
|
||||
toolbar,
|
||||
percentValue,
|
||||
toolbarEvent,
|
||||
generateContextMenu,
|
||||
setIsOpenContextMenu,
|
||||
@ -28,7 +29,9 @@ function ImageViewerToolbar(
|
||||
ref: ForwardedRef<ImperativeHandle>
|
||||
) {
|
||||
const [isOpen, setIsOpen] = useState<boolean>(false);
|
||||
const [percent, setPercent] = useState<number>(100);
|
||||
const [percent, setPercent] = useState<number>(() =>
|
||||
Math.round(percentValue * 100)
|
||||
);
|
||||
|
||||
useImperativeHandle(
|
||||
ref,
|
||||
|
@ -1,4 +1,3 @@
|
||||
import history from "../history";
|
||||
export default function (page) {
|
||||
if (
|
||||
window.location.pathname === page ||
|
||||
@ -6,9 +5,8 @@ export default function (page) {
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
//TODO: check if we already on default page
|
||||
|
||||
window.location.replace(page);
|
||||
history.push(page); // SSR crash
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -102,7 +102,7 @@ const LoginForm: React.FC<ILoginFormProps> = ({
|
||||
focusInput();
|
||||
|
||||
window.authCallback = authCallback;
|
||||
}, []);
|
||||
}, [message, confirmedEmail]);
|
||||
|
||||
const onChangeLogin = (e: React.ChangeEvent<HTMLInputElement>) => {
|
||||
//console.log("onChangeLogin", e.target.value);
|
||||
|
@ -110,7 +110,7 @@ public class Startup : BaseWorkerStartup
|
||||
|
||||
services.AddBaseDbContextPool<FilesDbContext>();
|
||||
|
||||
services.AddSingleton(Channel.CreateUnbounded<FileData<int>>(new UnboundedChannelOptions { SingleReader = true, SingleWriter = false }));
|
||||
services.AddSingleton(Channel.CreateUnbounded<FileData<int>>());
|
||||
services.AddSingleton(svc => svc.GetRequiredService<Channel<FileData<int>>>().Reader);
|
||||
services.AddSingleton(svc => svc.GetRequiredService<Channel<FileData<int>>>().Writer);
|
||||
}
|
||||
|
@ -25,6 +25,8 @@
|
||||
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
|
||||
|
||||
using ASC.Data.Storage.DiscStorage;
|
||||
|
||||
namespace ASC.Files.ThumbnailBuilder;
|
||||
|
||||
[Scope]
|
||||
@ -354,10 +356,20 @@ public class Builder<T>
|
||||
{
|
||||
using var sourceImg = await Image.LoadAsync(stream);
|
||||
|
||||
Parallel.ForEach(_config.Sizes, async w =>
|
||||
if (_globalStore.GetStore() is DiscDataStore)
|
||||
{
|
||||
await CropAsync(sourceImg, fileDao, file, w.Width, w.Height);
|
||||
});
|
||||
foreach(var w in _config.Sizes)
|
||||
{
|
||||
await CropAsync(sourceImg, fileDao, file, w.Width, w.Height);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
await Parallel.ForEachAsync(_config.Sizes, new ParallelOptions { MaxDegreeOfParallelism = 4 }, async (w, t) =>
|
||||
{
|
||||
await CropAsync(sourceImg, fileDao, file, w.Width, w.Height);
|
||||
});
|
||||
}
|
||||
|
||||
GC.Collect();
|
||||
}
|
||||
|
@ -66,8 +66,7 @@ public class ThumbnailBuilderService : BackgroundService
|
||||
for (var i = 0; i < readers.Count; i++)
|
||||
{
|
||||
var reader = readers[i];
|
||||
var index = i;
|
||||
|
||||
|
||||
tasks.Add(Task.Run(async () =>
|
||||
{
|
||||
await foreach (var fileData in reader.ReadAllAsync(stoppingToken))
|
||||
|
Loading…
Reference in New Issue
Block a user