From 59c433b1c2276c7cc51f00e16f5116d9e4d744f3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:25:00 +0200 Subject: [PATCH 01/39] chore(deps): update dependency sass to v1.69.4 (#1431) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 8058d3a82..9f9b83da8 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "eslint-plugin-vue": "9.17.0", "less": "4.2.0", "less-loader": "11.1.3", - "sass": "1.66.1", + "sass": "1.69.4", "sass-loader": "13.3.2", "simple-progress-webpack-plugin": "2.0.0", "vue-cli-plugin-i18n": "2.3.2", diff --git a/yarn.lock b/yarn.lock index 2daceae2d..f316997cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7152,10 +7152,10 @@ sass-loader@13.3.2: dependencies: neo-async "^2.6.2" -sass@1.66.1: - version "1.66.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.66.1.tgz#04b51c4671e4650aa393740e66a4e58b44d055b1" - integrity sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA== +sass@1.69.4: + version "1.69.4" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.4.tgz#10c735f55e3ea0b7742c6efa940bce30e07fbca2" + integrity sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From e724da052348a11b7291f67378d60513d2f04586 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:25:13 +0200 Subject: [PATCH 02/39] chore(deps): update dependency eslint to v8.52.0 (#1430) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 44 +++++++++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 9f9b83da8..abd60807c 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@vue/eslint-config-standard": "8.0.1", "buffer": "6.0.3", "concurrently": "7.6.0", - "eslint": "8.48.0", + "eslint": "8.52.0", "eslint-plugin-import": "2.28.1", "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "6.1.1", diff --git a/yarn.lock b/yarn.lock index f316997cc..e3f76fe2d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1304,10 +1304,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.48.0": - version "8.48.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.48.0.tgz#642633964e217905436033a2bd08bf322849b7fb" - integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw== +"@eslint/js@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" + integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== "@fortawesome/fontawesome-common-types@^0.2.36": version "0.2.36" @@ -1338,12 +1338,12 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" + "@humanwhocodes/object-schema" "^2.0.1" debug "^4.1.1" minimatch "^3.0.5" @@ -1352,10 +1352,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" @@ -1694,6 +1694,11 @@ dependencies: "@types/node" "*" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + "@videojs/http-streaming@2.16.2": version "2.16.2" resolved "https://registry.yarnpkg.com/@videojs/http-streaming/-/http-streaming-2.16.2.tgz#a9be925b4e368a41dbd67d49c4f566715169b84b" @@ -4144,18 +4149,19 @@ eslint-webpack-plugin@^3.1.0: normalize-path "^3.0.0" schema-utils "^4.0.0" -eslint@8.48.0: - version "8.48.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.48.0.tgz#bf9998ba520063907ba7bfe4c480dc8be03c2155" - integrity sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg== +eslint@8.52.0: + version "8.52.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.52.0.tgz#d0cd4a1fac06427a61ef9242b9353f36ea7062fc" + integrity sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.48.0" - "@humanwhocodes/config-array" "^0.11.10" + "@eslint/js" "8.52.0" + "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" From f25c175c3a511ad41737c1bf628e32f7e88d8541 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:25:46 +0200 Subject: [PATCH 03/39] fix(deps): update module github.com/putdotio/go-putio to v1.7.1 (#1429) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 73513ec77..6b5c8b9ae 100644 --- a/go.mod +++ b/go.mod @@ -45,7 +45,7 @@ require ( github.com/nleeper/goment v1.4.4 github.com/peterbourgon/diskv v2.0.1+incompatible github.com/pkg/errors v0.9.1 - github.com/putdotio/go-putio v1.7.0 + github.com/putdotio/go-putio v1.7.1 github.com/robertkrimen/otto v0.2.1 github.com/robfig/cron/v3 v3.0.1 github.com/rs/cors v1.9.0 diff --git a/go.sum b/go.sum index 1c3f0e0f9..4a2a078ff 100644 --- a/go.sum +++ b/go.sum @@ -314,6 +314,8 @@ github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwa github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= github.com/putdotio/go-putio v1.7.0 h1:iL7G9O30NCiOH4FULbul/tRNWDA9LuvlsfXjBIBmRY4= github.com/putdotio/go-putio v1.7.0/go.mod h1:QhjpLhn3La/ea4FeJlp1qsiaFZDC0EIO8VUe8VEKMV0= +github.com/putdotio/go-putio v1.7.1 h1:316PpOMO2a7H73foRxlpHmekeLso07et26Z00YlwQ2A= +github.com/putdotio/go-putio v1.7.1/go.mod h1:QhjpLhn3La/ea4FeJlp1qsiaFZDC0EIO8VUe8VEKMV0= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/robertkrimen/otto v0.2.1 h1:FVP0PJ0AHIjC+N4pKCG9yCDz6LHNPCwi/GKID5pGGF0= github.com/robertkrimen/otto v0.2.1/go.mod h1:UPwtJ1Xu7JrLcZjNWN8orJaM5n5YEtqL//farB5FlRY= From 9889d0b25d590a40556784abc052d022c057afe9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:26:22 +0200 Subject: [PATCH 04/39] fix(deps): update module github.com/gammazero/nexus/v3 to v3.2.1 (#1428) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 4 ++-- go.sum | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 6b5c8b9ae..951f97aef 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/dustin/go-humanize v1.0.1 github.com/emicklei/go-restful-openapi/v2 v2.9.1 github.com/emicklei/go-restful/v3 v3.11.0 - github.com/gammazero/nexus/v3 v3.2.0 + github.com/gammazero/nexus/v3 v3.2.1 github.com/getlantern/systray v1.2.2 github.com/go-openapi/spec v0.20.9 github.com/go-resty/resty/v2 v2.7.0 @@ -138,7 +138,7 @@ require ( github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect github.com/tkuchiki/go-timezone v0.2.0 // indirect - github.com/ugorji/go/codec v1.2.7 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect github.com/ulikunitz/xz v0.5.8 // indirect github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect go.etcd.io/bbolt v1.3.7 // indirect diff --git a/go.sum b/go.sum index 4a2a078ff..142c82daa 100644 --- a/go.sum +++ b/go.sum @@ -112,6 +112,8 @@ github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/gammazero/nexus/v3 v3.2.0 h1:dKdGk4vQ/56wX5CLKUt6U3XQymUhTY6xHowBO9Z7bVA= github.com/gammazero/nexus/v3 v3.2.0/go.mod h1:h/5Osjg08QGAk+dVFpwdGdD8VsK+IGDm5E4PzVli264= +github.com/gammazero/nexus/v3 v3.2.1 h1:9sqURks8EBEYkyEmkCtw85oApQ4ou0FCfh/jUG+Jq4I= +github.com/gammazero/nexus/v3 v3.2.1/go.mod h1:SvrRjMwDP4S9RSx52Ks39ksmYA1FQQ0OuGKcleMJTQ0= github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 h1:NRUJuo3v3WGC/g5YiyF790gut6oQr5f3FBI88Wv0dx4= github.com/getlantern/context v0.0.0-20190109183933-c447772a6520/go.mod h1:L+mq6/vvYHKjCX2oez0CgEAJmbq1fbb/oNJIWQkBybY= github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7 h1:6uJ+sZ/e03gkbqZ0kUG6mfKoqDb4XMAzMIwlajq19So= @@ -357,6 +359,8 @@ github.com/tkuchiki/go-timezone v0.2.0/go.mod h1:b1Ean9v2UXtxSq4TZF0i/TU9NuoWa9h github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= From cfa220c30912e4dc764c10536e1c55b902bfdd96 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:31:44 +0200 Subject: [PATCH 05/39] fix(deps): update vue monorepo to v2.7.15 (#1445) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 4 ++-- yarn.lock | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index abd60807c..84c053aea 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "pretty-bytes": "6.1.1", "videojs-hotkeys": "0.2.28", "videojs-vr": "1.8.0", - "vue": "2.7.14", + "vue": "2.7.15", "vue-debounce": "4.0.0", "vue-gallery": "2.0.5", "vue-global-events": "1.2.1", @@ -56,7 +56,7 @@ "simple-progress-webpack-plugin": "2.0.0", "vue-cli-plugin-i18n": "2.3.2", "vue-i18n-extract": "2.0.7", - "vue-template-compiler": "2.7.14", + "vue-template-compiler": "2.7.15", "webpack": "5.88.2" }, "eslintConfig": { diff --git a/yarn.lock b/yarn.lock index e3f76fe2d..25ec8c70f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1972,10 +1972,10 @@ semver "^7.3.4" strip-ansi "^6.0.0" -"@vue/compiler-sfc@2.7.14": - version "2.7.14" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz#3446fd2fbb670d709277fc3ffa88efc5e10284fd" - integrity sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA== +"@vue/compiler-sfc@2.7.15": + version "2.7.15" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.15.tgz#62135fb2f69559fc723fd9c56b8e8b0ac7864a0b" + integrity sha512-FCvIEevPmgCgqFBH7wD+3B97y7u7oj/Wr69zADBf403Tui377bThTjBvekaZvlRr4IwUAu3M6hYZeULZFJbdYg== dependencies: "@babel/parser" "^7.18.4" postcss "^8.4.14" @@ -8244,10 +8244,10 @@ vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: hash-sum "^1.0.2" loader-utils "^1.0.2" -vue-template-compiler@2.7.14: - version "2.7.14" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz#4545b7dfb88090744c1577ae5ac3f964e61634b1" - integrity sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ== +vue-template-compiler@2.7.15: + version "2.7.15" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.15.tgz#ec88ba8ceafe0f17a528b89c57e01e02da92b0de" + integrity sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og== dependencies: de-indent "^1.0.2" he "^1.2.0" @@ -8257,12 +8257,12 @@ vue-template-es2015-compiler@^1.9.0: resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== -vue@2.7.14: - version "2.7.14" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.14.tgz#3743dcd248fd3a34d421ae456b864a0246bafb17" - integrity sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ== +vue@2.7.15: + version "2.7.15" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.15.tgz#94cd34e6e9f22cd2d35a02143f96a5beac1c1f54" + integrity sha512-a29fsXd2G0KMRqIFTpRgpSbWaNBK3lpCTOLuGLEDnlHWdjB8fwl6zyYZ8xCrqkJdatwZb4mGHiEfJjnw0Q6AwQ== dependencies: - "@vue/compiler-sfc" "2.7.14" + "@vue/compiler-sfc" "2.7.15" csstype "^3.1.0" vue@^2.3.3, vue@^2.6.11: From 149bcad7abe1ffb1188d2e1daeddf55ae988c367 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:32:01 +0200 Subject: [PATCH 06/39] chore(deps): update dependency eslint-plugin-import to v2.29.0 (#1446) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 397 ++++++++++++++++++++++++++++----------------------- 2 files changed, 217 insertions(+), 182 deletions(-) diff --git a/package.json b/package.json index 84c053aea..297fcba67 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "buffer": "6.0.3", "concurrently": "7.6.0", "eslint": "8.52.0", - "eslint-plugin-import": "2.28.1", + "eslint-plugin-import": "2.29.0", "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "6.1.1", "eslint-plugin-standard": "4.1.0", diff --git a/yarn.lock b/yarn.lock index 25ec8c70f..1d78f0495 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2498,15 +2498,15 @@ array-includes@^3.1.4: get-intrinsic "^1.1.1" is-string "^1.0.7" -array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== +array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" is-string "^1.0.7" array-union@^2.1.0: @@ -2514,16 +2514,16 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" - integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== +array.prototype.findlastindex@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.1" array.prototype.flat@^1.2.5: version "1.3.0" @@ -2535,34 +2535,35 @@ array.prototype.flat@^1.2.5: es-abstract "^1.19.2" es-shim-unscopables "^1.0.0" -array.prototype.flat@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -arraybuffer.prototype.slice@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" - integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== dependencies: array-buffer-byte-length "^1.0.0" call-bind "^1.0.2" define-properties "^1.2.0" + es-abstract "^1.22.1" get-intrinsic "^1.2.1" is-array-buffer "^3.0.2" is-shared-array-buffer "^1.0.2" @@ -2836,6 +2837,15 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -3471,6 +3481,15 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" @@ -3748,65 +3767,26 @@ es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19 string.prototype.trimstart "^1.0.5" unbox-primitive "^1.0.2" -es-abstract@^1.20.4: - version "1.21.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" - integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.4" - is-array-buffer "^3.0.1" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.2" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" - -es-abstract@^1.21.2: - version "1.22.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" - integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.1" + arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -3814,23 +3794,23 @@ es-abstract@^1.21.2: is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-typed-array "^1.1.10" + is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - safe-array-concat "^1.0.0" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" typed-array-buffer "^1.0.0" typed-array-byte-length "^1.0.0" typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.10" + which-typed-array "^1.1.13" es-module-lexer@^0.9.0: version "0.9.3" @@ -3934,14 +3914,14 @@ eslint-import-resolver-node@^0.3.6: debug "^3.2.7" resolve "^1.20.0" -eslint-import-resolver-node@^0.3.7: - version "0.3.7" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" - integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" - is-core-module "^2.11.0" - resolve "^1.22.1" + is-core-module "^2.13.0" + resolve "^1.22.4" eslint-module-utils@^2.7.3: version "2.7.3" @@ -3974,26 +3954,26 @@ eslint-plugin-es@^4.1.0: eslint-utils "^2.0.0" regexpp "^3.0.0" -eslint-plugin-import@2.28.1: - version "2.28.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" - integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== +eslint-plugin-import@2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" + integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== dependencies: - array-includes "^3.1.6" - array.prototype.findlastindex "^1.2.2" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" + eslint-import-resolver-node "^0.3.9" eslint-module-utils "^2.8.0" - has "^1.0.3" - is-core-module "^2.13.0" + hasown "^2.0.0" + is-core-module "^2.13.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.6" - object.groupby "^1.0.0" - object.values "^1.1.6" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" semver "^6.3.1" tsconfig-paths "^3.14.2" @@ -4554,6 +4534,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + function.prototype.name@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" @@ -4564,6 +4549,16 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" @@ -4616,6 +4611,16 @@ get-intrinsic@^1.2.1: has-proto "^1.0.1" has-symbols "^1.0.3" +get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -4829,6 +4834,13 @@ hash-sum@^2.0.0: resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -5048,7 +5060,7 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -internal-slot@^1.0.4, internal-slot@^1.0.5: +internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== @@ -5131,13 +5143,6 @@ is-ci@^1.0.10: dependencies: ci-info "^1.5.0" -is-core-module@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - is-core-module@^2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" @@ -5145,6 +5150,13 @@ is-core-module@^2.13.0: dependencies: has "^1.0.3" +is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + is-core-module@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.3.0.tgz#d341652e3408bca69c4671b79a0954a3d349f887" @@ -5302,6 +5314,13 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.9: gopd "^1.0.1" has-tostringtag "^1.0.0" +is-typed-array@^1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -6075,10 +6094,10 @@ object-inspect@^1.12.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== -object-inspect@^1.12.2, object-inspect@^1.12.3: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-inspect@^1.9.0: version "1.10.2" @@ -6110,23 +6129,23 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== +object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -object.groupby@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" - integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== +object.groupby@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" - es-abstract "^1.21.2" + es-abstract "^1.22.1" get-intrinsic "^1.2.1" object.values@^1.1.5: @@ -6138,14 +6157,14 @@ object.values@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" -object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== +object.values@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" @@ -6941,14 +6960,14 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexp.prototype.flags@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" - functions-have-names "^1.2.3" + set-function-name "^2.0.0" regexpp@^3.0.0: version "3.1.0" @@ -7047,7 +7066,7 @@ resolve@^1.10.0, resolve@^1.10.1, resolve@^1.14.2: is-core-module "^2.2.0" path-parse "^1.0.6" -resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.3.0: +resolve@^1.20.0, resolve@^1.22.0, resolve@^1.3.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -7056,6 +7075,15 @@ resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.3.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -7110,13 +7138,13 @@ rxjs@^7.0.0: dependencies: tslib "^2.1.0" -safe-array-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" - integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.2.0" + get-intrinsic "^1.2.1" has-symbols "^1.0.3" isarray "^2.0.5" @@ -7299,6 +7327,25 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" @@ -7535,14 +7582,14 @@ string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" string.prototype.trimend@^1.0.5: version "1.0.5" @@ -7553,14 +7600,14 @@ string.prototype.trimend@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" string.prototype.trimstart@^1.0.5: version "1.0.5" @@ -7571,14 +7618,14 @@ string.prototype.trimstart@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" string_decoder@^1.1.1: version "1.3.0" @@ -8527,28 +8574,16 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.10: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" which@^1.2.9: version "1.3.1" From b8ebf7ba71f48f3c5910b715e5bf576644d4d9de Mon Sep 17 00:00:00 2001 From: alex <85208095+alexnsfw@users.noreply.github.com> Date: Wed, 25 Oct 2023 13:46:45 -0400 Subject: [PATCH 07/39] scraper: Fix SexBabesVR scraper (#1444) --- pkg/scrape/sexbabesvr.go | 61 ++++++++-------------------------------- 1 file changed, 11 insertions(+), 50 deletions(-) diff --git a/pkg/scrape/sexbabesvr.go b/pkg/scrape/sexbabesvr.go index 2d1681356..75bcde0a6 100644 --- a/pkg/scrape/sexbabesvr.go +++ b/pkg/scrape/sexbabesvr.go @@ -3,9 +3,6 @@ package scrape import ( "encoding/json" "net/url" - "regexp" - "sort" - "strconv" "strings" "sync" "time" @@ -83,18 +80,20 @@ func SexBabesVR(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out c }) // Date - sc.Released = e.Request.Ctx.Get("released") + releaseDateText := e.ChildText(`.video-detail__description--container > div:last-of-type`) + tmpDate, _ := time.Parse("Jan 02, 2006", releaseDateText) + sc.Released = tmpDate.Format("2006-01-02") // Duration // Filenames - // old site, needs update + // old site, needs update e.ForEach(`div.modal a.vd-row`, func(id int, e *colly.HTMLElement) { origURL, _ := url.Parse(e.Attr("href")) base := origURL.Query().Get("response-content-disposition") - base = strings.Replace(base, "attachment; filename=", "", -1) - base = strings.Replace(base, "\"", "", -1) - base = strings.Replace(base, "_trailer", "", -1) + base = strings.ReplaceAll(base, "attachment; filename=", "") + base = strings.ReplaceAll(base, "\"", "") + base = strings.ReplaceAll(base, "_trailer", "") if !funk.ContainsString(sc.Filenames, base) { sc.Filenames = append(sc.Filenames, base) } @@ -108,22 +107,11 @@ func SexBabesVR(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out c siteCollector.Visit(pageURL) }) - type video struct { - url string - released string - } - videoList := make(map[int]video) - siteCollector.OnHTML(`div.videos__content`, func(e *colly.HTMLElement) { - e.ForEach(`a.video-container__description--information`, func(cnt int, e *colly.HTMLElement) { + e.ForEach(`a.video-container__description--title`, func(cnt int, e *colly.HTMLElement) { sceneURL := e.Request.AbsoluteURL(e.Attr("href")) - re := regexp.MustCompile(`(?m)(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{2}`) - match := re.FindAllString(e.Text, -1) - - if len(match) > 0 { - // If scene exist in database, there's no need to scrape - page, _ := strconv.Atoi(strings.ReplaceAll(e.Request.URL.String(), "https://sexbabesvr.com/vr-porn-videos/", "")) - videoList[page*1000+cnt] = video{url: sceneURL, released: match[0]} + if !funk.ContainsString(knownScenes, sceneURL) { + sceneCollector.Visit(sceneURL) } }) }) @@ -132,38 +120,11 @@ func SexBabesVR(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out c lastMonth = int(time.Now().Month()) if singleSceneURL != "" { - ctx := colly.NewContext() - ctx.Put("released", "") - - sceneCollector.Request("GET", singleSceneURL, nil, ctx, nil) + sceneCollector.Visit(singleSceneURL) } else { siteCollector.Visit("https://sexbabesvr.com/vr-porn-videos") } - // Sort the videoList as page visits may not return in the same speed and be out of order - var sortedVideos []int - for key := range videoList { - sortedVideos = append(sortedVideos, key) - } - sort.Ints(sortedVideos) - - for _, seq := range sortedVideos { - ctx := colly.NewContext() - tmpDate, _ := time.Parse("Jan 02", videoList[seq].released) - if tmpDate.Month() == 12 && lastMonth == 1 { - currentYear -= 1 - } else if tmpDate.Month() == 1 && lastMonth == 12 { - currentYear += 1 - } - tmpDate = tmpDate.AddDate(currentYear-tmpDate.Year(), 0, 0) - lastMonth = int(tmpDate.Month()) - ctx.Put("released", tmpDate.Format("2006-01-02")) - - if !funk.ContainsString(knownScenes, videoList[seq].url) { - sceneCollector.Request("GET", videoList[seq].url, nil, ctx, nil) - } - } - if updateSite { updateSiteLastUpdate(scraperID) } From 81d823174b60b2a249ebe93c4e286cf31ed05b2e Mon Sep 17 00:00:00 2001 From: vt-idiot <81622808+vt-idiot@users.noreply.github.com> Date: Wed, 25 Oct 2023 13:47:25 -0400 Subject: [PATCH 08/39] scraper: Use better cover images for SexBabesVR (#1443) Restores original, uncropped 1000x667 SexBabesVR covers. The videoDetail2x URL is serving a terrible looking 2x DPI upscale of an already upscaled crop (videoDetail). Removing that part of the path entirely returns the same type of cover image their site used before the re-design. --- pkg/scrape/sexbabesvr.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/scrape/sexbabesvr.go b/pkg/scrape/sexbabesvr.go index 75bcde0a6..d8d044c55 100644 --- a/pkg/scrape/sexbabesvr.go +++ b/pkg/scrape/sexbabesvr.go @@ -40,7 +40,7 @@ func SexBabesVR(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out c e.ForEach(`dl8-video`, func(id int, e *colly.HTMLElement) { sc.SiteID = e.Attr("data-scene") sc.SceneID = slugify.Slugify(sc.Site) + "-" + sc.SiteID - sc.Covers = append(sc.Covers, e.Attr("poster")) + sc.Covers = append(sc.Covers, strings.Replace(e.Attr("poster"), "/videoDetail2x", "", -1)) }) // Title From 25d99294897d375fec4aa57858b86dba14310ac7 Mon Sep 17 00:00:00 2001 From: toshski <104477758+toshski@users.noreply.github.com> Date: Thu, 26 Oct 2023 06:52:12 +1300 Subject: [PATCH 09/39] Fix: Edited Duration not saved (#1437) * Edited Duration not saved * Fix saves with no durnation change --- pkg/api/scenes.go | 6 +++++- pkg/tasks/content.go | 9 +++++++-- ui/src/views/scenes/EditScene.vue | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/pkg/api/scenes.go b/pkg/api/scenes.go index e0e446e54..a596588b0 100644 --- a/pkg/api/scenes.go +++ b/pkg/api/scenes.go @@ -64,6 +64,7 @@ type RequestEditSceneDetails struct { Images string `json:"images"` CoverURL string `json:"cover_url"` IsMultipart bool `json:"is_multipart"` + Duration string `json:"duration"` } type ResponseGetScenes struct { @@ -804,7 +805,10 @@ func (i SceneResource) editScene(req *restful.Request, resp *restful.Response) { scene.IsMultipart = r.IsMultipart models.AddAction(scene.SceneID, "edit", "is_multipart", strconv.FormatBool(r.IsMultipart)) } - + if strconv.Itoa(scene.Duration) != r.Duration { + scene.Duration, _ = strconv.Atoi(r.Duration) + models.AddAction(scene.SceneID, "edit", "duration", r.Duration) + } ProcessTagChanges(&scene, &r.Tags, db) newCast := make([]models.Actor, 0) diff --git a/pkg/tasks/content.go b/pkg/tasks/content.go index 98c7ceaa4..d0f0542ea 100644 --- a/pkg/tasks/content.go +++ b/pkg/tasks/content.go @@ -238,10 +238,15 @@ func ReapplyEdits() { continue } // Reapply other edits - db.Model(&scene).Update(a.ChangedColumn, a.NewValue) - if a.ChangedColumn == "release_date_text" { + switch a.ChangedColumn { + case "duration": + i, _ := strconv.Atoi(a.NewValue) + db.Model(&scene).Update(a.ChangedColumn, i) + case "release_date_text": dt, _ := time.Parse("2006-01-02", a.NewValue) db.Model(&scene).Update("release_date", dt) + default: + db.Model(&scene).Update(a.ChangedColumn, a.NewValue) } } db.Model(&models.Scene{}).UpdateColumn("edits_applied", true) diff --git a/ui/src/views/scenes/EditScene.vue b/ui/src/views/scenes/EditScene.vue index be05084a5..9f317be15 100644 --- a/ui/src/views/scenes/EditScene.vue +++ b/ui/src/views/scenes/EditScene.vue @@ -205,6 +205,7 @@ export default { this.scene.images = JSON.stringify(images) this.scene.cover_url = this.scene.covers[0] this.scene.filenames_arr = JSON.stringify(this.scene.files) + this.scene.duration = String(this.scene.duration) // force to a string, if no change the UI sends an int, otherwise a string, nust be constant ky.post(`/api/scene/edit/${this.scene.id}`, { json: { ...this.scene } }) From 33574fe1553ec0e2aa2460164ce57b17515b0034 Mon Sep 17 00:00:00 2001 From: vt-idiot <81622808+vt-idiot@users.noreply.github.com> Date: Wed, 25 Oct 2023 13:59:19 -0400 Subject: [PATCH 10/39] scraper: Remove javbus.com scraper, replace with R18.dev scraper (#1432) * Update content.go Remove javbus reference, replace with r18.dev * Update OptionsSceneCreate.vue Replace javbus reference with r18.dev * Update and rename javbus.go to r18d.go YOLO * It works. * Removed line break * Update r18d.go gofmt hate * Update r18d.go If title is machine translated, puts it in the scene synopsis instead of throwing it away * Update r18d.go Basic filler filename parser based on content ID, presence of quality tags, and FANZA filename suffixes. * gofmt really, gofmt? the code ran... * Update r18d.go Removed one set of filler filenames. --- pkg/scrape/javbus.go | 110 --------------- pkg/scrape/r18d.go | 126 ++++++++++++++++++ pkg/tasks/content.go | 6 +- .../options/sections/OptionsSceneCreate.vue | 3 +- 4 files changed, 131 insertions(+), 114 deletions(-) delete mode 100644 pkg/scrape/javbus.go create mode 100644 pkg/scrape/r18d.go diff --git a/pkg/scrape/javbus.go b/pkg/scrape/javbus.go deleted file mode 100644 index c47b1f991..000000000 --- a/pkg/scrape/javbus.go +++ /dev/null @@ -1,110 +0,0 @@ -package scrape - -import ( - "regexp" - "strconv" - "strings" - - "github.com/gocolly/colly/v2" - "github.com/xbapps/xbvr/pkg/models" -) - -func ScrapeJavBus(out *[]models.ScrapedScene, queryString string) { - sceneCollector := createCollector("www.javbus.com") - - sceneCollector.OnHTML(`html`, func(html *colly.HTMLElement) { - sc := models.ScrapedScene{} - sc.SceneType = "VR" - - // Always add 'javr' as a tag - sc.Tags = append(sc.Tags, `javr`) - - // Always add 'javbus' as a tag - sc.Tags = append(sc.Tags, `javbus`) - - html.ForEach(`div.row.movie div.info > p`, func(id int, p *colly.HTMLElement) { - label := p.ChildText(`span.header`) - - if label == `Studio:` { - // Studio - sc.Studio = p.ChildText(`a`) - - } else if label == `ID:` { - // Title, SceneID and SiteID all like 'VRKM-821' format - idRegex := regexp.MustCompile("^([A-Za-z0-9]+)-([0-9]+)$") - p.ForEach("span", func(_ int, span *colly.HTMLElement) { - match := idRegex.FindStringSubmatch(span.Text) - if match != nil && len(match) > 2 { - dvdId := match[1] + "-" + match[2] - sc.Title = dvdId - sc.SceneID = dvdId - sc.SiteID = dvdId - sc.Site = match[1] - } - }) - - } else if label == `Release Date:` { - // Release date - dateStr := p.Text - dateRegex := regexp.MustCompile("(\\d\\d\\d\\d-\\d\\d-\\d\\d)") - match := dateRegex.FindStringSubmatch(dateStr) - if match != nil && len(match) > 1 { - sc.Released = match[1] - } - - } else if label == `Length:` { - // Duration - durationStr := p.Text - durationRegex := regexp.MustCompile("(\\d+)") - match := durationRegex.FindStringSubmatch(durationStr) - if match != nil && len(match) > 1 { - sc.Duration, _ = strconv.Atoi(match[1]) - } - } - }) - - // Tags - html.ForEach("div.row.movie span.genre > label > a", func(id int, anchor *colly.HTMLElement) { - href := anchor.Attr("href") - if strings.Contains(href, "javbus.com/en/genre/") { - // Tags - tag := ProcessJavrTag(anchor.Text) - - if tag != "" { - sc.Tags = append(sc.Tags, tag) - } - } - }) - - // Cast - html.ForEach("div.row.movie div.star-name > a", func(id int, anchor *colly.HTMLElement) { - href := anchor.Attr("href") - if strings.Contains(href, "javbus.com/en/star/") { - sc.Cast = append(sc.Cast, anchor.Text) - } - }) - - // Screenshots - html.ForEach("a[href]", func(_ int, anchor *colly.HTMLElement) { - linkHref := anchor.Attr(`href`) - if strings.HasPrefix(linkHref, "https://pics.dmm.co.jp/digital/video/") && strings.HasSuffix(linkHref, `.jpg`) { - sc.Gallery = append(sc.Gallery, linkHref) - } - }) - - // Apply post-processing for error-correcting code - PostProcessJavScene(&sc, "") - - if sc.SceneID != "" { - *out = append(*out, sc) - } - }) - - // Allow comma-separated scene id's - scenes := strings.Split(queryString, ",") - for _, v := range scenes { - sceneCollector.Visit("https://www.javbus.com/en/" + strings.ToUpper(v) + "/") - } - - sceneCollector.Wait() -} diff --git a/pkg/scrape/r18d.go b/pkg/scrape/r18d.go new file mode 100644 index 000000000..f5acb75bc --- /dev/null +++ b/pkg/scrape/r18d.go @@ -0,0 +1,126 @@ +package scrape + +import ( + "html" + "strconv" + "strings" + + "github.com/go-resty/resty/v2" + "github.com/tidwall/gjson" + "github.com/xbapps/xbvr/pkg/models" +) + +func ScrapeR18D(out *[]models.ScrapedScene, queryString string) error { + scenes := strings.Split(queryString, ",") + for _, v := range scenes { + sc := models.ScrapedScene{} + sc.SceneType = "VR" + + r, _ := resty.New().R().Get("https://r18.dev/videos/vod/movies/detail/-/combined=" + v + "/json") + JsonMetadata := r.String() + + content_id := gjson.Get(JsonMetadata, "content_id").String() + sc.HomepageURL = "https://www.dmm.co.jp/en/digital/videoa/-/detail/=/cid=" + content_id + "/" + + // Title + if gjson.Get(JsonMetadata, "title_en_is_machine_translation").String() == "false" { + sc.Title = strings.Replace(strings.TrimSpace(html.UnescapeString(gjson.Get(JsonMetadata, "title_en").String())), "[VR] ", "", -1) + } else { + sc.Title = gjson.Get(JsonMetadata, "content_id").String() + sc.Synopsis = gjson.Get(JsonMetadata, "title_en").String() + } + + // Studio + sc.Studio = gjson.Get(JsonMetadata, "maker_name_en").String() + + // Date + sc.Released = gjson.Get(JsonMetadata, "release_date").String() + + // Time + tmpDuration, err := strconv.Atoi(gjson.Get(JsonMetadata, "runtime_mins").String()) + if err == nil { + sc.Duration = tmpDuration + } + + // Covers + coverimgs := gjson.Get(JsonMetadata, "jacket_full_url") + sc.Covers = append(sc.Covers, strings.TrimSpace(html.UnescapeString(coverimgs.String()))) + + // Gallery + galleryimgs := gjson.Get(JsonMetadata, "gallery.#.image_full") + for _, name := range galleryimgs.Array() { + sc.Gallery = append(sc.Gallery, strings.TrimSpace(html.UnescapeString(name.String()))) + } + + // Cast + actornames := gjson.Get(JsonMetadata, "actresses.#.name_romaji") + for _, name := range actornames.Array() { + sc.Cast = append(sc.Cast, strings.TrimSpace(html.UnescapeString(name.String()))) + } + + // Tags + // Skipping some very generic and useless tags + skiptags := map[string]bool{ + "Featured Actress": true, + "VR Exclusive": true, + "High-Quality VR": true, + "Exclusive Distribution": true, + } + + // JSON dump from R18's final days shows "女子校生" replaced with "Academy Uniform" instead of "Schoolgirl" - r18.dev seems to follow the same mapping for FANZA category 1018 - get your credit card compliance puritanism out of my porn, I don't need "Academy Uniform" and "Uniform" tagged together lmao + joshikosei := "Academy Uniform" + + taglist := gjson.Get(JsonMetadata, "categories.#.name_en") + quality := "VR" + has8KVR := false + for _, name := range taglist.Array() { + if name.Str == "8KVR" { + has8KVR = true + quality = "8K" + } else if name.Str == "High-Quality VR" && !has8KVR { + quality = "HQ" + } + if !skiptags[name.Str] { + if name.Str == joshikosei { + sc.Tags = append(sc.Tags, "schoolgirl") + } else { + sc.Tags = append(sc.Tags, strings.TrimSpace(html.UnescapeString(name.String()))) + } + } + } + sc.Tags = append(sc.Tags, "JAVR") + sc.Tags = append(sc.Tags, "R18.dev") + + // Scene ID and Site + dvdID := gjson.Get(JsonMetadata, "dvd_id").String() + if dvdID == "----" || dvdID == "" { + sc.SceneID = content_id + sc.SiteID = content_id + sc.Site = gjson.Get(JsonMetadata, "label_name_en").String() + } else { + sc.SceneID = dvdID + sc.SiteID = dvdID + sc.Site = strings.Split(dvdID, "-")[0] + } + + // Filler Filenames + resolutions := []string{"vmb"} + if quality == "HQ" { + resolutions = []string{"vrv1uhqe"} + } else if quality == "8K" { + resolutions = []string{"vrv1uhqf", "vrv18khia"} + } + for r := range resolutions { + parts := []string{"", "1", "2", "3"} + for p := range parts { + fn := content_id + resolutions[r] + parts[p] + ".mp4" + sc.Filenames = append(sc.Filenames, fn) + } + } + + if sc.SceneID != "" { + *out = append(*out, sc) + } + } + return nil +} diff --git a/pkg/tasks/content.go b/pkg/tasks/content.go index d0f0542ea..6a612fee4 100644 --- a/pkg/tasks/content.go +++ b/pkg/tasks/content.go @@ -352,9 +352,9 @@ func ScrapeJAVR(queryString string, scraper string) { if scraper == "javlibrary" { tlog.Infof("Scraping JavLibrary") scrape.ScrapeJavLibrary(&collectedScenes, queryString) - } else if scraper == "javbus" { - tlog.Infof("Scraping JavBus") - scrape.ScrapeJavBus(&collectedScenes, queryString) + } else if scraper == "r18d" { + tlog.Infof("Scraping R18.dev") + scrape.ScrapeR18D(&collectedScenes, queryString) } else if scraper == "javland" { tlog.Infof("Scraping JavLand") scrape.ScrapeJavLand(&collectedScenes, queryString) diff --git a/ui/src/views/options/sections/OptionsSceneCreate.vue b/ui/src/views/options/sections/OptionsSceneCreate.vue index 91f4519fa..9c2f0b2af 100644 --- a/ui/src/views/options/sections/OptionsSceneCreate.vue +++ b/ui/src/views/options/sections/OptionsSceneCreate.vue @@ -6,13 +6,14 @@ + - {{$t('Go')}} + R18.dev scraper requires FANZA content ID, e.g. 84vrkm00139 From 1097b066b283d81605371cea714c1d71c061e7d5 Mon Sep 17 00:00:00 2001 From: toshski <104477758+toshski@users.noreply.github.com> Date: Thu, 26 Oct 2023 06:59:54 +1300 Subject: [PATCH 11/39] feat: Add star rating to QuickFind (#1436) --- ui/src/QuickFind.vue | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ui/src/QuickFind.vue b/ui/src/QuickFind.vue index 7fe863e90..6236afa27 100644 --- a/ui/src/QuickFind.vue +++ b/ui/src/QuickFind.vue @@ -48,7 +48,7 @@
- {{ props.option.site}} + {{ props.option.site}}
{{ props.option.title }}
@@ -58,6 +58,7 @@
+
{{format(parseISO(props.option.release_date), "yyyy-MM-dd")}} @@ -74,6 +75,7 @@ import ky from 'ky' import VueLoadImage from 'vue-load-image' import GlobalEvents from 'vue-global-events' import { format, parseISO } from 'date-fns' +import StarRating from 'vue-star-rating' export default { name: 'ModalNewTag', @@ -81,7 +83,7 @@ export default { active: Boolean, sceneId: String }, - components: { VueLoadImage, GlobalEvents }, + components: { VueLoadImage, GlobalEvents, StarRating }, computed: { isActive: { get () { From d7a3ed67bde3861a53f061785ce77cca03288773 Mon Sep 17 00:00:00 2001 From: toshski <104477758+toshski@users.noreply.github.com> Date: Thu, 26 Oct 2023 07:04:34 +1300 Subject: [PATCH 12/39] feat: Bundle Upload Tester (#1441) * Bundle Upload Tester * Add Error Handler/Msgs to Import function --- ui/src/locales/en-GB.json | 1 + .../sections/OptionsSceneDataImportExport.vue | 70 ++++++++++++++++--- 2 files changed, 60 insertions(+), 11 deletions(-) diff --git a/ui/src/locales/en-GB.json b/ui/src/locales/en-GB.json index 9395c05df..013a71791 100644 --- a/ui/src/locales/en-GB.json +++ b/ui/src/locales/en-GB.json @@ -202,5 +202,6 @@ "No matching attributes":"No matching attributes", "Only required when troubleshooting search issues, this will enable a Tab in the Scene Details to display what search fields exist and their values for a scene":"Only required when troubleshooting search issues, this will enable a Tab in the Scene Details to display what search fields exist and their values for a scene", "Scene Id Required": "Scene Id Required", + "Occasionaly test uploading your export bundles. Browser memory constraints may cause problems restoring large exports. Use this function to test if your browser can load an export.": "Occasionaly test uploading your export bundles. Browser memory constraints may cause problems restoring large exports. Use this function to test if your browser can load an export.", "Go": "Go" } diff --git a/ui/src/views/options/sections/OptionsSceneDataImportExport.vue b/ui/src/views/options/sections/OptionsSceneDataImportExport.vue index 96ac36c12..d4a879f92 100644 --- a/ui/src/views/options/sections/OptionsSceneDataImportExport.vue +++ b/ui/src/views/options/sections/OptionsSceneDataImportExport.vue @@ -160,8 +160,8 @@

Overwrite existing data

- - + @@ -176,14 +176,27 @@ - - - Export + + + + + + Test + + + {{ progressMsg }} + + + +
@@ -217,6 +230,8 @@ export default { currentPlaylist: '0', myUrl: '/download/xbvr-content-bundle.json', file: null, + testfile: null, + progressMsg:"", uploadData: '', activeTab: 0, activeSubTab: 0 @@ -236,13 +251,46 @@ export default { watch: { // when a file is selected, then this will fire the upload process file: function (o, n) { - if (this.file != null) { - const reader = new FileReader() - reader.onload = (event) => { - this.uploadData = JSON.stringify(JSON.parse(event.target.result)) - this.restoreContent() + try { + if (this.file != null) { + const reader = new FileReader() + reader.onload = (event) => { + try { + this.uploadData = JSON.stringify(JSON.parse(event.target.result)) + this.restoreContent() + } catch (error) { + this.$buefy.toast.open({message: `Error: ${error.message}`, type: 'is-danger', duration: 30000}) + } + } + reader.readAsText(this.file) } - reader.readAsText(this.file) + } catch (error) { + this.$buefy.toast.open({message: `Error: ${error.message}`, type: 'is-danger', duration: 30000}) + } + }, + testfile: function (o, n) { + try { + this.$buefy.toast.open({message: `Loading: ` + this.testfile.name, type: 'is-primary', duration: 30000}) + if (this.testfile != null) { + this.progressMsg = "Uploading " + this.testfile.name + const reader = new FileReader() + reader.onload = (event) => { + try { + this.progressMsg = "File uploaded, converting to Json " + this.testfile.name + this.uploadData = JSON.stringify(JSON.parse(event.target.result)) + this.progressMsg = "" + this.$buefy.toast.open({message: `Success Loading: ` + this.testfile.name, type: 'is-success', duration: 5000}) + } catch (error) { + this.progressMsg = "Error: " + error.message + this.$buefy.toast.open({message: `Error: ${error.message}`, type: 'is-danger', duration: 30000}) + } + + } + reader.readAsText(this.testfile) + } + } catch (error) { + this.progressMsg = "Error: " + error.message + this.$buefy.toast.open({message: `Error: ${error.message}`, type: 'is-danger', duration: 30000}) } } }, From 434037eed468fdec904f214380757130c3a73e38 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 20:04:50 +0200 Subject: [PATCH 13/39] chore(deps): update dependency eslint-plugin-vue to v9.18.0 (#1447) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 297fcba67..1c814c737 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "6.1.1", "eslint-plugin-standard": "4.1.0", - "eslint-plugin-vue": "9.17.0", + "eslint-plugin-vue": "9.18.0", "less": "4.2.0", "less-loader": "11.1.3", "sass": "1.69.4", diff --git a/yarn.lock b/yarn.lock index 1d78f0495..66993727b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4037,10 +4037,10 @@ eslint-plugin-standard@4.1.0: resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz#0c3bf3a67e853f8bbbc580fb4945fbf16f41b7c5" integrity sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ== -eslint-plugin-vue@9.17.0: - version "9.17.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz#4501547373f246547083482838b4c8f4b28e5932" - integrity sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ== +eslint-plugin-vue@9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.18.0.tgz#2a2dbb3c67317e8c11ab56cafaa15a3a7eac6282" + integrity sha512-yUM8a2OD/7Qs0PiugkRaxgz5KBRvzMvWShity2UvVFAN0yk8029mGpTdg/TNARPiYzp335mEwDHwcAR8tQNe4g== dependencies: "@eslint-community/eslint-utils" "^4.4.0" natural-compare "^1.4.0" From 308da04c1a185c8b4f5811d78bc70db3d027ea2e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 20:05:03 +0200 Subject: [PATCH 14/39] chore(deps): update dependency webpack to v5.89.0 (#1448) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 1c814c737..8b45d3495 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "vue-cli-plugin-i18n": "2.3.2", "vue-i18n-extract": "2.0.7", "vue-template-compiler": "2.7.15", - "webpack": "5.88.2" + "webpack": "5.89.0" }, "eslintConfig": { "root": true, diff --git a/yarn.lock b/yarn.lock index 66993727b..7c04d1ef7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8452,10 +8452,10 @@ webpack-virtual-modules@^0.4.2: resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.4.tgz#a19fcf371923c59c4712d63d7d194b1e4d8262cc" integrity sha512-h9atBP/bsZohWpHnr+2sic8Iecb60GxftXsWNLLLSqewgIsGzByd2gcIID4nXcG+3tNe4GQG3dLcff3kXupdRA== -webpack@5.88.2: - version "5.88.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.2.tgz#f62b4b842f1c6ff580f3fcb2ed4f0b579f4c210e" - integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== +webpack@5.89.0: + version "5.89.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.89.0.tgz#56b8bf9a34356e93a6625770006490bf3a7f32dc" + integrity sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.0" From efa4407719c1cf87f726259f9dbc38249b55c57f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Oct 2023 17:37:09 +0200 Subject: [PATCH 15/39] chore(deps): update dependency sass to v1.69.5 (#1454) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 8b45d3495..dea1bb8e0 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "eslint-plugin-vue": "9.18.0", "less": "4.2.0", "less-loader": "11.1.3", - "sass": "1.69.4", + "sass": "1.69.5", "sass-loader": "13.3.2", "simple-progress-webpack-plugin": "2.0.0", "vue-cli-plugin-i18n": "2.3.2", diff --git a/yarn.lock b/yarn.lock index 7c04d1ef7..3c6549033 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7186,10 +7186,10 @@ sass-loader@13.3.2: dependencies: neo-async "^2.6.2" -sass@1.69.4: - version "1.69.4" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.4.tgz#10c735f55e3ea0b7742c6efa940bce30e07fbca2" - integrity sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA== +sass@1.69.5: + version "1.69.5" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.5.tgz#23e18d1c757a35f2e52cc81871060b9ad653dfde" + integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From d82b55ee4de948ae7b10ca3a030aaf81e9a28499 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Oct 2023 17:37:21 +0200 Subject: [PATCH 16/39] fix(deps): update module github.com/anacrolix/ffprobe to v1.1.0 (#1451) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 951f97aef..530a6b348 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/ProtonMail/go-appdir v1.1.0 github.com/PuerkitoBio/goquery v1.8.1 github.com/abbot/go-http-auth v0.4.0 - github.com/anacrolix/ffprobe v1.0.1 + github.com/anacrolix/ffprobe v1.1.0 github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de github.com/avast/retry-go/v4 v4.5.0 github.com/blevesearch/bleve/v2 v2.3.10 diff --git a/go.sum b/go.sum index 142c82daa..f6566678b 100644 --- a/go.sum +++ b/go.sum @@ -16,6 +16,8 @@ github.com/abbot/go-http-auth v0.4.0/go.mod h1:Cz6ARTIzApMJDzh5bRMSUou6UMSp0IEXg github.com/anacrolix/envpprof v1.0.0 h1:AwZ+mBP4rQ5f7JSsrsN3h7M2xDW/xSE66IPVOqlnuUc= github.com/anacrolix/ffprobe v1.0.1 h1:S/MfCrUNZvbkkykX/1mmLVRf8//M7mvlY3BcwHaK3bQ= github.com/anacrolix/ffprobe v1.0.1/go.mod h1:MXe+zG/RRa5OdIf5+VYYfS/CfsSqOH7RrvGIqJBzqhI= +github.com/anacrolix/ffprobe v1.1.0 h1:eKBudnERW9zRJ0+ge6FzkQ0pWLyq142+FJrwRwSRMT4= +github.com/anacrolix/ffprobe v1.1.0/go.mod h1:MXe+zG/RRa5OdIf5+VYYfS/CfsSqOH7RrvGIqJBzqhI= github.com/anacrolix/missinggo v1.1.0 h1:0lZbaNa6zTR1bELAIzCNmRGAtkHuLDPJqTiTtXoAIx8= github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/andybalholm/cascadia v1.2.0/go.mod h1:YCyR8vOZT9aZ1CHEd8ap0gMVm2aFgxBp0T0eFw1RUQY= From 848f4ff3a8d5e8165c719a2c7facf2bf800e8991 Mon Sep 17 00:00:00 2001 From: peter23231 <148326204+peter23231@users.noreply.github.com> Date: Thu, 2 Nov 2023 21:40:24 +0100 Subject: [PATCH 17/39] feat: Add option to show heatmaps in the scene list (#1461) * Add script heatmap to scene list as toggleable option (#1) * 'Improve' CSS * Actually 'improved' CSS * fix for some funscripts which fail to generate a heatmap --- pkg/api/options.go | 2 ++ pkg/config/config.go | 1 + pkg/config/state.go | 1 + ui/src/store/optionsWeb.js | 3 +++ .../views/options/sections/InterfaceWeb.vue | 13 ++++++++++ ui/src/views/scenes/SceneCard.vue | 25 +++++++++++++++++++ 6 files changed, 45 insertions(+) diff --git a/pkg/api/options.go b/pkg/api/options.go index eef169b24..20d55de85 100644 --- a/pkg/api/options.go +++ b/pkg/api/options.go @@ -56,6 +56,7 @@ type RequestSaveOptionsWeb struct { ShowHspFile bool `json:"showHspFile"` ShowSubtitlesFile bool `json:"showSubtitlesFile"` SceneTrailerlist bool `json:"sceneTrailerlist"` + ShowScriptHeatmap bool `json:"showScriptHeatmap"` UpdateCheck bool `json:"updateCheck"` } @@ -379,6 +380,7 @@ func (i ConfigResource) saveOptionsWeb(req *restful.Request, resp *restful.Respo config.Config.Web.ShowHspFile = r.ShowHspFile config.Config.Web.ShowSubtitlesFile = r.ShowSubtitlesFile config.Config.Web.SceneTrailerlist = r.SceneTrailerlist + config.Config.Web.ShowScriptHeatmap = r.ShowScriptHeatmap config.Config.Web.UpdateCheck = r.UpdateCheck config.SaveConfig() diff --git a/pkg/config/config.go b/pkg/config/config.go index 09b699d36..6ee6482b3 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -41,6 +41,7 @@ type ObjectConfig struct { ShowHspFile bool `default:"true" json:"showHspFile"` ShowSubtitlesFile bool `default:"true" json:"showSubtitlesFile"` SceneTrailerlist bool `default:"true" json:"sceneTrailerlist"` + ShowScriptHeatmap bool `default:"true" json:"showScriptHeatmap"` UpdateCheck bool `default:"true" json:"updateCheck"` } `json:"web"` Advanced struct { diff --git a/pkg/config/state.go b/pkg/config/state.go index 72814da39..4620527f6 100644 --- a/pkg/config/state.go +++ b/pkg/config/state.go @@ -24,6 +24,7 @@ type ObjectState struct { ShowHspFile bool `json:"showHspFile"` ShowSubtitlesFile bool `json:"showSubtitlesFile"` SceneTrailerlist bool `json:"sceneTrailerlist"` + ShowScriptHeatmap bool `json:"showScriptHeatmap"` UpdateCheck bool `json:"updateCheck"` } `json:"web"` DLNA struct { diff --git a/ui/src/store/optionsWeb.js b/ui/src/store/optionsWeb.js index 6aa91a99a..862ed23cf 100644 --- a/ui/src/store/optionsWeb.js +++ b/ui/src/store/optionsWeb.js @@ -15,6 +15,7 @@ const state = { showHspFile: true, showSubtitlesFile: true, sceneTrailerlist: true, + showScriptHeatmap: false, updateCheck: true } } @@ -39,6 +40,7 @@ const actions = { state.web.showHspFile = data.config.web.showHspFile state.web.showSubtitlesFile = data.config.web.showSubtitlesFile state.web.sceneTrailerlist = data.config.web.sceneTrailerlist + state.web.showScriptHeatmap = data.config.web.showScriptHeatmap state.web.updateCheck = data.config.web.updateCheck state.loading = false }) @@ -60,6 +62,7 @@ const actions = { state.web.showHspFile = data.showHspFile state.web.showSubtitlesFile = data.showSubtitlesFile state.web.sceneTrailerlist = data.sceneTrailerlist + state.web.showScriptHeatmap = data.showScriptHeatmap state.web.updateCheck = data.updateCheck state.loading = false }) diff --git a/ui/src/views/options/sections/InterfaceWeb.vue b/ui/src/views/options/sections/InterfaceWeb.vue index 9c8868a5a..55139db31 100644 --- a/ui/src/views/options/sections/InterfaceWeb.vue +++ b/ui/src/views/options/sections/InterfaceWeb.vue @@ -75,6 +75,11 @@ show subtitles File button + + + show Script Heatmap + + @@ -168,6 +173,14 @@ export default { this.$store.state.optionsWeb.web.sceneEdit = value } }, + ScriptHeatmap: { + get () { + return this.$store.state.optionsWeb.web.showScriptHeatmap + }, + set (value) { + this.$store.state.optionsWeb.web.showScriptHeatmap = value + } + }, updateCheck: { get () { return this.$store.state.optionsWeb.web.updateCheck diff --git a/ui/src/views/scenes/SceneCard.vue b/ui/src/views/scenes/SceneCard.vue index 4b4066670..068a5402e 100644 --- a/ui/src/views/scenes/SceneCard.vue +++ b/ui/src/views/scenes/SceneCard.vue @@ -41,6 +41,11 @@ {{item.duration}}m +
+
+ +
+
@@ -153,6 +158,12 @@ export default { this.$store.commit('overlay/showDetails', { scene: scene }) } this.$store.commit('overlay/hideActorDetails') + }, + getHeatmapURL (fileId) { + return `/api/dms/heatmap/${fileId}` + }, + getFunscript () { + return this.item.file !== null && this.item.file.find(a => a.type === 'script' && a.has_heatmap); } } } @@ -204,6 +215,8 @@ export default { .align-bottom-left { align-items: flex-end; justify-content: flex-end; + flex-wrap: wrap; + flex-direction: column } .bbox:after { @@ -223,4 +236,16 @@ export default { overflow: hidden; text-overflow: ellipsis; } + +.heatmapFunscript { + width: auto; +} + +.heatmapFunscript img { + border: 1px #888 solid; + width: 100%; + height: 15px; + border-radius: 0.25rem; +} + From c95f30cd6479afe0200dce0542e3633536da7cca Mon Sep 17 00:00:00 2001 From: crwxaj <52156245+crwxaj@users.noreply.github.com> Date: Thu, 2 Nov 2023 21:40:49 +0100 Subject: [PATCH 18/39] scraper: Fix TmwVRnet (#1463) Co-authored-by: crwxaj --- pkg/scrape/tmwvrnet.go | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/pkg/scrape/tmwvrnet.go b/pkg/scrape/tmwvrnet.go index 1604b16e8..6cbee6c74 100644 --- a/pkg/scrape/tmwvrnet.go +++ b/pkg/scrape/tmwvrnet.go @@ -32,10 +32,10 @@ func TmwVRnet(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out cha sc.HomepageURL = strings.Split(e.Request.URL.String(), "?")[0] // Date & Duration - e.ForEach(`.info-block__main-info_f`, func(id int, e *colly.HTMLElement) { - tmpDate, _ := goment.New(e.ChildText(`.date`), "MMMM DD, YYYY") + e.ForEach(`.video-info-data`, func(id int, e *colly.HTMLElement) { + tmpDate, _ := goment.New(e.ChildText(`.video-info-date`), "MMMM DD, YYYY") sc.Released = tmpDate.Format("YYYY-MM-DD") - tmpDuration, err := strconv.Atoi(strings.TrimSpace(strings.Replace(e.ChildText(`.durations`), " min", "", -1))) + tmpDuration, err := strconv.Atoi(strings.TrimSpace(strings.Replace(e.ChildText(`.video-info-time`), " min", "", -1))) if err == nil { sc.Duration = tmpDuration } @@ -45,12 +45,7 @@ func TmwVRnet(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out cha e.ForEach(`dl8-video`, func(id int, e *colly.HTMLElement) { sc.Title = strings.TrimSpace(e.Attr("title")) - tmpCover := "" - if e.Request.Ctx.GetAny("cover-id").(string) == "" { - tmpCover = e.Request.AbsoluteURL(e.Attr("poster")) - } else { - tmpCover = e.Request.AbsoluteURL(e.Request.Ctx.GetAny("cover-id").(string)) - } + tmpCover := e.Request.AbsoluteURL(e.Attr("poster")) sc.Covers = append(sc.Covers, tmpCover) tmp := strings.Split(tmpCover, "/") @@ -60,16 +55,25 @@ func TmwVRnet(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out cha // Gallery e.ForEach(`div.photo-list img`, func(id int, e *colly.HTMLElement) { - sc.Gallery = append(sc.Gallery, e.Request.AbsoluteURL(e.Attr("src"))) + galleryURL := e.Request.AbsoluteURL(e.Attr("src")) + if galleryURL == "" || galleryURL == "https://tmwvrnet.com/assets/vr/public/tour1/images/th5.jpg" { + return + } + srcset := strings.Split(e.Attr("srcset"), ",") + lastSrc := srcset[len(srcset)-1] + if lastSrc != "" { + galleryURL = e.Request.AbsoluteURL(strings.TrimSpace(strings.Split(lastSrc, " ")[0])) + } + sc.Gallery = append(sc.Gallery, galleryURL) }) // Synopsis - e.ForEach(`div.about-video p.about`, func(id int, e *colly.HTMLElement) { + e.ForEach(`p.video-description-text`, func(id int, e *colly.HTMLElement) { sc.Synopsis = strings.TrimSpace(e.Text) }) // Tags - e.ForEach(`div.about-video .tags-list a`, func(id int, e *colly.HTMLElement) { + e.ForEach(`div.video-tag-list a`, func(id int, e *colly.HTMLElement) { tag := strings.TrimSpace(e.Text) if tag != "" { sc.Tags = append(sc.Tags, tag) @@ -84,7 +88,7 @@ func TmwVRnet(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out cha // Cast sc.ActorDetails = make(map[string]models.ActorDetails) - e.ForEach(`div.about-video p.featuring a`, func(id int, e *colly.HTMLElement) { + e.ForEach(`.video-actor-list a`, func(id int, e *colly.HTMLElement) { sc.Cast = append(sc.Cast, strings.TrimSpace(e.Text)) sc.ActorDetails[strings.TrimSpace(e.Text)] = models.ActorDetails{Source: sc.ScraperID + " scrape", ProfileUrl: e.Request.AbsoluteURL(e.Attr("href"))} }) @@ -100,25 +104,20 @@ func TmwVRnet(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out cha siteCollector.Visit(pageURL) }) - siteCollector.OnHTML(`div.thumbs__image`, func(e *colly.HTMLElement) { + siteCollector.OnHTML(`div.thumb-photo`, func(e *colly.HTMLElement) { sceneURL := e.Request.AbsoluteURL(e.ChildAttr(`a`, "href")) - ctx := colly.NewContext() - ctx.Put("cover-id", e.ChildAttr(`img`, "data-src")) if strings.Contains(sceneURL, "trailers") { // If scene exist in database, there's no need to scrape if !funk.ContainsString(knownScenes, sceneURL) { - sceneCollector.Request("GET", sceneURL, nil, ctx, nil) + sceneCollector.Visit(sceneURL) } } }) if singleSceneURL != "" { - ctx := colly.NewContext() - ctx.Put("cover-id", "") - - sceneCollector.Request("GET", singleSceneURL, nil, ctx, nil) + sceneCollector.Visit(singleSceneURL) } else { siteCollector.Visit("https://tmwvrnet.com/categories/movies.html") } From 3557b8aa5e983d74ba52132e81468a3effdb055b Mon Sep 17 00:00:00 2001 From: crwxaj <52156245+crwxaj@users.noreply.github.com> Date: Sun, 5 Nov 2023 14:08:44 +0100 Subject: [PATCH 19/39] scraper: Fix VRBangers crash (#1466) Co-authored-by: crwxaj --- pkg/scrape/vrbangers.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/scrape/vrbangers.go b/pkg/scrape/vrbangers.go index 2702adc54..7bb556b82 100755 --- a/pkg/scrape/vrbangers.go +++ b/pkg/scrape/vrbangers.go @@ -32,7 +32,11 @@ func VRBangersSite(wg *sync.WaitGroup, updateSite bool, knownScenes []string, ou sc.Site = siteID sc.HomepageURL = strings.Split(e.Request.URL.String(), "?")[0] - content_id := strings.Split(strings.Replace(sc.HomepageURL, "//", "/", -1), "/")[3] + parts := strings.Split(strings.Replace(sc.HomepageURL, "//", "/", -1), "/") + if len(parts) < 4 { + return + } + content_id := parts[3] //https://content.vrbangers.com contentURL := strings.Replace(URL, "//", "//content.", 1) From 10bfaec2e968083e7475672e55a4c35f40b972bc Mon Sep 17 00:00:00 2001 From: vt-idiot <81622808+vt-idiot@users.noreply.github.com> Date: Sun, 5 Nov 2023 08:11:07 -0500 Subject: [PATCH 20/39] scraper: Better filename generation for SLR scrapers (#1440) * Update slrstudios.go Attempt at re-writing the filename part of the scraper. * Update slrstudios.go Uses the API to properly set only the relevant filenames. * Update slrstudios.go Additional fix for trans scene ID collisions. And the old filename method is necessary for trans scenes unless someone knows the API endpoint. --- pkg/scrape/slrstudios.go | 127 +++++++++++++++++++++++++++------------ 1 file changed, 88 insertions(+), 39 deletions(-) diff --git a/pkg/scrape/slrstudios.go b/pkg/scrape/slrstudios.go index 4c0b2f353..4ecd26593 100644 --- a/pkg/scrape/slrstudios.go +++ b/pkg/scrape/slrstudios.go @@ -133,6 +133,10 @@ func SexLikeReal(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out sc.TrailerType = "slr" sc.TrailerSrc = "https://api.sexlikereal.com/virtualreality/video/id/" + sc.SiteID + s, _ := resty.New().R(). + SetHeader("User-Agent", UserAgent). + Get(sc.TrailerSrc) + JsonMetadataA := s.String() isTransScene := e.Request.Ctx.GetAny("isTransScene").(bool) @@ -202,6 +206,9 @@ func SexLikeReal(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out // Title sc.Title = gjson.Get(JsonMetadata, "title").String() + // Fix Scene ID Collisions + sc.SceneID = "slr-trans-" + sc.SiteID + // Duration - Not Available // Filenames @@ -223,10 +230,6 @@ func SexLikeReal(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out // Passthrough "chromaKey":{"enabled":false,"hasAlpha":true,"h":0,"opacity":1,"s":0,"threshold":0,"v":0} if alphA == "PT" { - s, _ := resty.New().R(). - SetHeader("User-Agent", UserAgent). - Get(sc.TrailerSrc) - JsonMetadataA := s.String() if gjson.Get(JsonMetadataA, "chromaKey").Exists() { sc.ChromaKey = gjson.Get(JsonMetadataA, "chromaKey").String() } @@ -234,7 +237,7 @@ func SexLikeReal(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out } // Filenames - appendFilenames(&sc, siteID, filenameRegEx, videotype, FB360, alphA) + appendFilenames(&sc, siteID, filenameRegEx, videotype, FB360, alphA, JsonMetadataA, isTransScene) // actor details sc.ActorDetails = make(map[string]models.ActorDetails) @@ -355,47 +358,93 @@ func SexLikeReal(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out return nil } -func appendFilenames(sc *models.ScrapedScene, siteID string, filenameRegEx *regexp.Regexp, videotype string, FB360 string, AlphA string) { +func appendFilenames(sc *models.ScrapedScene, siteID string, filenameRegEx *regexp.Regexp, videotype string, FB360 string, AlphA string, JsonMetadataA string, isTransScene bool) { // Only shown for logged in users so need to generate them // Format: SLR_siteID_Title__SceneID__<180/360>.mp4 - resolutions := []string{"_6400p_", "_4096p_", "_4000p_", "_3840p_", "_3360p_", "_3160p_", "_3072p_", "_3000p_", "_2900p_", "_2880p_", "_2700p_", "_2650p_", "_2160p_", "_1920p_", "_1440p_", "_1080p_", "_original_"} - baseName := "SLR_" + strings.TrimSuffix(siteID, " (SLR)") + "_" + filenameRegEx.ReplaceAllString(sc.Title, "_") - switch videotype { - case "360°": // Sadly can't determine if TB or MONO so have to add both - for i := range resolutions { - sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_MONO_360.mp4") - sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_TB_360.mp4") - } - case "Fisheye": // 200° videos named with MKX200 - for i := range resolutions { + if !isTransScene { + viewAngle := gjson.Get(JsonMetadataA, "viewAngle").String() + projSuffix := "_LR_180.mp4" + if viewAngle == "190" || viewAngle == "200" || viewAngle == "220" { + screentype := strings.ToUpper(gjson.Get(JsonMetadataA, "screenType").String()) + projSuffix = "_" + screentype if AlphA == "true" { - sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_MKX200_alpha.mp4") - sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_MKX220_alpha.mp4") - sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_RF52_alpha.mp4") - sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_FISHEYE190_alpha.mp4") - sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_VRCA220_alpha.mp4") + projSuffix = "_" + screentype + "_alpha" + } + if FB360 != "" { + FB360 = projSuffix + "_FB360.mkv" + } + projSuffix = projSuffix + ".mp4" + } else if viewAngle == "360" { + monotb := gjson.Get(JsonMetadataA, "stereomode").String() + if monotb == "mono" { + projSuffix = "_MONO_360.mp4" } else { - sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_MKX200.mp4") - sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_MKX220.mp4") - sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_RF52.mp4") - sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_FISHEYE190.mp4") - sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_VRCA220.mp4") + projSuffix = "_TB_360.mp4" } } - default: // Assuming everything else is 180 and LR, yet to find a TB_180 - for i := range resolutions { - sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_LR_180.mp4") + resolutions := []string{"_original_"} + encodings := gjson.Get(JsonMetadataA, "encodings.#(name=h265).videoSources.#.resolution") + for _, name := range encodings.Array() { + resolutions = append(resolutions, "_"+name.String()+"p_") + } + baseName := "SLR_" + strings.TrimSuffix(siteID, " (SLR)") + "_" + filenameRegEx.ReplaceAllString(sc.Title, "_") + switch videotype { + case "360°": + for i := range resolutions { + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+projSuffix) + } + case "Fisheye": // 200° videos named with MKX200 + for i := range resolutions { + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+projSuffix) + } + default: // Assuming everything else is 180 and LR, yet to find a TB_180 + for i := range resolutions { + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+projSuffix) + } + } + if FB360 != "" { + sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+FB360) + } + } else { + resolutions := []string{"_6400p_", "_4096p_", "_4000p_", "_3840p_", "_3360p_", "_3160p_", "_3072p_", "_3000p_", "_2900p_", "_2880p_", "_2700p_", "_2650p_", "_2160p_", "_1920p_", "_1440p_", "_1080p_", "_original_"} + baseName := "SLR_" + strings.TrimSuffix(siteID, " (SLR)") + "_" + filenameRegEx.ReplaceAllString(sc.Title, "_") + switch videotype { + case "360°": // Sadly can't determine if TB or MONO so have to add both + for i := range resolutions { + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_MONO_360.mp4") + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_TB_360.mp4") + } + case "Fisheye": // 200° videos named with MKX200 + for i := range resolutions { + if AlphA == "true" { + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_MKX200_alpha.mp4") + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_MKX220_alpha.mp4") + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_RF52_alpha.mp4") + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_FISHEYE190_alpha.mp4") + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_VRCA220_alpha.mp4") + } else { + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_MKX200.mp4") + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_MKX220.mp4") + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_RF52.mp4") + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_FISHEYE190.mp4") + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_VRCA220.mp4") + } + } + default: // Assuming everything else is 180 and LR, yet to find a TB_180 + for i := range resolutions { + sc.Filenames = append(sc.Filenames, baseName+resolutions[i]+sc.SiteID+"_LR_180.mp4") + } + } + if FB360 != "" { + sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"_LR_180"+FB360) + sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"_MKX200"+FB360) + sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"_MKX220"+FB360) + sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"_RF52"+FB360) + sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"FISHEYE190"+FB360) + sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"_VRCA220"+FB360) + sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"_MONO_360"+FB360) + sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"_TB_360"+FB360) } - } - if FB360 != "" { - sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"_LR_180"+FB360) - sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"_MKX200"+FB360) - sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"_MKX220"+FB360) - sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"_RF52"+FB360) - sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"FISHEYE190"+FB360) - sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"_VRCA220"+FB360) - sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"_MONO_360"+FB360) - sc.Filenames = append(sc.Filenames, baseName+"_original_"+sc.SiteID+"_TB_360"+FB360) } } From 67113632d0699eaca1418b40f2ab4d55a3e524ef Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 Nov 2023 14:12:32 +0100 Subject: [PATCH 21/39] fix(deps): update module github.com/djherbis/times to v1.6.0 (#1455) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 530a6b348..6e4c459d3 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/creasty/defaults v1.7.0 github.com/darwayne/go-timecode v1.1.0 github.com/disintegration/imaging v1.6.2 - github.com/djherbis/times v1.5.0 + github.com/djherbis/times v1.6.0 github.com/dustin/go-humanize v1.0.1 github.com/emicklei/go-restful-openapi/v2 v2.9.1 github.com/emicklei/go-restful/v3 v3.11.0 diff --git a/go.sum b/go.sum index f6566678b..0d82a25b3 100644 --- a/go.sum +++ b/go.sum @@ -94,6 +94,8 @@ github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1 github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= github.com/djherbis/times v1.5.0 h1:79myA211VwPhFTqUk8xehWrsEO+zcIZj0zT8mXPVARU= github.com/djherbis/times v1.5.0/go.mod h1:5q7FDLvbNg1L/KaBmPcWlVR9NmoKo3+ucqUA3ijQhA0= +github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c= +github.com/djherbis/times v1.6.0/go.mod h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0= github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q= github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= @@ -439,6 +441,7 @@ golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= From 8d1da838f2947dcdea0d8e03c1197ab7dcb1ea3f Mon Sep 17 00:00:00 2001 From: toshski <104477758+toshski@users.noreply.github.com> Date: Mon, 6 Nov 2023 02:13:45 +1300 Subject: [PATCH 22/39] feat: Update Possible Aka Saved Search (#1434) --- pkg/api/actors.go | 1 + pkg/migrations/migrations.go | 38 ++++++++++++++++++++++++++++++++++++ pkg/models/model_actor.go | 6 ++++++ 3 files changed, 45 insertions(+) diff --git a/pkg/api/actors.go b/pkg/api/actors.go index e57385bdd..0e808fdcc 100644 --- a/pkg/api/actors.go +++ b/pkg/api/actors.go @@ -127,6 +127,7 @@ func (i ActorResource) getFilters(req *restful.Request, resp *restful.Response) outAttributes = append(outAttributes, "Has Piercing") outAttributes = append(outAttributes, "Aka Group") outAttributes = append(outAttributes, "Possible Aka") + outAttributes = append(outAttributes, "In An Aka Group") outAttributes = append(outAttributes, "Multiple Stashdb Links") outAttributes = append(outAttributes, "Has Image") diff --git a/pkg/migrations/migrations.go b/pkg/migrations/migrations.go index 01b991567..ef087c9aa 100644 --- a/pkg/migrations/migrations.go +++ b/pkg/migrations/migrations.go @@ -1765,6 +1765,44 @@ func Migrate() { return nil }, }, + { + ID: "0070-update_possible_aka_saved_search", + Migrate: func(tx *gorm.DB) error { + // update existing Possible Aka Actor Playlist + var playlist models.Playlist + tx.Model(&models.Playlist{}).Where("playlist_type = ? and name = ?", "actor", "Possible Aka").First(&playlist) + if playlist.ID != 0 { + list := models.RequestActorList{ + DlState: optional.NewString("Any"), + Lists: []optional.String{}, + Cast: []optional.String{}, + Sites: []optional.String{}, + Tags: []optional.String{}, + Attributes: []optional.String{}, + JumpTo: optional.NewString(""), + MinAge: optional.NewInt(0), + MaxAge: optional.NewInt(100), + MinHeight: optional.NewInt(120), + MaxHeight: optional.NewInt(220), + MinCount: optional.NewInt(0), + MaxCount: optional.NewInt(150), + MinAvail: optional.NewInt(0), + MaxAvail: optional.NewInt(150), + MinRating: optional.NewFloat64(0), + MaxRating: optional.NewFloat64(5), + MinSceneRating: optional.NewFloat64(0), + MaxSceneRating: optional.NewFloat64(5), + Sort: optional.NewString("birthday_desc"), + } + list.Attributes = append(list.Attributes, optional.NewString("&Possible Aka"), optional.NewString("!In An Aka Group"), optional.NewString("!Aka Group")) + b, _ := json.Marshal(list) + + playlist.SearchParams = string(b) + playlist.Save() + } + return nil + }, + }, }) if err := m.Migrate(); err != nil { diff --git a/pkg/models/model_actor.go b/pkg/models/model_actor.go index 0534629bd..6f9345f43 100644 --- a/pkg/models/model_actor.go +++ b/pkg/models/model_actor.go @@ -258,6 +258,12 @@ func QueryActors(r RequestActorList, enablePreload bool) ResponseActorList { } else { where = "name not like 'aka:%'" } + case "In An Aka Group": + if truefalse { + where = "(select count(*) from actor_akas " + " where actor_akas.actor_id = actors.id) > 0" + } else { + where = "(select count(*) from actor_akas " + " where actor_akas.actor_id = actors.id) = 0" + } case "Has Image": if truefalse { where = "image_url is not null and image_url <> ''" From 9f43104e5246d31fbe22280b3d161057d0bb0741 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 Nov 2023 14:15:23 +0100 Subject: [PATCH 23/39] fix(deps): update module github.com/go-resty/resty/v2 to v2.10.0 (#1456) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 6e4c459d3..099bcd1d5 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( github.com/gammazero/nexus/v3 v3.2.1 github.com/getlantern/systray v1.2.2 github.com/go-openapi/spec v0.20.9 - github.com/go-resty/resty/v2 v2.7.0 + github.com/go-resty/resty/v2 v2.10.0 github.com/go-test/deep v1.1.0 github.com/gocolly/colly/v2 v2.1.0 github.com/gorilla/mux v1.8.0 diff --git a/go.sum b/go.sum index 0d82a25b3..5ea82d6be 100644 --- a/go.sum +++ b/go.sum @@ -146,6 +146,8 @@ github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyr github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY= github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= +github.com/go-resty/resty/v2 v2.10.0 h1:Qla4W/+TMmv0fOeeRqzEpXPLfTUnR5HZ1+lGs+CkiCo= +github.com/go-resty/resty/v2 v2.10.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= @@ -417,6 +419,7 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -447,12 +450,14 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -462,9 +467,11 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= From 3ba67101ed8c00cd740c0a4920dcc27f560f4d27 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Nov 2023 14:16:05 +0100 Subject: [PATCH 24/39] chore(deps): bump crypto-js from 4.0.0 to 4.2.0 (#1452) Bumps [crypto-js](https://github.com/brix/crypto-js) from 4.0.0 to 4.2.0. - [Commits](https://github.com/brix/crypto-js/compare/4.0.0...4.2.0) --- updated-dependencies: - dependency-name: crypto-js dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3c6549033..112be39c1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3274,9 +3274,9 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: which "^2.0.1" crypto-js@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.0.0.tgz#2904ab2677a9d042856a2ea2ef80de92e4a36dcc" - integrity sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg== + version "4.2.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== css-declaration-sorter@^6.3.0: version "6.3.0" From 5cc16f1d0f155974759efb473850ded85163f011 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 Nov 2023 14:18:09 +0100 Subject: [PATCH 25/39] fix(deps): update dependency @mdi/font to v7.3.67 (#1450) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index dea1bb8e0..f58f744a4 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "dependencies": { "@fortawesome/fontawesome-free": "5.15.4", "@fortawesome/fontawesome-svg-core": "1.2.36", - "@mdi/font": "7.2.96", + "@mdi/font": "7.3.67", "buefy": "0.9.25", "bulma-extensions": "6.2.7", "date-fns": "2.30.0", diff --git a/yarn.lock b/yarn.lock index 112be39c1..911baede8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1418,10 +1418,10 @@ resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@mdi/font@7.2.96": - version "7.2.96" - resolved "https://registry.yarnpkg.com/@mdi/font/-/font-7.2.96.tgz#af800d9fe3b424f85ad45e9baa755bd003ab4986" - integrity sha512-e//lmkmpFUMZKhmCY9zdjRe4zNXfbOIJnn6xveHbaV2kSw5aJ5dLXUxcRt1Gxfi7ZYpFLUWlkG2MGSFAiqAu7w== +"@mdi/font@7.3.67": + version "7.3.67" + resolved "https://registry.yarnpkg.com/@mdi/font/-/font-7.3.67.tgz#faa344a04c9d02f608c891a01134084febeb42db" + integrity sha512-SWxvzRbUQRfewlIV+OF4/YF4DkeTjMWoT8Hh9yeU/5UBVdJZj9Uf4a9+cXjknSIhIaMxZ/4N1O/s7ojApOOGjg== "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" From cb5f2f731c807740d3955ab2c2f8fed960e0acb9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 Nov 2023 14:18:18 +0100 Subject: [PATCH 26/39] chore(deps): update dependency eslint-plugin-vue to v9.18.1 (#1467) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f58f744a4..4a9e905d3 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "6.1.1", "eslint-plugin-standard": "4.1.0", - "eslint-plugin-vue": "9.18.0", + "eslint-plugin-vue": "9.18.1", "less": "4.2.0", "less-loader": "11.1.3", "sass": "1.69.5", diff --git a/yarn.lock b/yarn.lock index 911baede8..91a25312e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4037,10 +4037,10 @@ eslint-plugin-standard@4.1.0: resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz#0c3bf3a67e853f8bbbc580fb4945fbf16f41b7c5" integrity sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ== -eslint-plugin-vue@9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.18.0.tgz#2a2dbb3c67317e8c11ab56cafaa15a3a7eac6282" - integrity sha512-yUM8a2OD/7Qs0PiugkRaxgz5KBRvzMvWShity2UvVFAN0yk8029mGpTdg/TNARPiYzp335mEwDHwcAR8tQNe4g== +eslint-plugin-vue@9.18.1: + version "9.18.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.18.1.tgz#73cf29df7450ce5913296465f8d1dc545344920c" + integrity sha512-7hZFlrEgg9NIzuVik2I9xSnJA5RsmOfueYgsUGUokEDLJ1LHtxO0Pl4duje1BriZ/jDWb+44tcIlC3yi0tdlZg== dependencies: "@eslint-community/eslint-utils" "^4.4.0" natural-compare "^1.4.0" From 2f83e977004dd36309b5e804ae78b18d77e1a3a8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 Nov 2023 14:18:37 +0100 Subject: [PATCH 27/39] fix(deps): update module github.com/gorilla/mux to v1.8.1 (#1468) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 099bcd1d5..e3b10acc8 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/go-resty/resty/v2 v2.10.0 github.com/go-test/deep v1.1.0 github.com/gocolly/colly/v2 v2.1.0 - github.com/gorilla/mux v1.8.0 + github.com/gorilla/mux v1.8.1 github.com/gosimple/slug v1.13.1 github.com/gowww/log v1.0.0 github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 diff --git a/go.sum b/go.sum index 5ea82d6be..e9837b178 100644 --- a/go.sum +++ b/go.sum @@ -198,6 +198,8 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gosimple/slug v1.13.1 h1:bQ+kpX9Qa6tHRaK+fZR0A0M2Kd7Pa5eHPPsb1JpHD+Q= From 9ccbff2d499a1e81137dd7cf2d780c3376d7b6c5 Mon Sep 17 00:00:00 2001 From: toshski <104477758+toshski@users.noreply.github.com> Date: Mon, 6 Nov 2023 02:19:57 +1300 Subject: [PATCH 28/39] Actor pagination fixes (#1435) * Fix Arrow Key scrolling Actor List * Change JumpTo Actors by a Letter --- pkg/models/model_actor.go | 20 ++++++++++++++++---- ui/src/store/actorList.js | 3 ++- ui/src/views/actors/List.vue | 6 ++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/pkg/models/model_actor.go b/pkg/models/model_actor.go index 6f9345f43..6f40c97f6 100644 --- a/pkg/models/model_actor.go +++ b/pkg/models/model_actor.go @@ -88,6 +88,7 @@ type ResponseActorList struct { CountDownloaded int `json:"count_downloaded"` CountNotDownloaded int `json:"count_not_downloaded"` CountHidden int `json:"count_hidden"` + Offset int `json:"offset"` } type ActorLink struct { @@ -346,10 +347,6 @@ func QueryActors(r RequestActorList, enablePreload bool) ResponseActorList { tx = tx.Where("actors.name NOT IN (?)", excludedCast) } - if r.JumpTo.OrElse("") != "" { - tx = tx.Where("actors.name > ?", r.JumpTo.OrElse("")) - } - if r.MinAge.OrElse(0) > 18 || r.MaxAge.OrElse(100) < 100 { startRange := time.Now().AddDate(r.MinAge.OrElse(0)*-1, 0, 0) endRange := time.Now().AddDate(r.MaxAge.OrElse(0)*-1, 0, 0) @@ -476,6 +473,21 @@ func QueryActors(r RequestActorList, enablePreload bool) ResponseActorList { return db.Order("release_date DESC").Where("is_hidden = 0") }) + if r.JumpTo.OrElse("") != "" { + // if we want to jump to actors starting with a specific letter, then we need to work out the offset to them + cnt := 0 + txList := tx.Select(`distinct actors.name`) + txList.Find(&out.Actors) + for idx, actor := range out.Actors { + if strings.ToLower(actor.Name) >= strings.ToLower(r.JumpTo.OrElse("")) { + break + } + cnt = idx + } + offset = (cnt / limit) * limit + } + out.Offset = offset + tx = tx.Select(`distinct actors.*, (select AVG(s.star_rating) scene_avg from scene_cast sc join scenes s on s.id=sc.scene_id where sc.actor_id =actors.id and s.star_rating > 0 ) as scene_rating_average `) diff --git a/ui/src/store/actorList.js b/ui/src/store/actorList.js index 8334f09d3..18779cddf 100644 --- a/ui/src/store/actorList.js +++ b/ui/src/store/actorList.js @@ -161,13 +161,14 @@ const actions = { .json() state.isLoading = false + state.filters.jumpTo = "" // clear the jumpto value now that we have the data if (iOffset === 0) { commit('setActors', []) } commit('setActors', state.actors=data.actors) - state.offset = iOffset + state.limit + state.offset = data.offset + state.limit state.total = data.results } } diff --git a/ui/src/views/actors/List.vue b/ui/src/views/actors/List.vue index 84eb42704..473e4ec1a 100644 --- a/ui/src/views/actors/List.vue +++ b/ui/src/views/actors/List.vue @@ -256,6 +256,9 @@ export default { if (this.$store.state.overlay.actordetails.show){ return } + if (this.$store.state.overlay.details.show){ + return + } if (this.current * this.limit >= this.total) { this.current = 1 } else { @@ -267,6 +270,9 @@ export default { if (this.$store.state.overlay.actordetails.show){ return } + if (this.$store.state.overlay.details.show){ + return + } if (this.current > 1) { this.current -= 1 } else { From 6f2607001f92bed3ce037dacf936fe2163bb7871 Mon Sep 17 00:00:00 2001 From: toshski <104477758+toshski@users.noreply.github.com> Date: Mon, 6 Nov 2023 02:22:57 +1300 Subject: [PATCH 29/39] feat: add command line configuration options (#1449) * Environment Variable to override WSAddr * Add command line and Env Variable config items * Remove debug log left by mistake --- pkg/common/common.go | 2 ++ pkg/common/paths.go | 77 +++++++++++++++++++++++++++++++++++--------- pkg/config/config.go | 4 +++ ui/src/Socket.vue | 2 +- 4 files changed, 68 insertions(+), 17 deletions(-) diff --git a/pkg/common/common.go b/pkg/common/common.go index fe7ecf65c..972895de2 100644 --- a/pkg/common/common.go +++ b/pkg/common/common.go @@ -19,6 +19,8 @@ type EnvConfigSpec struct { UIUsername string `envconfig:"UI_USERNAME" required:"false"` UIPassword string `envconfig:"UI_PASSWORD" required:"false"` DatabaseURL string `envconfig:"DATABASE_URL" required:"false" default:""` + WsAddr string `envconfig:"XBVR_WS_ADDR" required:"false" default:""` + WebPort int `envconfig:"XBVR_WEB_PORT" required:"false" default:"0"` } var EnvConfig EnvConfigSpec diff --git a/pkg/common/paths.go b/pkg/common/paths.go index 360f85de3..db53a6229 100644 --- a/pkg/common/paths.go +++ b/pkg/common/paths.go @@ -21,6 +21,7 @@ var VideoPreviewDir string var VideoThumbnailDir string var ScriptHeatmapDir string var DownloadDir string +var WebPort int func DirSize(path string) (int64, error) { var size int64 @@ -38,41 +39,76 @@ func DirSize(path string) (int64, error) { func InitPaths() { - enableLocalStorage := flag.Bool("localstorage", false, "Use local folder to store application data") + enableLocalStorage := flag.Bool("localstorage", false, "Optional: Use local folder to store application data") + app_dir := flag.String("app_dir", "", "Optional: path to the application directory") + cache_dir := flag.String("cache_dir", "", "Optional: path to the tempoarary scraper cache directory") + imgproxy_dir := flag.String("imgproxy_dir", "", "Optional: path to the imageproxy directory") + search_dir := flag.String("search_dir", "", "Optional: path to the Search Index directory") + preview_dir := flag.String("preview_dir", "", "Optional: path to the Scraper Cache directory") + scriptsheatmap_dir := flag.String("scripts_heatmap_dir", "", "Optional: path to the scripts_heatmap directory") + databaseurl := flag.String("database_url", "", "Optional: override default database path") + web_port := flag.Int("web_port", 0, "Optional: override default Web Page port 9999") + ws_addr := flag.String("ws_addr", "", "Optional: override default Websocket address from the default 0.0.0.0:9998") + flag.Parse() - if *enableLocalStorage { - executable, err := os.Executable() + if *app_dir == "" { + tmp := os.Getenv("XBVR_APPDIR") + app_dir = &tmp + } + if *app_dir == "" { + if *enableLocalStorage { + executable, err := os.Executable() - if err != nil { - panic(err) - } + if err != nil { + panic(err) + } - AppDir = filepath.Dir(executable) + AppDir = filepath.Dir(executable) + } else { + AppDir = appdir.New("xbvr").UserConfig() + } } else { - AppDir = appdir.New("xbvr").UserConfig() + AppDir = *app_dir } - CacheDir = filepath.Join(AppDir, "cache") + CacheDir = getPath(*cache_dir, "XBVR_CACHEDIR", "cache") BinDir = filepath.Join(AppDir, "bin") - ImgDir = filepath.Join(AppDir, "imageproxy") + ImgDir = getPath(*imgproxy_dir, "XBVR_IMAGEPROXYDIR", "imageproxy") MetricsDir = filepath.Join(AppDir, "metrics") HeatmapDir = filepath.Join(AppDir, "heatmap") - IndexDirV2 = filepath.Join(AppDir, "search-v2") + IndexDirV2 = getPath(*search_dir, "XBVR_SEARCHDIR", "search-v2") ScrapeCacheDir = filepath.Join(CacheDir, "scrape_cache") - VideoPreviewDir = filepath.Join(AppDir, "video_preview") + VideoPreviewDir = getPath(*preview_dir, "XBVR_VIDEOPREVIEWDIR", "video_preview") VideoThumbnailDir = filepath.Join(AppDir, "video_thumbnail") - ScriptHeatmapDir = filepath.Join(AppDir, "script_heatmap") + ScriptHeatmapDir = getPath(*scriptsheatmap_dir, "XBVR_SCRIPTHEATMAPDIR", "script_heatmap") DownloadDir = filepath.Join(AppDir, "download") // Initialize DATABASE_URL once appdir path is known - if EnvConfig.DatabaseURL != "" { - DATABASE_URL = EnvConfig.DatabaseURL + if *databaseurl != "" { + DATABASE_URL = *databaseurl } else { - DATABASE_URL = fmt.Sprintf("sqlite:%v", filepath.Join(AppDir, "main.db")) + if EnvConfig.DatabaseURL != "" { + DATABASE_URL = EnvConfig.DatabaseURL + } else { + DATABASE_URL = fmt.Sprintf("sqlite:%v", filepath.Join(AppDir, "main.db")) + } + } + + if *web_port != 0 { + WebPort = *web_port + } else { + WebPort = EnvConfig.WebPort + } + if *ws_addr != "" { + WsAddr = *ws_addr + } else { + if EnvConfig.WsAddr != "" { + WsAddr = EnvConfig.WsAddr + } } _ = os.MkdirAll(AppDir, os.ModePerm) @@ -86,3 +122,12 @@ func InitPaths() { _ = os.MkdirAll(ScriptHeatmapDir, os.ModePerm) _ = os.MkdirAll(DownloadDir, os.ModePerm) } +func getPath(commandLinePath string, environmentName string, directoryName string) string { + if commandLinePath != "" { + return commandLinePath + } + if os.Getenv(environmentName) != "" { + return os.Getenv(environmentName) + } + return filepath.Join(AppDir, directoryName) +} diff --git a/pkg/config/config.go b/pkg/config/config.go index 6ee6482b3..b2cd2f456 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -168,6 +168,10 @@ func LoadConfig() { if err := json.Unmarshal([]byte(obj.Value), &Config); err != nil { common.Log.Error("Failed to load config from database") } + if common.WebPort != 0 && common.WebPort != Config.Server.Port { + Config.Server.Port = common.WebPort + SaveConfig() + } } } diff --git a/ui/src/Socket.vue b/ui/src/Socket.vue index af5b35a17..cc30da878 100644 --- a/ui/src/Socket.vue +++ b/ui/src/Socket.vue @@ -30,7 +30,7 @@ export default { onReconnectSuccess: () => { this.wsStatus = 'connected' } - }) + }) ws.subscribe('service.log', (dataArr, dataObj) => { if (dataArr.argsDict.level == 'debug') { From ef6f0654a6b36c4ad98539b1638c5d5eac0156b6 Mon Sep 17 00:00:00 2001 From: toshski <104477758+toshski@users.noreply.github.com> Date: Mon, 6 Nov 2023 02:27:19 +1300 Subject: [PATCH 30/39] feat: Allow web serving of user files (#1457) * Environment Variable to override WSAddr * Add command line and Env Variable config items * Create MyFiles Web Endpoint * Remove debug log left by mistake * Make Myfiles Directory Configurable --------- Co-authored-by: crwxaj <52156245+crwxaj@users.noreply.github.com> --- pkg/common/paths.go | 4 ++++ pkg/server/myfiles.go | 36 ++++++++++++++++++++++++++++++++++++ pkg/server/server.go | 2 ++ 3 files changed, 42 insertions(+) create mode 100644 pkg/server/myfiles.go diff --git a/pkg/common/paths.go b/pkg/common/paths.go index db53a6229..b206c5132 100644 --- a/pkg/common/paths.go +++ b/pkg/common/paths.go @@ -20,6 +20,7 @@ var ScrapeCacheDir string var VideoPreviewDir string var VideoThumbnailDir string var ScriptHeatmapDir string +var MyFilesDir string var DownloadDir string var WebPort int @@ -46,6 +47,7 @@ func InitPaths() { search_dir := flag.String("search_dir", "", "Optional: path to the Search Index directory") preview_dir := flag.String("preview_dir", "", "Optional: path to the Scraper Cache directory") scriptsheatmap_dir := flag.String("scripts_heatmap_dir", "", "Optional: path to the scripts_heatmap directory") + myfiles_dir := flag.String("myfiles_dir", "", "Optional: path to the myfiles directory for serving users own content (eg images") databaseurl := flag.String("database_url", "", "Optional: override default database path") web_port := flag.Int("web_port", 0, "Optional: override default Web Page port 9999") ws_addr := flag.String("ws_addr", "", "Optional: override default Websocket address from the default 0.0.0.0:9998") @@ -85,6 +87,7 @@ func InitPaths() { VideoThumbnailDir = filepath.Join(AppDir, "video_thumbnail") ScriptHeatmapDir = getPath(*scriptsheatmap_dir, "XBVR_SCRIPTHEATMAPDIR", "script_heatmap") + MyFilesDir = getPath(*myfiles_dir, "XBVR_MYFILESDIR", "myfiles") DownloadDir = filepath.Join(AppDir, "download") // Initialize DATABASE_URL once appdir path is known @@ -120,6 +123,7 @@ func InitPaths() { _ = os.MkdirAll(IndexDirV2, os.ModePerm) _ = os.MkdirAll(ScrapeCacheDir, os.ModePerm) _ = os.MkdirAll(ScriptHeatmapDir, os.ModePerm) + _ = os.MkdirAll(MyFilesDir, os.ModePerm) _ = os.MkdirAll(DownloadDir, os.ModePerm) } func getPath(commandLinePath string, environmentName string, directoryName string) string { diff --git a/pkg/server/myfiles.go b/pkg/server/myfiles.go new file mode 100644 index 000000000..70334db18 --- /dev/null +++ b/pkg/server/myfiles.go @@ -0,0 +1,36 @@ +package server + +import ( + "fmt" + "io" + "net/http" + "os" + "path/filepath" + "strings" + + "github.com/xbapps/xbvr/pkg/common" +) + +type MyFilesHandler struct { +} + +func (h MyFilesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + path := filepath.Join(common.MyFilesDir, r.URL.Path) + fi, err := os.Stat(path) + + if os.IsNotExist(err) || strings.Contains(path, "..") { // check the path exists and not trying to go up directory levels + // file does not exist + http.Error(w, err.Error(), http.StatusNotFound) + return + } + + //copy the relevant headers. If you want to preserve the downloaded file name, extract it with go's url parser. + if strings.HasSuffix(path, ".json") { + w.Header().Set("Content-Type", r.Header.Get("application/json")) + } + w.Header().Set("Content-Length", fmt.Sprint(fi.Size())) // useful for download progress + + //stream the body to the client without fully loading it into memory + reader, _ := os.Open(path) + io.Copy(w, reader) +} diff --git a/pkg/server/server.go b/pkg/server/server.go index bbcc575f5..327c4b681 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -142,6 +142,8 @@ func StartServer(version, commit, branch, date string) { r.PathPrefix("/imghm/").Handler(http.StripPrefix("/imghm", hmp)) downloadhandler := DownloadHandler{} r.PathPrefix("/download/").Handler(http.StripPrefix("/download/", downloadhandler)) + myfileshandler := MyFilesHandler{} + r.PathPrefix("/myfiles/").Handler(http.StripPrefix("/myfiles/", myfileshandler)) r.SkipClean(true) r.PathPrefix("/").Handler(http.DefaultServeMux) From da4773f0fc4d61e7747c3c9ff3bdc5669c809c1b Mon Sep 17 00:00:00 2001 From: toshski <104477758+toshski@users.noreply.github.com> Date: Mon, 6 Nov 2023 02:28:26 +1300 Subject: [PATCH 31/39] feat: Add "Has Favourite Actor" Scene Filter Attribute (#1438) --- pkg/api/scenes.go | 1 + pkg/models/model_scene.go | 2 ++ 2 files changed, 3 insertions(+) diff --git a/pkg/api/scenes.go b/pkg/api/scenes.go index a596588b0..03ec3bff3 100644 --- a/pkg/api/scenes.go +++ b/pkg/api/scenes.go @@ -371,6 +371,7 @@ func (i SceneResource) getFilters(req *restful.Request, resp *restful.Response) outAttributes = append(outAttributes, "Has Script Download") outAttributes = append(outAttributes, "Has AI Generated Script") outAttributes = append(outAttributes, "Has Human Generated Script") + outAttributes = append(outAttributes, "Has Favourite Actor") type Results struct { Result string } diff --git a/pkg/models/model_scene.go b/pkg/models/model_scene.go index 3865f1e28..aeb30fecb 100644 --- a/pkg/models/model_scene.go +++ b/pkg/models/model_scene.go @@ -834,6 +834,8 @@ func queryScenes(db *gorm.DB, r RequestSceneList) (*gorm.DB, *gorm.DB) { where = "scenes.ai_script = 1" case "Has Human Generated Script": where = "scenes.human_script = 1" + case "Has Favourite Actor": + where = "exists (select * from scene_cast join actors on actors.id=scene_cast.actor_id where actors.favourite=1 and scene_cast.scene_id=scenes.id)" } if negate { From eb8cd13c520677d195775b7260a666f4e8829a17 Mon Sep 17 00:00:00 2001 From: toshski <104477758+toshski@users.noreply.github.com> Date: Mon, 6 Nov 2023 02:29:04 +1300 Subject: [PATCH 32/39] feat: Add Ability to sort Actors by Scene Count (#1439) --- pkg/models/model_actor.go | 6 ++++++ ui/src/locales/en-GB.json | 2 ++ ui/src/views/actors/Filters.vue | 2 ++ 3 files changed, 10 insertions(+) diff --git a/pkg/models/model_actor.go b/pkg/models/model_actor.go index 6f40c97f6..d524aeb9e 100644 --- a/pkg/models/model_actor.go +++ b/pkg/models/model_actor.go @@ -462,6 +462,12 @@ func QueryActors(r RequestActorList, enablePreload bool) ResponseActorList { } else { tx = tx.Order("random()") } + case "scene_count_desc": + tx = tx. + Order("actors.`count` desc, actors.name") + case "scene_available_desc": + tx = tx. + Order("actors.`avail_count` desc, actors.name") default: tx = tx.Order("name asc") } diff --git a/ui/src/locales/en-GB.json b/ui/src/locales/en-GB.json index 013a71791..67ab9a110 100644 --- a/ui/src/locales/en-GB.json +++ b/ui/src/locales/en-GB.json @@ -193,6 +193,8 @@ "Clear":"Clear", "No matching country":"No matching country", "Scene Released Date":"Scene Released Date", + "Available Scene Count":"Available Scene Count", + "Scene Count":"Scene Count", "Cast":"Cast", "Allows searching a variety of attributes such as: Possible Aka actors, Cup Size, Eye/Hair Color, Has Tattoo, Has Piercing, Breast Type, Nationailty, Ethnicity, Aka, Has Images":"Allows searching a variety of attributes such as: Possible Aka actors, Cup Size, Eye/Hair Color, Has Tattoo, Has Piercing, Breast Type, Nationailty, Ethnicity, Aka, Has Images", "New Aka Group. Select 2 or more actors in the Cast filter":"New Aka Group. Select 2 or more actors in the Cast filter", diff --git a/ui/src/views/actors/Filters.vue b/ui/src/views/actors/Filters.vue index 17eab5814..342dd5cc9 100644 --- a/ui/src/views/actors/Filters.vue +++ b/ui/src/views/actors/Filters.vue @@ -41,6 +41,8 @@ + + From 9e493d8405ba5db40f1d71a5a861c2dc0849fcdf Mon Sep 17 00:00:00 2001 From: toshski <104477758+toshski@users.noreply.github.com> Date: Mon, 6 Nov 2023 02:31:56 +1300 Subject: [PATCH 33/39] feat: add Option to set opacity of not available scenes in scene list (#1453) Co-authored-by: crwxaj <52156245+crwxaj@users.noreply.github.com> --- pkg/api/options.go | 2 ++ pkg/config/config.go | 1 + pkg/config/state.go | 1 + ui/src/store/optionsWeb.js | 4 ++++ ui/src/views/actors/ActorCard.vue | 8 +++++++- .../views/options/sections/InterfaceWeb.vue | 19 ++++++++++++++++++- ui/src/views/scenes/SceneCard.vue | 10 ++++++++-- 7 files changed, 41 insertions(+), 4 deletions(-) diff --git a/pkg/api/options.go b/pkg/api/options.go index 20d55de85..52b1313fd 100644 --- a/pkg/api/options.go +++ b/pkg/api/options.go @@ -58,6 +58,7 @@ type RequestSaveOptionsWeb struct { SceneTrailerlist bool `json:"sceneTrailerlist"` ShowScriptHeatmap bool `json:"showScriptHeatmap"` UpdateCheck bool `json:"updateCheck"` + IsAvailOpacity int `json:"isAvailOpacity"` } type RequestSaveOptionsAdvanced struct { @@ -382,6 +383,7 @@ func (i ConfigResource) saveOptionsWeb(req *restful.Request, resp *restful.Respo config.Config.Web.SceneTrailerlist = r.SceneTrailerlist config.Config.Web.ShowScriptHeatmap = r.ShowScriptHeatmap config.Config.Web.UpdateCheck = r.UpdateCheck + config.Config.Web.IsAvailOpacity = r.IsAvailOpacity config.SaveConfig() resp.WriteHeaderAndEntity(http.StatusOK, r) diff --git a/pkg/config/config.go b/pkg/config/config.go index b2cd2f456..612f10cf9 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -43,6 +43,7 @@ type ObjectConfig struct { SceneTrailerlist bool `default:"true" json:"sceneTrailerlist"` ShowScriptHeatmap bool `default:"true" json:"showScriptHeatmap"` UpdateCheck bool `default:"true" json:"updateCheck"` + IsAvailOpacity int `default:"40" json:"isAvailOpacity"` } `json:"web"` Advanced struct { ShowInternalSceneId bool `default:"false" json:"showInternalSceneId"` diff --git a/pkg/config/state.go b/pkg/config/state.go index 4620527f6..b465e65f7 100644 --- a/pkg/config/state.go +++ b/pkg/config/state.go @@ -26,6 +26,7 @@ type ObjectState struct { SceneTrailerlist bool `json:"sceneTrailerlist"` ShowScriptHeatmap bool `json:"showScriptHeatmap"` UpdateCheck bool `json:"updateCheck"` + IsAvailOpacity int `json:"isAvailOpacity"` } `json:"web"` DLNA struct { Running bool `json:"running"` diff --git a/ui/src/store/optionsWeb.js b/ui/src/store/optionsWeb.js index 862ed23cf..a1cfb1b5c 100644 --- a/ui/src/store/optionsWeb.js +++ b/ui/src/store/optionsWeb.js @@ -15,6 +15,8 @@ const state = { showHspFile: true, showSubtitlesFile: true, sceneTrailerlist: true, + updateCheck: true, + isAvailOpacity: 40, showScriptHeatmap: false, updateCheck: true } @@ -42,6 +44,7 @@ const actions = { state.web.sceneTrailerlist = data.config.web.sceneTrailerlist state.web.showScriptHeatmap = data.config.web.showScriptHeatmap state.web.updateCheck = data.config.web.updateCheck + state.web.isAvailOpacity = data.config.web.isAvailOpacity state.loading = false }) }, @@ -64,6 +67,7 @@ const actions = { state.web.sceneTrailerlist = data.sceneTrailerlist state.web.showScriptHeatmap = data.showScriptHeatmap state.web.updateCheck = data.updateCheck + state.web.isAvailOpacity = data.isAvailOpacity state.loading = false }) } diff --git a/ui/src/views/actors/ActorCard.vue b/ui/src/views/actors/ActorCard.vue index 8bd1ffdd6..fbc716875 100644 --- a/ui/src/views/actors/ActorCard.vue +++ b/ui/src/views/actors/ActorCard.vue @@ -2,7 +2,7 @@
@@ -69,6 +69,12 @@ export default { } }, computed: { + isAvailOpactiy () { + if (this.$store.state.optionsWeb.web.isAvailOpacity == undefined) { + return .4 + } + return this.$store.state.optionsWeb.web.isAvailOpacity / 100 + }, }, methods: { getImageURL (u) { diff --git a/ui/src/views/options/sections/InterfaceWeb.vue b/ui/src/views/options/sections/InterfaceWeb.vue index 55139db31..29f8d2972 100644 --- a/ui/src/views/options/sections/InterfaceWeb.vue +++ b/ui/src/views/options/sections/InterfaceWeb.vue @@ -75,6 +75,12 @@ show subtitles File button + +
+
+ +
+
show Script Heatmap @@ -221,9 +227,20 @@ export default { this.$store.state.optionsWeb.web.showSubtitlesFile = value } }, + isAvailOpacity: { + get () { + if (this.$store.state.optionsWeb.web.isAvailOpacity == undefined) { + return 40 + } + return this.$store.state.optionsWeb.web.isAvailOpacity + }, + set (value) { + this.$store.state.optionsWeb.web.isAvailOpacity = value + } + }, isLoading: function () { return this.$store.state.optionsWeb.loading - } + } } } diff --git a/ui/src/views/scenes/SceneCard.vue b/ui/src/views/scenes/SceneCard.vue index 068a5402e..338784283 100644 --- a/ui/src/views/scenes/SceneCard.vue +++ b/ui/src/views/scenes/SceneCard.vue @@ -2,7 +2,7 @@
@@ -134,7 +134,13 @@ export default { } }) return count - } + }, + isAvailOpactiy () { + if (this.$store.state.optionsWeb.web.isAvailOpacity == undefined) { + return .4 + } + return this.$store.state.optionsWeb.web.isAvailOpacity / 100 + }, }, methods: { getImageURL (u) { From 0e0e426b5c24c83f3e4970060553f4baec03e554 Mon Sep 17 00:00:00 2001 From: crwxaj <52156245+crwxaj@users.noreply.github.com> Date: Sun, 5 Nov 2023 14:49:25 +0100 Subject: [PATCH 34/39] chore: dependency cleanup (#1469) Co-authored-by: crwxaj --- go.sum | 21 +++---------------- .../views/options/sections/InterfaceWeb.vue | 9 ++++---- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/go.sum b/go.sum index e9837b178..42093cc7b 100644 --- a/go.sum +++ b/go.sum @@ -14,8 +14,6 @@ github.com/RoaringBitmap/roaring v1.2.3/go.mod h1:plvDsJQpxOC5bw8LRteu/MLWHsHez/ github.com/abbot/go-http-auth v0.4.0 h1:QjmvZ5gSC7jm3Zg54DqWE/T5m1t2AfDu6QlXJT0EVT0= github.com/abbot/go-http-auth v0.4.0/go.mod h1:Cz6ARTIzApMJDzh5bRMSUou6UMSp0IEXg9km/ci7TJM= github.com/anacrolix/envpprof v1.0.0 h1:AwZ+mBP4rQ5f7JSsrsN3h7M2xDW/xSE66IPVOqlnuUc= -github.com/anacrolix/ffprobe v1.0.1 h1:S/MfCrUNZvbkkykX/1mmLVRf8//M7mvlY3BcwHaK3bQ= -github.com/anacrolix/ffprobe v1.0.1/go.mod h1:MXe+zG/RRa5OdIf5+VYYfS/CfsSqOH7RrvGIqJBzqhI= github.com/anacrolix/ffprobe v1.1.0 h1:eKBudnERW9zRJ0+ge6FzkQ0pWLyq142+FJrwRwSRMT4= github.com/anacrolix/ffprobe v1.1.0/go.mod h1:MXe+zG/RRa5OdIf5+VYYfS/CfsSqOH7RrvGIqJBzqhI= github.com/anacrolix/missinggo v1.1.0 h1:0lZbaNa6zTR1bELAIzCNmRGAtkHuLDPJqTiTtXoAIx8= @@ -92,8 +90,6 @@ github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6RO github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= -github.com/djherbis/times v1.5.0 h1:79myA211VwPhFTqUk8xehWrsEO+zcIZj0zT8mXPVARU= -github.com/djherbis/times v1.5.0/go.mod h1:5q7FDLvbNg1L/KaBmPcWlVR9NmoKo3+ucqUA3ijQhA0= github.com/djherbis/times v1.6.0 h1:w2ctJ92J8fBvWPxugmXIv7Nz7Q3iDMKNx9v5ocVH20c= github.com/djherbis/times v1.6.0/go.mod h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0= github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q= @@ -112,10 +108,7 @@ github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DP github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= github.com/fcjr/aia-transport-go v1.2.2 h1:sIZqXcM+YhTd2BDtkV2OJaqbcIVcPv1oKru3VJPIPc8= github.com/fcjr/aia-transport-go v1.2.2/go.mod h1:onSqSq3tGkM14WusDx7q9FTheS9R1KBtD+QBWI6zG/w= -github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gammazero/nexus/v3 v3.2.0 h1:dKdGk4vQ/56wX5CLKUt6U3XQymUhTY6xHowBO9Z7bVA= -github.com/gammazero/nexus/v3 v3.2.0/go.mod h1:h/5Osjg08QGAk+dVFpwdGdD8VsK+IGDm5E4PzVli264= github.com/gammazero/nexus/v3 v3.2.1 h1:9sqURks8EBEYkyEmkCtw85oApQ4ou0FCfh/jUG+Jq4I= github.com/gammazero/nexus/v3 v3.2.1/go.mod h1:SvrRjMwDP4S9RSx52Ks39ksmYA1FQQ0OuGKcleMJTQ0= github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 h1:NRUJuo3v3WGC/g5YiyF790gut6oQr5f3FBI88Wv0dx4= @@ -144,8 +137,6 @@ github.com/go-openapi/spec v0.20.9/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6 github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY= -github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= github.com/go-resty/resty/v2 v2.10.0 h1:Qla4W/+TMmv0fOeeRqzEpXPLfTUnR5HZ1+lGs+CkiCo= github.com/go-resty/resty/v2 v2.10.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -196,8 +187,6 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= @@ -322,8 +311,6 @@ github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdO github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= -github.com/putdotio/go-putio v1.7.0 h1:iL7G9O30NCiOH4FULbul/tRNWDA9LuvlsfXjBIBmRY4= -github.com/putdotio/go-putio v1.7.0/go.mod h1:QhjpLhn3La/ea4FeJlp1qsiaFZDC0EIO8VUe8VEKMV0= github.com/putdotio/go-putio v1.7.1 h1:316PpOMO2a7H73foRxlpHmekeLso07et26Z00YlwQ2A= github.com/putdotio/go-putio v1.7.1/go.mod h1:QhjpLhn3La/ea4FeJlp1qsiaFZDC0EIO8VUe8VEKMV0= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -351,7 +338,7 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/temoto/robotstxt v1.1.1 h1:Gh8RCs8ouX3hRSxxK7B1mO5RFByQ4CmJZDwgom++JaA= github.com/temoto/robotstxt v1.1.1/go.mod h1:+1AmkuG3IYkh1kv0d2qEB9Le88ehNO0zwOr3ujewlOo= github.com/thoas/go-funk v0.9.3 h1:7+nAEx3kn5ZJcnDm2Bh23N2yOtweO14bi//dvRtgLpw= @@ -364,9 +351,6 @@ github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tkuchiki/go-timezone v0.2.0 h1:yyZVHtQRVZ+wvlte5HXvSpBkR0dPYnPEIgq9qqAqltk= github.com/tkuchiki/go-timezone v0.2.0/go.mod h1:b1Ean9v2UXtxSq4TZF0i/TU9NuoWa9hOzOKoGCV2zqY= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= -github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= @@ -381,6 +365,7 @@ github.com/xo/dburl v0.16.0/go.mod h1:B7/G9FGungw6ighV8xJNwWYQPMfn3gsi2sn5SE8Bzc github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -416,7 +401,6 @@ golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= @@ -473,6 +457,7 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/ui/src/views/options/sections/InterfaceWeb.vue b/ui/src/views/options/sections/InterfaceWeb.vue index 29f8d2972..83f86eeff 100644 --- a/ui/src/views/options/sections/InterfaceWeb.vue +++ b/ui/src/views/options/sections/InterfaceWeb.vue @@ -75,16 +75,17 @@ show subtitles File button + + + show Script Heatmap + +
- - - show Script Heatmap - From 928e2f519642fdd24a652628e7704560fd7f7810 Mon Sep 17 00:00:00 2001 From: crwxaj <52156245+crwxaj@users.noreply.github.com> Date: Sun, 5 Nov 2023 15:08:46 +0100 Subject: [PATCH 35/39] chore: fix some scraper icons (#1470) Co-authored-by: crwxaj --- pkg/config/scrapers.json | 2 +- pkg/scrape/tmwvrnet.go | 2 +- pkg/scrape/vrspy.go | 2 +- pkg/scrape/wetvr.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/config/scrapers.json b/pkg/config/scrapers.json index 238eb6264..f2a7dc0c2 100644 --- a/pkg/config/scrapers.json +++ b/pkg/config/scrapers.json @@ -455,7 +455,7 @@ "url": "https://www.sexlikereal.com/studios/vrpfilms", "name": "VRPFilms", "company": "VRPFilms", - "avatar_url": "https://vrpfilms.com/storage/settings/March2021/Z0krYIQBMwSJ4R1eCnv1.png" + "avatar_url": "https://mcdn.vrporn.com/files/20190417121849/vrpfilms-logo.jpg" }, { "url": "https://www.sexlikereal.com/studios/vrpornjack", diff --git a/pkg/scrape/tmwvrnet.go b/pkg/scrape/tmwvrnet.go index 6cbee6c74..c53bf7b97 100644 --- a/pkg/scrape/tmwvrnet.go +++ b/pkg/scrape/tmwvrnet.go @@ -130,5 +130,5 @@ func TmwVRnet(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out cha } func init() { - registerScraper("tmwvrnet", "TmwVRnet", "https://tmwvrnet.com/assets/vr/public/tour1/images/favicon/apple-touch-icon.png", "tmwvrnet.com", TmwVRnet) + registerScraper("tmwvrnet", "TmwVRnet", "https://cdn-vr.sexlikereal.com/images/studio_creatives/logotypes/1/26/logo_crop_1623330575.png", "tmwvrnet.com", TmwVRnet) } diff --git a/pkg/scrape/vrspy.go b/pkg/scrape/vrspy.go index c71dfe336..8336a6c23 100755 --- a/pkg/scrape/vrspy.go +++ b/pkg/scrape/vrspy.go @@ -161,5 +161,5 @@ func VRSpy(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out chan<- } func init() { - registerScraper(scraperID, siteID, baseURL+"/favicon.png", domain, VRSpy) + registerScraper(scraperID, siteID, baseURL+"/favicon.ico", domain, VRSpy) } diff --git a/pkg/scrape/wetvr.go b/pkg/scrape/wetvr.go index e440a1a68..8af34c8c2 100644 --- a/pkg/scrape/wetvr.go +++ b/pkg/scrape/wetvr.go @@ -140,5 +140,5 @@ func WetVR(wg *sync.WaitGroup, updateSite bool, knownScenes []string, out chan<- } func init() { - registerScraper("wetvr", "WetVR", "https://wetvr.com/assets/images/sites/wetvr/logo-4a2f06a4c9.png", "wetvr.com", WetVR) + registerScraper("wetvr", "WetVR", "https://wetvr.com/wetvr-favicone2df70df.ico", "wetvr.com", WetVR) } From 7fd84631c711bef8ead50519724e44469c0b9353 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 Nov 2023 15:18:44 +0100 Subject: [PATCH 36/39] chore(deps): update dependency eslint to v8.53.0 (#1472) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 4a9e905d3..b7300701d 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@vue/eslint-config-standard": "8.0.1", "buffer": "6.0.3", "concurrently": "7.6.0", - "eslint": "8.52.0", + "eslint": "8.53.0", "eslint-plugin-import": "2.29.0", "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "6.1.1", diff --git a/yarn.lock b/yarn.lock index 91a25312e..b27f97adf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1289,10 +1289,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" + integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1304,10 +1304,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.52.0": - version "8.52.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" - integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== +"@eslint/js@8.53.0": + version "8.53.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.53.0.tgz#bea56f2ed2b5baea164348ff4d5a879f6f81f20d" + integrity sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w== "@fortawesome/fontawesome-common-types@^0.2.36": version "0.2.36" @@ -4129,15 +4129,15 @@ eslint-webpack-plugin@^3.1.0: normalize-path "^3.0.0" schema-utils "^4.0.0" -eslint@8.52.0: - version "8.52.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.52.0.tgz#d0cd4a1fac06427a61ef9242b9353f36ea7062fc" - integrity sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg== +eslint@8.53.0: + version "8.53.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.53.0.tgz#14f2c8244298fcae1f46945459577413ba2697ce" + integrity sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.52.0" + "@eslint/eslintrc" "^2.1.3" + "@eslint/js" "8.53.0" "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" From b368ba5b170de441870e7bedbcb1b29b8d3dd9e7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 Nov 2023 15:19:18 +0100 Subject: [PATCH 37/39] fix(deps): update module github.com/mattn/go-sqlite3 to v1.14.18 (#1471) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index e3b10acc8..b9420e1d0 100644 --- a/go.mod +++ b/go.mod @@ -37,7 +37,7 @@ require ( github.com/lucasb-eyer/go-colorful v1.2.0 github.com/marcsauter/single v0.0.0-20201009143647-9f8d81240be2 github.com/markphelps/optional v0.11.0 - github.com/mattn/go-sqlite3 v1.14.17 + github.com/mattn/go-sqlite3 v1.14.18 github.com/mcuadros/go-version v0.0.0-20190830083331-035f6764e8d2 github.com/mholt/archiver v3.1.1+incompatible github.com/mozillazg/go-slugify v0.2.0 diff --git a/go.sum b/go.sum index 42093cc7b..a8feb52c1 100644 --- a/go.sum +++ b/go.sum @@ -259,6 +259,8 @@ github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsO github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM= github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-sqlite3 v1.14.18 h1:JL0eqdCOq6DJVNPSvArO/bIV9/P7fbGrV00LZHc+5aI= +github.com/mattn/go-sqlite3 v1.14.18/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mcuadros/go-version v0.0.0-20190830083331-035f6764e8d2 h1:YocNLcTBdEdvY3iDK6jfWXvEaM5OCKkjxPKoJRdB3Gg= From 98b72a034cf7528dedcc8c965b928cf59313ac74 Mon Sep 17 00:00:00 2001 From: tarrawhitefan <149216089+tarrawhitefan@users.noreply.github.com> Date: Sun, 5 Nov 2023 15:29:11 +0100 Subject: [PATCH 38/39] scraper: Validate cover image for VirtualReal websites (#1458) Some of the covers provided by the VirtualReal websites are using a pixel format that is not compatible with golang's `image/jpeg` decoder and also with some VR players like HereSphere. It should be kinda safe to assume that if a image can't be decoded by the golang decoders it may not work in some players. This patch validates the cover images against the golang decoders, and tries to use some gallery image as cover, if no valid coner image is found. This is the only scraper I had this issue so far, but more scrapers may need the same changes. --- pkg/scrape/virtualrealporn.go | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/pkg/scrape/virtualrealporn.go b/pkg/scrape/virtualrealporn.go index 36be99d25..cef44c682 100644 --- a/pkg/scrape/virtualrealporn.go +++ b/pkg/scrape/virtualrealporn.go @@ -1,9 +1,11 @@ package scrape import ( + "bytes" "encoding/json" "fmt" "html" + "image" "strconv" "strings" "sync" @@ -20,11 +22,18 @@ func VirtualRealPornSite(wg *sync.WaitGroup, updateSite bool, knownScenes []stri logScrapeStart(scraperID, siteID) page := 1 + imageCollector := createCollector("virtualrealporn.com", "virtualrealtrans.com", "virtualrealgay.com", "virtualrealpassion.com", "virtualrealamateurporn.com") sceneCollector := createCollector("virtualrealporn.com", "virtualrealtrans.com", "virtualrealgay.com", "virtualrealpassion.com", "virtualrealamateurporn.com") siteCollector := createCollector("virtualrealporn.com", "virtualrealtrans.com", "virtualrealgay.com", "virtualrealpassion.com", "virtualrealamateurporn.com") castCollector := createCollector("virtualrealporn.com", "virtualrealtrans.com", "virtualrealgay.com", "virtualrealpassion.com", "virtualrealamateurporn.com") castCollector.AllowURLRevisit = true + imageCollector.OnResponse(func(r *colly.Response) { + if _, _, err := image.Decode(bytes.NewReader(r.Body)); err == nil { + r.Ctx.Put("valid", "1") + } + }) + sceneCollector.OnHTML(`html`, func(e *colly.HTMLElement) { sc := models.ScrapedScene{} sc.ScraperID = scraperID @@ -54,14 +63,30 @@ func VirtualRealPornSite(wg *sync.WaitGroup, updateSite bool, knownScenes []stri // Cover URLs e.ForEach(`meta[property="og:image"]`, func(id int, e *colly.HTMLElement) { - if id == 0 { - sc.Covers = append(sc.Covers, strings.Split(e.Request.AbsoluteURL(e.Attr("content")), "?")[0]) + if len(sc.Covers) == 0 { + u := strings.Split(e.Request.AbsoluteURL(e.Attr("content")), "?")[0] + ctx := colly.NewContext() + if err := imageCollector.Request("GET", u, nil, ctx, nil); err == nil { + if ctx.Get("valid") != "" { + sc.Covers = append(sc.Covers, u) + } + } } }) // Gallery e.ForEach(`figure[itemprop="associatedMedia"] a`, func(id int, e *colly.HTMLElement) { - sc.Gallery = append(sc.Gallery, e.Request.AbsoluteURL(strings.Split(e.Attr("href"), "?")[0])) + if len(sc.Covers) == 0 { + u := e.Request.AbsoluteURL(strings.Split(e.Attr("href"), "?")[0]) + ctx := colly.NewContext() + if err := imageCollector.Request("GET", u, nil, ctx, nil); err == nil { + if ctx.Get("valid") != "" { + sc.Covers = append(sc.Covers, u) + } + } + } else { + sc.Gallery = append(sc.Gallery, e.Request.AbsoluteURL(strings.Split(e.Attr("href"), "?")[0])) + } }) // Tags From 506c3578695c1d8bd1edc2a6cefde742cab26553 Mon Sep 17 00:00:00 2001 From: crwxaj <52156245+crwxaj@users.noreply.github.com> Date: Sun, 5 Nov 2023 15:39:53 +0100 Subject: [PATCH 39/39] minor: added some log output for HereSphere file deletes (#1473) Co-authored-by: crwxaj --- pkg/api/files.go | 1 + pkg/api/heresphere.go | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/api/files.go b/pkg/api/files.go index 7e3e2a16c..4d41e7d33 100644 --- a/pkg/api/files.go +++ b/pkg/api/files.go @@ -323,6 +323,7 @@ func removeFileByFileId(fileId uint) models.Scene { err := db.Preload("Volume").Where(&models.File{ID: fileId}).First(&file).Error if err == nil { + log.Infof("Deleting file %s", filepath.Join(file.Path, file.Filename)) deleted := false switch file.Volume.Type { case "local": diff --git a/pkg/api/heresphere.go b/pkg/api/heresphere.go index 0581a5fa2..e6fcd5975 100644 --- a/pkg/api/heresphere.go +++ b/pkg/api/heresphere.go @@ -238,6 +238,7 @@ func (i HeresphereResource) getHeresphereFile(req *restful.Request, resp *restfu Media: media, } if requestData.DeleteFiles != nil && config.Config.Interfaces.Heresphere.AllowFileDeletes { + log.Infof("Got request by HereSphere to delete file %v", file.Filename) removeFileByFileId(file.ID) } @@ -879,6 +880,7 @@ func ProcessHeresphereUpdates(scene *models.Scene, requestData HereSphereAuthReq } if requestData.DeleteFiles != nil && config.Config.Interfaces.Heresphere.AllowFileDeletes { + log.Infof("Got request by HereSphere to delete files for scene %v", scene.ID) for _, sceneFile := range scene.Files { removeFileByFileId(sceneFile.ID) } @@ -887,7 +889,7 @@ func ProcessHeresphereUpdates(scene *models.Scene, requestData HereSphereAuthReq if requestData.Hsp != nil && config.Config.Interfaces.Heresphere.AllowHspData { hspContent, err := base64.StdEncoding.DecodeString(*requestData.Hsp) if err != nil { - log.Error("Error decoding heresphere hsp data %v", err) + log.Errorf("Error decoding heresphere hsp data %v", err) } fName := filepath.Join(scene.Files[0].Path, strings.TrimSuffix(scene.Files[0].Filename, filepath.Ext(videoFile.Filename))+".hsp")