Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Alderaan
pan-light
提交
b6cddc70
P
pan-light
项目概览
Alderaan
/
pan-light
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
pan-light
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
b6cddc70
编写于
6月 24, 2019
作者:
P
peterq
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add: vip 通道播放视频
上级
54e8fcc0
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
78 addition
and
87 deletion
+78
-87
pc/functions/pan-api.go
pc/functions/pan-api.go
+1
-1
pc/gui/qml/js/util.js
pc/gui/qml/js/util.js
+7
-8
pc/pan-api/http-client.go
pc/pan-api/http-client.go
+34
-15
pc/pan-api/pan-api.go
pc/pan-api/pan-api.go
+1
-20
pc/pan-download/pan-download.go
pc/pan-download/pan-download.go
+28
-5
pc/pan-download/video-agent.go
pc/pan-download/video-agent.go
+7
-37
server/pan-viper/vip.go
server/pan-viper/vip.go
+0
-1
未找到文件。
pc/functions/pan-api.go
浏览文件 @
b6cddc70
...
...
@@ -34,7 +34,7 @@ var panApiAsyncRoutes = map[string]asyncHandler{
},
"pan.link"
:
func
(
p
map
[
string
]
interface
{},
resolve
func
(
interface
{}),
reject
func
(
interface
{}),
progress
func
(
interface
{}),
qmlMsg
chan
interface
{})
{
link
,
err
:=
pan_
api
.
Link
(
fmt
.
Sprint
(
int
(
p
[
"fid"
]
.
(
float64
))
))
link
,
err
:=
pan_
download
.
LinkResolver
(
p
[
"fid"
]
.
(
string
))
if
err
!=
nil
{
reject
(
err
.
Error
())
}
else
{
...
...
pc/gui/qml/js/util.js
浏览文件 @
b6cddc70
...
...
@@ -316,21 +316,21 @@ function isVideo(f){
var
videoAgentLink
=
(
function
(){
var
server
return
function
(
meta
)
{
return
function
(
fid
)
{
if
(
!
server
)
{
server
=
callGoSync
(
'
env.internal_server_url
'
)
console
.
log
(
'
internal url
'
,
JSON
.
stringify
(
server
))
}
return
server
+
'
/videoAgent?fid=
'
+
meta
.
fs_
id
return
server
+
'
/videoAgent?fid=
'
+
f
id
}
})()
function
getFileLink
(
meta
)
{
return
callGoAsync
(
'
pan.link
'
,
{
fid
:
meta
.
fs_id
})
return
callGoAsync
(
'
pan.link
'
,
{
fid
:
'
direct.
'
+
meta
.
fs_id
})
}
function
getFileLinkVip
(
meta
)
{
return
callGoAsync
(
'
pan.link
.vip
'
,
{
fid
:
meta
.
fs_id
})
return
callGoAsync
(
'
pan.link
'
,
{
fid
:
'
vip.
'
+
meta
.
fs_id
})
}
var
playVideo
=
(
function
(){
...
...
@@ -340,11 +340,10 @@ var playVideo = (function(){
if
(
!
ins
||
!
ins
.
playVideo
)
{
ins
=
comp
.
createObject
(
G
.
root
)
}
var
linkPromise
=
(
useVip
?
getFileLinkVip
(
meta
)
:
getFileLink
(
meta
))
var
fid
=
(
useVip
?
'
vip.
'
:
'
direct.
'
)
+
meta
.
fs_id
var
linkPromise
=
callGoAsync
(
'
pan.link
'
,
{
fid
:
fid
})
.
then
(
function
(
link
){
var
agentLink
=
videoAgentLink
(
meta
,
useVip
)
var
agentLink
=
videoAgentLink
(
fid
)
console
.
log
(
'
play link
'
,
agentLink
,
link
)
return
agentLink
})
...
...
pc/pan-api/http-client.go
浏览文件 @
b6cddc70
...
...
@@ -4,6 +4,7 @@ import (
"github.com/pkg/errors"
"io"
"io/ioutil"
"log"
"net/http"
"net/http/cookiejar"
"time"
...
...
@@ -37,23 +38,41 @@ func readHtml(reader io.Reader) string {
return
string
(
html
)
}
var
BaiduUA
=
"netdisk;4.6.2.0;PC;PC-Windows;10.0.10240;WindowsBaiduYunGuanJia"
type
tBin
[]
byte
type
tJson
map
[
string
]
interface
{}
func
VideoProxy
(
writer
http
.
ResponseWriter
,
request
*
http
.
Request
,
targetLink
string
)
{
myReq
:=
newRequest
(
"GET"
,
targetLink
)
type
linkTime
struct
{
link
string
time
time
.
Time
}
for
k
,
vs
:=
range
request
.
Header
{
if
k
==
"Referer"
{
continue
}
for
_
,
h
:=
range
vs
{
//log.Println(k, h)
myReq
.
Header
.
Add
(
k
,
h
)
}
}
//log.Println("-----------------")
myReq
.
Header
.
Set
(
"user-agent"
,
BaiduUA
)
func
(
l
*
linkTime
)
expired
()
bool
{
return
false
resp
,
err
:=
httpClient
.
Do
(
myReq
)
if
err
!=
nil
{
log
.
Println
(
err
)
return
}
for
k
,
vs
:=
range
resp
.
Header
{
if
k
==
"Content-Disposition"
{
continue
}
for
_
,
h
:=
range
vs
{
//log.Println(k, h)
writer
.
Header
()
.
Add
(
k
,
h
)
}
writer
.
Header
()
.
Set
(
"Connection"
,
"close"
)
}
writer
.
WriteHeader
(
resp
.
StatusCode
)
io
.
Copy
(
writer
,
resp
.
Body
)
}
type
fidLinks
struct
{
direct
*
linkTime
vip
*
linkTime
}
var
BaiduUA
=
"netdisk;4.6.2.0;PC;PC-Windows;10.0.10240;WindowsBaiduYunGuanJia"
var
linkCacheMap
=
map
[
string
]
fidLinks
{}
type
tBin
[]
byte
type
tJson
map
[
string
]
interface
{}
pc/pan-api/pan-api.go
浏览文件 @
b6cddc70
...
...
@@ -172,15 +172,7 @@ func ListDir(path string) (list interface{}, err error) {
}
// 链接解析
func
Link
(
fid
string
)
(
link
string
,
err
error
)
{
if
c
,
ok
:=
linkCacheMap
[
fid
];
!
ok
{
linkCacheMap
[
fid
]
=
fidLinks
{}
}
else
{
if
c
.
direct
!=
nil
&&
!
c
.
direct
.
expired
()
{
return
c
.
direct
.
link
,
nil
}
}
func
LinkDirect
(
fid
string
)
(
link
string
,
err
error
)
{
req
:=
newRequest
(
"GET"
,
"dlink"
)
params
:=
map
[
string
]
interface
{}{
...
...
@@ -217,17 +209,6 @@ func Link(fid string) (link string, err error) {
}
link
=
data
[
"dlink"
]
.
([]
interface
{})[
0
]
.
(
map
[
string
]
interface
{})[
"dlink"
]
.
(
string
)
link
=
getRedirectedLink
(
link
)
linkCacheMap
[
fid
]
=
fidLinks
{
direct
:
&
linkTime
{
link
:
link
,
time
:
time
.
Now
(),
},
}
return
}
// vip 转存解析
func
linkByVip
()
(
link
string
,
err
error
)
{
return
}
...
...
pc/pan-download/pan-download.go
浏览文件 @
b6cddc70
...
...
@@ -28,7 +28,7 @@ func init() {
CoroutineNumber
:
32
,
SegmentSize
:
1024
*
1024
*
2
,
WroteToDiskBufferSize
:
1024
*
512
,
LinkResolver
:
l
inkResolver
,
LinkResolver
:
L
inkResolver
,
HttpClient
:
&
http
.
Client
{
Transport
:
&
http
.
Transport
{
MaxIdleConns
:
parallel
,
...
...
@@ -50,8 +50,31 @@ func Manager() *downloader.Manager {
return
manager
}
func
linkResolver
(
fileId
string
)
(
link
string
,
err
error
)
{
log
.
Println
(
fileId
)
type
linkTime
struct
{
link
string
time
time
.
Time
}
func
(
l
*
linkTime
)
expired
()
bool
{
return
time
.
Now
()
.
Sub
(
l
.
time
)
>
time
.
Hour
}
var
linkCacheMap
=
map
[
string
]
linkTime
{}
func
LinkResolver
(
fileId
string
)
(
link
string
,
err
error
)
{
if
c
,
ok
:=
linkCacheMap
[
fileId
];
ok
{
if
!
c
.
expired
()
{
return
c
.
link
,
nil
}
}
defer
func
()
{
if
err
==
nil
&&
link
!=
""
{
linkCacheMap
[
fileId
]
=
linkTime
{
link
:
link
,
time
:
time
.
Now
(),
}
}
}()
defer
func
()
{
if
e
:=
recover
();
e
!=
nil
{
err
=
errors
.
New
(
"链接解析严重错误: "
+
fmt
.
Sprint
(
e
))
...
...
@@ -62,7 +85,7 @@ func linkResolver(fileId string) (link string, err error) {
case
"vip"
:
return
vipLink
(
args
[
1
])
case
"direct"
:
return
pan_api
.
Link
(
args
[
1
])
return
pan_api
.
Link
Direct
(
args
[
1
])
case
"share"
:
fileSize
,
_
:=
strconv
.
ParseInt
(
args
[
3
],
10
,
64
)
return
VipLinkByMd5
(
args
[
1
],
args
[
2
],
fileSize
)
...
...
@@ -108,7 +131,7 @@ func DownloadFile(fid, savePath string) (taskId downloader.TaskId, err error) {
}
func
RapidUploadMd5
(
fid
string
)
(
md5
,
sliceMd5
string
,
fileSize
int64
,
err
error
)
{
link
,
err
:=
pan_api
.
Link
(
fid
)
link
,
err
:=
pan_api
.
Link
Direct
(
fid
)
if
err
!=
nil
{
err
=
errors
.
Wrap
(
err
,
"解析直链错误"
)
return
...
...
pc/pan-
api
/video-agent.go
→
pc/pan-
download
/video-agent.go
浏览文件 @
b6cddc70
package
pan_
api
package
pan_
download
import
(
"fmt"
"github.com/peterq/pan-light/pc/dep"
"github.com/peterq/pan-light/pc/pan-api"
"github.com/peterq/pan-light/pc/storage"
"io"
"log"
"net"
"net/http"
...
...
@@ -63,41 +63,11 @@ func startAgentServer() {
}
func
videoAgent
(
writer
http
.
ResponseWriter
,
request
*
http
.
Request
)
{
if
ca
,
ok
:=
linkCacheMap
[
request
.
URL
.
Query
()
.
Get
(
"fid"
)];
ok
{
lt
:=
ca
.
direct
myReq
:=
newRequest
(
"GET"
,
lt
.
link
)
for
k
,
vs
:=
range
request
.
Header
{
if
k
==
"Referer"
{
continue
}
for
_
,
h
:=
range
vs
{
//log.Println(k, h)
myReq
.
Header
.
Add
(
k
,
h
)
}
}
//log.Println("-----------------")
myReq
.
Header
.
Set
(
"user-agent"
,
BaiduUA
)
resp
,
err
:=
httpClient
.
Do
(
myReq
)
if
err
!=
nil
{
log
.
Println
(
err
)
return
}
for
k
,
vs
:=
range
resp
.
Header
{
if
k
==
"Content-Disposition"
{
continue
}
for
_
,
h
:=
range
vs
{
//log.Println(k, h)
writer
.
Header
()
.
Add
(
k
,
h
)
}
writer
.
Header
()
.
Set
(
"Connection"
,
"close"
)
}
writer
.
WriteHeader
(
resp
.
StatusCode
)
io
.
Copy
(
writer
,
resp
.
Body
)
}
else
{
link
,
err
:=
LinkResolver
(
request
.
URL
.
Query
()
.
Get
(
"fid"
))
if
err
!=
nil
{
writer
.
WriteHeader
(
500
)
log
.
Println
(
err
)
return
}
pan_api
.
VideoProxy
(
writer
,
request
,
link
)
}
server/pan-viper/vip.go
浏览文件 @
b6cddc70
...
...
@@ -287,7 +287,6 @@ func (v *Vip) getRedirectedLink(link string) string {
log
.
Println
(
err
)
}
end
:=
resp
.
Request
.
URL
.
String
()
log
.
Println
(
end
)
resp
.
Body
.
Close
()
return
end
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录