summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrvi <crvisqr@gmail.com>2021-03-03 17:32:55 +0530
committerBastien Nocera <hadess@hadess.net>2021-06-25 10:24:33 +0200
commit75b18393fbd7d3a49fa6924151f34b039e47c1b1 (patch)
tree4a33c3a500ba7a7abe4532d19f3796a7d8de238d
parent52de144ae730024fda9c79ca1252c6af92f325d6 (diff)
downloadtotem-pl-parser-75b18393fbd7d3a49fa6924151f34b039e47c1b1.tar.gz
tests: Do not check for videosite links unless requested
Note that this changes the result of the test_parsing_needle_carriage_return() ATOM test which now returns a single entry.
-rw-r--r--plparse/tests/gitlab-issues.atom1076
-rw-r--r--plparse/tests/parser.c53
-rw-r--r--plparse/tests/status-gnome-org.atom85
-rwxr-xr-xplparse/tests/videosite-tester.sh7
4 files changed, 1220 insertions, 1 deletions
diff --git a/plparse/tests/gitlab-issues.atom b/plparse/tests/gitlab-issues.atom
new file mode 100644
index 0000000..145a244
--- /dev/null
+++ b/plparse/tests/gitlab-issues.atom
@@ -0,0 +1,1076 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
+<title>totem-pl-parser issues</title>
+<link href="/GNOME/totem-pl-parser/-/issues.atom?feed_token=EQWvks3t_bxCW7boi5zZ&amp;state=opened" rel="self" type="application/atom+xml"/>
+<link href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues" rel="alternate" type="text/html"/>
+<id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues</id>
+<updated>2021-04-23T18:18:42Z</updated>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/36</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/36"/>
+ <title>CI pipeline fails due to test_itms_parsing test failure</title>
+ <updated>2021-04-23T18:18:42Z</updated>
+ <media:thumbnail width="40" height="40" url="https://gitlab.gnome.org/uploads/-/system/user/avatar/29033/avatar.png"/>
+ <author>
+ <name>crvi</name>
+ <email></email>
+ </author>
+ <summary>CI pipeline fails due to test_itms_parsing test failure</summary>
+ <description>`ERROR:../plparse/tests/parser.c:565:test_itms_parsing: assertion failed (parser_test_get_playlist_uri ("https://itunes.apple.com/fr/podcast/chris-moyles-show-on-radio/id1042635536?mt=2&amp;ign-mpt=uo%3D4#") == "https://rss.hosting.thisisdax.com/ed87f36a-7b44-4e79-beea-f3220752406c"): (NULL == "https://rss.hosting.thisisdax.com/ed87f36a-7b44-4e79-beea-f3220752406c")`
+
+https://gitlab.gnome.org/crvi/totem-pl-parser/-/jobs/1264555</description>
+ <content>`ERROR:../plparse/tests/parser.c:565:test_itms_parsing: assertion failed (parser_test_get_playlist_uri ("https://itunes.apple.com/fr/podcast/chris-moyles-show-on-radio/id1042635536?mt=2&amp;ign-mpt=uo%3D4#") == "https://rss.hosting.thisisdax.com/ed87f36a-7b44-4e79-beea-f3220752406c"): (NULL == "https://rss.hosting.thisisdax.com/ed87f36a-7b44-4e79-beea-f3220752406c")`
+
+https://gitlab.gnome.org/crvi/totem-pl-parser/-/jobs/1264555</content>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/29</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/29"/>
+ <title>xml parsing fails while parsing valid XML processing instructions ( PI )</title>
+ <updated>2021-04-22T23:42:39Z</updated>
+ <media:thumbnail width="40" height="40" url="https://gitlab.gnome.org/uploads/-/system/user/avatar/29033/avatar.png"/>
+ <author>
+ <name>crvi</name>
+ <email></email>
+ </author>
+ <summary>xml parsing fails while parsing valid XML processing instructions ( PI )</summary>
+ <description>libxml2 parses fine.
+
+```console
+$ ~/totem-pl-parser/build-dir/plparse/tests/parser --debug file:///tmp/backtracks.fm.rss
+# random seed: R02S0f64ce29b2a8b2b7d647f80859d8a74c
+# GLib-GIO-DEBUG: _g_io_module_get_default: Found default implementation gvfs (GDaemonVfs) for ‘gio-vfs’
+_get_mime_type_for_name for 'file:///tmp/backtracks.fm.rss' returned 'application/rss+xml'
+URI 'file:///tmp/backtracks.fm.rss' was opened successfully in _get_mime_type_with_data
+_get_mime_type_with_data for 'file:///tmp/backtracks.fm.rss' returned 'application/rss+xml'
+URI 'file:///tmp/backtracks.fm.rss' is special type 'application/rss+xml'
+Using application/rss+xml function for 'file:///tmp/backtracks.fm.rss'
+Ignoring application/rss+xml because it's a text/plain
+# MESSAGE: Ignored URI "file:///tmp/backtracks.fm.rss".
+** Message: 11:40:41.511: Ignored URI "file:///tmp/backtracks.fm.rss".
+```
+
+[backtracks.fm.rss](/uploads/1520bd345562041515d1c89d29f372c8/backtracks.fm.rss)
+
+URL: https://backtracks.fm/feed/235d0e0a7a3de5e4</description>
+ <content>libxml2 parses fine.
+
+```console
+$ ~/totem-pl-parser/build-dir/plparse/tests/parser --debug file:///tmp/backtracks.fm.rss
+# random seed: R02S0f64ce29b2a8b2b7d647f80859d8a74c
+# GLib-GIO-DEBUG: _g_io_module_get_default: Found default implementation gvfs (GDaemonVfs) for ‘gio-vfs’
+_get_mime_type_for_name for 'file:///tmp/backtracks.fm.rss' returned 'application/rss+xml'
+URI 'file:///tmp/backtracks.fm.rss' was opened successfully in _get_mime_type_with_data
+_get_mime_type_with_data for 'file:///tmp/backtracks.fm.rss' returned 'application/rss+xml'
+URI 'file:///tmp/backtracks.fm.rss' is special type 'application/rss+xml'
+Using application/rss+xml function for 'file:///tmp/backtracks.fm.rss'
+Ignoring application/rss+xml because it's a text/plain
+# MESSAGE: Ignored URI "file:///tmp/backtracks.fm.rss".
+** Message: 11:40:41.511: Ignored URI "file:///tmp/backtracks.fm.rss".
+```
+
+[backtracks.fm.rss](/uploads/1520bd345562041515d1c89d29f372c8/backtracks.fm.rss)
+
+URL: https://backtracks.fm/feed/235d0e0a7a3de5e4</content>
+ <labels>
+ <label>1. Bug</label>
+ </labels>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/33</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/33"/>
+ <title>Parser failures should not return TOTEM_PL_PARSER_RESULT_IGNORED</title>
+ <updated>2021-04-22T23:42:38Z</updated>
+ <media:thumbnail width="40" height="40" url="https://gitlab.gnome.org/uploads/-/system/user/avatar/29033/avatar.png"/>
+ <author>
+ <name>crvi</name>
+ <email></email>
+ </author>
+ <summary>Parser failures should not return TOTEM_PL_PARSER_RESULT_IGNORED</summary>
+ <description>Parser feed failures should return valid return types ( e.g. `TOTEM_PL_PARSER_RESULT_ERROR` ) and not `TOTEM_PL_PARSER_RESULT_IGNORED`, as below:
+
+```
+$ ninja &amp;&amp; plparse/tests/parser file:///home/xyz/totem-pl-parser/plparse/tests/buggy_feed_2 --debug
+
+_get_mime_type_for_name for 'file:///home/xyz/totem-pl-parser/plparse/tests/buggy_feed_2' returned 'application/octet-stream'
+URI 'file:///home/xyz/totem-pl-parser/plparse/tests/buggy_feed_2' was opened successfully in _get_mime_type_with_data
+
+_get_mime_type_with_data for 'file:///home/xyz/totem-pl-parser/plparse/tests/buggy_feed_2' returned 'application/rss+xml'
+URI 'file:///home/xyz/totem-pl-parser/plparse/tests/buggy_feed_2' is special type 'application/rss+xml'
+
+Using application/rss+xml function for 'file:///home/xyz/totem-pl-parser/plparse/tests/buggy_feed_2'
+Ignoring application/rss+xml because it's a text/plain
+```
+
+which is incorrect and misleading.</description>
+ <content>Parser feed failures should return valid return types ( e.g. `TOTEM_PL_PARSER_RESULT_ERROR` ) and not `TOTEM_PL_PARSER_RESULT_IGNORED`, as below:
+
+```
+$ ninja &amp;&amp; plparse/tests/parser file:///home/xyz/totem-pl-parser/plparse/tests/buggy_feed_2 --debug
+
+_get_mime_type_for_name for 'file:///home/xyz/totem-pl-parser/plparse/tests/buggy_feed_2' returned 'application/octet-stream'
+URI 'file:///home/xyz/totem-pl-parser/plparse/tests/buggy_feed_2' was opened successfully in _get_mime_type_with_data
+
+_get_mime_type_with_data for 'file:///home/xyz/totem-pl-parser/plparse/tests/buggy_feed_2' returned 'application/rss+xml'
+URI 'file:///home/xyz/totem-pl-parser/plparse/tests/buggy_feed_2' is special type 'application/rss+xml'
+
+Using application/rss+xml function for 'file:///home/xyz/totem-pl-parser/plparse/tests/buggy_feed_2'
+Ignoring application/rss+xml because it's a text/plain
+```
+
+which is incorrect and misleading.</content>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/25</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/25"/>
+ <title>totem_pl_parser_is_videosite() causes huge delay in rss parsing</title>
+ <updated>2021-04-20T23:49:07Z</updated>
+ <media:thumbnail width="40" height="40" url="https://gitlab.gnome.org/uploads/-/system/user/avatar/29033/avatar.png"/>
+ <author>
+ <name>crvi</name>
+ <email></email>
+ </author>
+ <summary>totem_pl_parser_is_videosite() causes huge delay in rss parsing</summary>
+ <description>version: git
+
+Currently, we do `totem_pl_parser_is_videosite()` check on each rss feed item's `&lt;link&gt;` node data.
+
+For a rss feed with 400 items, it was 150 times slower ( 100ms without check, 15s with check ).
+
+This was an issue with Debian and its derivatives, as they added proper support for finding the helper script in `debian/rules`:
+
+```sh
+override_dh_auto_configure:
+ dh_auto_configure -- \
+ --libexecdir=/usr/lib/$(DEB_HOST_MULTIARCH)/$(libtotem-plparserN) \
+ -Denable-gtk-doc=true \
+ -Denable-libarchive=yes \
+ -Denable-libgcrypt=yes \
+ -Denable-quvi=yes
+```
+
+Don't see the issue in Fedora.</description>
+ <content>version: git
+
+Currently, we do `totem_pl_parser_is_videosite()` check on each rss feed item's `&lt;link&gt;` node data.
+
+For a rss feed with 400 items, it was 150 times slower ( 100ms without check, 15s with check ).
+
+This was an issue with Debian and its derivatives, as they added proper support for finding the helper script in `debian/rules`:
+
+```sh
+override_dh_auto_configure:
+ dh_auto_configure -- \
+ --libexecdir=/usr/lib/$(DEB_HOST_MULTIARCH)/$(libtotem-plparserN) \
+ -Denable-gtk-doc=true \
+ -Denable-libarchive=yes \
+ -Denable-libgcrypt=yes \
+ -Denable-quvi=yes
+```
+
+Don't see the issue in Fedora.</content>
+ <labels>
+ <label>9. High visibility</label>
+ </labels>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/32</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/32"/>
+ <title>Update README to README.md</title>
+ <updated>2021-04-20T23:39:27Z</updated>
+ <media:thumbnail width="40" height="40" url="https://gitlab.gnome.org/uploads/-/system/user/avatar/29033/avatar.png"/>
+ <author>
+ <name>crvi</name>
+ <email></email>
+ </author>
+ <summary>Update README to README.md</summary>
+ <description>Update `README` file to `README.md` markdown format.</description>
+ <content>Update `README` file to `README.md` markdown format.</content>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/16</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/16"/>
+ <title>Add support for the trackNum tag in xspf playlists.</title>
+ <updated>2021-04-20T21:51:28Z</updated>
+ <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/a80efbd95010128eb78be538d237198b?s=80&amp;d=identicon"/>
+ <author>
+ <name>bugzilla-migration</name>
+ <email></email>
+ </author>
+ <summary>Add support for the trackNum tag in xspf playlists.</summary>
+ <description>## Submitted by Jared Smith
+
+**[Link to original bug (#757260)](https://bugzilla.gnome.org/show_bug.cgi?id=757260)**
+## Description
+Please add support for the track number from the xspf format specification (trackNum tag).
+
+This would enable the addition of track numbers for tracks that cannot be matched against the database (e.g. very old or obscure tracks, user-created tracks, etc.).</description>
+ <content>## Submitted by Jared Smith
+
+**[Link to original bug (#757260)](https://bugzilla.gnome.org/show_bug.cgi?id=757260)**
+## Description
+Please add support for the track number from the xspf format specification (trackNum tag).
+
+This would enable the addition of track numbers for tracks that cannot be matched against the database (e.g. very old or obscure tracks, user-created tracks, etc.).</content>
+ <labels>
+ <label>bugzilla</label>
+ </labels>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/35</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/35"/>
+ <title>Random test failure ( test_xml_is_text_plain )</title>
+ <updated>2021-04-19T12:17:12Z</updated>
+ <media:thumbnail width="40" height="40" url="https://gitlab.gnome.org/uploads/-/system/user/avatar/29033/avatar.png"/>
+ <author>
+ <name>crvi</name>
+ <email></email>
+ </author>
+ <summary>Random test failure ( test_xml_is_text_plain )</summary>
+ <description>```sh
+$ ninja -C build-dir/ test
+ninja: Entering directory `build-dir/'
+
+...
+...
+
+# Bug Reference: http://bugzilla.gnome.org/show_bug.cgi?id=655378
+# Got retval 3 for uri 'http://leoville.tv/podcasts/floss.xml'
+Bail out! ERROR:../plparse/tests/parser.c:1102:test_xml_is_text_plain: assertion failed (result == TOTEM_PL_PARSER_RESULT_SUCCESS): (3 == 2)
+--- stderr ---
+** Message: 16:44:54.297: Is special type 'application/rss+xml'
+** Message: 16:44:54.298: Is special type 'application/rss+xml'
+** Message: 16:44:54.299: Is special type 'application/rss+xml'
+** Message: 16:44:54.299: couldn't mmap file:///tmp/file_doesnt_exist.wmv: Failed to open file “file:///tmp/file_doesnt_exist.wmv”: open() failed: No such file or directory
+** Message: 16:44:54.299: Is special type 'application/rss+xml'
+**
+ERROR:../plparse/tests/parser.c:1102:test_xml_is_text_plain: assertion failed (result == TOTEM_PL_PARSER_RESULT_SUCCESS): (3 == 2)
+-------
+
+Summary of Failures:
+
+1/2 parser FAIL 38.50s (killed by signal 6 SIGABRT)
+1/2 parser FAIL 38.50s (killed by signal 6 SIGABRT)
+
+Ok: 1
+Expected Fail: 0
+Fail: 1
+Unexpected Pass: 0
+Skipped: 0
+Timeout: 0
+```
+
+```sh
+(gdb) bt
+#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
+#1 0x00007f1e10520537 in __GI_abort () at abort.c:79
+#2 0x00007f1e106dcdcc in g_assertion_message (domain=&lt;optimized out&gt;, file=0x56328c05300a "../plparse/tests/parser.c", line=&lt;optimized out&gt;, func=&lt;optimized out&gt;, message=&lt;optimized out&gt;) at ../../../glib/gtestutils.c:2937
+#3 0x00007f1e1073a646 in g_assertion_message_cmpnum (domain=domain@entry=0x0, file=file@entry=0x56328c05300a "../plparse/tests/parser.c", line=line@entry=1102, func=func@entry=0x56328c058680 &lt;__func__.8&gt; "test_xml_is_text_plain", expr=expr@entry=0x56328c057300 "result == TOTEM_PL_PARSER_RESULT_SUCCESS", arg1=3, cmp=cmp@entry=0x56328c0530bc "==", arg2=2, numtype=105 'i') at ../../../glib/gtestutils.c:2996
+#4 0x000056328c051303 in test_xml_is_text_plain () at ../plparse/tests/parser.c:1102
+#5 test_xml_is_text_plain () at ../plparse/tests/parser.c:1091
+#6 0x00007f1e10739b9e in test_case_run (tc=0x7f1e0000fd60) at ../../../glib/gtestutils.c:2656
+#7 g_test_run_suite_internal (suite=suite@entry=0x56328db104c0, path=path@entry=0x0) at ../../../glib/gtestutils.c:2744
+#8 0x00007f1e1073999b in g_test_run_suite_internal (suite=suite@entry=0x56328db10040, path=path@entry=0x0) at ../../../glib/gtestutils.c:2756
+#9 0x00007f1e1073a08a in g_test_run_suite (suite=0x56328db10040) at ../../../glib/gtestutils.c:2831
+#10 0x00007f1e1073a0a1 in g_test_run () at ../../../glib/gtestutils.c:2065
+#11 0x000056328c04cdb6 in main (argc=&lt;optimized out&gt;, argv=&lt;optimized out&gt;) at ../plparse/tests/parser.c:1788
+```
+
+**Subsequent run passes:**
+
+```sh
+$ ninja -C build-dir/ test
+ninja: Entering directory `build-dir/'
+[0/1] Running all tests.
+1/2 parser OK 20.07s
+2/2 disc OK 0.05s
+
+
+Ok: 2
+Expected Fail: 0
+Fail: 0
+Unexpected Pass: 0
+Skipped: 0
+Timeout: 0
+```</description>
+ <content>```sh
+$ ninja -C build-dir/ test
+ninja: Entering directory `build-dir/'
+
+...
+...
+
+# Bug Reference: http://bugzilla.gnome.org/show_bug.cgi?id=655378
+# Got retval 3 for uri 'http://leoville.tv/podcasts/floss.xml'
+Bail out! ERROR:../plparse/tests/parser.c:1102:test_xml_is_text_plain: assertion failed (result == TOTEM_PL_PARSER_RESULT_SUCCESS): (3 == 2)
+--- stderr ---
+** Message: 16:44:54.297: Is special type 'application/rss+xml'
+** Message: 16:44:54.298: Is special type 'application/rss+xml'
+** Message: 16:44:54.299: Is special type 'application/rss+xml'
+** Message: 16:44:54.299: couldn't mmap file:///tmp/file_doesnt_exist.wmv: Failed to open file “file:///tmp/file_doesnt_exist.wmv”: open() failed: No such file or directory
+** Message: 16:44:54.299: Is special type 'application/rss+xml'
+**
+ERROR:../plparse/tests/parser.c:1102:test_xml_is_text_plain: assertion failed (result == TOTEM_PL_PARSER_RESULT_SUCCESS): (3 == 2)
+-------
+
+Summary of Failures:
+
+1/2 parser FAIL 38.50s (killed by signal 6 SIGABRT)
+1/2 parser FAIL 38.50s (killed by signal 6 SIGABRT)
+
+Ok: 1
+Expected Fail: 0
+Fail: 1
+Unexpected Pass: 0
+Skipped: 0
+Timeout: 0
+```
+
+```sh
+(gdb) bt
+#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
+#1 0x00007f1e10520537 in __GI_abort () at abort.c:79
+#2 0x00007f1e106dcdcc in g_assertion_message (domain=&lt;optimized out&gt;, file=0x56328c05300a "../plparse/tests/parser.c", line=&lt;optimized out&gt;, func=&lt;optimized out&gt;, message=&lt;optimized out&gt;) at ../../../glib/gtestutils.c:2937
+#3 0x00007f1e1073a646 in g_assertion_message_cmpnum (domain=domain@entry=0x0, file=file@entry=0x56328c05300a "../plparse/tests/parser.c", line=line@entry=1102, func=func@entry=0x56328c058680 &lt;__func__.8&gt; "test_xml_is_text_plain", expr=expr@entry=0x56328c057300 "result == TOTEM_PL_PARSER_RESULT_SUCCESS", arg1=3, cmp=cmp@entry=0x56328c0530bc "==", arg2=2, numtype=105 'i') at ../../../glib/gtestutils.c:2996
+#4 0x000056328c051303 in test_xml_is_text_plain () at ../plparse/tests/parser.c:1102
+#5 test_xml_is_text_plain () at ../plparse/tests/parser.c:1091
+#6 0x00007f1e10739b9e in test_case_run (tc=0x7f1e0000fd60) at ../../../glib/gtestutils.c:2656
+#7 g_test_run_suite_internal (suite=suite@entry=0x56328db104c0, path=path@entry=0x0) at ../../../glib/gtestutils.c:2744
+#8 0x00007f1e1073999b in g_test_run_suite_internal (suite=suite@entry=0x56328db10040, path=path@entry=0x0) at ../../../glib/gtestutils.c:2756
+#9 0x00007f1e1073a08a in g_test_run_suite (suite=0x56328db10040) at ../../../glib/gtestutils.c:2831
+#10 0x00007f1e1073a0a1 in g_test_run () at ../../../glib/gtestutils.c:2065
+#11 0x000056328c04cdb6 in main (argc=&lt;optimized out&gt;, argv=&lt;optimized out&gt;) at ../plparse/tests/parser.c:1788
+```
+
+**Subsequent run passes:**
+
+```sh
+$ ninja -C build-dir/ test
+ninja: Entering directory `build-dir/'
+[0/1] Running all tests.
+1/2 parser OK 20.07s
+2/2 disc OK 0.05s
+
+
+Ok: 2
+Expected Fail: 0
+Fail: 0
+Unexpected Pass: 0
+Skipped: 0
+Timeout: 0
+```</content>
+ <labels>
+ <label>2. Needs Diagnosis</label>
+ </labels>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/13</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/13"/>
+ <title>Add whitelists, in place of blacklists</title>
+ <updated>2021-04-19T12:14:52Z</updated>
+ <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/a80efbd95010128eb78be538d237198b?s=80&amp;d=identicon"/>
+ <author>
+ <name>bugzilla-migration</name>
+ <email></email>
+ </author>
+ <summary>Add whitelists, in place of blacklists</summary>
+ <description>## Submitted by Bastien Nocera `@hadess`
+
+**[Link to original bug (#673588)](https://bugzilla.gnome.org/show_bug.cgi?id=673588)**
+## Description
+We have ignore_mimetypes and ignore_schemes. We should also have a whitelist for use in totem-video-thumbnailer.
+
+
+### Blocking
+ * [Bug 673590](https://bugzilla.gnome.org/show_bug.cgi?id=673590)</description>
+ <content>## Submitted by Bastien Nocera `@hadess`
+
+**[Link to original bug (#673588)](https://bugzilla.gnome.org/show_bug.cgi?id=673588)**
+## Description
+We have ignore_mimetypes and ignore_schemes. We should also have a whitelist for use in totem-video-thumbnailer.
+
+
+### Blocking
+ * [Bug 673590](https://bugzilla.gnome.org/show_bug.cgi?id=673590)</content>
+ <labels>
+ <label>bugzilla</label>
+ </labels>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/26</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/26"/>
+ <title>Add &amp;quot;mime-type&amp;quot; property to plparser object</title>
+ <updated>2021-04-19T12:14:51Z</updated>
+ <media:thumbnail width="40" height="40" url="https://gitlab.gnome.org/uploads/-/system/user/avatar/29033/avatar.png"/>
+ <author>
+ <name>crvi</name>
+ <email></email>
+ </author>
+ <summary>Add "mime-type" property to plparser object</summary>
+ <description>Rhythmbox currently passes the `'collectionViewUrl'` ( from itunes search json results ), as below:
+
+`collectionViewUrl: https://podcasts.apple.com/us/podcast/global-news-podcast/id135067274?uo=4`
+
+`totem_pl_parser_parse (parser, collectionViewUrl, FALSE);`
+
+totem-pl-parser obtaines the itms id which is `135067274` and again does a itunes lookup, as below:
+
+`json_uri = g_strdup_printf ("https://itunes.apple.com/lookup?id=%s&amp;entity=podcast", itms_id);`
+
+and obtains the RSS feed url from the `'feedUrl'` json attribute in the lookup result.
+
+The second itunes lookup step is pure overhead, as Rhythmbox can obtain and pass `'feedUrl'` directly from search results to totem-pl-parser. In that case, it would be better if Rhythmbox can force the mime-type as `application/rss+xml` rather than totem-pl-parser detecting the mime-type and matching against supported types. The itms code path described above, infact uses the direct call without checking mime-type, as below:
+
+`ret = totem_pl_parser_add_rss (parser, feed_file, NULL, parse_data, NULL);`
+
+This should speedup podcast parsing in all apps which know the mime-type well in advance.</description>
+ <content>Rhythmbox currently passes the `'collectionViewUrl'` ( from itunes search json results ), as below:
+
+`collectionViewUrl: https://podcasts.apple.com/us/podcast/global-news-podcast/id135067274?uo=4`
+
+`totem_pl_parser_parse (parser, collectionViewUrl, FALSE);`
+
+totem-pl-parser obtaines the itms id which is `135067274` and again does a itunes lookup, as below:
+
+`json_uri = g_strdup_printf ("https://itunes.apple.com/lookup?id=%s&amp;entity=podcast", itms_id);`
+
+and obtains the RSS feed url from the `'feedUrl'` json attribute in the lookup result.
+
+The second itunes lookup step is pure overhead, as Rhythmbox can obtain and pass `'feedUrl'` directly from search results to totem-pl-parser. In that case, it would be better if Rhythmbox can force the mime-type as `application/rss+xml` rather than totem-pl-parser detecting the mime-type and matching against supported types. The itms code path described above, infact uses the direct call without checking mime-type, as below:
+
+`ret = totem_pl_parser_add_rss (parser, feed_file, NULL, parse_data, NULL);`
+
+This should speedup podcast parsing in all apps which know the mime-type well in advance.</content>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/34</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/34"/>
+ <title>Support full parsing cancellation</title>
+ <updated>2021-04-19T12:10:41Z</updated>
+ <media:thumbnail width="40" height="40" url="https://gitlab.gnome.org/uploads/-/system/user/avatar/29033/avatar.png"/>
+ <author>
+ <name>crvi</name>
+ <email></email>
+ </author>
+ <summary>Support full parsing cancellation</summary>
+ <description>Currently, we support cancellation before parsing, not otherwise.</description>
+ <content>Currently, we support cancellation before parsing, not otherwise.</content>
+ <labels>
+ <label>1. Enhancement</label>
+ </labels>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/22</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/22"/>
+ <title>Does not work with GJS (Introspection)</title>
+ <updated>2021-01-28T17:59:49Z</updated>
+ <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/f8b185f04383f2937ffd11f497d0d7dc?s=80&amp;d=identicon"/>
+ <author>
+ <name>abak</name>
+ <email></email>
+ </author>
+ <summary>Does not work with GJS (Introspection)</summary>
+ <description>TotemPlParser is not usable with GJS (Javascript).
+Tested version: 3.26.5 (GJS 1.64.3)
+
+ * Async:
+
+ ```Javascript
+#!/usr/bin/gjs
+
+const GLib = imports.gi.GLib;
+const TotemPlParser = imports.gi.TotemPlParser;
+
+let uri = 'file:///home/me/playlist.m3u';
+
+let parser = new imports.gi.TotemPlParser.Parser();
+parser.connect('playlist-started', (parser, uri, metadata) =&gt; log("playlist started " + [parser, uri, metadata]));
+parser.connect('entry-parsed', (parser, uri, metadata) =&gt; log("entry parsed " + [parser, uri, metadata]));
+parser.connect('playlist-ended', (parser, uri, metadata) =&gt; log("playlist ended " + [parser, uri, metadata]));
+
+parser.parse_async(uri, true, null, (source, result) =&gt; {
+ log('parse callback ' + [source, result]);
+});
+
+GLib.MainLoop.new(null, true).run();
+
+/* return:
+
+(gjs:2781): Gjs-WARNING **: 21:48:14.325: JS ERROR: Error: No introspection information found for TotemPlParserMetadata
+@./parserASync.js:17:31
+
+......
+
+(gjs:2781): Gjs-WARNING **: 21:48:14.325: JS ERROR: Error: No introspection information found for TotemPlParserMetadata
+@./parserASync.js:17:31
+
+Gjs-Message: 21:48:14.325: JS LOG: playlist ended [object instance wrapper GIName:TotemPlParser.Parser jsobj@0x3f0460589080 native@0x55c8213b5580],file:///home/me/playlist.m3u,
+Gjs-Message: 21:48:14.330: JS LOG: parse callback [object instance wrapper GIName:TotemPlParser.Parser jsobj@0x3f0460589080 native@0x55c8213b5580],[object instance wrapper GIName:Gio.Task jsobj@0x3f0460588d30 native@0x55c82139ad70]
+
+*/
+ ```
+
+ * Sync:
+
+ ```Javascript
+#!/usr/bin/gjs
+
+const GLib = imports.gi.GLib;
+const TotemPlParser = imports.gi.TotemPlParser;
+
+let uri = 'file:///home/me/playlist.m3u';
+
+let parser = new imports.gi.TotemPlParser.Parser();
+parser.connect('playlist-started', (parser, uri, metadata) =&gt; log("playlist started " + [parser, uri, metadata]));
+parser.connect('entry-parsed', (parser, uri, metadata) =&gt; log("entry parsed " + [parser, uri, metadata]));
+parser.connect('playlist-ended', (parser, uri, metadata) =&gt; log("playlist ended " + [parser, uri, metadata]));
+
+parser.parse(uri, true);
+
+GLib.MainLoop.new(null, true).run();
+
+/* return:
+
+(gjs:2716): Gjs-WARNING **: 21:46:23.844: JS ERROR: Error: No introspection information found for TotemPlParserMetadata
+@./parserSync.js:13:8
+
+......
+
+(gjs:2716): Gjs-WARNING **: 21:46:23.844: JS ERROR: Error: No introspection information found for TotemPlParserMetadata
+@./parserSync.js:13:8
+
+
+Gjs-Message: 21:41:36.996: JS LOG: playlist ended [object instance wrapper GIName:TotemPlParser.Parser jsobj@0x30d971589080 native@0x55ee3361d200],file:///home/me/playlist.m3u,
+
+*/
+ ```
+
+Without 'playlist-started' and 'entry-parsed' signal connections, there is no error message.</description>
+ <content>TotemPlParser is not usable with GJS (Javascript).
+Tested version: 3.26.5 (GJS 1.64.3)
+
+ * Async:
+
+ ```Javascript
+#!/usr/bin/gjs
+
+const GLib = imports.gi.GLib;
+const TotemPlParser = imports.gi.TotemPlParser;
+
+let uri = 'file:///home/me/playlist.m3u';
+
+let parser = new imports.gi.TotemPlParser.Parser();
+parser.connect('playlist-started', (parser, uri, metadata) =&gt; log("playlist started " + [parser, uri, metadata]));
+parser.connect('entry-parsed', (parser, uri, metadata) =&gt; log("entry parsed " + [parser, uri, metadata]));
+parser.connect('playlist-ended', (parser, uri, metadata) =&gt; log("playlist ended " + [parser, uri, metadata]));
+
+parser.parse_async(uri, true, null, (source, result) =&gt; {
+ log('parse callback ' + [source, result]);
+});
+
+GLib.MainLoop.new(null, true).run();
+
+/* return:
+
+(gjs:2781): Gjs-WARNING **: 21:48:14.325: JS ERROR: Error: No introspection information found for TotemPlParserMetadata
+@./parserASync.js:17:31
+
+......
+
+(gjs:2781): Gjs-WARNING **: 21:48:14.325: JS ERROR: Error: No introspection information found for TotemPlParserMetadata
+@./parserASync.js:17:31
+
+Gjs-Message: 21:48:14.325: JS LOG: playlist ended [object instance wrapper GIName:TotemPlParser.Parser jsobj@0x3f0460589080 native@0x55c8213b5580],file:///home/me/playlist.m3u,
+Gjs-Message: 21:48:14.330: JS LOG: parse callback [object instance wrapper GIName:TotemPlParser.Parser jsobj@0x3f0460589080 native@0x55c8213b5580],[object instance wrapper GIName:Gio.Task jsobj@0x3f0460588d30 native@0x55c82139ad70]
+
+*/
+ ```
+
+ * Sync:
+
+ ```Javascript
+#!/usr/bin/gjs
+
+const GLib = imports.gi.GLib;
+const TotemPlParser = imports.gi.TotemPlParser;
+
+let uri = 'file:///home/me/playlist.m3u';
+
+let parser = new imports.gi.TotemPlParser.Parser();
+parser.connect('playlist-started', (parser, uri, metadata) =&gt; log("playlist started " + [parser, uri, metadata]));
+parser.connect('entry-parsed', (parser, uri, metadata) =&gt; log("entry parsed " + [parser, uri, metadata]));
+parser.connect('playlist-ended', (parser, uri, metadata) =&gt; log("playlist ended " + [parser, uri, metadata]));
+
+parser.parse(uri, true);
+
+GLib.MainLoop.new(null, true).run();
+
+/* return:
+
+(gjs:2716): Gjs-WARNING **: 21:46:23.844: JS ERROR: Error: No introspection information found for TotemPlParserMetadata
+@./parserSync.js:13:8
+
+......
+
+(gjs:2716): Gjs-WARNING **: 21:46:23.844: JS ERROR: Error: No introspection information found for TotemPlParserMetadata
+@./parserSync.js:13:8
+
+
+Gjs-Message: 21:41:36.996: JS LOG: playlist ended [object instance wrapper GIName:TotemPlParser.Parser jsobj@0x30d971589080 native@0x55ee3361d200],file:///home/me/playlist.m3u,
+
+*/
+ ```
+
+Without 'playlist-started' and 'entry-parsed' signal connections, there is no error message.</content>
+ <labels>
+ <label>1. Bug</label>
+ <label>4. Help Wanted</label>
+ </labels>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/14</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/14"/>
+ <title>Directory parsing problem</title>
+ <updated>2019-03-20T10:38:29Z</updated>
+ <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/a80efbd95010128eb78be538d237198b?s=80&amp;d=identicon"/>
+ <author>
+ <name>bugzilla-migration</name>
+ <email></email>
+ </author>
+ <summary>Directory parsing problem</summary>
+ <description>## Submitted by Bastien Nocera `@hadess`
+
+**[Link to original bug (#678814)](https://bugzilla.gnome.org/show_bug.cgi?id=678814)**
+## Description
+totem-pl-parser recursive parsing fails when the directory depth is too high, and the last level of recursion is a directory</description>
+ <content>## Submitted by Bastien Nocera `@hadess`
+
+**[Link to original bug (#678814)](https://bugzilla.gnome.org/show_bug.cgi?id=678814)**
+## Description
+totem-pl-parser recursive parsing fails when the directory depth is too high, and the last level of recursion is a directory</content>
+ <labels>
+ <label>bugzilla</label>
+ </labels>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/11</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/11"/>
+ <title>totem-pl-parser fails to detect max open files</title>
+ <updated>2019-03-20T10:38:06Z</updated>
+ <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/a80efbd95010128eb78be538d237198b?s=80&amp;d=identicon"/>
+ <author>
+ <name>bugzilla-migration</name>
+ <email></email>
+ </author>
+ <summary>totem-pl-parser fails to detect max open files</summary>
+ <description>## Submitted by Jon Masters
+
+**[Link to original bug (#583473)](https://bugzilla.gnome.org/show_bug.cgi?id=583473)**
+## Description
+Please describe the problem:
+my_g_file_info_get_mime_type_with_data fails to detect that a GError object might be telling it that the maximum number of open file descriptors has been exceeded.
+
+Steps to reproduce:
+1.
+2.
+3.
+
+
+Actual results:
+
+
+Expected results:
+
+
+Does this happen every time?
+
+
+Other information:
+
+Version: 2.24.x</description>
+ <content>## Submitted by Jon Masters
+
+**[Link to original bug (#583473)](https://bugzilla.gnome.org/show_bug.cgi?id=583473)**
+## Description
+Please describe the problem:
+my_g_file_info_get_mime_type_with_data fails to detect that a GError object might be telling it that the maximum number of open file descriptors has been exceeded.
+
+Steps to reproduce:
+1.
+2.
+3.
+
+
+Actual results:
+
+
+Expected results:
+
+
+Does this happen every time?
+
+
+Other information:
+
+Version: 2.24.x</content>
+ <labels>
+ <label>bugzilla</label>
+ </labels>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/10</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/10"/>
+ <title>add API for parsing in-memory playlists</title>
+ <updated>2019-03-20T10:37:58Z</updated>
+ <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/a80efbd95010128eb78be538d237198b?s=80&amp;d=identicon"/>
+ <author>
+ <name>bugzilla-migration</name>
+ <email></email>
+ </author>
+ <summary>add API for parsing in-memory playlists</summary>
+ <description>## Submitted by Jonathan Matthew
+
+**[Link to original bug (#518811)](https://bugzilla.gnome.org/show_bug.cgi?id=518811)**
+## Description
+For last.fm streaming ([bug 518231](https://bugzilla.gnome.org/show_bug.cgi?id=518231)), it'd be good to be able to pass an in-memory playlist to totem-pl-parser. The obvious:
+
+ totem_pl_parser_parse_from_data (parser, data, data_len, fallback)
+
+(with a 'base' arg if required) would do nicely.
+
+Later on, a _parse variant taking a GInputStream could be handy, although I don't have any use cases for that.
+
+Version: 2.23.x</description>
+ <content>## Submitted by Jonathan Matthew
+
+**[Link to original bug (#518811)](https://bugzilla.gnome.org/show_bug.cgi?id=518811)**
+## Description
+For last.fm streaming ([bug 518231](https://bugzilla.gnome.org/show_bug.cgi?id=518231)), it'd be good to be able to pass an in-memory playlist to totem-pl-parser. The obvious:
+
+ totem_pl_parser_parse_from_data (parser, data, data_len, fallback)
+
+(with a 'base' arg if required) would do nicely.
+
+Later on, a _parse variant taking a GInputStream could be handy, although I don't have any use cases for that.
+
+Version: 2.23.x</content>
+ <labels>
+ <label>bugzilla</label>
+ </labels>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/9</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/9"/>
+ <title>Doesn&amp;#39;t inherit properties when parsing substream</title>
+ <updated>2019-03-20T10:37:49Z</updated>
+ <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/a80efbd95010128eb78be538d237198b?s=80&amp;d=identicon"/>
+ <author>
+ <name>bugzilla-migration</name>
+ <email></email>
+ </author>
+ <summary>Doesn't inherit properties when parsing substream</summary>
+ <description>## Submitted by Bastien Nocera `@hadess`
+
+**[Link to original bug (#507825)](https://bugzilla.gnome.org/show_bug.cgi?id=507825)**
+## Description
+$ ./test-parser file:///home/hadess/Projects/Cvs/totem-pl-parser/plparse/test.asx
+
+###################### parsing ################
+
+added URI 'mmsh://viptf1.yacast.net/tf1jt/jt13d08012007.asf'
+
+
+&lt;ASX VERSION="3.0"&gt;
+`&lt;ENTRY&gt;`
+ `&lt;TITLE&gt;`Inquiétude des pêcheurs de bulots du Cotentin`&lt;/TITLE&gt;`
+ &lt;STARTTIME VALUE="907.000000" /&gt;
+ &lt;DURATION VALUE="109.000000" /&gt;
+ &lt;REF HREF="http://viptf1.yacast.net/tf1jt/jt13d08012007.asf" /&gt;
+`&lt;/ENTRY&gt;`
+`&lt;/ASX&gt;`
+
+The duration and starttime aren't passed down to the children when they should be.
+
+Version: 2.23.x</description>
+ <content>## Submitted by Bastien Nocera `@hadess`
+
+**[Link to original bug (#507825)](https://bugzilla.gnome.org/show_bug.cgi?id=507825)**
+## Description
+$ ./test-parser file:///home/hadess/Projects/Cvs/totem-pl-parser/plparse/test.asx
+
+###################### parsing ################
+
+added URI 'mmsh://viptf1.yacast.net/tf1jt/jt13d08012007.asf'
+
+
+&lt;ASX VERSION="3.0"&gt;
+`&lt;ENTRY&gt;`
+ `&lt;TITLE&gt;`Inquiétude des pêcheurs de bulots du Cotentin`&lt;/TITLE&gt;`
+ &lt;STARTTIME VALUE="907.000000" /&gt;
+ &lt;DURATION VALUE="109.000000" /&gt;
+ &lt;REF HREF="http://viptf1.yacast.net/tf1jt/jt13d08012007.asf" /&gt;
+`&lt;/ENTRY&gt;`
+`&lt;/ASX&gt;`
+
+The duration and starttime aren't passed down to the children when they should be.
+
+Version: 2.23.x</content>
+ <labels>
+ <label>bugzilla</label>
+ </labels>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/8</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/8"/>
+ <title>Does not parse asx playlist trees like WMP</title>
+ <updated>2019-03-20T10:37:30Z</updated>
+ <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/a80efbd95010128eb78be538d237198b?s=80&amp;d=identicon"/>
+ <author>
+ <name>bugzilla-migration</name>
+ <email></email>
+ </author>
+ <summary>Does not parse asx playlist trees like WMP</summary>
+ <description>## Submitted by Marcus Granado
+
+**[Link to original bug (#426773)](https://bugzilla.gnome.org/show_bug.cgi?id=426773)**
+## Description
+Please describe the problem:
+Totem 2.18.0 in Ubuntu Feisty Beta (using today's repository, xine-lib 1.1.4 and today's GStreamer 0.10.12) only plays the *first* video in a master-playlist containing nested asx sub-playlists (in a playlist tree with arbitrary depth).
+
+Microsoft media player iterates over all sub-playlists (the nodes/leaves of the tree) correctly and plays *all* the videos in the nested playlist.
+
+The master asx playlist (the root of the tree, listed below) contains further references to other nested asx sub-playlists as in a tree of playlists. Each sub-playlist leaf contains only one mms: video stream element each which should be played.
+Each sub-playlist is successfully played by totem if started manually, but totem fails to iterate over all of them if given the master playlist to play.
+
+Steps to reproduce:
+
+totem "http://mrc.gran.googlepages.com/example-nested-playlist.asx"
+
+(the asx contents of this url can be seen below.)
+
+Actual results:
+- only the first item of the master-playlist above is shown.
+- each item can be played successfully if manually started using the sub-playlist urls (see list of urls below).
+- *sometimes*, totem can be made to iterate over some of the master playlist items if the 'next item' button is pressed repeatedly without stopping.
+
+Expected results:
+totem should play *all* videostreams in the leaves of the playlist tree, just like Microsoft Media Player does.
+
+Does this happen every time?
+yes
+
+Other information:
+- Microsoft media player fetches/plays each asx sub-playlists and mms: streams inside them synchronously (depth-first, blocking the iteration that fetches the next asx sub-playlist contents until the current videostream is over or cancelled).
+- maybe totem is doing this asynchronously (breadth-first, fetching the contents of all asx sub-playlists before starting to play the first videostream)?
+
+The master playlist in the root of the tree (pointing to nested sub-playlists) given as example:
+
+&lt;asx version = "3.0"&gt;
+`&lt;entry&gt;`
+&lt;ref href="http://playervideo.globo.com/webmedia/GMCMidiaASX?midiaId=654705|banda=N|ext.asx"/&gt;
+`&lt;/entry&gt;`
+`&lt;entry&gt;`
+&lt;ref href="http://playervideo.globo.com/webmedia/GMCMidiaASX?midiaId=660298|banda=N|ext.asx"/&gt;
+`&lt;/entry&gt;`
+`&lt;entry&gt;`
+&lt;ref href="http://playervideo.globo.com/webmedia/GMCMidiaASX?midiaId=660285|banda=N|ext.asx"/&gt;
+`&lt;/entry&gt;`
+`&lt;entry&gt;`
+&lt;ref href="http://playervideo.globo.com/webmedia/GMCMidiaASX?midiaId=659836|banda=N|ext.asx"/&gt;
+`&lt;/entry&gt;`
+`&lt;/asx&gt;`
+
+Version: 2.23.x</description>
+ <content>## Submitted by Marcus Granado
+
+**[Link to original bug (#426773)](https://bugzilla.gnome.org/show_bug.cgi?id=426773)**
+## Description
+Please describe the problem:
+Totem 2.18.0 in Ubuntu Feisty Beta (using today's repository, xine-lib 1.1.4 and today's GStreamer 0.10.12) only plays the *first* video in a master-playlist containing nested asx sub-playlists (in a playlist tree with arbitrary depth).
+
+Microsoft media player iterates over all sub-playlists (the nodes/leaves of the tree) correctly and plays *all* the videos in the nested playlist.
+
+The master asx playlist (the root of the tree, listed below) contains further references to other nested asx sub-playlists as in a tree of playlists. Each sub-playlist leaf contains only one mms: video stream element each which should be played.
+Each sub-playlist is successfully played by totem if started manually, but totem fails to iterate over all of them if given the master playlist to play.
+
+Steps to reproduce:
+
+totem "http://mrc.gran.googlepages.com/example-nested-playlist.asx"
+
+(the asx contents of this url can be seen below.)
+
+Actual results:
+- only the first item of the master-playlist above is shown.
+- each item can be played successfully if manually started using the sub-playlist urls (see list of urls below).
+- *sometimes*, totem can be made to iterate over some of the master playlist items if the 'next item' button is pressed repeatedly without stopping.
+
+Expected results:
+totem should play *all* videostreams in the leaves of the playlist tree, just like Microsoft Media Player does.
+
+Does this happen every time?
+yes
+
+Other information:
+- Microsoft media player fetches/plays each asx sub-playlists and mms: streams inside them synchronously (depth-first, blocking the iteration that fetches the next asx sub-playlist contents until the current videostream is over or cancelled).
+- maybe totem is doing this asynchronously (breadth-first, fetching the contents of all asx sub-playlists before starting to play the first videostream)?
+
+The master playlist in the root of the tree (pointing to nested sub-playlists) given as example:
+
+&lt;asx version = "3.0"&gt;
+`&lt;entry&gt;`
+&lt;ref href="http://playervideo.globo.com/webmedia/GMCMidiaASX?midiaId=654705|banda=N|ext.asx"/&gt;
+`&lt;/entry&gt;`
+`&lt;entry&gt;`
+&lt;ref href="http://playervideo.globo.com/webmedia/GMCMidiaASX?midiaId=660298|banda=N|ext.asx"/&gt;
+`&lt;/entry&gt;`
+`&lt;entry&gt;`
+&lt;ref href="http://playervideo.globo.com/webmedia/GMCMidiaASX?midiaId=660285|banda=N|ext.asx"/&gt;
+`&lt;/entry&gt;`
+`&lt;entry&gt;`
+&lt;ref href="http://playervideo.globo.com/webmedia/GMCMidiaASX?midiaId=659836|banda=N|ext.asx"/&gt;
+`&lt;/entry&gt;`
+`&lt;/asx&gt;`
+
+Version: 2.23.x</content>
+ <labels>
+ <label>bugzilla</label>
+ </labels>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/7</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/7"/>
+ <title>Try to reduce remote accesses</title>
+ <updated>2019-03-20T10:37:12Z</updated>
+ <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/a80efbd95010128eb78be538d237198b?s=80&amp;d=identicon"/>
+ <author>
+ <name>bugzilla-migration</name>
+ <email></email>
+ </author>
+ <summary>Try to reduce remote accesses</summary>
+ <description>## Submitted by Bastien Nocera `@hadess`
+
+**[Link to original bug (#395827)](https://bugzilla.gnome.org/show_bug.cgi?id=395827)**
+## Description
+$ ./test-parser http://localhost:12345/playlist.asx
+###################### parsing ################
+
+added URI 'http://localhost:12345/leopard.mov' with title 'empty' genre 'empty'
+added URI 'http://localhost:12345/frontrow-music.mov' with title 'empty' genre 'empty'
+
+Shows in the logs:
+127.0.0.1 - - [12/Jan/2007:16:19:26 +0000] "GET /playlist.asx HTTP/1.1" 200 319 "-" "gnome-vfs/2.14.2 neon/0.25.4"
+127.0.0.1 - - [12/Jan/2007:16:19:26 +0000] "GET /playlist.asx HTTP/1.1" 200 319 "-" "gnome-vfs/2.14.2 neon/0.25.4"
+127.0.0.1 - - [12/Jan/2007:16:19:26 +0000] "GET /leopard.mov HTTP/1.1" 200 348892 "-" "gnome-vfs/2.14.2 neon/0.25.4"
+127.0.0.1 - - [12/Jan/2007:16:19:26 +0000] "GET /frontrow-music.mov HTTP/1.1" 200 473716 "-" "gnome-vfs/2.14.2 neon/0.25.4"
+
+It should only access playlist.asx once if possible.
+
+Version: 2.23.x</description>
+ <content>## Submitted by Bastien Nocera `@hadess`
+
+**[Link to original bug (#395827)](https://bugzilla.gnome.org/show_bug.cgi?id=395827)**
+## Description
+$ ./test-parser http://localhost:12345/playlist.asx
+###################### parsing ################
+
+added URI 'http://localhost:12345/leopard.mov' with title 'empty' genre 'empty'
+added URI 'http://localhost:12345/frontrow-music.mov' with title 'empty' genre 'empty'
+
+Shows in the logs:
+127.0.0.1 - - [12/Jan/2007:16:19:26 +0000] "GET /playlist.asx HTTP/1.1" 200 319 "-" "gnome-vfs/2.14.2 neon/0.25.4"
+127.0.0.1 - - [12/Jan/2007:16:19:26 +0000] "GET /playlist.asx HTTP/1.1" 200 319 "-" "gnome-vfs/2.14.2 neon/0.25.4"
+127.0.0.1 - - [12/Jan/2007:16:19:26 +0000] "GET /leopard.mov HTTP/1.1" 200 348892 "-" "gnome-vfs/2.14.2 neon/0.25.4"
+127.0.0.1 - - [12/Jan/2007:16:19:26 +0000] "GET /frontrow-music.mov HTTP/1.1" 200 473716 "-" "gnome-vfs/2.14.2 neon/0.25.4"
+
+It should only access playlist.asx once if possible.
+
+Version: 2.23.x</content>
+ <labels>
+ <label>bugzilla</label>
+ </labels>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/5</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/5"/>
+ <title>Handle shortened movie URLs</title>
+ <updated>2019-02-22T23:34:25Z</updated>
+ <media:thumbnail width="40" height="40" url="https://secure.gravatar.com/avatar/a80efbd95010128eb78be538d237198b?s=80&amp;d=identicon"/>
+ <author>
+ <name>bugzilla-migration</name>
+ <email></email>
+ </author>
+ <summary>Handle shortened movie URLs</summary>
+ <description>## Submitted by Bastien Nocera `@hadess`
+
+**[Link to original bug (#688893)](https://bugzilla.gnome.org/show_bug.cgi?id=688893)**
+## Description
+Such as http://t.co/99VcPH5M
+
+We might have a problem within totem-pl-parser instead.</description>
+ <content>## Submitted by Bastien Nocera `@hadess`
+
+**[Link to original bug (#688893)](https://bugzilla.gnome.org/show_bug.cgi?id=688893)**
+## Description
+Such as http://t.co/99VcPH5M
+
+We might have a problem within totem-pl-parser instead.</content>
+ <labels>
+ <label>1. Enhancement</label>
+ </labels>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/4</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/4"/>
+ <title>VCDs playback requires device node</title>
+ <updated>2019-02-15T16:39:35Z</updated>
+ <media:thumbnail width="40" height="40" url="https://gitlab.gnome.org/uploads/-/system/user/avatar/525/avatar.png"/>
+ <author>
+ <name>Bastien Nocera</name>
+ <email></email>
+ </author>
+ <summary>VCDs playback requires device node</summary>
+ <description>The `vcdsrc` in GStreamer currently only supports playing back from block devices, and could fairly easily [support playing back from images](https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/898). What it will not support is playing back from directories.
+
+```sh
+$ ./disc /run/media/hadess/20121123_1310
+** Message: /run/media/hadess/20121123_1310 contains a Video CD.
+** Message: MRL for directory is "vcd:///run/media/hadess/20121123_1310".
+$ ./disc ~/Videos/VCD.iso
+** Message: /home/hadess/Videos/VCD.iso contains a Video CD.
+** Message: MRL for directory is "vcd:///home/hadess/Videos/VCD.iso".
+$ mount | grep 20121123_1310
+/home/hadess/Videos/VCD.iso on /run/media/hadess/20121123_1310 type iso9660 (ro,nosuid,nodev,relatime,norock,check=r,map=n,blocksize=2048,uid=1000,gid=1000,dmode=500,fmode=400,uhelper=udisks2)
+```
+
+Both `./disc` runs should have the same result instead, pointing to an image or block device, never to a directory.</description>
+ <content>The `vcdsrc` in GStreamer currently only supports playing back from block devices, and could fairly easily [support playing back from images](https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/898). What it will not support is playing back from directories.
+
+```sh
+$ ./disc /run/media/hadess/20121123_1310
+** Message: /run/media/hadess/20121123_1310 contains a Video CD.
+** Message: MRL for directory is "vcd:///run/media/hadess/20121123_1310".
+$ ./disc ~/Videos/VCD.iso
+** Message: /home/hadess/Videos/VCD.iso contains a Video CD.
+** Message: MRL for directory is "vcd:///home/hadess/Videos/VCD.iso".
+$ mount | grep 20121123_1310
+/home/hadess/Videos/VCD.iso on /run/media/hadess/20121123_1310 type iso9660 (ro,nosuid,nodev,relatime,norock,check=r,map=n,blocksize=2048,uid=1000,gid=1000,dmode=500,fmode=400,uhelper=udisks2)
+```
+
+Both `./disc` runs should have the same result instead, pointing to an image or block device, never to a directory.</content>
+</entry>
+<entry>
+ <id>https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/3</id>
+ <link rel="alternate" href="https://gitlab.gnome.org/GNOME/totem-pl-parser/-/issues/3"/>
+ <title>Add discs to tests</title>
+ <updated>2019-02-15T13:32:40Z</updated>
+ <media:thumbnail width="40" height="40" url="https://gitlab.gnome.org/uploads/-/system/user/avatar/525/avatar.png"/>
+ <author>
+ <name>Bastien Nocera</name>
+ <email></email>
+ </author>
+ <summary>Add discs to tests</summary>
+ <description>`plparse/tests/disc.c` just doesn't do any tests if it's not on my machine, and needs a disc in a drive that's never plugged in. We should at least have test for the disc images that are easy to mock with ISO images (VCD, DVD, BD).</description>
+ <content>`plparse/tests/disc.c` just doesn't do any tests if it's not on my machine, and needs a disc in a drive that's never plugged in. We should at least have test for the disc images that are easy to mock with ISO images (VCD, DVD, BD).</content>
+</entry>
+</feed>
+
diff --git a/plparse/tests/parser.c b/plparse/tests/parser.c
index 00acea2..35f62f2 100644
--- a/plparse/tests/parser.c
+++ b/plparse/tests/parser.c
@@ -749,7 +749,7 @@ test_parsing_needle_carriage_return (void)
/* atom needle test */
uri = get_relative_uri (TEST_SRCDIR "atom.xml");
- g_assert_cmpuint (parser_test_get_num_entries (uri), ==, 0);
+ g_assert_cmpuint (parser_test_get_num_entries (uri), ==, 1);
g_free (uri);
/* opml needle test */
@@ -1292,6 +1292,55 @@ test_parsing_m3u_streaming (void)
}
static void
+video_links_slow_parsing (const char *uri, gfloat timeout)
+{
+ time_t start, end;
+ double run_time;
+
+ g_setenv ("SLOW_PARSING", "1", TRUE);
+
+ start = time (NULL);
+ option_no_recurse = TRUE;
+ parser_test_get_playlist_field (uri, TOTEM_PL_PARSER_FIELD_TITLE);
+ end = time (NULL);
+
+ run_time = difftime (end, start);
+
+ g_assert_cmpfloat (run_time, <, timeout);
+}
+
+static void
+test_video_links_slow_parsing ()
+{
+ char *uri;
+ gfloat timeout = 2.0; /* seconds */
+
+ /* rss feed with 400 entries. should take 400 * 1 = 400
+ * seconds with videosite check, and approx. less than 1
+ * second if we bypass videosite check.
+ */
+ uri = get_relative_uri (TEST_SRCDIR "podcast-different-item-images.rss");
+ video_links_slow_parsing (uri, timeout);
+ g_free (uri);
+
+ /* atom feed with 20 entries. should take 20 * 1 = 20
+ * seconds with videosite check, and approx. less than 1
+ * second if we bypass videosite check.
+ */
+ uri = get_relative_uri (TEST_SRCDIR "gitlab-issues.atom");
+ video_links_slow_parsing (uri, timeout);
+ g_free (uri);
+
+ /* atom feed with 5 entries. should take 5 * 1 = 5
+ * seconds with videosite check, and approx. less than 1
+ * second if we bypass videosite check.
+ */
+ uri = get_relative_uri (TEST_SRCDIR "status-gnome-org.atom");
+ video_links_slow_parsing (uri, timeout);
+ g_free (uri);
+}
+
+static void
test_parsing_rss_id (void)
{
char *uri;
@@ -1880,6 +1929,8 @@ main (int argc, char *argv[])
g_test_add_func ("/parser/saving/parsing/xspf_title", test_saving_parsing_xspf_title);
g_test_add_func ("/parser/saving/sync", test_saving_sync);
g_test_add_func ("/parser/saving/async", test_saving_async);
+ /* set an envvar, keep at the end */
+ g_test_add_func ("/parser/parsing/video_links_slow_parsing", test_video_links_slow_parsing);
return g_test_run ();
}
diff --git a/plparse/tests/status-gnome-org.atom b/plparse/tests/status-gnome-org.atom
new file mode 100644
index 0000000..c6fb5ec
--- /dev/null
+++ b/plparse/tests/status-gnome-org.atom
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" >
+ <title type="text">GNOME infrastructure Status</title>
+ <subtitle type="html"><![CDATA[Status Feed]]></subtitle>
+ <link href="http://status.gnome.org/atom"></link>
+ <id>https://status.gnome.org/</id>
+ <link rel="alternate" type="text/html" href="http://status.gnome.org/atom" ></link>
+ <link rel="self" type="application/atom+xml" href="https://status.gnome.org/" ></link>
+ <updated>2021-05-12T18:00:00+00:00</updated>
+ <entry>
+ <author>
+ <name>GNOME infrastructure Status</name>
+ </author>
+ <media:group>
+ <media:content url="https://status.gnome.org/media/status-1.mp4"/>
+ </media:group>
+ <title type="text"><![CDATA[Mass reboots]]></title>
+ <link rel="alternate" type="text/html" href="http://status.gnome.org/incident/23424/"></link>
+ <id>http://status.gnome.org/incident/23424/</id>
+ <summary type="html"><![CDATA[<p>Mass reboots in progress</p>
+]]></summary>
+ <content type="html"><![CDATA[]]></content>
+ <updated>2021-04-08T08:55:13+00:00</updated>
+ </entry>
+ <entry>
+ <author>
+ <name>GNOME infrastructure Status</name>
+ </author>
+ <media:group>
+ <media:content url="https://status.gnome.org/media/status-2.mp4"/>
+ </media:group>
+ <title type="text"><![CDATA[Planned maintenance in progress]]></title>
+ <link rel="alternate" type="text/html" href="http://status.gnome.org/incident/22711/"></link>
+ <id>http://status.gnome.org/incident/22711/</id>
+ <summary type="html"><![CDATA[<p>All GNOME services will be shut down between 12:00 - 13:30 PM UTC due to networking infrastructure maintenance.</p>
+]]></summary>
+ <content type="html"><![CDATA[]]></content>
+ <updated>2021-01-28T11:47:58+00:00</updated>
+ </entry>
+ <entry>
+ <author>
+ <name>GNOME infrastructure Status</name>
+ </author>
+ <media:group>
+ <media:content url="https://status.gnome.org/media/status-3.mp4"/>
+ </media:group>
+ <title type="text"><![CDATA[Mass reboots]]></title>
+ <link rel="alternate" type="text/html" href="http://status.gnome.org/incident/22099/"></link>
+ <id>http://status.gnome.org/incident/22099/</id>
+ <summary type="html"><![CDATA[<p>https://mail.gnome.org/archives/infrastructure-announce/2020-November/msg00000.html</p>
+]]></summary>
+ <content type="html"><![CDATA[]]></content>
+ <updated>2020-11-16T18:43:38+00:00</updated>
+ </entry>
+ <entry>
+ <author>
+ <name>GNOME infrastructure Status</name>
+ </author>
+ <media:group>
+ <media:content url="https://status.gnome.org/media/status-4.mp4"/>
+ </media:group>
+ <title type="text"><![CDATA[Mass reboots]]></title>
+ <link rel="alternate" type="text/html" href="http://status.gnome.org/incident/17256/"></link>
+ <id>http://status.gnome.org/incident/17256/</id>
+ <summary type="html"><![CDATA[<p>https://mail.gnome.org/archives/infrastructure-announce/2020-August/msg00001.html</p>
+]]></summary>
+ <content type="html"><![CDATA[]]></content>
+ <updated>2020-08-12T13:22:19+00:00</updated>
+ </entry>
+ <entry>
+ <author>
+ <name>GNOME infrastructure Status</name>
+ </author>
+ <media:group>
+ <media:content url="https://status.gnome.org/media/status-5.mp4"/>
+ </media:group>
+ <title type="text"><![CDATA[Mass reboots]]></title>
+ <link rel="alternate" type="text/html" href="http://status.gnome.org/incident/13552/"></link>
+ <id>http://status.gnome.org/incident/13552/</id>
+ <summary type="html"><![CDATA[<p>https://mail.gnome.org/archives/infrastructure-announce/2020-June/msg00000.html</p>
+]]></summary>
+ <content type="html"><![CDATA[]]></content>
+ <updated>2020-06-09T08:52:51+00:00</updated>
+ </entry>
+</feed>
diff --git a/plparse/tests/videosite-tester.sh b/plparse/tests/videosite-tester.sh
index c10fac1..c8f42b0 100755
--- a/plparse/tests/videosite-tester.sh
+++ b/plparse/tests/videosite-tester.sh
@@ -61,3 +61,10 @@ if [ $1 = "--check" ] && [ $2 = "--url" ] && [ $3 = "http://www.guardian.co.uk/t
echo -n "TRUE"
exit 0
fi
+
+# test_video_links_slow_parsing
+if [ x$SLOW_PARSING != x ] ; then
+ sleep 1
+fi
+
+echo -n "FALSE"