axcore / tartube

A GUI front-end for youtube-dl, partly based on youtube-dl-gui and written in Python 3 / Gtk 3
GNU Lesser General Public License v2.1
2.05k stars 111 forks source link

"The following items are duplicates:" dialog is flawed/useless #561

Closed rwperrott closed 1 year ago

rwperrott commented 1 year ago

What operating system are you using?

Linux Mint 21.1 MATE 64-bit

What version of Tartube are you using?

python3-tartube_2.4.386.deb

If your bug report is

rwperrott commented 1 year ago

I did a database repair, because the target folder contents did not make sense, and it fixed errors. Maybe a database check and repair should be prompted for, but not forced, and indicated, when issues are spotted at start up, however that is a different matter to this bug.

I'm still seeing duplicates dialog after database repair, which is concerning.

rwperrott commented 1 year ago

Also saw this when ran from shell after install:

$ tartube 
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'strikethrough-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'underline-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'weight-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'style-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)

(tartube:2435454): Gdk-CRITICAL **: 15:50:07.935: gdk_window_thaw_toplevel_updates: assertion 'window->update_and_descendants_freeze_count > 0' failed
VLC media player 3.0.16 Vetinari (revision 3.0.13-8-g41878ff4f2)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'strikethrough-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'underline-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'weight-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'style-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
[0000564fab2ba580] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
QGradient::setColorAt: Color position must be specified in the range 0 to 1
QGradient::setColorAt: Color position must be specified in the range 0 to 1
QGradient::setColorAt: Color position must be specified in the range 0 to 1
QGradient::setColorAt: Color position must be specified in the range 0 to 1
[00007f4de80048d0] gl gl: Initialized libplacebo v4.192.1 (API v192)
libva info: VA-API version 1.14.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/nouveau_drv_video.so
libva info: Found init function __vaDriverInit_1_14
libva info: va_openDriver() returns 0
[00007f4de80048d0] glconv_vaapi_x11 gl error: vaDeriveImage: operation failed
[00007f4dec000cc0] main video output error: video output creation failed
[00007f4e00c0f950] main decoder error: failed to create video output
[00007f4de80093d0] gl gl: Initialized libplacebo v4.192.1 (API v192)
[00007f4e00c0f950] avcodec decoder: Using G3DVL VDPAU Driver Shared Library version 1.0 for hardware decoding
[vp9 @ 0x7f4e00c40740] Failed setup for format vdpau: hwaccel initialisation returned error.
[00007f4e00c0f950] avcodec decoder error: existing hardware acceleration cannot be reused
[00007f4de87e9650] gl gl: Initialized libplacebo v4.192.1 (API v192)
libva info: VA-API version 1.14.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/nouveau_drv_video.so
libva info: Found init function __vaDriverInit_1_14
libva info: va_openDriver() returns 0
[00007f4de87e9650] glconv_vaapi_x11 gl error: vaDeriveImage: operation failed
[00007f4de80093d0] gl gl: Initialized libplacebo v4.192.1 (API v192)
libva info: VA-API version 1.14.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/nouveau_drv_video.so
libva info: Found init function __vaDriverInit_1_14
libva info: va_openDriver() returns 0
[00007f4de80093d0] glconv_vaapi_x11 gl error: vaDeriveImage: operation failed
[00007f4dec059000] main video output error: video output creation failed
[00007f4e00c0f950] main decoder error: failed to create video output
[00007f4de80093d0] gl gl: Initialized libplacebo v4.192.1 (API v192)
[vp9 @ 0x7f4e00c51040] get_buffer() failed
[vp9 @ 0x7f4e00c51040] thread_get_buffer() failed
[vp9 @ 0x7f4e00c59640] get_buffer() failed
[vp9 @ 0x7f4e00c59640] thread_get_buffer() failed
[0000564fab35a4c0] main playlist: end of playlist, exiting
QObject::~QObject: Timers cannot be stopped from another thread
VLC media player 3.0.16 Vetinari (revision 3.0.13-8-g41878ff4f2)
[0000559c860ff580] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'strikethrough-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'underline-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'weight-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'style-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
QGradient::setColorAt: Color position must be specified in the range 0 to 1
QGradient::setColorAt: Color position must be specified in the range 0 to 1
QGradient::setColorAt: Color position must be specified in the range 0 to 1
QGradient::setColorAt: Color position must be specified in the range 0 to 1
[00007f82200048d0] gl gl: Initialized libplacebo v4.192.1 (API v192)
libva info: VA-API version 1.14.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/nouveau_drv_video.so
libva info: Found init function __vaDriverInit_1_14
libva info: va_openDriver() returns 0
[00007f82200048d0] glconv_vaapi_x11 gl error: vaDeriveImage: operation failed
[00007f8224000cc0] main video output error: video output creation failed
[00007f8230c140f0] main decoder error: failed to create video output
[00007f822002d0a0] gl gl: Initialized libplacebo v4.192.1 (API v192)
[00007f8230c140f0] avcodec decoder: Using G3DVL VDPAU Driver Shared Library version 1.0 for hardware decoding
[vp9 @ 0x7f8230ca8c80] Failed setup for format vdpau: hwaccel initialisation returned error.
[00007f8230c140f0] avcodec decoder error: existing hardware acceleration cannot be reused
[00007f8220043c80] gl gl: Initialized libplacebo v4.192.1 (API v192)
libva info: VA-API version 1.14.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/nouveau_drv_video.so
libva info: Found init function __vaDriverInit_1_14
libva info: va_openDriver() returns 0
[00007f8220043c80] glconv_vaapi_x11 gl error: vaDeriveImage: operation failed
[00007f822002d0a0] gl gl: Initialized libplacebo v4.192.1 (API v192)
libva info: VA-API version 1.14.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/nouveau_drv_video.so
libva info: Found init function __vaDriverInit_1_14
libva info: va_openDriver() returns 0
[00007f822002d0a0] glconv_vaapi_x11 gl error: vaDeriveImage: operation failed
[00007f8224045a80] main video output error: video output creation failed
[00007f8230c140f0] main decoder error: failed to create video output
[00007f828c004040] gl gl: Initialized libplacebo v4.192.1 (API v192)
[vp9 @ 0x7f8230cb55c0] get_buffer() failed
[vp9 @ 0x7f8230cb55c0] thread_get_buffer() failed
[vp9 @ 0x7f8230ca1cc0] get_buffer() failed
[vp9 @ 0x7f8230ca1cc0] thread_get_buffer() failed
[0000559c8619f4c0] main playlist: end of playlist, exiting
QObject::~QObject: Timers cannot be stopped from another thread
/usr/lib/python3/dist-packages/gi/overrides/Gtk.py:585: Warning: unable to set property 'strikethrough-set' of type 'gboolean' from value of type 'gchararray'
  return Gtk.Dialog.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gtk.py:585: Warning: unable to set property 'underline-set' of type 'gboolean' from value of type 'gchararray'
  return Gtk.Dialog.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gtk.py:585: Warning: unable to set property 'weight-set' of type 'gboolean' from value of type 'gchararray'
  return Gtk.Dialog.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gtk.py:585: Warning: unable to set property 'style-set' of type 'gboolean' from value of type 'gchararray'
  return Gtk.Dialog.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/tartube/mainwin.py:4738: Warning: g_variant_new_string: assertion 'string != NULL' failed
  notify_obj.show()
/usr/lib/python3/dist-packages/tartube/mainwin.py:4738: Warning: g_variant_new_variant: assertion 'value != NULL' failed
  notify_obj.show()
/usr/lib/python3/dist-packages/tartube/mainwin.py:4738: Warning: g_variant_get_type: assertion 'value != NULL' failed
  notify_obj.show()
/usr/lib/python3/dist-packages/tartube/mainwin.py:4738: Warning: g_variant_type_is_subtype_of: assertion 'g_variant_type_check (type)' failed
  notify_obj.show()
/usr/lib/python3/dist-packages/tartube/mainwin.py:4738: Warning: g_variant_builder_add_value: assertion '!GVSB(builder)->expected_type || g_variant_is_of_type (value, GVSB(builder)->expected_type)' failed
  notify_obj.show()
/usr/lib/python3/dist-packages/tartube/mainwin.py:4738: Warning: g_variant_builder_end: assertion 'GVSB(builder)->offset >= GVSB(builder)->min_items' failed
  notify_obj.show()
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'strikethrough-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'underline-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'weight-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'style-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gtk.py:1333: Warning: unable to set property 'strikethrough-set' of type 'gboolean' from value of type 'gchararray'
  Gtk.TreeStore.set(self, treeiter, columns, values)
/usr/lib/python3/dist-packages/gi/overrides/Gtk.py:1333: Warning: unable to set property 'underline-set' of type 'gboolean' from value of type 'gchararray'
  Gtk.TreeStore.set(self, treeiter, columns, values)
/usr/lib/python3/dist-packages/gi/overrides/Gtk.py:1333: Warning: unable to set property 'weight-set' of type 'gboolean' from value of type 'gchararray'
  Gtk.TreeStore.set(self, treeiter, columns, values)
/usr/lib/python3/dist-packages/gi/overrides/Gtk.py:1333: Warning: unable to set property 'style-set' of type 'gboolean' from value of type 'gchararray'
  Gtk.TreeStore.set(self, treeiter, columns, values)
rwperrott commented 1 year ago

Next run saw this in shell:

$ tartube
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'strikethrough-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'underline-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'weight-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3/dist-packages/gi/overrides/Gio.py:42: Warning: unable to set property 'style-set' of type 'gboolean' from value of type 'gchararray'
  return Gio.Application.run(self, *args, **kwargs)

(tartube:2475598): Gdk-CRITICAL **: 16:25:18.494: gdk_window_thaw_toplevel_updates: assertion 'window->update_and_descendants_freeze_count > 0' failed
^C%                                                                                                                                                               
rwperrott commented 1 year ago

I'm not sure if this is safe to use as-is, because I may cause further damage to my stored content.

axcore commented 1 year ago

The first four lines are Gtk bugs; the rest is output generated by VLC. I don't see anything there generated by Tartube.

Longer response to follow.

rwperrott commented 1 year ago

It looks like I'll need to be more wary of GUI python applications, I've already some more in calibre recently; maybe newer python/GTK releases are breaking stuff.

axcore commented 1 year ago

dialog is flawed/useless

Presumably you mean the 'Add videos' dialogue window, which I have now tested on Linux Mint 21.1 MATE 64-bit. Apologies, but I can't see the problems you describe: both the window bar and horizontal/vertical scroll bars are present:

scrollbars

I can't explain why you are seeing something different.

The list of items is too terse to see what most of the items are, and including which video they are for

It's true that the window lacks polish, but I'm not sure how it can be improved. At the moment, it essentially conveys the message "there is 1 duplicate" or "there are many duplicates"; what would be the use case for something more exotic, like a list of thumbnails? Why would a user need to know which particular videos are already in the database?

I did a database repair, because the target folder contents did not make sense, and it fixed errors. Maybe a database check and repair should be prompted for, but not forced, and indicated, when issues are spotted at start up

Database checks may take a long time, if the database is large. When I'm made aware of an issue that causes problems in the database, the new release of Tartube will automatically perform a database check and repair, probably without the user being aware of it.

In an ideal world, all such issues would have been fixed a long time ago, and no-one would every need to do a database repair. Problems like that are very tricky to track down, though.

I'm still seeing duplicates dialog after database repair, which is concerning.

Can you be sure that the obvious explanation is not the correct one, namely that you've already added the same URL to Tartube's database?

It looks like I'll need to be more wary of GUI python applications, I've already some more in calibre recently; maybe newer python/GTK releases are breaking stuff.

All Gtk releases are a buggy mess; it's one of the hazards of using it. I have spent some considerable time checking that the Gtk warnings generated by Tartube have no effect on functionality; there are a lot of warnings in your output, but they are all familiar ones that don't seem to break anything.

rwperrott commented 1 year ago

No, not the "Add Videos" window, but rather when I tried to drag & drop videos in "Missing Videos" folder to a folder I had previously created. If the "Missing Video" folder is a virtual view, which may include items from real folders, then it should have some safeguards to stop overwrite by self, and possible consequential file corruption/deletion {1} {2}.

{1} Calibre has a possibly relevant, nasty bug, where, when I request a book rename on Linux, merely changing the case of one or more letters, thus the filename, on an SMB share of a case-insensitive ZFS dataset directory, the file can end up deleted! {2} If such damage happened after a ZFS snapshot, I still have, I can undo such damage; I can probably do this for this Tartube video move glitch.

axcore commented 1 year ago

I found the cause of the database errors you see, when you do Check database integrity. The "Missing Videos" folder keeps track of the total number of missing videos, but this number is updated incorrectly.

I have fixed the problem, but it's a very minor issue: nothing depends on the incorrect count, so the database isn't damaged. Doing a database repair will automatically re-calculate the total anyway.

For the other thing: when I drag the same video from the Missing Videos folder to another folder, twice, I see an unexpected duplicate dialogue. Not sure what the cause is yet but I'll investigate further.

twice

axcore commented 1 year ago

Two pieces of code respond to the drag and drop, when only one should. The "wrong" one is the one that's creating the unexpected duplicated videos. I haven't worked out how to disable it yet.

I have confirmed that Tartube is trying to move the video from its actual location, not from the "virtual" Missing Videos folder, as you suggested it might.

axcore commented 1 year ago

The drag and drop issue is fixed in v2.4.402. The new code is uploaded to github/pypi. If you're a Windows user, see here for update instructions.