wip
This commit is contained in:
parent
9bf9b10ba4
commit
e9ee571ef3
|
@ -43,6 +43,7 @@ import { claimAchievement } from '@/utility/achievements.js';
|
||||||
import { copyToClipboard } from '@/utility/copy-to-clipboard.js';
|
import { copyToClipboard } from '@/utility/copy-to-clipboard.js';
|
||||||
import { prefer } from '@/preferences.js';
|
import { prefer } from '@/preferences.js';
|
||||||
import { DATA_TRANSFER_DRIVE_FILE, DATA_TRANSFER_DRIVE_FILES, DATA_TRANSFER_DRIVE_FOLDER, DATA_TRANSFER_DRIVE_FOLDERS } from '@/consts.js';
|
import { DATA_TRANSFER_DRIVE_FILE, DATA_TRANSFER_DRIVE_FILES, DATA_TRANSFER_DRIVE_FOLDER, DATA_TRANSFER_DRIVE_FOLDERS } from '@/consts.js';
|
||||||
|
import { globalEvents } from '@/events.js';
|
||||||
|
|
||||||
const props = withDefaults(defineProps<{
|
const props = withDefaults(defineProps<{
|
||||||
folder: Misskey.entities.DriveFolder;
|
folder: Misskey.entities.DriveFolder;
|
||||||
|
@ -143,46 +144,65 @@ function onDrop(ev: DragEvent) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//#region ドライブのファイル
|
//#region ドライブのファイル
|
||||||
const driveFile = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FILE);
|
{
|
||||||
if (driveFile != null && driveFile !== '') {
|
const driveFile = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FILE);
|
||||||
const file = JSON.parse(driveFile);
|
if (driveFile != null && driveFile !== '') {
|
||||||
misskeyApi('drive/files/update', {
|
const file = JSON.parse(driveFile);
|
||||||
fileId: file.id,
|
misskeyApi('drive/files/update', {
|
||||||
folderId: props.folder.id,
|
fileId: file.id,
|
||||||
});
|
folderId: props.folder.id,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region ドライブのファイル(複数)
|
||||||
|
{
|
||||||
|
const driveFiles = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FILES);
|
||||||
|
if (driveFiles != null && driveFiles !== '') {
|
||||||
|
const files = JSON.parse(driveFiles);
|
||||||
|
misskeyApi('drive/files/move-bulk', {
|
||||||
|
fileIds: files.map(f => f.id),
|
||||||
|
folderId: props.folder.id,
|
||||||
|
}).then(() => {
|
||||||
|
globalEvents.emit('driveFilesMoved', files, props.folder);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region ドライブのフォルダ
|
//#region ドライブのフォルダ
|
||||||
const driveFolder = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FOLDER);
|
{
|
||||||
if (driveFolder != null && driveFolder !== '') {
|
const driveFolder = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FOLDER);
|
||||||
const folder = JSON.parse(driveFolder);
|
if (driveFolder != null && driveFolder !== '') {
|
||||||
|
const folder = JSON.parse(driveFolder);
|
||||||
|
|
||||||
// 移動先が自分自身ならreject
|
// 移動先が自分自身ならreject
|
||||||
if (folder.id === props.folder.id) return;
|
if (folder.id === props.folder.id) return;
|
||||||
|
|
||||||
misskeyApi('drive/folders/update', {
|
misskeyApi('drive/folders/update', {
|
||||||
folderId: folder.id,
|
folderId: folder.id,
|
||||||
parentId: props.folder.id,
|
parentId: props.folder.id,
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
// noop
|
// noop
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
switch (err.code) {
|
switch (err.code) {
|
||||||
case 'RECURSIVE_NESTING':
|
case 'RECURSIVE_NESTING':
|
||||||
claimAchievement('driveFolderCircularReference');
|
claimAchievement('driveFolderCircularReference');
|
||||||
os.alert({
|
os.alert({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
title: i18n.ts.unableToProcess,
|
title: i18n.ts.unableToProcess,
|
||||||
text: i18n.ts.circularReferenceFolder,
|
text: i18n.ts.circularReferenceFolder,
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
os.alert({
|
os.alert({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: i18n.ts.somethingHappened,
|
text: i18n.ts.somethingHappened,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
}
|
}
|
||||||
|
@ -204,10 +224,6 @@ function onDragend() {
|
||||||
emit('dragend');
|
emit('dragend');
|
||||||
}
|
}
|
||||||
|
|
||||||
function go() {
|
|
||||||
emit('move', props.folder);
|
|
||||||
}
|
|
||||||
|
|
||||||
function rename() {
|
function rename() {
|
||||||
os.inputText({
|
os.inputText({
|
||||||
title: i18n.ts.renameFolder,
|
title: i18n.ts.renameFolder,
|
||||||
|
|
|
@ -21,7 +21,8 @@ import { ref } from 'vue';
|
||||||
import * as Misskey from 'misskey-js';
|
import * as Misskey from 'misskey-js';
|
||||||
import { misskeyApi } from '@/utility/misskey-api.js';
|
import { misskeyApi } from '@/utility/misskey-api.js';
|
||||||
import { i18n } from '@/i18n.js';
|
import { i18n } from '@/i18n.js';
|
||||||
import { DATA_TRANSFER_DRIVE_FILE, DATA_TRANSFER_DRIVE_FOLDER } from '@/consts.js';
|
import { DATA_TRANSFER_DRIVE_FILE, DATA_TRANSFER_DRIVE_FILES, DATA_TRANSFER_DRIVE_FOLDER, DATA_TRANSFER_DRIVE_FOLDERS } from '@/consts.js';
|
||||||
|
import { globalEvents } from '@/events.js';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
folder?: Misskey.entities.DriveFolder;
|
folder?: Misskey.entities.DriveFolder;
|
||||||
|
@ -44,9 +45,11 @@ function onDragover(ev: DragEvent) {
|
||||||
|
|
||||||
const isFile = ev.dataTransfer.items[0].kind === 'file';
|
const isFile = ev.dataTransfer.items[0].kind === 'file';
|
||||||
const isDriveFile = ev.dataTransfer.types[0] === DATA_TRANSFER_DRIVE_FILE;
|
const isDriveFile = ev.dataTransfer.types[0] === DATA_TRANSFER_DRIVE_FILE;
|
||||||
|
const isDriveFiles = ev.dataTransfer.types[0] === DATA_TRANSFER_DRIVE_FILES;
|
||||||
const isDriveFolder = ev.dataTransfer.types[0] === DATA_TRANSFER_DRIVE_FOLDER;
|
const isDriveFolder = ev.dataTransfer.types[0] === DATA_TRANSFER_DRIVE_FOLDER;
|
||||||
|
const isDriveFolders = ev.dataTransfer.types[0] === DATA_TRANSFER_DRIVE_FOLDERS;
|
||||||
|
|
||||||
if (isFile || isDriveFile || isDriveFolder) {
|
if (isFile || isDriveFile || isDriveFolder || isDriveFiles || isDriveFolders) {
|
||||||
switch (ev.dataTransfer.effectAllowed) {
|
switch (ev.dataTransfer.effectAllowed) {
|
||||||
case 'all':
|
case 'all':
|
||||||
case 'uninitialized':
|
case 'uninitialized':
|
||||||
|
@ -92,26 +95,45 @@ function onDrop(ev: DragEvent) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//#region ドライブのファイル
|
//#region ドライブのファイル
|
||||||
const driveFile = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FILE);
|
{
|
||||||
if (driveFile != null && driveFile !== '') {
|
const driveFile = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FILE);
|
||||||
const file = JSON.parse(driveFile);
|
if (driveFile != null && driveFile !== '') {
|
||||||
misskeyApi('drive/files/update', {
|
const file = JSON.parse(driveFile);
|
||||||
fileId: file.id,
|
misskeyApi('drive/files/update', {
|
||||||
folderId: props.folder ? props.folder.id : null,
|
fileId: file.id,
|
||||||
});
|
folderId: props.folder ? props.folder.id : null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region ドライブのファイル(複数)
|
||||||
|
{
|
||||||
|
const driveFiles = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FILES);
|
||||||
|
if (driveFiles != null && driveFiles !== '') {
|
||||||
|
const files = JSON.parse(driveFiles);
|
||||||
|
misskeyApi('drive/files/move-bulk', {
|
||||||
|
fileIds: files.map(f => f.id),
|
||||||
|
folderId: props.folder ? props.folder.id : null,
|
||||||
|
}).then(() => {
|
||||||
|
globalEvents.emit('driveFilesMoved', files, props.folder ?? null);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region ドライブのフォルダ
|
//#region ドライブのフォルダ
|
||||||
const driveFolder = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FOLDER);
|
{
|
||||||
if (driveFolder != null && driveFolder !== '') {
|
const driveFolder = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FOLDER);
|
||||||
const folder = JSON.parse(driveFolder);
|
if (driveFolder != null && driveFolder !== '') {
|
||||||
// 移動先が自分自身ならreject
|
const folder = JSON.parse(driveFolder);
|
||||||
if (props.folder && folder.id === props.folder.id) return;
|
// 移動先が自分自身ならreject
|
||||||
misskeyApi('drive/folders/update', {
|
if (props.folder && folder.id === props.folder.id) return;
|
||||||
folderId: folder.id,
|
misskeyApi('drive/folders/update', {
|
||||||
parentId: props.folder ? props.folder.id : null,
|
folderId: folder.id,
|
||||||
});
|
parentId: props.folder ? props.folder.id : null,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
}
|
}
|
||||||
|
|
|
@ -319,47 +319,66 @@ function onDrop(ev: DragEvent) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//#region ドライブのファイル
|
//#region ドライブのファイル
|
||||||
const driveFile = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FILE);
|
{
|
||||||
if (driveFile != null && driveFile !== '') {
|
const driveFile = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FILE);
|
||||||
const file = JSON.parse(driveFile);
|
if (driveFile != null && driveFile !== '') {
|
||||||
if (filesPaginator.items.value.some(f => f.id === file.id)) return;
|
const file = JSON.parse(driveFile);
|
||||||
misskeyApi('drive/files/update', {
|
if (filesPaginator.items.value.some(f => f.id === file.id)) return;
|
||||||
fileId: file.id,
|
misskeyApi('drive/files/update', {
|
||||||
folderId: folder.value ? folder.value.id : null,
|
fileId: file.id,
|
||||||
});
|
folderId: folder.value ? folder.value.id : null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region ドライブのファイル(複数)
|
||||||
|
{
|
||||||
|
const driveFiles = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FILES);
|
||||||
|
if (driveFiles != null && driveFiles !== '') {
|
||||||
|
const files = JSON.parse(driveFiles);
|
||||||
|
misskeyApi('drive/files/move-bulk', {
|
||||||
|
fileIds: files.map(f => f.id),
|
||||||
|
folderId: folder.value ? folder.value.id : null,
|
||||||
|
}).then(() => {
|
||||||
|
globalEvents.emit('driveFilesMoved', files, folder.value);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region ドライブのフォルダ
|
//#region ドライブのフォルダ
|
||||||
const driveFolder = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FOLDER);
|
{
|
||||||
if (driveFolder != null && driveFolder !== '') {
|
const driveFolder = ev.dataTransfer.getData(DATA_TRANSFER_DRIVE_FOLDER);
|
||||||
const droppedFolder = JSON.parse(driveFolder);
|
if (driveFolder != null && driveFolder !== '') {
|
||||||
|
const droppedFolder = JSON.parse(driveFolder);
|
||||||
|
|
||||||
// 移動先が自分自身ならreject
|
// 移動先が自分自身ならreject
|
||||||
if (folder.value && droppedFolder.id === folder.value.id) return false;
|
if (folder.value && droppedFolder.id === folder.value.id) return false;
|
||||||
if (foldersPaginator.items.value.some(f => f.id === droppedFolder.id)) return false;
|
if (foldersPaginator.items.value.some(f => f.id === droppedFolder.id)) return false;
|
||||||
misskeyApi('drive/folders/update', {
|
misskeyApi('drive/folders/update', {
|
||||||
folderId: droppedFolder.id,
|
folderId: droppedFolder.id,
|
||||||
parentId: folder.value ? folder.value.id : null,
|
parentId: folder.value ? folder.value.id : null,
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
// noop
|
// noop
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
switch (err.code) {
|
switch (err.code) {
|
||||||
case 'RECURSIVE_NESTING':
|
case 'RECURSIVE_NESTING':
|
||||||
claimAchievement('driveFolderCircularReference');
|
claimAchievement('driveFolderCircularReference');
|
||||||
os.alert({
|
os.alert({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
title: i18n.ts.unableToProcess,
|
title: i18n.ts.unableToProcess,
|
||||||
text: i18n.ts.circularReferenceFolder,
|
text: i18n.ts.circularReferenceFolder,
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
os.alert({
|
os.alert({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: i18n.ts.somethingHappened,
|
text: i18n.ts.somethingHappened,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//#endregion
|
//#endregion
|
||||||
}
|
}
|
||||||
|
@ -649,6 +668,9 @@ function closeTip() {
|
||||||
}
|
}
|
||||||
|
|
||||||
useGlobalEvent('driveFilesMoved', (files, to) => {
|
useGlobalEvent('driveFilesMoved', (files, to) => {
|
||||||
|
for (const f of files) {
|
||||||
|
filesPaginator.removeItem(f.id);
|
||||||
|
}
|
||||||
if ((to?.id ?? null) === (folder.value?.id ?? null)) {
|
if ((to?.id ?? null) === (folder.value?.id ?? null)) {
|
||||||
filesPaginator.unshiftItems(files);
|
filesPaginator.unshiftItems(files);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue