TransparentLC / cloud-clipboard

在局域网内自用的在线剪贴板,支持传输纯文本和文件
https://try-clipboard.akarin.dev/
MIT License
310 stars 48 forks source link

新功能建议 #23

Closed TY88351 closed 1 year ago

TY88351 commented 1 year ago

建议增加房间的功能,这样使用起来更加方便。也就是用户可以设定一个密码进入房间,使得共享的文本和文件仅房间内有效。可以进入网页后默认保持现在这种全局模式,点击某个按钮后可以输入密码进入房间,房间名可以随机产生一个而不用用户输入,这样新增的页面会少一些,进入房间模式后可以有个按钮点击退出房间模式,房间可以设定指定时间后自动清除,然后房间内的文件即便没有过期也自动清除。

TY88351 commented 1 year ago

房间失效时间可以在配置文件中设定为固定的,不用用户输入

TransparentLC commented 1 year ago

你说的实际上是打算把这个项目当成一个公用的服务来部署,但是我一开始写这个项目只是为了个人在局域网里自己使用,所以并没有考虑这方面的设计和扩展(甚至除了上传的文件本身也没有任何数据持久化的设计,还是最近有人需要才加了个历史记录保存)。如果要写的话大概会是一次较大规模的重写(比如顺便把这堆 Vue 2 的前端资源换成 Vue 3 的),但是有没有这样的精力嘛……

(另外其实分房间的话就不需要再重复设计密码和保留全局房间了)

TY88351 commented 1 year ago

你的邮件我已收到。

TY88351 commented 1 year ago

我认为只需要改动很小就可以实现这样的功能。我的设想是这样的,前端里定义一个初值为空的全局变量,添加一个前端按钮,点击后利用浏览器的Prompt输入一个字符串,然后赋值给这个全局变量,再添加一个按钮用于将这个字符串清空。再通过push接口获取文件的时候,服务端判断一下这个key有没有对应的文件列表,然后返回这些文件列表名,如果请求没有提交这个字符串,就默认返回所有文件,这需要提交文件的时候同时判断有没有提交这个全局变量作为key,没有就放到全局文件的列表里。软件如果重启可以把所有文件都当做全局文件,虽然不太好,不过也可以,毕竟重启概率很小,其次实际下载文件的时候都不需要做鉴权,因为本身就是局域网。想到这个功能是因为在局域网内不仅仅是一个人,有时候会碰到多个人在使用,但是共享的文件又不一样别人看到

TY88351 commented 1 year ago

另外你提到的v2换成v3是因为什么不太了解,目前来看前端使用体验不错,换成v3的是不是有些不必要?保留全局房间我的想法是,对于大多数文件来说全局共享就ok了,需要进去房间模式共享的才是少数。因此保留全局模式可以减少使用者输入密码的次数,体验可能会好一些

TY88351 commented 1 year ago

我会些js,如果需要我可以加入

TransparentLC commented 1 year ago

因为还要稍微在 WebSocket 那边改一些东西所以就自己来改了(

大概就做成这样,现在右上角多了这个选择房间的按钮,点击之后可以设定当前的房间名称(可以点击那个骰子随机 roll 一个),在一个房间内发送的内容只能在当前房间看到,其他房间是看不到的,应该可以满足你的需求了。为了方便起见点击左上角的房间名称可以复制,进入房间之后当前使用的房间名称也会保存到 localStorage,刷新之后仍然会进入这个房间。

因为只是添加了一个字段,所以“房间可以设定指定时间后自动清除”、“房间内的文件即便没有过期也自动清除”这种额外的处理就没有打算做了,文件自动过期的时间仍然按照 config 的设定,所有房间的消息总和不超过 config 设定的历史记录数量限制(也就是说一个房间的消息太多可能会把其他房间的消息顶掉,但是每个房间单独使用一条队列的话还要改一堆东西,摸了)。

写入 history 的时候,每个消息所在的房间也会被一起写入,这样就没有“软件如果重启可以把所有文件都当做全局文件”的问题了。

可以先试用一下,看看有没有什么 bug。

TY88351 commented 1 year ago

初步用了一下功能没问题,bug的话暂时没发现👍