fix: wait for file action api

and remove jQuery from filelist script

fix #92
pull/93/head
sualko 2020-10-22 11:00:15 +02:00
parent 93154c9556
commit da6657b2a0
2 changed files with 61 additions and 63 deletions

View File

@ -1,9 +1,9 @@
import axios from '@nextcloud/axios'; import axios from '@nextcloud/axios';
export enum ShareType { export enum ShareType {
User = OC.Share.SHARE_TYPE_USER, User = 0, // OC.Share.SHARE_TYPE_USER
Group = OC.Share.SHARE_TYPE_GROUP, Group = 1, // OC.Share.SHARE_TYPE_GROUP
Circle = OC.Share.SHARE_TYPE_CIRCLE Circle = 7, // OC.Share.SHARE_TYPE_CIRCLE
} }
export enum Permission { Admin, Moderator, User } export enum Permission { Admin, Moderator, User }

View File

@ -1,24 +1,10 @@
import axios from '@nextcloud/axios'; import axios from '@nextcloud/axios';
import { generateOcsUrl, generateUrl } from '@nextcloud/router'; import { generateOcsUrl, generateUrl } from '@nextcloud/router';
import { Room } from './Common/Api'; import { api } from './Common/Api';
declare const OCA: any; declare const OCA: any;
class BigBlueButton { const mimeTypes = [
public async getRooms(): Promise<Room[]> {
const response = await axios.get(OC.generateUrl('/apps/bbb/rooms'));
return response.data;
}
}
$(() => {
if (!OCA?.Files?.fileActions) {
return;
}
const mimeTypes = [
'application/pdf', 'application/pdf',
'application/vnd.oasis.opendocument.presentation', 'application/vnd.oasis.opendocument.presentation',
'application/vnd.oasis.opendocument.text', 'application/vnd.oasis.opendocument.text',
@ -34,16 +20,29 @@ $(() => {
'image/png', 'image/png',
'text/plain', 'text/plain',
'text/rtf', 'text/rtf',
]; ];
const bbb = new BigBlueButton();
bbb.getRooms().then(rooms => { async function createDirectShare(fileId: number): Promise<string> {
rooms.forEach(room => { const url = generateOcsUrl('apps/dav/api/v1', 1) + 'direct';
mimeTypes.forEach(mime => registerFileAction(mime, room.id, room.uid, room.name)); const createResponse = await axios.post(url, {
}); fileId,
}); });
function registerFileAction(mime, id, uid, name) { return createResponse.data?.ocs?.data?.url;
}
async function share(fileId: number, filename: string, roomUid) {
const shareUrl = await createDirectShare(fileId);
const joinUrl = generateUrl('/apps/bbb/b/{uid}?u={url}&filename={filename}', {
uid: roomUid,
url: shareUrl,
filename,
});
window.open(joinUrl, '_blank', 'noopener,noreferrer');
}
function registerFileAction(mime, id, uid, name) {
OCA.Files.fileActions.registerAction({ OCA.Files.fileActions.registerAction({
name: 'bbb-' + id, name: 'bbb-' + id,
displayName: name, displayName: name,
@ -54,25 +53,24 @@ $(() => {
share(context.fileInfoModel.id, fileName, uid); share(context.fileInfoModel.id, fileName, uid);
}, },
}); });
}
function addRoomsAsFileAction() {
if (!OCA?.Files?.fileActions) {
console.warn('[BBB] "OCA.Files.fileActions" not available');
return;
} }
async function share(fileId: number, filename: string, roomUid) { api.getRooms().then(rooms => {
const shareUrl = await createDirectShare(fileId); rooms.forEach(room => {
const joinUrl = generateUrl('/apps/bbb/b/{uid}?u={url}&filename={filename}', { mimeTypes.forEach(mime => registerFileAction(mime, room.id, room.uid, room.name));
uid: roomUid,
url: shareUrl,
filename,
}); });
window.open(joinUrl, '_blank', 'noopener,noreferrer');
}
async function createDirectShare(fileId: number): Promise<string> {
const url = generateOcsUrl('apps/dav/api/v1', 1) + 'direct';
const createResponse = await axios.post(url, {
fileId,
}); });
}
return createResponse.data?.ocs?.data?.url; if (document.readyState === 'complete') {
} addRoomsAsFileAction();
}); } else {
document.addEventListener('DOMContentLoaded', addRoomsAsFileAction);
}