tartube 2.5.171__py3-none-any.whl → 2.5.197__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. tartube/classes.py +1 -1
  2. tartube/config.py +118 -31
  3. tartube/dialogue.py +1 -1
  4. tartube/downloads.py +14 -1
  5. tartube/ffmpeg_tartube.py +1 -1
  6. tartube/files.py +1 -1
  7. tartube/formats.py +2 -1
  8. tartube/icons/small/regex.png +0 -0
  9. tartube/info.py +1 -1
  10. tartube/mainapp.py +490 -155
  11. tartube/mainwin.py +306 -155
  12. tartube/media.py +15 -7
  13. tartube/options.py +1 -1
  14. tartube/process.py +1 -1
  15. tartube/refresh.py +1 -1
  16. tartube/tartube +5 -5
  17. tartube/tidy.py +1 -1
  18. tartube/ttutils.py +1 -1
  19. tartube/updates.py +1 -1
  20. tartube/wizwin.py +1 -1
  21. {tartube-2.5.171.data → tartube-2.5.197.data}/scripts/tartube +5 -5
  22. {tartube-2.5.171.dist-info → tartube-2.5.197.dist-info}/METADATA +1 -1
  23. {tartube-2.5.171.dist-info → tartube-2.5.197.dist-info}/RECORD +50 -49
  24. usr/share/locale/de/LC_MESSAGES/tartube.mo +0 -0
  25. usr/share/locale/de/LC_MESSAGES/tartube.po +2772 -2680
  26. usr/share/locale/en_US/LC_MESSAGES/tartube.po +2743 -2662
  27. usr/share/locale/es/LC_MESSAGES/tartube.mo +0 -0
  28. usr/share/locale/es/LC_MESSAGES/tartube.po +2749 -2666
  29. usr/share/locale/fr/LC_MESSAGES/tartube.mo +0 -0
  30. usr/share/locale/fr/LC_MESSAGES/tartube.po +2773 -2681
  31. usr/share/locale/ja/LC_MESSAGES/tartube.mo +0 -0
  32. usr/share/locale/ja/LC_MESSAGES/tartube.po +2765 -2673
  33. usr/share/locale/ko_KR/LC_MESSAGES/tartube.mo +0 -0
  34. usr/share/locale/ko_KR/LC_MESSAGES/tartube.po +2750 -2666
  35. usr/share/locale/nl_NL/LC_MESSAGES/tartube.mo +0 -0
  36. usr/share/locale/nl_NL/LC_MESSAGES/tartube.po +2750 -2666
  37. usr/share/locale/ru/LC_MESSAGES/tartube.mo +0 -0
  38. usr/share/locale/ru/LC_MESSAGES/tartube.po +2761 -2672
  39. usr/share/locale/ta/LC_MESSAGES/tartube.mo +0 -0
  40. usr/share/locale/ta/LC_MESSAGES/tartube.po +2768 -2676
  41. usr/share/locale/tr/LC_MESSAGES/tartube.po +2743 -2663
  42. usr/share/locale/vi/LC_MESSAGES/tartube.mo +0 -0
  43. usr/share/locale/vi/LC_MESSAGES/tartube.po +2750 -2667
  44. usr/share/locale/zh_CN/LC_MESSAGES/tartube.mo +0 -0
  45. usr/share/locale/zh_CN/LC_MESSAGES/tartube.po +2761 -2669
  46. usr/share/locale/zh_Hant/LC_MESSAGES/tartube.po +2743 -2663
  47. {tartube-2.5.171.dist-info → tartube-2.5.197.dist-info}/AUTHORS +0 -0
  48. {tartube-2.5.171.dist-info → tartube-2.5.197.dist-info}/LICENSE +0 -0
  49. {tartube-2.5.171.dist-info → tartube-2.5.197.dist-info}/WHEEL +0 -0
  50. {tartube-2.5.171.dist-info → tartube-2.5.197.dist-info}/top_level.txt +0 -0
tartube/classes.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright (C) 2019-2025 A S Lewis
4
+ # Copyright (C) 2019-2026 A S Lewis
5
5
  #
6
6
  # This program is free software; you can redistribute it and/or modify it under
7
7
  # the terms of the GNU Lesser General Public License as published by the Free
tartube/config.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright (C) 2019-2025 A S Lewis
4
+ # Copyright (C) 2019-2026 A S Lewis
5
5
  #
6
6
  # This program is free software; you can redistribute it and/or modify it under
7
7
  # the terms of the GNU Lesser General Public License as published by the Free
@@ -2195,6 +2195,20 @@ class GenericEditWin(GenericConfigWin):
2195
2195
  if parent_obj:
2196
2196
  entry4.set_text(parent_obj.name)
2197
2197
 
2198
+ if isinstance(self.edit_obj, media.Video):
2199
+
2200
+ label3 = self.add_label(grid,
2201
+ _('Author'),
2202
+ 0, 4, 1, 1,
2203
+ )
2204
+ label3.set_hexpand(False)
2205
+
2206
+ entry5 = self.add_entry(grid,
2207
+ 'author',
2208
+ 2, 4, 1, 1,
2209
+ )
2210
+ entry5.set_editable(False)
2211
+
2198
2212
 
2199
2213
  def add_destination_properties(self, grid):
2200
2214
 
@@ -2294,15 +2308,20 @@ class GenericEditWin(GenericConfigWin):
2294
2308
  else:
2295
2309
  string = _('Video URL')
2296
2310
 
2311
+ if isinstance(self.edit_obj, media.Video):
2312
+ row = 5
2313
+ else:
2314
+ row = 4
2315
+
2297
2316
  label = self.add_label(grid,
2298
2317
  string,
2299
- 0, 4, 1, 1,
2318
+ 0, row, 1, 1,
2300
2319
  )
2301
2320
  label.set_hexpand(False)
2302
2321
 
2303
2322
  entry = self.add_entry(grid,
2304
2323
  'source',
2305
- 2, 4, 1, 1,
2324
+ 2, row, 1, 1,
2306
2325
  )
2307
2326
  entry.set_editable(False)
2308
2327
 
@@ -15006,13 +15025,13 @@ class VideoEditWin(GenericEditWin):
15006
15025
 
15007
15026
  label = self.add_label(grid,
15008
15027
  _('File'),
15009
- 0, 5, 1, 1,
15028
+ 0, 6, 1, 1,
15010
15029
  )
15011
15030
  label.set_hexpand(False)
15012
15031
 
15013
15032
  frame = self.add_image(grid,
15014
15033
  self.app_obj.main_win_obj.icon_dict['stock_file'],
15015
- 1, 5, 1, 1,
15034
+ 1, 6, 1, 1,
15016
15035
  )
15017
15036
  # (The frame looks cramped without this. The icon itself is 16x16)
15018
15037
  frame.set_size_request(
@@ -15022,7 +15041,7 @@ class VideoEditWin(GenericEditWin):
15022
15041
 
15023
15042
  # (To avoid messing up the neat format of the rows above, add a
15024
15043
  # secondary grid, and put the next set of widgets inside it)
15025
- grid2 = self.add_secondary_grid(grid, 2, 5, 1, 1)
15044
+ grid2 = self.add_secondary_grid(grid, 2, 6, 1, 1)
15026
15045
 
15027
15046
  entry = self.add_entry(grid2,
15028
15047
  None,
@@ -15055,13 +15074,13 @@ class VideoEditWin(GenericEditWin):
15055
15074
  # (Back to the main grid)
15056
15075
  label2 = self.add_label(grid,
15057
15076
  _('Metadata file'),
15058
- 0, 6, 2, 1,
15077
+ 0, 7, 2, 1,
15059
15078
  )
15060
15079
  label2.set_hexpand(False)
15061
15080
 
15062
15081
  # (To avoid messing up the neat format of the rows above, add a
15063
15082
  # secondary grid, and put the next set of widgets inside it)
15064
- grid3 = self.add_secondary_grid(grid, 2, 6, 1, 1)
15083
+ grid3 = self.add_secondary_grid(grid, 2, 7, 1, 1)
15065
15084
 
15066
15085
  entry2 = self.add_entry(grid3,
15067
15086
  None,
@@ -15101,7 +15120,7 @@ class VideoEditWin(GenericEditWin):
15101
15120
 
15102
15121
  # (To avoid messing up the neat format of the rows above, add a
15103
15122
  # secondary grid, and put the next set of widgets inside it)
15104
- grid4 = self.add_secondary_grid(grid, 0, 7, grid_width, 1)
15123
+ grid4 = self.add_secondary_grid(grid, 0, 8, grid_width, 1)
15105
15124
 
15106
15125
  checkbutton = self.add_checkbutton(grid4,
15107
15126
  _('Video downloaded'),
@@ -21955,7 +21974,7 @@ class SystemPrefWin(GenericPrefWin):
21955
21974
  _('D_elete'),
21956
21975
  inner_notebook,
21957
21976
  )
21958
- grid_width = 3
21977
+ grid_width = 12
21959
21978
 
21960
21979
  # Automatic video deletion/removal preferences
21961
21980
  self.add_label(grid,
@@ -21975,46 +21994,58 @@ class SystemPrefWin(GenericPrefWin):
21975
21994
  _('Automatically delete downloaded videos'),
21976
21995
  self.app_obj.auto_delete_flag,
21977
21996
  True, # Can be toggled by user
21978
- 0, 2, 1, 1,
21997
+ 0, 2, 6, 1,
21979
21998
  )
21980
21999
  # (Signal connect appears below)
21981
22000
 
21982
22001
  self.spinbutton = self.add_spinbutton(grid,
21983
22002
  0, 999, 1, self.app_obj.auto_delete_days,
21984
- 1, 2, 1, 1,
22003
+ 6, 2, 3, 1,
21985
22004
  )
21986
22005
  if not self.app_obj.auto_delete_flag:
21987
22006
  self.spinbutton.set_sensitive(False)
21988
22007
  # (Signal connect appears below)
21989
22008
 
21990
- self.add_label(grid,
21991
- _('days'),
21992
- 2, 2, 1, 1,
22009
+ combo_list = [
22010
+ [ _('days since download'), 'download' ],
22011
+ [ _('days since upload'), 'upload' ],
22012
+ ]
22013
+
22014
+ combo = self.add_combo_with_data(grid,
22015
+ combo_list,
22016
+ None,
22017
+ 9, 2, 3, 1,
21993
22018
  )
22019
+ if self.app_obj.auto_delete_type_flag:
22020
+ combo.set_active(1)
22021
+ if not self.app_obj.auto_delete_flag:
22022
+ combo.set_sensitive(False)
21994
22023
 
21995
22024
  checkbutton2 = self.add_checkbutton(grid,
21996
- _(
21997
- 'Remove downloaded videos from the database (but don\'t' \
21998
- + ' delete files)',
21999
- ),
22025
+ _('Only downloaded videos from the database'),
22000
22026
  self.app_obj.auto_remove_flag,
22001
22027
  True, # Can be toggled by user
22002
- 0, 3, 1, 1,
22028
+ 0, 3, 6, 1,
22003
22029
  )
22004
22030
  # (Signal connect appears below)
22005
22031
 
22006
22032
  self.spinbutton2 = self.add_spinbutton(grid,
22007
22033
  0, 999, 1, self.app_obj.auto_remove_days,
22008
- 1, 3, 1, 1,
22034
+ 6, 3, 3, 1,
22009
22035
  )
22010
22036
  if not self.app_obj.auto_remove_flag:
22011
22037
  self.spinbutton2.set_sensitive(False)
22012
22038
  # (Signal connect appears below)
22013
22039
 
22014
- self.add_label(grid,
22015
- _('days'),
22016
- 2, 3, 1, 1,
22040
+ combo2 = self.add_combo_with_data(grid,
22041
+ combo_list,
22042
+ None,
22043
+ 9, 3, 3, 1,
22017
22044
  )
22045
+ if self.app_obj.auto_remove_type_flag:
22046
+ combo2.set_active(1)
22047
+ if not self.app_obj.auto_remove_flag:
22048
+ combo2.set_sensitive(False)
22018
22049
 
22019
22050
  checkbutton3 = self.add_checkbutton(grid,
22020
22051
  _('Only delete/remove videos which have been watched'),
@@ -22030,20 +22061,20 @@ class SystemPrefWin(GenericPrefWin):
22030
22061
 
22031
22062
  self.add_label(grid2,
22032
22063
  _('Delete/remove files:'),
22033
- 0, 0, 1, 1,
22064
+ 0, 0, 2, 1,
22034
22065
  )
22035
22066
 
22036
22067
  self.radiobutton = self.add_radiobutton(grid2,
22037
22068
  None,
22038
22069
  _('When the database is loaded'),
22039
- 1, 0, 1, 1,
22070
+ 2, 0, 5, 1,
22040
22071
  )
22041
22072
  # (Signal connect appears below)
22042
22073
 
22043
22074
  self.radiobutton2 = self.add_radiobutton(grid2,
22044
22075
  self.radiobutton,
22045
22076
  _('After every download operation'),
22046
- 2, 0, 1, 1,
22077
+ 7, 0, 5, 1,
22047
22078
  )
22048
22079
  if self.app_obj.auto_delete_asap_flag:
22049
22080
  self.radiobutton2.set_active(True)
@@ -22059,6 +22090,7 @@ class SystemPrefWin(GenericPrefWin):
22059
22090
  'toggled',
22060
22091
  self.on_auto_delete_videos_button_toggled,
22061
22092
  self.spinbutton,
22093
+ combo,
22062
22094
  checkbutton2,
22063
22095
  checkbutton3,
22064
22096
  self.radiobutton,
@@ -22068,10 +22100,12 @@ class SystemPrefWin(GenericPrefWin):
22068
22100
  'value-changed',
22069
22101
  self.on_auto_delete_videos_spinbutton_changed,
22070
22102
  )
22103
+ combo.connect('changed', self.on_auto_delete_type_combo_changed)
22071
22104
  checkbutton2.connect(
22072
22105
  'toggled',
22073
22106
  self.on_auto_remove_videos_button_toggled,
22074
22107
  self.spinbutton2,
22108
+ combo2,
22075
22109
  checkbutton,
22076
22110
  checkbutton3,
22077
22111
  self.radiobutton,
@@ -22081,6 +22115,7 @@ class SystemPrefWin(GenericPrefWin):
22081
22115
  'value-changed',
22082
22116
  self.on_auto_remove_videos_spinbutton_changed,
22083
22117
  )
22118
+ combo2.connect('changed', self.on_auto_remove_type_combo_changed)
22084
22119
  checkbutton3.connect('toggled', self.on_delete_watched_button_toggled)
22085
22120
  self.radiobutton.connect('toggled', self.on_delete_asap_button_toggled)
22086
22121
 
@@ -28681,8 +28716,30 @@ class SystemPrefWin(GenericPrefWin):
28681
28716
  self.app_obj.set_split_video_auto_delete_flag(False)
28682
28717
 
28683
28718
 
28684
- def on_auto_delete_videos_button_toggled(self, checkbutton, spinbutton,
28685
- checkbutton2, checkbutton3, radiobutton, radiobutton2):
28719
+ def on_auto_delete_type_combo_changed(self, combo):
28720
+
28721
+ """Called from a callback in self.setup_files_delete_tab().
28722
+
28723
+ Sets whether auto-deletion applies to videos downloaded or uploaded
28724
+ after a certain time.
28725
+
28726
+ Args:
28727
+
28728
+ combo (Gtk.ComboBox): The widget clicked
28729
+
28730
+ """
28731
+
28732
+ tree_iter = combo.get_active_iter()
28733
+ model = combo.get_model()
28734
+
28735
+ if model[tree_iter][1] == 'upload':
28736
+ self.app_obj.set_auto_delete_type_flag(True)
28737
+ else:
28738
+ self.app_obj.set_auto_delete_type_flag(False)
28739
+
28740
+
28741
+ def on_auto_delete_videos_button_toggled(self, checkbutton, combo,
28742
+ spinbutton, checkbutton2, checkbutton3, radiobutton, radiobutton2):
28686
28743
 
28687
28744
  """Called from callback in self.setup_files_delete_tab().
28688
28745
 
@@ -28694,6 +28751,8 @@ class SystemPrefWin(GenericPrefWin):
28694
28751
 
28695
28752
  spinbutton (Gtk.SpinButton): A widget to be (de)sensitised
28696
28753
 
28754
+ combo (Gtk.ComboBox): Other widgets to be (de)sensitised
28755
+
28697
28756
  checkbutton2, checkbutton3 (Gtk.CheckButton): Other widgets to be
28698
28757
  (de)sensitised
28699
28758
 
@@ -28706,6 +28765,7 @@ class SystemPrefWin(GenericPrefWin):
28706
28765
  and not self.app_obj.auto_delete_flag:
28707
28766
  self.app_obj.set_auto_delete_flag(True)
28708
28767
  spinbutton.set_sensitive(True)
28768
+ combo.set_sensitive(True)
28709
28769
  checkbutton3.set_sensitive(True)
28710
28770
  radiobutton.set_sensitive(True)
28711
28771
  radiobutton2.set_sensitive(True)
@@ -28714,6 +28774,7 @@ class SystemPrefWin(GenericPrefWin):
28714
28774
  and self.app_obj.auto_delete_flag:
28715
28775
  self.app_obj.set_auto_delete_flag(False)
28716
28776
  spinbutton.set_sensitive(False)
28777
+ combo.set_sensitive(False)
28717
28778
  if checkbutton2.get_active():
28718
28779
  checkbutton3.set_sensitive(True)
28719
28780
  radiobutton.set_sensitive(True)
@@ -28742,8 +28803,8 @@ class SystemPrefWin(GenericPrefWin):
28742
28803
  self.app_obj.set_auto_delete_days(spinbutton.get_value())
28743
28804
 
28744
28805
 
28745
- def on_auto_remove_videos_button_toggled(self, checkbutton, spinbutton,
28746
- checkbutton2, checkbutton3, radiobutton, radiobutton2):
28806
+ def on_auto_remove_videos_button_toggled(self, checkbutton, combo,
28807
+ spinbutton, checkbutton2, checkbutton3, radiobutton, radiobutton2):
28747
28808
 
28748
28809
  """Called from callback in self.setup_files_delete_tab().
28749
28810
 
@@ -28755,6 +28816,8 @@ class SystemPrefWin(GenericPrefWin):
28755
28816
 
28756
28817
  spinbutton (Gtk.SpinButton): A widget to be (de)sensitised
28757
28818
 
28819
+ combo (Gtk.ComboBox): Other widgets to be (de)sensitised
28820
+
28758
28821
  checkbutton2, checkbutton3 (Gtk.CheckButton): Other widgets to be
28759
28822
  (de)sensitised
28760
28823
 
@@ -28767,6 +28830,7 @@ class SystemPrefWin(GenericPrefWin):
28767
28830
  and not self.app_obj.auto_remove_flag:
28768
28831
  self.app_obj.set_auto_remove_flag(True)
28769
28832
  spinbutton.set_sensitive(True)
28833
+ combo.set_sensitive(True)
28770
28834
  checkbutton3.set_sensitive(True)
28771
28835
  radiobutton.set_sensitive(True)
28772
28836
  radiobutton2.set_sensitive(True)
@@ -28775,6 +28839,7 @@ class SystemPrefWin(GenericPrefWin):
28775
28839
  and self.app_obj.auto_remove_flag:
28776
28840
  self.app_obj.set_auto_remove_flag(False)
28777
28841
  spinbutton.set_sensitive(False)
28842
+ combo.set_sensitive(False)
28778
28843
  if checkbutton2.get_active():
28779
28844
  checkbutton3.set_sensitive(True)
28780
28845
  radiobutton.set_sensitive(True)
@@ -28824,6 +28889,28 @@ class SystemPrefWin(GenericPrefWin):
28824
28889
  self.app_obj.set_split_video_auto_open_flag(False)
28825
28890
 
28826
28891
 
28892
+ def on_auto_remove_type_combo_changed(self, combo):
28893
+
28894
+ """Called from a callback in self.setup_files_delete_tab().
28895
+
28896
+ Sets whether auto-removal applies to videos downloaded or uploaded
28897
+ after a certain time.
28898
+
28899
+ Args:
28900
+
28901
+ combo (Gtk.ComboBox): The widget clicked
28902
+
28903
+ """
28904
+
28905
+ tree_iter = combo.get_active_iter()
28906
+ model = combo.get_model()
28907
+
28908
+ if model[tree_iter][1] == 'upload':
28909
+ self.app_obj.set_auto_remove_type_flag(True)
28910
+ else:
28911
+ self.app_obj.set_auto_remove_type_flag(False)
28912
+
28913
+
28827
28914
  def on_auto_restart_button_toggled(self, checkbutton, spinbutton,
28828
28915
  spinbutton2):
28829
28916
 
tartube/dialogue.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright (C) 2019-2025 A S Lewis
4
+ # Copyright (C) 2019-2026 A S Lewis
5
5
  #
6
6
  # This program is free software; you can redistribute it and/or modify it under
7
7
  # the terms of the GNU Lesser General Public License as published by the Free
tartube/downloads.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright (C) 2019-2025 A S Lewis
4
+ # Copyright (C) 2019-2026 A S Lewis
5
5
  #
6
6
  # This program is free software; you can redistribute it and/or modify it under
7
7
  # the terms of the GNU Lesser General Public License as published by the Free
@@ -4544,6 +4544,13 @@ class VideoDownloader(object):
4544
4544
  if 'chapters' in json_dict:
4545
4545
  chapter_list = json_dict['chapters']
4546
4546
 
4547
+ if 'uploader' in json_dict:
4548
+ author = json_dict['uploader']
4549
+ elif 'channel' in json_dict:
4550
+ author = json_dict['channel']
4551
+ else:
4552
+ author = None
4553
+
4547
4554
  if 'description' in json_dict:
4548
4555
  descrip = json_dict['description']
4549
4556
  else:
@@ -4729,6 +4736,9 @@ class VideoDownloader(object):
4729
4736
  chapter_list,
4730
4737
  )
4731
4738
 
4739
+ if author is not None:
4740
+ video_obj.set_author(author)
4741
+
4732
4742
  if descrip is not None:
4733
4743
  video_obj.set_video_descrip(
4734
4744
  app_obj,
@@ -4863,6 +4873,9 @@ class VideoDownloader(object):
4863
4873
  chapter_list,
4864
4874
  )
4865
4875
 
4876
+ if not video_obj.author and author is not None:
4877
+ video_obj.set_author(author)
4878
+
4866
4879
  if not video_obj.descrip and descrip is not None:
4867
4880
  video_obj.set_video_descrip(
4868
4881
  app_obj,
tartube/ffmpeg_tartube.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright (C) 2019-2025 A S Lewis
4
+ # Copyright (C) 2019-2026 A S Lewis
5
5
  #
6
6
  # This program is free software; you can redistribute it and/or modify it under
7
7
  # the terms of the GNU Lesser General Public License as published by the Free
tartube/files.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright (C) 2019-2025 A S Lewis
4
+ # Copyright (C) 2019-2026 A S Lewis
5
5
  #
6
6
  # This program is free software; you can redistribute it and/or modify it under
7
7
  # the terms of the GNU Lesser General Public License as published by the Free
tartube/formats.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright (C) 2019-2025 A S Lewis
4
+ # Copyright (C) 2019-2026 A S Lewis
5
5
  #
6
6
  # This program is free software; you can redistribute it and/or modify it under
7
7
  # the terms of the GNU Lesser General Public License as published by the Free
@@ -991,6 +991,7 @@ SMALL_ICON_DICT = {
991
991
  'live_old_no_file_small': 'live_old_no_file.png',
992
992
  'live_wait_small': 'live_wait.png',
993
993
  'no_file_small': 'no_file.png',
994
+ 'regex_small': 'regex.png',
994
995
  'slice_small': 'slice.png',
995
996
  'split_file_small': 'split_file.png',
996
997
  'stamp_small': 'stamp.png',
Binary file
tartube/info.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright (C) 2019-2025 A S Lewis
4
+ # Copyright (C) 2019-2026 A S Lewis
5
5
  #
6
6
  # This program is free software; you can redistribute it and/or modify it under
7
7
  # the terms of the GNU Lesser General Public License as published by the Free