88 "net/http"
99 "strconv"
1010
11+ "github.com/gotd/td/tg"
1112 range_parser "github.com/quantumsheep/range-parser"
1213 "go.uber.org/zap"
1314
@@ -39,10 +40,6 @@ func getStreamRoute(ctx *gin.Context) {
3940 return
4041 }
4142
42- ctx .Header ("Accept-Ranges" , "bytes" )
43- var start , end int64
44- rangeHeader := r .Header .Get ("Range" )
45-
4643 worker := bot .GetNextWorker ()
4744
4845 file , err := utils .FileFromMessage (ctx , worker .Client , messageID )
@@ -62,6 +59,34 @@ func getStreamRoute(ctx *gin.Context) {
6259 return
6360 }
6461
62+ // for photo messages
63+ if file .FileSize == 0 {
64+ res , err := worker .Client .API ().UploadGetFile (ctx , & tg.UploadGetFileRequest {
65+ Location : file .Location ,
66+ Offset : 0 ,
67+ Limit : 1024 * 1024 ,
68+ })
69+ if err != nil {
70+ http .Error (w , err .Error (), http .StatusInternalServerError )
71+ return
72+ }
73+ result , ok := res .(* tg.UploadFile )
74+ if ! ok {
75+ http .Error (w , "unexpected response" , http .StatusInternalServerError )
76+ return
77+ }
78+ fileBytes := result .GetBytes ()
79+ ctx .Header ("Content-Disposition" , fmt .Sprintf ("inline; filename=\" %s\" " , file .FileName ))
80+ if r .Method != "HEAD" {
81+ ctx .Data (http .StatusOK , file .MimeType , fileBytes )
82+ }
83+ return
84+ }
85+
86+ ctx .Header ("Accept-Ranges" , "bytes" )
87+ var start , end int64
88+ rangeHeader := r .Header .Get ("Range" )
89+
6590 if rangeHeader == "" {
6691 start = 0
6792 end = file .FileSize - 1
@@ -98,10 +123,6 @@ func getStreamRoute(ctx *gin.Context) {
98123 ctx .Header ("Content-Disposition" , fmt .Sprintf ("%s; filename=\" %s\" " , disposition , file .FileName ))
99124
100125 if r .Method != "HEAD" {
101- if err != nil {
102- http .Error (w , err .Error (), http .StatusInternalServerError )
103- return
104- }
105126 lr , _ := utils .NewTelegramReader (ctx , worker .Client , file .Location , start , end , contentLength )
106127 if _ , err := io .CopyN (w , lr , contentLength ); err != nil {
107128 log .Error ("Error while copying stream" , zap .Error (err ))
0 commit comments