diff --git a/download.go b/download.go index 28cc88d..3a6cb3b 100644 --- a/download.go +++ b/download.go @@ -119,7 +119,7 @@ func (this *downloadEnv) RunDownload(req RunDownload_Req) (resp RunDownload_Resp } } if req.RemoteName && req.FileName == "" { - req.FileName = getFileName(req.M3u8Url) + req.FileName = GetFileNameFromUrl(req.M3u8Url) } if req.FileName == "" { req.FileName = "all" @@ -677,14 +677,15 @@ func (this *downloadEnv) GetIsCancel() bool { } } -func getFileName(u string) string { - url, err := url.Parse(u) - if err != nil { - return "" +func GetFileNameFromUrl(u string) string { + urlObj, err := url.Parse(u) + if err != nil || urlObj.Scheme == "" { + return "all" } - name := path.Base(url.Path) - if strings.HasSuffix(name, ".m3u8") { - return name[:len(name)-5] + name := path.Base(urlObj.Path) + ext := path.Ext(name) + if len(name) > len(ext) { + return strings.TrimSuffix(name, ext) } return name } diff --git a/download_test.go b/download_test.go index c36decb..d64afd0 100644 --- a/download_test.go +++ b/download_test.go @@ -106,15 +106,15 @@ func TestGetFileName(t *testing.T) { u2 := "https://example.com/video.m3u8?query=1" u3 := "https://example.com/video-name" - if getFileName(u1) != "video" { + if GetFileNameFromUrl(u1) != "video" { t.Fail() } - if getFileName(u2) != "video" { + if GetFileNameFromUrl(u2) != "video" { t.Fail() } - if getFileName(u3) != "video-name" { + if GetFileNameFromUrl(u3) != "video-name" { t.Fail() } } diff --git a/export/main.go b/export/main.go index 2a92c49..9795705 100644 --- a/export/main.go +++ b/export/main.go @@ -19,7 +19,7 @@ func main() { if os.Getenv("GITHUB_ACTIONS") == "" { // 本地编译 CreateLibForQtUi("amd64-static") // 创建Qt需要使用的.a库文件 WriteVersionDotRc("1.5.6") - } else { // github actions 编译 + } else { // github actions 编译 if runtime.GOOS == "darwin" { // 编译darwin版本的dmg CreateLibForQtUi("amd64-shared") } else { // 编译windows版本的exe @@ -94,6 +94,7 @@ func CreateLibForQtUi(mode string) { ctx.Generate1(m3u8d.GetWd) ctx.Generate1(m3u8d.ParseCurlStr) ctx.Generate1(m3u8d.RunDownload_Req_ToCurlStr) + ctx.Generate1(m3u8d.GetFileNameFromUrl) if mode == "amd64-static" { ctx.MustCreateAmd64LibraryInDir("m3u8d-qt") } else if mode == "386-static" { diff --git a/m3u8d-qt/m3u8d.cpp b/m3u8d-qt/m3u8d.cpp index 6c135b8..3ce006c 100644 --- a/m3u8d-qt/m3u8d.cpp +++ b/m3u8d-qt/m3u8d.cpp @@ -75,6 +75,7 @@ extern __declspec(dllexport) void Go2cppFn_GetProgress(char* in, int inLen, char extern __declspec(dllexport) void Go2cppFn_GetWd(char* in, int inLen, char** out, int* outLen); extern __declspec(dllexport) void Go2cppFn_ParseCurlStr(char* in, int inLen, char** out, int* outLen); extern __declspec(dllexport) void Go2cppFn_RunDownload_Req_ToCurlStr(char* in, int inLen, char** out, int* outLen); +extern __declspec(dllexport) void Go2cppFn_GetFileNameFromUrl(char* in, int inLen, char** out, int* outLen); #ifdef __cplusplus } @@ -85,97 +86,99 @@ RunDownload_Resp RunDownload(RunDownload_Req in0){ std::string in; { { - uint32_t tmp34 = in0.M3u8Url.length(); - char tmp35[4]; - tmp35[0] = (uint32_t(tmp34) >> 24) & 0xFF; - tmp35[1] = (uint32_t(tmp34) >> 16) & 0xFF; - tmp35[2] = (uint32_t(tmp34) >> 8) & 0xFF; - tmp35[3] = (uint32_t(tmp34) >> 0) & 0xFF; - in.append(tmp35, 4); - in.append(in0.M3u8Url); - } - in.append((char*)(&in0.Insecure), 1); - { - uint32_t tmp36 = in0.SaveDir.length(); + uint32_t tmp36 = in0.M3u8Url.length(); char tmp37[4]; tmp37[0] = (uint32_t(tmp36) >> 24) & 0xFF; tmp37[1] = (uint32_t(tmp36) >> 16) & 0xFF; tmp37[2] = (uint32_t(tmp36) >> 8) & 0xFF; tmp37[3] = (uint32_t(tmp36) >> 0) & 0xFF; in.append(tmp37, 4); - in.append(in0.SaveDir); + in.append(in0.M3u8Url); } + in.append((char*)(&in0.Insecure), 1); { - uint32_t tmp38 = in0.FileName.length(); + uint32_t tmp38 = in0.SaveDir.length(); char tmp39[4]; tmp39[0] = (uint32_t(tmp38) >> 24) & 0xFF; tmp39[1] = (uint32_t(tmp38) >> 16) & 0xFF; tmp39[2] = (uint32_t(tmp38) >> 8) & 0xFF; tmp39[3] = (uint32_t(tmp38) >> 0) & 0xFF; in.append(tmp39, 4); + in.append(in0.SaveDir); + } + { + uint32_t tmp40 = in0.FileName.length(); + char tmp41[4]; + tmp41[0] = (uint32_t(tmp40) >> 24) & 0xFF; + tmp41[1] = (uint32_t(tmp40) >> 16) & 0xFF; + tmp41[2] = (uint32_t(tmp40) >> 8) & 0xFF; + tmp41[3] = (uint32_t(tmp40) >> 0) & 0xFF; + in.append(tmp41, 4); in.append(in0.FileName); } + in.append((char*)(&in0.RemoteName), 1); { - char tmp40[4]; - tmp40[0] = (uint32_t(in0.SkipTsCountFromHead) >> 24) & 0xFF; - tmp40[1] = (uint32_t(in0.SkipTsCountFromHead) >> 16) & 0xFF; - tmp40[2] = (uint32_t(in0.SkipTsCountFromHead) >> 8) & 0xFF; - tmp40[3] = (uint32_t(in0.SkipTsCountFromHead) >> 0) & 0xFF; - in.append(tmp40, 4); - } - { - uint32_t tmp41 = in0.SetProxy.length(); char tmp42[4]; - tmp42[0] = (uint32_t(tmp41) >> 24) & 0xFF; - tmp42[1] = (uint32_t(tmp41) >> 16) & 0xFF; - tmp42[2] = (uint32_t(tmp41) >> 8) & 0xFF; - tmp42[3] = (uint32_t(tmp41) >> 0) & 0xFF; + tmp42[0] = (uint32_t(in0.SkipTsCountFromHead) >> 24) & 0xFF; + tmp42[1] = (uint32_t(in0.SkipTsCountFromHead) >> 16) & 0xFF; + tmp42[2] = (uint32_t(in0.SkipTsCountFromHead) >> 8) & 0xFF; + tmp42[3] = (uint32_t(in0.SkipTsCountFromHead) >> 0) & 0xFF; in.append(tmp42, 4); - in.append(in0.SetProxy); } { - uint32_t tmp43 = in0.HeaderMap.size(); + uint32_t tmp43 = in0.SetProxy.length(); char tmp44[4]; tmp44[0] = (uint32_t(tmp43) >> 24) & 0xFF; tmp44[1] = (uint32_t(tmp43) >> 16) & 0xFF; tmp44[2] = (uint32_t(tmp43) >> 8) & 0xFF; tmp44[3] = (uint32_t(tmp43) >> 0) & 0xFF; in.append(tmp44, 4); - for(std::map>::iterator tmp45 = in0.HeaderMap.begin(); tmp45 != in0.HeaderMap.end(); ++tmp45) { + in.append(in0.SetProxy); + } + { + uint32_t tmp45 = in0.HeaderMap.size(); + char tmp46[4]; + tmp46[0] = (uint32_t(tmp45) >> 24) & 0xFF; + tmp46[1] = (uint32_t(tmp45) >> 16) & 0xFF; + tmp46[2] = (uint32_t(tmp45) >> 8) & 0xFF; + tmp46[3] = (uint32_t(tmp45) >> 0) & 0xFF; + in.append(tmp46, 4); + for(std::map>::iterator tmp47 = in0.HeaderMap.begin(); tmp47 != in0.HeaderMap.end(); ++tmp47) { { - uint32_t tmp46 = tmp45->first.length(); - char tmp47[4]; - tmp47[0] = (uint32_t(tmp46) >> 24) & 0xFF; - tmp47[1] = (uint32_t(tmp46) >> 16) & 0xFF; - tmp47[2] = (uint32_t(tmp46) >> 8) & 0xFF; - tmp47[3] = (uint32_t(tmp46) >> 0) & 0xFF; - in.append(tmp47, 4); - in.append(tmp45->first); - } - { - uint32_t tmp48 = tmp45->second.size(); + uint32_t tmp48 = tmp47->first.length(); char tmp49[4]; tmp49[0] = (uint32_t(tmp48) >> 24) & 0xFF; tmp49[1] = (uint32_t(tmp48) >> 16) & 0xFF; tmp49[2] = (uint32_t(tmp48) >> 8) & 0xFF; tmp49[3] = (uint32_t(tmp48) >> 0) & 0xFF; in.append(tmp49, 4); - for (uint32_t tmp50=0; tmp50 < tmp48; ++tmp50) { + in.append(tmp47->first); + } + { + uint32_t tmp50 = tmp47->second.size(); + char tmp51[4]; + tmp51[0] = (uint32_t(tmp50) >> 24) & 0xFF; + tmp51[1] = (uint32_t(tmp50) >> 16) & 0xFF; + tmp51[2] = (uint32_t(tmp50) >> 8) & 0xFF; + tmp51[3] = (uint32_t(tmp50) >> 0) & 0xFF; + in.append(tmp51, 4); + for (uint32_t tmp52=0; tmp52 < tmp50; ++tmp52) { { - uint32_t tmp51 = tmp45->second[tmp50].length(); - char tmp52[4]; - tmp52[0] = (uint32_t(tmp51) >> 24) & 0xFF; - tmp52[1] = (uint32_t(tmp51) >> 16) & 0xFF; - tmp52[2] = (uint32_t(tmp51) >> 8) & 0xFF; - tmp52[3] = (uint32_t(tmp51) >> 0) & 0xFF; - in.append(tmp52, 4); - in.append(tmp45->second[tmp50]); + uint32_t tmp53 = tmp47->second[tmp52].length(); + char tmp54[4]; + tmp54[0] = (uint32_t(tmp53) >> 24) & 0xFF; + tmp54[1] = (uint32_t(tmp53) >> 16) & 0xFF; + tmp54[2] = (uint32_t(tmp53) >> 8) & 0xFF; + tmp54[3] = (uint32_t(tmp53) >> 0) & 0xFF; + in.append(tmp54, 4); + in.append(tmp47->second[tmp52]); } } } } } in.append((char*)(&in0.SkipRemoveTs), 1); + in.append((char*)(&in0.ProgressBarShow), 1); } char *out = NULL; int outLen = 0; @@ -184,30 +187,30 @@ RunDownload_Resp RunDownload(RunDownload_Req in0){ int outIdx = 0; { { - uint32_t tmp53 = 0; - uint32_t tmp54 = uint32_t(uint8_t(out[outIdx+0]) << 24); - uint32_t tmp55 = uint32_t(uint8_t(out[outIdx+1]) << 16); - uint32_t tmp56 = uint32_t(uint8_t(out[outIdx+2]) << 8); - uint32_t tmp57 = uint32_t(uint8_t(out[outIdx+3]) << 0); - tmp53 = tmp54 | tmp55 | tmp56 | tmp57; + uint32_t tmp55 = 0; + uint32_t tmp56 = uint32_t(uint8_t(out[outIdx+0]) << 24); + uint32_t tmp57 = uint32_t(uint8_t(out[outIdx+1]) << 16); + uint32_t tmp58 = uint32_t(uint8_t(out[outIdx+2]) << 8); + uint32_t tmp59 = uint32_t(uint8_t(out[outIdx+3]) << 0); + tmp55 = tmp56 | tmp57 | tmp58 | tmp59; outIdx+=4; - retValue.ErrMsg = std::string(out+outIdx, out+outIdx+tmp53); - outIdx+=tmp53; + retValue.ErrMsg = std::string(out+outIdx, out+outIdx+tmp55); + outIdx+=tmp55; } retValue.IsSkipped = (bool) out[outIdx]; outIdx++; retValue.IsCancel = (bool) out[outIdx]; outIdx++; { - uint32_t tmp58 = 0; - uint32_t tmp59 = uint32_t(uint8_t(out[outIdx+0]) << 24); - uint32_t tmp60 = uint32_t(uint8_t(out[outIdx+1]) << 16); - uint32_t tmp61 = uint32_t(uint8_t(out[outIdx+2]) << 8); - uint32_t tmp62 = uint32_t(uint8_t(out[outIdx+3]) << 0); - tmp58 = tmp59 | tmp60 | tmp61 | tmp62; + uint32_t tmp60 = 0; + uint32_t tmp61 = uint32_t(uint8_t(out[outIdx+0]) << 24); + uint32_t tmp62 = uint32_t(uint8_t(out[outIdx+1]) << 16); + uint32_t tmp63 = uint32_t(uint8_t(out[outIdx+2]) << 8); + uint32_t tmp64 = uint32_t(uint8_t(out[outIdx+3]) << 0); + tmp60 = tmp61 | tmp62 | tmp63 | tmp64; outIdx+=4; - retValue.SaveFileTo = std::string(out+outIdx, out+outIdx+tmp58); - outIdx+=tmp58; + retValue.SaveFileTo = std::string(out+outIdx, out+outIdx+tmp60); + outIdx+=tmp60; } } if (out != NULL) { @@ -298,13 +301,13 @@ std::string GetWd(){ ParseCurl_Resp ParseCurlStr(std::string in0){ std::string in; { - uint32_t tmp19 = in0.length(); - char tmp20[4]; - tmp20[0] = (uint32_t(tmp19) >> 24) & 0xFF; - tmp20[1] = (uint32_t(tmp19) >> 16) & 0xFF; - tmp20[2] = (uint32_t(tmp19) >> 8) & 0xFF; - tmp20[3] = (uint32_t(tmp19) >> 0) & 0xFF; - in.append(tmp20, 4); + uint32_t tmp21 = in0.length(); + char tmp22[4]; + tmp22[0] = (uint32_t(tmp21) >> 24) & 0xFF; + tmp22[1] = (uint32_t(tmp21) >> 16) & 0xFF; + tmp22[2] = (uint32_t(tmp21) >> 8) & 0xFF; + tmp22[3] = (uint32_t(tmp21) >> 0) & 0xFF; + in.append(tmp22, 4); in.append(in0); } char *out = NULL; @@ -314,122 +317,126 @@ ParseCurl_Resp ParseCurlStr(std::string in0){ int outIdx = 0; { { - uint32_t tmp21 = 0; - uint32_t tmp22 = uint32_t(uint8_t(out[outIdx+0]) << 24); - uint32_t tmp23 = uint32_t(uint8_t(out[outIdx+1]) << 16); - uint32_t tmp24 = uint32_t(uint8_t(out[outIdx+2]) << 8); - uint32_t tmp25 = uint32_t(uint8_t(out[outIdx+3]) << 0); - tmp21 = tmp22 | tmp23 | tmp24 | tmp25; + uint32_t tmp23 = 0; + uint32_t tmp24 = uint32_t(uint8_t(out[outIdx+0]) << 24); + uint32_t tmp25 = uint32_t(uint8_t(out[outIdx+1]) << 16); + uint32_t tmp26 = uint32_t(uint8_t(out[outIdx+2]) << 8); + uint32_t tmp27 = uint32_t(uint8_t(out[outIdx+3]) << 0); + tmp23 = tmp24 | tmp25 | tmp26 | tmp27; outIdx+=4; - retValue.ErrMsg = std::string(out+outIdx, out+outIdx+tmp21); - outIdx+=tmp21; + retValue.ErrMsg = std::string(out+outIdx, out+outIdx+tmp23); + outIdx+=tmp23; } { { - uint32_t tmp26 = 0; - uint32_t tmp27 = uint32_t(uint8_t(out[outIdx+0]) << 24); - uint32_t tmp28 = uint32_t(uint8_t(out[outIdx+1]) << 16); - uint32_t tmp29 = uint32_t(uint8_t(out[outIdx+2]) << 8); - uint32_t tmp30 = uint32_t(uint8_t(out[outIdx+3]) << 0); - tmp26 = tmp27 | tmp28 | tmp29 | tmp30; + uint32_t tmp28 = 0; + uint32_t tmp29 = uint32_t(uint8_t(out[outIdx+0]) << 24); + uint32_t tmp30 = uint32_t(uint8_t(out[outIdx+1]) << 16); + uint32_t tmp31 = uint32_t(uint8_t(out[outIdx+2]) << 8); + uint32_t tmp32 = uint32_t(uint8_t(out[outIdx+3]) << 0); + tmp28 = tmp29 | tmp30 | tmp31 | tmp32; outIdx+=4; - retValue.DownloadReq.M3u8Url = std::string(out+outIdx, out+outIdx+tmp26); - outIdx+=tmp26; + retValue.DownloadReq.M3u8Url = std::string(out+outIdx, out+outIdx+tmp28); + outIdx+=tmp28; } retValue.DownloadReq.Insecure = (bool) out[outIdx]; outIdx++; { - uint32_t tmp31 = 0; - uint32_t tmp32 = uint32_t(uint8_t(out[outIdx+0]) << 24); - uint32_t tmp33 = uint32_t(uint8_t(out[outIdx+1]) << 16); - uint32_t tmp34 = uint32_t(uint8_t(out[outIdx+2]) << 8); - uint32_t tmp35 = uint32_t(uint8_t(out[outIdx+3]) << 0); - tmp31 = tmp32 | tmp33 | tmp34 | tmp35; + uint32_t tmp33 = 0; + uint32_t tmp34 = uint32_t(uint8_t(out[outIdx+0]) << 24); + uint32_t tmp35 = uint32_t(uint8_t(out[outIdx+1]) << 16); + uint32_t tmp36 = uint32_t(uint8_t(out[outIdx+2]) << 8); + uint32_t tmp37 = uint32_t(uint8_t(out[outIdx+3]) << 0); + tmp33 = tmp34 | tmp35 | tmp36 | tmp37; outIdx+=4; - retValue.DownloadReq.SaveDir = std::string(out+outIdx, out+outIdx+tmp31); - outIdx+=tmp31; + retValue.DownloadReq.SaveDir = std::string(out+outIdx, out+outIdx+tmp33); + outIdx+=tmp33; } { - uint32_t tmp36 = 0; - uint32_t tmp37 = uint32_t(uint8_t(out[outIdx+0]) << 24); - uint32_t tmp38 = uint32_t(uint8_t(out[outIdx+1]) << 16); - uint32_t tmp39 = uint32_t(uint8_t(out[outIdx+2]) << 8); - uint32_t tmp40 = uint32_t(uint8_t(out[outIdx+3]) << 0); - tmp36 = tmp37 | tmp38 | tmp39 | tmp40; + uint32_t tmp38 = 0; + uint32_t tmp39 = uint32_t(uint8_t(out[outIdx+0]) << 24); + uint32_t tmp40 = uint32_t(uint8_t(out[outIdx+1]) << 16); + uint32_t tmp41 = uint32_t(uint8_t(out[outIdx+2]) << 8); + uint32_t tmp42 = uint32_t(uint8_t(out[outIdx+3]) << 0); + tmp38 = tmp39 | tmp40 | tmp41 | tmp42; outIdx+=4; - retValue.DownloadReq.FileName = std::string(out+outIdx, out+outIdx+tmp36); - outIdx+=tmp36; + retValue.DownloadReq.FileName = std::string(out+outIdx, out+outIdx+tmp38); + outIdx+=tmp38; } + retValue.DownloadReq.RemoteName = (bool) out[outIdx]; + outIdx++; { - uint32_t tmp41 = uint32_t(uint8_t(out[outIdx+0]) << 24); - uint32_t tmp42 = uint32_t(uint8_t(out[outIdx+1]) << 16); - uint32_t tmp43 = uint32_t(uint8_t(out[outIdx+2]) << 8); - uint32_t tmp44 = uint32_t(uint8_t(out[outIdx+3]) << 0); - retValue.DownloadReq.SkipTsCountFromHead = tmp41 | tmp42 | tmp43 | tmp44; + uint32_t tmp43 = uint32_t(uint8_t(out[outIdx+0]) << 24); + uint32_t tmp44 = uint32_t(uint8_t(out[outIdx+1]) << 16); + uint32_t tmp45 = uint32_t(uint8_t(out[outIdx+2]) << 8); + uint32_t tmp46 = uint32_t(uint8_t(out[outIdx+3]) << 0); + retValue.DownloadReq.SkipTsCountFromHead = tmp43 | tmp44 | tmp45 | tmp46; outIdx+=4; } { - uint32_t tmp45 = 0; - uint32_t tmp46 = uint32_t(uint8_t(out[outIdx+0]) << 24); - uint32_t tmp47 = uint32_t(uint8_t(out[outIdx+1]) << 16); - uint32_t tmp48 = uint32_t(uint8_t(out[outIdx+2]) << 8); - uint32_t tmp49 = uint32_t(uint8_t(out[outIdx+3]) << 0); - tmp45 = tmp46 | tmp47 | tmp48 | tmp49; + uint32_t tmp47 = 0; + uint32_t tmp48 = uint32_t(uint8_t(out[outIdx+0]) << 24); + uint32_t tmp49 = uint32_t(uint8_t(out[outIdx+1]) << 16); + uint32_t tmp50 = uint32_t(uint8_t(out[outIdx+2]) << 8); + uint32_t tmp51 = uint32_t(uint8_t(out[outIdx+3]) << 0); + tmp47 = tmp48 | tmp49 | tmp50 | tmp51; outIdx+=4; - retValue.DownloadReq.SetProxy = std::string(out+outIdx, out+outIdx+tmp45); - outIdx+=tmp45; + retValue.DownloadReq.SetProxy = std::string(out+outIdx, out+outIdx+tmp47); + outIdx+=tmp47; } { - uint32_t tmp50 = 0; - uint32_t tmp51 = uint32_t(uint8_t(out[outIdx+0]) << 24); - uint32_t tmp52 = uint32_t(uint8_t(out[outIdx+1]) << 16); - uint32_t tmp53 = uint32_t(uint8_t(out[outIdx+2]) << 8); - uint32_t tmp54 = uint32_t(uint8_t(out[outIdx+3]) << 0); - tmp50 = tmp51 | tmp52 | tmp53 | tmp54; + uint32_t tmp52 = 0; + uint32_t tmp53 = uint32_t(uint8_t(out[outIdx+0]) << 24); + uint32_t tmp54 = uint32_t(uint8_t(out[outIdx+1]) << 16); + uint32_t tmp55 = uint32_t(uint8_t(out[outIdx+2]) << 8); + uint32_t tmp56 = uint32_t(uint8_t(out[outIdx+3]) << 0); + tmp52 = tmp53 | tmp54 | tmp55 | tmp56; outIdx+=4; - for (uint32_t tmp55 = 0; tmp55 < tmp50; tmp55++) { - std::string tmp56; + for (uint32_t tmp57 = 0; tmp57 < tmp52; tmp57++) { + std::string tmp58; { - uint32_t tmp57 = 0; - uint32_t tmp58 = uint32_t(uint8_t(out[outIdx+0]) << 24); - uint32_t tmp59 = uint32_t(uint8_t(out[outIdx+1]) << 16); - uint32_t tmp60 = uint32_t(uint8_t(out[outIdx+2]) << 8); - uint32_t tmp61 = uint32_t(uint8_t(out[outIdx+3]) << 0); - tmp57 = tmp58 | tmp59 | tmp60 | tmp61; + uint32_t tmp59 = 0; + uint32_t tmp60 = uint32_t(uint8_t(out[outIdx+0]) << 24); + uint32_t tmp61 = uint32_t(uint8_t(out[outIdx+1]) << 16); + uint32_t tmp62 = uint32_t(uint8_t(out[outIdx+2]) << 8); + uint32_t tmp63 = uint32_t(uint8_t(out[outIdx+3]) << 0); + tmp59 = tmp60 | tmp61 | tmp62 | tmp63; outIdx+=4; - tmp56 = std::string(out+outIdx, out+outIdx+tmp57); - outIdx+=tmp57; + tmp58 = std::string(out+outIdx, out+outIdx+tmp59); + outIdx+=tmp59; } - std::vector tmp62; + std::vector tmp64; { - uint32_t tmp63 = 0; - uint32_t tmp64 = uint32_t(uint8_t(out[outIdx+0]) << 24); - uint32_t tmp65 = uint32_t(uint8_t(out[outIdx+1]) << 16); - uint32_t tmp66 = uint32_t(uint8_t(out[outIdx+2]) << 8); - uint32_t tmp67 = uint32_t(uint8_t(out[outIdx+3]) << 0); - tmp63 = tmp64 | tmp65 | tmp66 | tmp67; + uint32_t tmp65 = 0; + uint32_t tmp66 = uint32_t(uint8_t(out[outIdx+0]) << 24); + uint32_t tmp67 = uint32_t(uint8_t(out[outIdx+1]) << 16); + uint32_t tmp68 = uint32_t(uint8_t(out[outIdx+2]) << 8); + uint32_t tmp69 = uint32_t(uint8_t(out[outIdx+3]) << 0); + tmp65 = tmp66 | tmp67 | tmp68 | tmp69; outIdx+=4; - for (uint32_t tmp68 = 0; tmp68 < tmp63; tmp68++) { - std::string tmp69; + for (uint32_t tmp70 = 0; tmp70 < tmp65; tmp70++) { + std::string tmp71; { - uint32_t tmp70 = 0; - uint32_t tmp71 = uint32_t(uint8_t(out[outIdx+0]) << 24); - uint32_t tmp72 = uint32_t(uint8_t(out[outIdx+1]) << 16); - uint32_t tmp73 = uint32_t(uint8_t(out[outIdx+2]) << 8); - uint32_t tmp74 = uint32_t(uint8_t(out[outIdx+3]) << 0); - tmp70 = tmp71 | tmp72 | tmp73 | tmp74; + uint32_t tmp72 = 0; + uint32_t tmp73 = uint32_t(uint8_t(out[outIdx+0]) << 24); + uint32_t tmp74 = uint32_t(uint8_t(out[outIdx+1]) << 16); + uint32_t tmp75 = uint32_t(uint8_t(out[outIdx+2]) << 8); + uint32_t tmp76 = uint32_t(uint8_t(out[outIdx+3]) << 0); + tmp72 = tmp73 | tmp74 | tmp75 | tmp76; outIdx+=4; - tmp69 = std::string(out+outIdx, out+outIdx+tmp70); - outIdx+=tmp70; + tmp71 = std::string(out+outIdx, out+outIdx+tmp72); + outIdx+=tmp72; } - tmp62.push_back(tmp69); + tmp64.push_back(tmp71); } } - retValue.DownloadReq.HeaderMap[tmp56] = tmp62; + retValue.DownloadReq.HeaderMap[tmp58] = tmp64; } } retValue.DownloadReq.SkipRemoveTs = (bool) out[outIdx]; outIdx++; + retValue.DownloadReq.ProgressBarShow = (bool) out[outIdx]; + outIdx++; } } if (out != NULL) { @@ -442,97 +449,99 @@ std::string RunDownload_Req_ToCurlStr(RunDownload_Req in0){ std::string in; { { - uint32_t tmp31 = in0.M3u8Url.length(); - char tmp32[4]; - tmp32[0] = (uint32_t(tmp31) >> 24) & 0xFF; - tmp32[1] = (uint32_t(tmp31) >> 16) & 0xFF; - tmp32[2] = (uint32_t(tmp31) >> 8) & 0xFF; - tmp32[3] = (uint32_t(tmp31) >> 0) & 0xFF; - in.append(tmp32, 4); - in.append(in0.M3u8Url); - } - in.append((char*)(&in0.Insecure), 1); - { - uint32_t tmp33 = in0.SaveDir.length(); + uint32_t tmp33 = in0.M3u8Url.length(); char tmp34[4]; tmp34[0] = (uint32_t(tmp33) >> 24) & 0xFF; tmp34[1] = (uint32_t(tmp33) >> 16) & 0xFF; tmp34[2] = (uint32_t(tmp33) >> 8) & 0xFF; tmp34[3] = (uint32_t(tmp33) >> 0) & 0xFF; in.append(tmp34, 4); - in.append(in0.SaveDir); + in.append(in0.M3u8Url); } + in.append((char*)(&in0.Insecure), 1); { - uint32_t tmp35 = in0.FileName.length(); + uint32_t tmp35 = in0.SaveDir.length(); char tmp36[4]; tmp36[0] = (uint32_t(tmp35) >> 24) & 0xFF; tmp36[1] = (uint32_t(tmp35) >> 16) & 0xFF; tmp36[2] = (uint32_t(tmp35) >> 8) & 0xFF; tmp36[3] = (uint32_t(tmp35) >> 0) & 0xFF; in.append(tmp36, 4); + in.append(in0.SaveDir); + } + { + uint32_t tmp37 = in0.FileName.length(); + char tmp38[4]; + tmp38[0] = (uint32_t(tmp37) >> 24) & 0xFF; + tmp38[1] = (uint32_t(tmp37) >> 16) & 0xFF; + tmp38[2] = (uint32_t(tmp37) >> 8) & 0xFF; + tmp38[3] = (uint32_t(tmp37) >> 0) & 0xFF; + in.append(tmp38, 4); in.append(in0.FileName); } + in.append((char*)(&in0.RemoteName), 1); { - char tmp37[4]; - tmp37[0] = (uint32_t(in0.SkipTsCountFromHead) >> 24) & 0xFF; - tmp37[1] = (uint32_t(in0.SkipTsCountFromHead) >> 16) & 0xFF; - tmp37[2] = (uint32_t(in0.SkipTsCountFromHead) >> 8) & 0xFF; - tmp37[3] = (uint32_t(in0.SkipTsCountFromHead) >> 0) & 0xFF; - in.append(tmp37, 4); - } - { - uint32_t tmp38 = in0.SetProxy.length(); char tmp39[4]; - tmp39[0] = (uint32_t(tmp38) >> 24) & 0xFF; - tmp39[1] = (uint32_t(tmp38) >> 16) & 0xFF; - tmp39[2] = (uint32_t(tmp38) >> 8) & 0xFF; - tmp39[3] = (uint32_t(tmp38) >> 0) & 0xFF; + tmp39[0] = (uint32_t(in0.SkipTsCountFromHead) >> 24) & 0xFF; + tmp39[1] = (uint32_t(in0.SkipTsCountFromHead) >> 16) & 0xFF; + tmp39[2] = (uint32_t(in0.SkipTsCountFromHead) >> 8) & 0xFF; + tmp39[3] = (uint32_t(in0.SkipTsCountFromHead) >> 0) & 0xFF; in.append(tmp39, 4); - in.append(in0.SetProxy); } { - uint32_t tmp40 = in0.HeaderMap.size(); + uint32_t tmp40 = in0.SetProxy.length(); char tmp41[4]; tmp41[0] = (uint32_t(tmp40) >> 24) & 0xFF; tmp41[1] = (uint32_t(tmp40) >> 16) & 0xFF; tmp41[2] = (uint32_t(tmp40) >> 8) & 0xFF; tmp41[3] = (uint32_t(tmp40) >> 0) & 0xFF; in.append(tmp41, 4); - for(std::map>::iterator tmp42 = in0.HeaderMap.begin(); tmp42 != in0.HeaderMap.end(); ++tmp42) { + in.append(in0.SetProxy); + } + { + uint32_t tmp42 = in0.HeaderMap.size(); + char tmp43[4]; + tmp43[0] = (uint32_t(tmp42) >> 24) & 0xFF; + tmp43[1] = (uint32_t(tmp42) >> 16) & 0xFF; + tmp43[2] = (uint32_t(tmp42) >> 8) & 0xFF; + tmp43[3] = (uint32_t(tmp42) >> 0) & 0xFF; + in.append(tmp43, 4); + for(std::map>::iterator tmp44 = in0.HeaderMap.begin(); tmp44 != in0.HeaderMap.end(); ++tmp44) { { - uint32_t tmp43 = tmp42->first.length(); - char tmp44[4]; - tmp44[0] = (uint32_t(tmp43) >> 24) & 0xFF; - tmp44[1] = (uint32_t(tmp43) >> 16) & 0xFF; - tmp44[2] = (uint32_t(tmp43) >> 8) & 0xFF; - tmp44[3] = (uint32_t(tmp43) >> 0) & 0xFF; - in.append(tmp44, 4); - in.append(tmp42->first); - } - { - uint32_t tmp45 = tmp42->second.size(); + uint32_t tmp45 = tmp44->first.length(); char tmp46[4]; tmp46[0] = (uint32_t(tmp45) >> 24) & 0xFF; tmp46[1] = (uint32_t(tmp45) >> 16) & 0xFF; tmp46[2] = (uint32_t(tmp45) >> 8) & 0xFF; tmp46[3] = (uint32_t(tmp45) >> 0) & 0xFF; in.append(tmp46, 4); - for (uint32_t tmp47=0; tmp47 < tmp45; ++tmp47) { + in.append(tmp44->first); + } + { + uint32_t tmp47 = tmp44->second.size(); + char tmp48[4]; + tmp48[0] = (uint32_t(tmp47) >> 24) & 0xFF; + tmp48[1] = (uint32_t(tmp47) >> 16) & 0xFF; + tmp48[2] = (uint32_t(tmp47) >> 8) & 0xFF; + tmp48[3] = (uint32_t(tmp47) >> 0) & 0xFF; + in.append(tmp48, 4); + for (uint32_t tmp49=0; tmp49 < tmp47; ++tmp49) { { - uint32_t tmp48 = tmp42->second[tmp47].length(); - char tmp49[4]; - tmp49[0] = (uint32_t(tmp48) >> 24) & 0xFF; - tmp49[1] = (uint32_t(tmp48) >> 16) & 0xFF; - tmp49[2] = (uint32_t(tmp48) >> 8) & 0xFF; - tmp49[3] = (uint32_t(tmp48) >> 0) & 0xFF; - in.append(tmp49, 4); - in.append(tmp42->second[tmp47]); + uint32_t tmp50 = tmp44->second[tmp49].length(); + char tmp51[4]; + tmp51[0] = (uint32_t(tmp50) >> 24) & 0xFF; + tmp51[1] = (uint32_t(tmp50) >> 16) & 0xFF; + tmp51[2] = (uint32_t(tmp50) >> 8) & 0xFF; + tmp51[3] = (uint32_t(tmp50) >> 0) & 0xFF; + in.append(tmp51, 4); + in.append(tmp44->second[tmp49]); } } } } } in.append((char*)(&in0.SkipRemoveTs), 1); + in.append((char*)(&in0.ProgressBarShow), 1); } char *out = NULL; int outLen = 0; @@ -540,15 +549,49 @@ std::string RunDownload_Req_ToCurlStr(RunDownload_Req in0){ std::string retValue; int outIdx = 0; { - uint32_t tmp50 = 0; - uint32_t tmp51 = uint32_t(uint8_t(out[outIdx+0]) << 24); - uint32_t tmp52 = uint32_t(uint8_t(out[outIdx+1]) << 16); - uint32_t tmp53 = uint32_t(uint8_t(out[outIdx+2]) << 8); - uint32_t tmp54 = uint32_t(uint8_t(out[outIdx+3]) << 0); - tmp50 = tmp51 | tmp52 | tmp53 | tmp54; + uint32_t tmp52 = 0; + uint32_t tmp53 = uint32_t(uint8_t(out[outIdx+0]) << 24); + uint32_t tmp54 = uint32_t(uint8_t(out[outIdx+1]) << 16); + uint32_t tmp55 = uint32_t(uint8_t(out[outIdx+2]) << 8); + uint32_t tmp56 = uint32_t(uint8_t(out[outIdx+3]) << 0); + tmp52 = tmp53 | tmp54 | tmp55 | tmp56; outIdx+=4; - retValue = std::string(out+outIdx, out+outIdx+tmp50); - outIdx+=tmp50; + retValue = std::string(out+outIdx, out+outIdx+tmp52); + outIdx+=tmp52; + } + if (out != NULL) { + free(out); + } + return retValue; +} + +std::string GetFileNameFromUrl(std::string in0){ + std::string in; + { + uint32_t tmp5 = in0.length(); + char tmp6[4]; + tmp6[0] = (uint32_t(tmp5) >> 24) & 0xFF; + tmp6[1] = (uint32_t(tmp5) >> 16) & 0xFF; + tmp6[2] = (uint32_t(tmp5) >> 8) & 0xFF; + tmp6[3] = (uint32_t(tmp5) >> 0) & 0xFF; + in.append(tmp6, 4); + in.append(in0); + } + char *out = NULL; + int outLen = 0; + Go2cppFn_GetFileNameFromUrl((char *)in.data(), in.length(), &out, &outLen); + std::string retValue; + int outIdx = 0; + { + uint32_t tmp7 = 0; + uint32_t tmp8 = uint32_t(uint8_t(out[outIdx+0]) << 24); + uint32_t tmp9 = uint32_t(uint8_t(out[outIdx+1]) << 16); + uint32_t tmp10 = uint32_t(uint8_t(out[outIdx+2]) << 8); + uint32_t tmp11 = uint32_t(uint8_t(out[outIdx+3]) << 0); + tmp7 = tmp8 | tmp9 | tmp10 | tmp11; + outIdx+=4; + retValue = std::string(out+outIdx, out+outIdx+tmp7); + outIdx+=tmp7; } if (out != NULL) { free(out); diff --git a/m3u8d-qt/m3u8d.h b/m3u8d-qt/m3u8d.h index eb89ec0..2525842 100644 --- a/m3u8d-qt/m3u8d.h +++ b/m3u8d-qt/m3u8d.h @@ -13,11 +13,13 @@ struct RunDownload_Req{ bool Insecure; std::string SaveDir; std::string FileName; + bool RemoteName; int32_t SkipTsCountFromHead; std::string SetProxy; std::map> HeaderMap; bool SkipRemoveTs; - RunDownload_Req(): Insecure(false),SkipTsCountFromHead(0),SkipRemoveTs(false){} + bool ProgressBarShow; + RunDownload_Req(): Insecure(false),RemoteName(false),SkipTsCountFromHead(0),SkipRemoveTs(false),ProgressBarShow(false){} }; struct RunDownload_Resp{ std::string ErrMsg; @@ -42,6 +44,7 @@ struct ParseCurl_Resp{ }; ParseCurl_Resp ParseCurlStr(std::string in0); std::string RunDownload_Req_ToCurlStr(RunDownload_Req in0); +std::string GetFileNameFromUrl(std::string in0); #include #include diff --git a/m3u8d-qt/mainwindow.cpp b/m3u8d-qt/mainwindow.cpp index 431aeae..0e86b0a 100644 --- a/m3u8d-qt/mainwindow.cpp +++ b/m3u8d-qt/mainwindow.cpp @@ -129,3 +129,15 @@ void MainWindow::on_pushButton_curlMode_clicked() ui->checkBox_Insecure->setChecked(resp.DownloadReq.Insecure); this->m_HeaderMap = resp.DownloadReq.HeaderMap; } + +void MainWindow::on_lineEdit_M3u8Url_textChanged(const QString &arg1) +{ + if (ui->lineEdit_FileName->text().isEmpty()==false) { + return; + } + QString fileName = QString::fromStdString(GetFileNameFromUrl(arg1.toStdString())); + if (fileName.isEmpty()) { + return; + } + ui->lineEdit_FileName->setPlaceholderText(fileName); +} diff --git a/m3u8d-qt/mainwindow.h b/m3u8d-qt/mainwindow.h index fffea9d..2cc3b52 100644 --- a/m3u8d-qt/mainwindow.h +++ b/m3u8d-qt/mainwindow.h @@ -25,6 +25,8 @@ private slots: void on_pushButton_curlMode_clicked(); + void on_lineEdit_M3u8Url_textChanged(const QString &arg1); + private: Ui::MainWindow *ui; RunOnUiThread m_syncUi;