Repository: streamlink/streamlink

Issue:
plugins.useetv: is now indihometv.com
### Checklist

- [X] This is a plugin issue and not a different kind of issue
- [X] [I have read the contribution guidelines](https://github.com/streamlink/streamlink/blob/master/CONTRIBUTING.md#contributing-to-streamlink)
- [X] [I have checked the list of open and recently closed plugin issues](https://github.com/streamlink/streamlink/issues?q=is%3Aissue+label%3A%22plugin+issue%22)
- [X] [I have checked the commit log of the master branch](https://github.com/streamlink/streamlink/commits/master)

### Streamlink version

Latest stable release

### Description

Maybe there will be a plugins update for this?

### Debug log

```text
streamlink -l trace https://useetv.com/livetv/transtv
[03:41:41.598371][cli][debug] OS:         Linux-4.14.190-perf-g54a1ddf7276a-aarch64-with-libc
[03:41:41.598928][cli][debug] Python:     3.11.1
[03:41:41.599115][cli][debug] Streamlink: 5.2.1
[03:41:41.601963][cli][debug] Dependencies:                   [03:41:41.619678][cli][debug]  certifi: 2022.12.7
[03:41:41.624379][cli][debug]  isodate: 0.6.1
[03:41:41.627208][cli][debug]  lxml: 4.9.2
[03:41:41.632570][cli][debug]  pycountry: 22.3.5
[03:41:41.635104][cli][debug]  pycryptodome: 3.16.0
[03:41:41.639277][cli][debug]  PySocks: 1.7.1
[03:41:41.643652][cli][debug]  requests: 2.28.1               [03:41:41.651013][cli][debug]  urllib3: 1.26.13
[03:41:41.655050][cli][debug]  websocket-client: 1.5.0        [03:41:41.656684][cli][debug] Arguments:
[03:41:41.657124][cli][debug]  url=https://useetv.com/livetv/transtv
[03:41:41.657367][cli][debug]  --loglevel=trace
[03:41:41.658296][cli][info] Found matching plugin useetv for URL https://useetv.com/livetv/transtv                         [03:41:43.705587][plugins.useetv][error] The content is not available in your region
error: No playable streams found on this URL: https://useetv.com/livetv/transtv
```



Discussion:
Just change the url when using streamlink. 
work for me. But i think this plugin need update.

Resolving patch:
diff --git a/src/streamlink/plugins/indihometv.py b/src/streamlink/plugins/indihometv.py
new file mode 100644
--- /dev/null
+++ b/src/streamlink/plugins/indihometv.py
@@ -0,0 +1,48 @@
+"""
+$description Live TV channels and video on-demand service from IndiHome TV, owned by Telkom Indonesia.
+$url indihometv.com
+$type live, vod
+$region Indonesia
+"""
+
+import re
+
+from streamlink.plugin import Plugin, pluginmatcher
+from streamlink.plugin.api import validate
+from streamlink.stream.dash import DASHStream
+from streamlink.stream.hls import HLSStream
+
+
+@pluginmatcher(re.compile(r"https?://(?:www\.)?indihometv\.com/"))
+class IndiHomeTV(Plugin):
+    def _get_streams(self):
+        url = self.session.http.get(self.url, schema=validate.Schema(
+            validate.parse_html(),
+            validate.any(
+                validate.all(
+                    validate.xml_xpath_string("""
+                        .//script[contains(text(), 'laylist.m3u8') or contains(text(), 'manifest.mpd')][1]/text()
+                    """),
+                    str,
+                    re.compile(r"""(?P<q>['"])(?P<url>https://.*?/(?:[Pp]laylist\.m3u8|manifest\.mpd).+?)(?P=q)"""),
+                    validate.none_or_all(
+                        validate.get("url"),
+                        validate.url(),
+                    ),
+                ),
+                validate.all(
+                    validate.xml_xpath_string(".//video[@id='video-player'][1]/source[1]/@src"),
+                    validate.none_or_all(
+                        validate.url(),
+                    ),
+                ),
+            ),
+        ))
+
+        if url and ".m3u8" in url:
+            return HLSStream.parse_variant_playlist(self.session, url)
+        elif url and ".mpd" in url:
+            return DASHStream.parse_manifest(self.session, url)
+
+
+__plugin__ = IndiHomeTV
diff --git a/src/streamlink/plugins/useetv.py b/src/streamlink/plugins/useetv.py
deleted file mode 100644
--- a/src/streamlink/plugins/useetv.py
+++ /dev/null
@@ -1,61 +0,0 @@
-"""
-$description Live TV channels and video on-demand service from UseeTV, owned by Telkom Indonesia.
-$url useetv.com
-$type live, vod
-"""
-
-import logging
-import re
-
-from streamlink.plugin import Plugin, pluginmatcher
-from streamlink.plugin.api import validate
-from streamlink.stream.dash import DASHStream
-from streamlink.stream.hls import HLSStream
-
-
-log = logging.getLogger(__name__)
-
-
-@pluginmatcher(re.compile(r"https?://(?:www\.)?useetv\.com/"))
-class UseeTV(Plugin):
-    def _get_streams(self):
-        root = self.session.http.get(self.url, schema=validate.Schema(validate.parse_html()))
-
-        for needle, errormsg in (
-            (
-                "\"This service is not available in your Country\"",
-                "The content is not available in your region",
-            ),
-            (
-                "\"Silahkan login Menggunakan akun MyIndihome dan berlangganan minipack\"",
-                "The content is not available without a subscription",
-            ),
-        ):
-            if validate.Schema(validate.xml_xpath(".//script[contains(text(),$needle)]", needle=needle)).validate(root):
-                log.error(errormsg)
-                return
-
-        url = validate.Schema(
-            validate.any(
-                validate.all(
-                    validate.xml_xpath_string("""
-                        .//script[contains(text(), 'laylist.m3u8') or contains(text(), 'manifest.mpd')][1]/text()
-                    """),
-                    str,
-                    re.compile(r"""(?P<q>['"])(?P<url>https://.*?/(?:[Pp]laylist\.m3u8|manifest\.mpd).+?)(?P=q)"""),
-                    validate.none_or_all(validate.get("url"), validate.url()),
-                ),
-                validate.all(
-                    validate.xml_xpath_string(".//video[@id='video-player']/source/@src"),
-                    validate.any(None, validate.url()),
-                ),
-            ),
-        ).validate(root)
-
-        if url and ".m3u8" in url:
-            return HLSStream.parse_variant_playlist(self.session, url)
-        elif url and ".mpd" in url:
-            return DASHStream.parse_manifest(self.session, url)
-
-
-__plugin__ = UseeTV


Test patch:
diff --git a/tests/plugins/test_indihometv.py b/tests/plugins/test_indihometv.py
new file mode 100644
--- /dev/null
+++ b/tests/plugins/test_indihometv.py
@@ -0,0 +1,12 @@
+from streamlink.plugins.indihometv import IndiHomeTV
+from tests.plugins import PluginCanHandleUrl
+
+
+class TestPluginCanHandleUrlIndiHomeTV(PluginCanHandleUrl):
+    __plugin__ = IndiHomeTV
+
+    should_match = [
+        "https://www.indihometv.com/livetv/seatoday",
+        "https://www.indihometv.com/livetv/transtv",
+        "https://www.indihometv.com/tvod/seatoday/1680109200/1680111000/18328552/voa-our-voice",
+    ]
diff --git a/tests/plugins/test_useetv.py b/tests/plugins/test_useetv.py
deleted file mode 100644
--- a/tests/plugins/test_useetv.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from streamlink.plugins.useetv import UseeTV
-from tests.plugins import PluginCanHandleUrl
-
-
-class TestPluginCanHandleUrlUseeTV(PluginCanHandleUrl):
-    __plugin__ = UseeTV
-
-    should_match = [
-        "http://useetv.com/any",
-        "http://useetv.com/any/path",
-        "http://www.useetv.com/any",
-        "http://www.useetv.com/any/path",
-        "https://useetv.com/any",
-        "https://useetv.com/any/path",
-        "https://www.useetv.com/any",
-        "https://www.useetv.com/any/path",
-    ]