doc/Start/directory.md
pan-ligth
├── demo/ // 在线演示系统模块
├── go.mod
├── LICENSE
├── pan-light.go // 开发时的辅助脚本, 把一些常用的命令集成一起方便使用
├── pan-light.pro // qt 工程文件, 编写qml代码时, 在Qt Creator ide中打开此文件.
├── pan-light.pro.user // 同上
├── pc/ // 客户端模块
├── qt/ // 用来将 qt 绑定到 go 的模块, 这个模块只在开发时运行, 程序跑起来不会运行
├── README.md
└── server/ // 服务端模块
pc
├── dep // 解决包互相依赖的问题, 以及初始化顺序的问题, 这个包不依赖其他包.
│ │ 参照laravel的service provider处理方式, 把包分为注册和初始化2个时机
│ ├── dep.go
│ ├── env-dev.go // 开发环境配置
│ ├── env.go // 全局配置变量, 服务端地址, 版本号等
│ └── env-prod.go // 正式环境配置
├── docker // 存放docker file, 这些容器用来在linux上打windows的包
│ ├── winodws_64_shared
│ │ └── Dockerfile
│ └── winodws_64_static
│ └── Dockerfile
├── downloader // 下载器包
│ ├── download-helper.go // 下载器帮助函数
│ ├── internal // protobuf 原型文件放在这里, 用来将下载状态序列化后持久化到磁盘.
│ │ └── types.proto
│ ├── manager.go // 下载管理器类, 管理所有任务的下载, 暂停, 重启软件后的恢复等
│ ├── segment.go // 分段下载用到的, 下载片段结构体, 记录某片段起始地址, 长度, 已下载完成的长度
│ ├── task.go // 下载任务结构体, 皴法下载链接, 文件保存地址等
│ └── worker.go // 下载工作协程一一对应的结构体, 一个并发对应一个worker, 一个任务中有多个work
├── functions // 这个包用来存放gui端, 也就是qml执行环境调用的函数. 这里一般不会直接实现相应功能, 而是调用其他包的函数实现, 这里只是做了一层封装.
│ ├── base.go // 软件重启, 获取配置等基本操作
│ ├── download.go // 下载模块的接口
│ ├── login.go // 几种登录方式的接口
│ ├── pan-api.go // 百度网盘的API, 获取文件链接, 列出目录下的文件等
│ ├── regitser.go // 用来把上面这些功能注册到qml
│ ├── regitser-plugin.go // plugin模式下的注册
│ └── testing.go
├── go.mod
├── go.sum
├── gui // 和qt打交道的模块, 其他包都不会和qt直接打交道.
│ ├── bridge // 桥接, 连接 qml 环境和 go环境
│ │ ├── api_for_qml.go // 存放上面functions包的map
│ │ └── router.go // 路由, 把qml的调用请求从字符串解析到相应的go函数
│ ├── comp
│ │ ├── BridgeComp.go // qml 原生组件, '继承'qt的c++类实现, 这个类联通了qml和go 2个执行环境
│ ├── gui.go // gui 界面初始化入口
│ ├── gui-plugine.go // plugin 模式下的gui界面初始化入口
│ ├── icon.ico // windows下的图标
│ ├── icon.rc
│ ├── icon_windows.syso
│ ├── qml // 界面描述文件, 也就是qml文件都存放在这里面, 详情在下方
│ │ └──...
│ └── qt-rpc // 存放几个全局变量, 解决包依赖用的
│ └── rpc.go
├── login // 登录功能实现
│ ├── baidu.go // 百度app扫码登录
│ ├── login-http-client.go // 登录用到的http客户端
│ ├── qq.go // qq扫码登录
│ └── wx.go // 微信扫码登录
├── pan-api // 把web版百度网盘提供的http接口转换成go包
│ ├── http-client.go // http客户端
│ ├── login-session.go // 登录会话结构体
│ └── pan-api.go // 调用接口具体实现
├── pan-download // 对于上面download的封装
│ ├── pan-download.go // 封装实现
│ └── video-agent.go // 一个简单的代理, 突破百度防盗链, 是的qt的视频播放器能播放网盘中的视频
├── pan-light-pc-dev.go // 开发模式, 即plugin模式程序入口
├── pan-light-pc.go // 程序main函数
├── server-api // 调用服务端模块的包
│ └── server-api.go
├── storage // 程序状态持久化包
│ ├── state.go // 全局状态结构体
│ ├── types.pb.go // protobuf生成的文件
│ └── types.proto // protobuf 原型文件
└── util // 工具包
├── file.go
└── fn.go
pc/gui/qml
├── assets 静态文件目录
│ └── images // 图片
│ ├── icons // icon图标
│ │ ├── baidu-cloud.svg
│ │ └ ...
│ └── pan-light-1.png
├── comps // 公共组件, js动态创建的组件
│ ├── Alert.qml // 警告弹窗
│ ├── bridge.qml // 和go交互的组件
│ ├── confirm-window.qml // 确认组件
│ ├── DataSaver.qml // 将界面信息, xy坐标等状态自动存盘的组件
│ ├── desktop-widget.qml // 桌面悬浮窗组件
│ ├── dialog.qml // 对话框
│ ├── IconButton.qml // 图标按钮
│ ├── IconFont.qml // 已弃用, 打算使用阿里的Iconfont字体图标
│ ├── loginWebView.qml // 一起用, 打算通过webview来实现网页登录
│ ├── Modal.qml // 忽略, 测试用的mask窗口
│ ├── PromiseDialog.qml // promise话的dialog
│ ├── prompt-window.qml // 用户输入弹框
│ ├── rightClickMenu.qml // 右键按钮通用组件
│ ├── select-save-path.qml // 文件保存路径选择组件
│ ├── timer.qml // 计时器组件, qml未提供setTimeout函数, 通过这个组件实现polyfill
│ └── tool-tip-window.qml // 鼠标选题显示提示的窗口
├── explore // 探索页面
│ ├── explore.qml // 探索页面布局
│ ├── ShareItem.qml // 分享内容展示组件
│ ├── ShareList.qml // 分享列表 list view
│ ├── TagForm.ui.qml // 忽略
│ └── Tag.qml // 分享徽标
├── js // js 文件
│ ├── app.js // 组件全局状态
│ ├── appState.qml // 全局状态组件
│ ├── global.js // 全局变量
│ ├── promise.js // 带进度的promise实现
│ ├── transfer.js // 弃用
│ └── util.js // qml组件调用的工具
├── layout // 界面布局
│ ├── Header.qml // 头部
│ └── Layout.qml // 布局
├── login // 登录方式的界面
│ ├── Baidu.qml
│ ├── FixedWindow.qml // 登录窗口公用组件
│ ├── Login.qml
│ ├── QQ.qml
│ └── Wx.qml
├── main.qml // 界面入口
├── pages // 一些小窗口
│ ├── about-window.qml // 关于窗口
│ ├── feedback-window.qml // 反馈窗口
│ ├── setting-window.qml // 设置窗口
│ └── share-window.qml // 分享交互窗口
├── pan // 我的网盘界面
│ ├── FileIcon.qml // 文件图标组件
│ ├── FileList.qml // 文件列表
│ ├── FileNode.qml // 文件item
│ ├── left-panel // 侧边栏
│ │ ├── DiskUsage.qml
│ │ ├── LeftPanel.qml
│ │ ├── PathCollectionItem.qml
│ │ ├── PathCollection.qml
│ │ └── User.qml
│ ├── LoadDirError.qml
│ ├── pan.qml
│ └── PathNav.qml
├── qml.qrc // xml文件, 组织qml用的
├── transfer
│ ├── DownloadingList.qml
│ ├── DownloadItem.qml
│ ├── DownloadList.qml
│ ├── HeaderBar.qml
│ └── transfer.qml
├── videoPlayer // 视频播放器
│ ├── ButtonImage.qml
│ ├── ControlArea.qml
│ ├── icons
│ │ ├── backward.svg
│ │ ├── forward.svg
│ │ ├── fullscreen.svg
│ │ ├── open-file.svg
│ │ ├── pause.svg
│ │ ├── play.svg
│ │ ├── rotate.svg
│ │ ├── volume-down.svg
│ │ ├── volume-mute.svg
│ │ └── volume-up.svg
│ ├── MPlayer.qml
│ ├── screen.png
│ ├── Tips.qml
│ └── UIComp
│ ├── ActionTips.qml
│ ├── AniIcon.qml
│ ├── ButtonPlay.qml
│ ├── DataSaver.qml
│ ├── ForwardBackward.qml
│ ├── FullScreenButton.qml
│ ├── LoadingTips.qml
│ ├── OpenFileButton.qml
│ ├── PlayIcon.qml
│ ├── PlayRateButton.qml
│ ├── RotateButton.qml
│ ├── TimeSlider.qml
│ ├── TimeText.qml
│ ├── VideoTitle.qml
│ ├── VolumeButton.qml
│ ├── VolumeIcon.qml
│ └── VolumeSlider.qml
└── widget // 其他组件
├── MoveWindow.qml // 鼠标移动窗口支持
├── Resize.qml // 鼠标改变窗口尺寸
├── RightMenu.qml // 右键菜单v2
├── ToolTip.qml
├── TopIndicator.qml // 顶部信息提示
└── VirtualFrame.qml // 虚拟边框
server
├── artisan // 一些不暂时放这的功能 ;)
│ ├── cache // 缓存包
│ │ └── redis.go // redis实现缓存
│ ├── errors.go // 接口错误处理
│ ├── utils.go // 工具函数
│ └── web.go // web 应用特有
├── conf // 配置包
│ ├── conf.go // 配置
│ └── consts.go // 常量
├── dao // 数据库, mongobd
│ ├── feedback.go // 反馈表
│ ├── file-share.go // 文件分享表
│ ├── user.go // 用户表
│ ├── vip.go // 开通vip账号的表
│ └── vip-save-file.go // vip转存文件表
├── go.mod
├── go.sum
├── pan-light-server.go // 服务端入口
├── pan-light-server.yaml // 配置文件
├── pan-viper // vip账号包
│ ├── http-client.go // http 客户端
│ └── vip.go // vip结构体, 提供文件转存功能
├── pc-api // 给客户端调用的api
│ ├── handlers.go // api实现函数
│ ├── middleware // 中间件
│ │ └── pc-jwt.go // jwt auth
│ └── pc-api-router.go // 路由
├── realtime // 实时通信包, 基于websocket
│ ├── room.go // 房间结构体
│ ├── server.go // 实时通信服务器
│ └── session.go // 会话
└── timewheel // 时间轮算法实现
└── timewheel.go
这个模块是基于 therecipe/qt 修改的, 可以访问原项目获取详情, 会用就行