From 2793ff696ee0bd7c063d56296ed25a2efca0cd41 Mon Sep 17 00:00:00 2001 From: levi Date: Wed, 2 Nov 2022 12:02:58 +0800 Subject: [PATCH] chore: refactor md --- README.md | 98 ++++++++++++++++++++++++++++++------------ _docs/img/banner.png | Bin 0 -> 14326 bytes _docs/img/ui-demo.png | Bin 0 -> 29451 bytes 3 files changed, 71 insertions(+), 27 deletions(-) create mode 100644 _docs/img/banner.png create mode 100644 _docs/img/ui-demo.png diff --git a/README.md b/README.md index 53e1c06e..1e166403 100644 --- a/README.md +++ b/README.md @@ -2,46 +2,90 @@ [![Codecov](https://codecov.io/gh/monkeyWie/gopeed/branch/main/graph/badge.svg)](https://codecov.io/gh/monkeyWie/gopeed) [![Release](https://img.shields.io/github/release/monkeyWie/gopeed.svg?style=flat-square)](https://github.com/monkeyWie/gopeed/releases) -## gopeed +![](_docs/img/banner.png) -支持多协议(HTTP、BitTorrent)下载的客户端,提供命令行、RESTful API、WebSocket、Go 类库方式来使用。 +## 介绍 + +Gopeed 是一款由`Golang`+`flutter`开发的高速下载器,支持(HTTP、BitTorrent、Magnet)协议下载,并且支持全平台使用。 ## 安装 -```sh -go install github.com/monkeyWie/gopeed +[点击前往](https://github.com/monkeyWie/gopeed/releases/latest) + +### 命令行工具 + +使用`go get`安装: + +```bash +go install github.com/monkeyWie/gopeed/cmd/gopeed ``` -## 示例 +## 界面展示 -可以在本仓库的[\_examples](_examples)目录下查看 +![](_docs/img/ui-demo.png) -## 命令行工具 +## 开发 -### 预览 +本项目分为前端和后端两个部分,前端使用`flutter`,后端使用`Golang`,两边通过`http`协议进行通讯,在 unix 系统下,使用的是`unix socket`,在 windows 系统下,使用的是`tcp`协议。 -![](_docs/img/cli-demo.gif) +> 前端代码位于`ui/flutter`目录下。 -### 下载 +### 克隆项目 -前往[releases](https://github.com/monkeyWie/gopeed/releases)页面 +```bash +git clone git@github.com:monkeyWie/gopeed.git +``` -## TODO +### 环境要求 -- [x] HTTP 下载实现 -- [x] BitTorrent 下载实现 - - [x] .torrent 文件解析 - - [x] tracker 协议实现 - - [x] peer wire protocol 协议实现 - - [x] DHT 协议实现 - - [x] 磁力链接支持 - - [x] uTP 协议实现 -- [x] 下载接口抽象(不关心具体协议) -- [ ] 支持自定义配置 -- [ ] 限速功能实现 -- [x] 命令行工具提供 -- [ ] RESTful 服务提供 +1. Golang 1.9+ +2. Flutter 3.0+ -## 参与 +### 编译 -由于项目目前还未定型,代码可能随时有大的调整,所以暂不接受 PR,当然如果有什么好的想法可以在 issue 区提出来。 +#### 桌面端 + +首先需要按照[flutter desktop 官网文档](https://docs.flutter.dev/development/platform-integration/desktop)进行环境配置,然后需要准备好`cgo`环境,具体可以自行搜索。 + +构建命令: + +- macos + +```bash +go build -tags nosqlite -ldflags="-w -s" -buildmode=c-shared -o bin/libgopeed.dylib github.com/monkeyWie/gopeed/bind/desktop +cd ui/flutter +flutter build macos +``` + +#### 移动端 + +同样的,首先需要把`flutter`环境配置好,具体可以参考官网文档,然后也是需要准备好`cgo`环境,接着安装`gomobile`: + +```bash +go install golang.org/x/mobile/cmd/gomobile@latest +gomobile init +``` + +构建命令: + +- android + +```bash +gomobile bind -tags nosqlite -ldflags="-w -s" -o ui/flutter/android/app/libs/libgopeed.aar -target=android -androidapi 19 -javapkg=com.gopeed github.com/monkeyWie/gopeed/bind/mobile +cd ui/flutter +flutter build apk +``` + +#### Web 端(推荐本地调试使用) + +Web 端直接与后端 http 服务通讯,不需要额外准备环境。 + +构建命令: + +```bash +cd ui/flutter +flutter build web +cd ../../ +cp -r ui/flutter/build/web cmd/web/dist +go build -tags nosqlite,web -ldflags="-s -w" -o bin/ github.com/monkeyWie/gopeed/cmd/web +``` diff --git a/_docs/img/banner.png b/_docs/img/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..988dbd079dae7cbd42734ee204a3d5bffa7c8feb GIT binary patch literal 14326 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 literal 0 HcmV?d00001 diff --git a/_docs/img/ui-demo.png b/_docs/img/ui-demo.png new file mode 100644 index 0000000000000000000000000000000000000000..6620a4593f20024250eb2080f252e558aa707bb7 GIT binary patch literal 29451 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 literal 0 HcmV?d00001