Skip to content

Commit abf09b4

Browse files
Aries-0331zhouwenxuan
andauthored
show video thumbnail (#7639)
* show video thumbnail * check preview permission --------- Co-authored-by: zhouwenxuan <[email protected]>
1 parent 618e25d commit abf09b4

File tree

10 files changed

+69
-10
lines changed

10 files changed

+69
-10
lines changed

frontend/src/metadata/context.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
import LocalStorage from './utils/local-storage';
88
import EventBus from '../components/common/event-bus';
99
import { username, lang } from '../utils/constants';
10+
import { Utils } from '../utils/utils';
1011

1112
class Context {
1213

@@ -41,6 +42,8 @@ class Context {
4142
this.eventBus = eventBus;
4243

4344
this.permission = repoInfo.permission !== 'admin' && repoInfo.permission !== 'rw' ? 'r' : 'rw';
45+
const { isCustomPermission, customPermission } = Utils.getUserPermission(repoInfo.permission);
46+
this.customPermission = isCustomPermission ? customPermission : null;
4447

4548
this.hasInit = true;
4649
}
@@ -187,6 +190,14 @@ class Context {
187190
return true;
188191
};
189192

193+
canPreview = () => {
194+
if (this.customPermission) {
195+
const { preview, modify } = this.customPermission.permission;
196+
return preview || modify;
197+
}
198+
return true;
199+
};
200+
190201
restoreRows = () => {
191202
// todo
192203
};

frontend/src/metadata/utils/file.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ export const openFile = (repoID, record, _openImage = () => {}) => {
101101
};
102102

103103
export const openInNewTab = (repoID, record) => {
104-
if (!record) return;
105104
const isDir = checkIsDir(record);
106105
const fileName = getFileNameFromRecord(record);
107106
const parentDir = _getParentDir(record);

frontend/src/metadata/views/gallery/main.js

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ import GalleryContextmenu from './context-menu';
88
import { useMetadataView } from '../../hooks/metadata-view';
99
import { Utils } from '../../../utils/utils';
1010
import { getDateDisplayString, getFileMTimeFromRecord, getFileNameFromRecord, getParentDirFromRecord, getRecordIdFromRecord } from '../../utils/cell';
11-
import { siteRoot, fileServerRoot, thumbnailSizeForGrid, thumbnailSizeForOriginal, thumbnailDefaultSize } from '../../../utils/constants';
11+
import { siteRoot, fileServerRoot, thumbnailSizeForGrid, thumbnailSizeForOriginal, thumbnailDefaultSize, enableVideoThumbnail } from '../../../utils/constants';
1212
import { EVENT_BUS_TYPE, GALLERY_DATE_MODE, DATE_TAG_HEIGHT, STORAGE_GALLERY_DATE_MODE_KEY, STORAGE_GALLERY_ZOOM_GEAR_KEY, VIEW_TYPE_DEFAULT_SORTS, VIEW_TYPE } from '../../constants';
1313
import { getRowById } from '../../../components/sf-table/utils/table';
1414
import { getEventClassName } from '../../../utils/dom';
1515
import { getColumns, getImageSize, getRowHeight } from './utils';
1616
import ObjectUtils from '../../../utils/object';
17+
import { openFile } from '../../utils/file';
1718

1819
import './index.css';
1920

@@ -36,13 +37,17 @@ const Main = ({ isLoadingMore, metadata, onDelete, onLoadMore, duplicateRecord,
3637

3738
const { repoID, updateCurrentDirent } = useMetadataView();
3839
const repoInfo = window.sfMetadataContext.getSetting('repoInfo');
40+
const canPreview = window.sfMetadataContext.canPreview();
3941

4042
const images = useMemo(() => {
4143
if (isFirstLoading) return [];
4244
if (!Array.isArray(metadata.rows) || metadata.rows.length === 0) return [];
4345
const firstSort = metadata.view.sorts[0] || VIEW_TYPE_DEFAULT_SORTS[VIEW_TYPE.GALLERY];
4446
return metadata.rows
45-
.filter(record => Utils.imageCheck(getFileNameFromRecord(record)))
47+
.filter(record => {
48+
const fileName = getFileNameFromRecord(record);
49+
return Utils.imageCheck(fileName) || Utils.videoCheck(fileName);
50+
})
4651
.map(record => {
4752
const id = getRecordIdFromRecord(record);
4853
const fileName = getFileNameFromRecord(record);
@@ -59,13 +64,32 @@ const Main = ({ isLoadingMore, metadata, onDelete, onLoadMore, duplicateRecord,
5964
const year = date.slice(0, 4);
6065
const month = date.slice(0, -3);
6166
const day = date.slice(-2,);
67+
68+
const isVideo = Utils.videoCheck(fileName);
69+
const useFallbackIcon = isVideo && !enableVideoThumbnail;
70+
71+
const baseThumbnailPath = `${siteRoot}thumbnail/${repoID}`;
72+
let src = useFallbackIcon
73+
? Utils.getFileIconUrl(fileName)
74+
: `${baseThumbnailPath}/${size}${path}`;
75+
76+
let thumbnail = useFallbackIcon
77+
? Utils.getFileIconUrl(fileName)
78+
: `${baseThumbnailPath}/${thumbnailSizeForOriginal}${path}?mtime=${mtime}`;
79+
80+
if (!canPreview) {
81+
const fileIcon = Utils.getFileIconUrl(fileName);
82+
src = fileIcon;
83+
thumbnail = fileIcon;
84+
}
85+
6286
return {
6387
id,
6488
name: fileName,
6589
parentDir,
6690
url: `${siteRoot}lib/${repoID}/file${path}`,
67-
src: `${siteRoot}thumbnail/${repoID}/${size}${path}`,
68-
thumbnail: `${siteRoot}thumbnail/${repoID}/${thumbnailSizeForOriginal}${path}?mtime=${mtime}`,
91+
src,
92+
thumbnail,
6993
downloadURL: `${fileServerRoot}repos/${repoID}/files${path}?op=download`,
7094
year,
7195
month,
@@ -192,10 +216,14 @@ const Main = ({ isLoadingMore, metadata, onDelete, onLoadMore, duplicateRecord,
192216

193217
const handleDoubleClick = useCallback((event, image) => {
194218
event.preventDefault();
195-
const index = images.findIndex(item => item.id === image.id);
196-
setImageIndex(index);
197-
setIsImagePopupOpen(true);
198-
}, [images]);
219+
const record = getRowById(metadata, image.id);
220+
if (!canPreview) return;
221+
openFile(repoID, record, () => {
222+
const index = images.findIndex(item => item.id === image.id);
223+
setImageIndex(index);
224+
setIsImagePopupOpen(true);
225+
});
226+
}, [repoID, metadata, images]);
199227

200228
const handleContextMenu = useCallback((event, image) => {
201229
event.preventDefault();

frontend/src/metadata/views/kanban/boards/board/card/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ const Card = ({
3131
if (titleColumn?.type !== CellType.FILE_NAME) return;
3232
event.stopPropagation();
3333
event.nativeEvent.stopImmediatePropagation();
34+
const canPreview = window.sfMetadataContext.canPreview();
35+
if (!canPreview) return;
3436
onOpenFile(record);
3537
}, [titleColumn, record, onOpenFile]);
3638

frontend/src/metadata/views/kanban/boards/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,8 @@ const Boards = ({ modifyRecord, deleteRecords, modifyColumnData, onCloseSettings
182182

183183
const onOpenFile = useCallback((record) => {
184184
const repoID = window.sfMetadataContext.getSetting('repoID');
185+
const canPreview = window.sfMetadataContext.canPreview();
186+
if (!canPreview) return;
185187
openFile(repoID, record, () => {
186188
currentImageRef.current = record;
187189
setImagePreviewerVisible(true);

frontend/src/metadata/views/table/masks/interaction-masks/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@ class InteractionMasks extends React.Component {
451451
};
452452

453453
handleSpaceKeyDown = (e) => {
454+
e.preventDefault();
454455
e.stopPropagation();
455456
e.nativeEvent.stopImmediatePropagation();
456457
const repoID = window.sfMetadataContext.getSetting('repoID');

frontend/src/metadata/views/table/table-main/records/record/cell/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ const Cell = React.memo(({
154154
event.nativeEvent.stopImmediatePropagation();
155155
if (!isCellSelected) return;
156156
const repoID = window.sfMetadataContext.getSetting('repoID');
157+
const canPreview = window.sfMetadataContext.canPreview();
158+
if (!canPreview) return;
157159
openFile(repoID, record, () => {
158160
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.OPEN_EDITOR, EDITOR_TYPE.PREVIEWER);
159161
});

frontend/src/metadata/views/table/table-main/records/record/cell/operation-btn/file-name-operation-btn/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ const FileNameOperationBtn = ({ column, record, ...props }) => {
2222
event.stopPropagation();
2323
event.nativeEvent.stopImmediatePropagation();
2424
const repoID = window.sfMetadataContext.getSetting('repoID');
25+
const canPreview = window.sfMetadataContext.canPreview();
26+
if (!canPreview) return;
2527
openFile(repoID, record, () => {
2628
window.sfMetadataContext.eventBus.dispatch(METADATA_EVENT_BUS_TYPE.OPEN_EDITOR, EDITOR_TYPE.PREVIEWER);
2729
});

frontend/src/tag/context.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import tagsAPI from './api';
22
import LocalStorage from '../metadata/utils/local-storage';
33
import EventBus from '../components/common/event-bus';
44
import { username, lang } from '../utils/constants';
5+
import { Utils } from '../utils/utils';
56

67
class Context {
78

@@ -36,6 +37,8 @@ class Context {
3637
this.eventBus = eventBus;
3738

3839
this.permission = repoInfo.permission !== 'admin' && repoInfo.permission !== 'rw' ? 'r' : 'rw';
40+
const { isCustomPermission, customPermission } = Utils.getUserPermission(repoInfo.permission);
41+
this.customPermission = isCustomPermission ? customPermission : null;
3942

4043
this.hasInit = true;
4144
}
@@ -72,6 +75,14 @@ class Context {
7275
return true;
7376
};
7477

78+
canPreview = () => {
79+
if (this.customPermission) {
80+
const { preview, modify } = this.customPermission.permission;
81+
return preview || modify;
82+
}
83+
return true;
84+
};
85+
7586
canAddTag = () => {
7687
if (this.permission === 'r') return false;
7788
return true;

frontend/src/tag/views/tag-files/tag-file/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ const TagFile = ({ isSelected, repoID, file, tagsData, onSelectFile, openImagePr
7676

7777
const handelClickFileName = useCallback((event) => {
7878
event.preventDefault();
79-
if (isRenameing) return;
79+
const canPreview = window.sfTagsDataContext.canPreview();
80+
if (isRenameing || !canPreview) return;
8081
openFile(repoID, file, () => {
8182
openImagePreview(file);
8283
});

0 commit comments

Comments
 (0)