mirror of
https://github.com/KOHGYLW/kiftd-source.git
synced 2025-01-09 04:27:56 +08:00
update to v1.2.0 进一步优化了“文件”功能
This commit is contained in:
parent
5efffe09e8
commit
a7d0d72b82
6
TODO.txt
6
TODO.txt
@ -1,4 +1,4 @@
|
|||||||
kiftd项目 计划表-2023-12-23 by 青阳龙野
|
kiftd项目 计划表-2023-12-29 by 青阳龙野
|
||||||
|
|
||||||
已完成 v1.0.17
|
已完成 v1.0.17
|
||||||
--------------
|
--------------
|
||||||
@ -210,6 +210,8 @@ test.auth.xxx=ucd
|
|||||||
【待实现】完善移动“m”权限的安全性:当仅有“m”权限时,用户可执行“复制”操作;若同时具备删除“d”权限,才可以进行“剪切”操作。
|
【待实现】完善移动“m”权限的安全性:当仅有“m”权限时,用户可执行“复制”操作;若同时具备删除“d”权限,才可以进行“剪切”操作。
|
||||||
注:这是为了防止使用者先将某个文件从一个原本不具备删除权限的文件夹内移动的一个具备删除权限的文件夹内再将其删除的恶意操作。
|
注:这是为了防止使用者先将某个文件从一个原本不具备删除权限的文件夹内移动的一个具备删除权限的文件夹内再将其删除的恶意操作。
|
||||||
【已完成】新增文件夹体积计算功能:当访问者打开文件夹的“详细信息...”模态框时,系统将实时统计该文件夹的内容总体积,之后将结果显示在该界面上供用户查看。
|
【已完成】新增文件夹体积计算功能:当访问者打开文件夹的“详细信息...”模态框时,系统将实时统计该文件夹的内容总体积,之后将结果显示在该界面上供用户查看。
|
||||||
【已完成】进一步优化了“文件”功能:在图形界面下,可以通过点击表头对文件列表进行排序;此外还修复了几处执行文件导入导出操作时可能导致死锁的问题。
|
【已完成】进一步优化了图形界面下的“文件”功能:现在可以通过点击表头对文件列表进行排序了。
|
||||||
|
【已完成】进一步优化了图形界面下的“文件”功能:现在双击文件列表中的文件可以快速预览它了。
|
||||||
|
【已完成】修复了几处在执行文件导入导出操作时可能导致死锁的问题。
|
||||||
【待实现】新增导入账户设置:当执行“导入”操作时,可以使用指定账户来为它们设置“创建者”。
|
【待实现】新增导入账户设置:当执行“导入”操作时,可以使用指定账户来为它们设置“创建者”。
|
||||||
【待实现】优化剪切复制操作:如果执行粘贴时已剪切或复制的文件不再存在,那么在提示后自动清除剪切或复制的文件记录,将剪切或复制显示恢复到初始状态。
|
【待实现】优化剪切复制操作:如果执行粘贴时已剪切或复制的文件不再存在,那么在提示后自动清除剪切或复制的文件记录,将剪切或复制显示恢复到初始状态。
|
@ -1,5 +1,6 @@
|
|||||||
package kohgylw.kiftd.server.util;
|
package kohgylw.kiftd.server.util;
|
||||||
|
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.*;
|
import org.springframework.stereotype.*;
|
||||||
|
|
||||||
@ -62,8 +63,13 @@ public class FileBlockUtil {
|
|||||||
Iterator<Path> listFiles = Files.newDirectoryStream(f.toPath()).iterator();
|
Iterator<Path> listFiles = Files.newDirectoryStream(f.toPath()).iterator();
|
||||||
while (listFiles.hasNext()) {
|
while (listFiles.hasNext()) {
|
||||||
File tempFile = listFiles.next().toFile();
|
File tempFile = listFiles.next().toFile();
|
||||||
if (!tempFile.getName().startsWith(".")) {
|
if (tempFile.isFile()) {
|
||||||
tempFile.delete();
|
if (!tempFile.getName().startsWith(".")) {
|
||||||
|
tempFile.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (tempFile.isDirectory()) {
|
||||||
|
FileUtils.deleteDirectory(tempFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -2,6 +2,7 @@ package kohgylw.kiftd.ui.module;
|
|||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Container;
|
import java.awt.Container;
|
||||||
|
import java.awt.Desktop;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.datatransfer.DataFlavor;
|
import java.awt.datatransfer.DataFlavor;
|
||||||
import java.awt.dnd.DnDConstants;
|
import java.awt.dnd.DnDConstants;
|
||||||
@ -25,13 +26,14 @@ import javax.swing.JFileChooser;
|
|||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
import javax.swing.JToolBar;
|
import javax.swing.JToolBar;
|
||||||
import javax.swing.SwingUtilities;
|
|
||||||
import javax.swing.event.ListSelectionEvent;
|
import javax.swing.event.ListSelectionEvent;
|
||||||
import javax.swing.event.ListSelectionListener;
|
import javax.swing.event.ListSelectionListener;
|
||||||
|
|
||||||
import kohgylw.kiftd.printer.Printer;
|
import kohgylw.kiftd.printer.Printer;
|
||||||
import kohgylw.kiftd.server.exception.FilesTotalOutOfLimitException;
|
import kohgylw.kiftd.server.exception.FilesTotalOutOfLimitException;
|
||||||
import kohgylw.kiftd.server.exception.FoldersTotalOutOfLimitException;
|
import kohgylw.kiftd.server.exception.FoldersTotalOutOfLimitException;
|
||||||
|
import kohgylw.kiftd.server.model.Node;
|
||||||
|
import kohgylw.kiftd.server.util.ConfigureReader;
|
||||||
import kohgylw.kiftd.server.util.FileNodeUtil;
|
import kohgylw.kiftd.server.util.FileNodeUtil;
|
||||||
import kohgylw.kiftd.ui.util.FilesTable;
|
import kohgylw.kiftd.ui.util.FilesTable;
|
||||||
import kohgylw.kiftd.util.file_system_manager.FileSystemManager;
|
import kohgylw.kiftd.util.file_system_manager.FileSystemManager;
|
||||||
@ -265,7 +267,7 @@ public class FSViewer extends KiftdDynamicWindow {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// 文件列表的双击监听(进入文件夹)
|
// 文件列表的双击监听(进入文件夹或快速预览文件)
|
||||||
filesTable.addMouseListener(new MouseListener() {
|
filesTable.addMouseListener(new MouseListener() {
|
||||||
@Override
|
@Override
|
||||||
public void mouseReleased(MouseEvent e) {
|
public void mouseReleased(MouseEvent e) {
|
||||||
@ -287,12 +289,54 @@ public class FSViewer extends KiftdDynamicWindow {
|
|||||||
public void mouseClicked(MouseEvent e) {
|
public void mouseClicked(MouseEvent e) {
|
||||||
disableAllButtons();
|
disableAllButtons();
|
||||||
worker.execute(() -> {
|
worker.execute(() -> {
|
||||||
Folder f = filesTable.getDoubleClickFolder(e);
|
Object i = filesTable.getDoubleClickItem(e);
|
||||||
if (f != null) {
|
if (i != null) {
|
||||||
try {
|
if (i instanceof Folder) {
|
||||||
getFolderView(f.getFolderId());
|
// 如果双击文件夹,则进入此文件夹
|
||||||
} catch (Exception e1) {
|
Folder f = (Folder) i;
|
||||||
Printer.instance.print(e.toString());
|
try {
|
||||||
|
getFolderView(f.getFolderId());
|
||||||
|
} catch (Exception e1) {
|
||||||
|
Printer.instance.print(e.toString());
|
||||||
|
}
|
||||||
|
} else if (i instanceof Node) {
|
||||||
|
// 如果双击文件,则将文件导出并打开
|
||||||
|
if (Desktop.isDesktopSupported()) {
|
||||||
|
// 如果支持本地桌面操作,则继续
|
||||||
|
Node n = (Node) i;
|
||||||
|
String tempDir = ConfigureReader.instance().getTemporaryfilePath();
|
||||||
|
// 为要预留的文件创建一个唯一的文件夹
|
||||||
|
File previewDir = new File(tempDir, "preview_" + n.getFileId());
|
||||||
|
if (previewDir.isDirectory() || previewDir.mkdir()) {
|
||||||
|
// 如果有旧文件存留,则先清理
|
||||||
|
File pfOld = new File(previewDir, n.getFileName());
|
||||||
|
if (!pfOld.isFile() || pfOld.delete()) {
|
||||||
|
// 将要预览的文件导出至此文件夹内
|
||||||
|
FSProgressDialog fsd = FSProgressDialog.getNewInstance();
|
||||||
|
Thread t = new Thread(() -> {
|
||||||
|
fsd.show();
|
||||||
|
});
|
||||||
|
t.start();
|
||||||
|
try {
|
||||||
|
boolean exportSuccess = FileSystemManager.getInstance().exportTo(
|
||||||
|
new String[0], new String[] { n.getFileId() }, previewDir, null);
|
||||||
|
fsd.close();
|
||||||
|
if (exportSuccess) {
|
||||||
|
// 如果导出成功,将此文件设置为“只读”并以系统默认方式打开
|
||||||
|
File pf = new File(previewDir, n.getFileName());
|
||||||
|
if (pf.isFile() && pf.setReadOnly()) {
|
||||||
|
Desktop.getDesktop().open(pf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e1) {
|
||||||
|
fsd.close();
|
||||||
|
Printer.instance.print(e1.toString());
|
||||||
|
JOptionPane.showMessageDialog(window, "导出文件时失败,该操作已被中断,未能全部导出。", "错误",
|
||||||
|
JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
enableAllButtons();
|
enableAllButtons();
|
||||||
@ -321,14 +365,8 @@ public class FSViewer extends KiftdDynamicWindow {
|
|||||||
enableAllButtons();
|
enableAllButtons();
|
||||||
});
|
});
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Runnable refreshThread = new Runnable() {
|
Printer.instance.print(e.toString());
|
||||||
@Override
|
refresh();
|
||||||
public void run() {
|
|
||||||
refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
SwingUtilities.invokeLater(refreshThread);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -285,21 +285,24 @@ public class FilesTable extends JTable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* <h2>获取被双击的文件夹</h2>
|
* <h2>获取被双击的项目</h2>
|
||||||
* <p>
|
* <p>
|
||||||
* 该功能用于进入某一文件夹。如果双击的是文件夹,则返回其对象,否则返回null。
|
* 该功能用于获取被双击的元素,可能是文件夹,也可能是文件。
|
||||||
* </p>
|
* </p>
|
||||||
*
|
*
|
||||||
* @author 青阳龙野(kohgylw)
|
* @author 青阳龙野(kohgylw)
|
||||||
* @param e java.awt.event.MouseEvent 鼠标事件
|
* @param e awt鼠标事件。
|
||||||
* @return kohgylw.kiftd.util.file_system_manager.pojo.Folder 被双击的文件夹
|
* @return Object 被双击的项目,如果是文件夹则返回Folder对象,如果是文件则返回Node对象。如果非双击操作则返回null。
|
||||||
*/
|
*/
|
||||||
public Folder getDoubleClickFolder(MouseEvent e) {
|
public Object getDoubleClickItem(MouseEvent e) {
|
||||||
if (e.getClickCount() == 2) {
|
if (e.getClickCount() == 2) {
|
||||||
int row = rowAtPoint(e.getPoint());
|
int row = rowAtPoint(e.getPoint());
|
||||||
if (row >= 0 && row < folders.size()) {
|
if (row >= 0 && row < folders.size()) {
|
||||||
return folders.get(row);
|
return folders.get(row);
|
||||||
}
|
}
|
||||||
|
if (row >= folders.size() && row < folders.size() + files.size()) {
|
||||||
|
return files.get(row - folders.size());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#Generated by Maven Integration for Eclipse
|
#Generated by Maven Integration for Eclipse
|
||||||
#Tue Dec 26 15:14:32 CST 2023
|
#Fri Dec 29 14:14:55 CST 2023
|
||||||
m2e.projectLocation=/Users/kohgylw/Programs/java_workspace/kiftd
|
m2e.projectLocation=/Users/kohgylw/Programs/java_workspace/kiftd
|
||||||
m2e.projectName=kiftd
|
m2e.projectName=kiftd
|
||||||
groupId=kohgylw
|
groupId=kohgylw
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user