forked from Ivasoft/mattermost-mobile
64 lines
2.2 KiB
TypeScript
64 lines
2.2 KiB
TypeScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import {withDatabase} from '@nozbe/watermelondb/DatabaseProvider';
|
|
import withObservables from '@nozbe/with-observables';
|
|
import {combineLatest, of as of$, from as from$} from 'rxjs';
|
|
import {map, switchMap} from 'rxjs/operators';
|
|
|
|
import {queryFilesForPost} from '@queries/servers/file';
|
|
import {observeConfigBooleanValue, observeLicense} from '@queries/servers/system';
|
|
import {fileExists} from '@utils/file';
|
|
|
|
import Files from './files';
|
|
|
|
import type {WithDatabaseArgs} from '@typings/database/database';
|
|
import type FileModel from '@typings/database/models/servers/file';
|
|
import type PostModel from '@typings/database/models/servers/post';
|
|
|
|
type EnhanceProps = WithDatabaseArgs & {
|
|
post: PostModel;
|
|
}
|
|
|
|
const filesLocalPathValidation = async (files: FileModel[], authorId: string) => {
|
|
const filesInfo: FileInfo[] = [];
|
|
for await (const f of files) {
|
|
const info = f.toFileInfo(authorId);
|
|
if (info.localPath) {
|
|
const exists = await fileExists(info.localPath);
|
|
if (!exists) {
|
|
info.localPath = '';
|
|
}
|
|
}
|
|
filesInfo.push(info);
|
|
}
|
|
|
|
return filesInfo;
|
|
};
|
|
|
|
const enhance = withObservables(['post'], ({database, post}: EnhanceProps) => {
|
|
const enableMobileFileDownload = observeConfigBooleanValue(database, 'EnableMobileFileDownload');
|
|
const publicLinkEnabled = observeConfigBooleanValue(database, 'EnablePublicLink');
|
|
|
|
const complianceDisabled = observeLicense(database).pipe(
|
|
switchMap((lcs) => of$(lcs?.IsLicensed === 'false' || lcs?.Compliance === 'false')),
|
|
);
|
|
|
|
const canDownloadFiles = combineLatest([enableMobileFileDownload, complianceDisabled]).pipe(
|
|
map(([download, compliance]) => compliance || download),
|
|
);
|
|
|
|
const filesInfo = queryFilesForPost(database, post.id).observeWithColumns(['local_path']).pipe(
|
|
switchMap((fs) => from$(filesLocalPathValidation(fs, post.userId))),
|
|
);
|
|
|
|
return {
|
|
canDownloadFiles,
|
|
postId: of$(post.id),
|
|
publicLinkEnabled,
|
|
filesInfo,
|
|
};
|
|
});
|
|
|
|
export default withDatabase(enhance(Files));
|