Coder Social home page Coder Social logo

otsaloma / gaupol Goto Github PK

View Code? Open in Web Editor NEW
237.0 14.0 33.0 17.49 MB

Editor for text-based subtitle files

Home Page: https://otsaloma.io/gaupol/

License: GNU General Public License v3.0

Python 99.43% CSS 0.03% Roff 0.13% Shell 0.27% Makefile 0.15%
python gtk gstreamer subtitles

gaupol's People

Contributors

atilacamurca avatar chrisleick avatar fbobraga avatar gnanet avatar mirosnik1 avatar musicinmybrain avatar otsaloma avatar prokoudine avatar qnga avatar rffontenelle avatar sbraz avatar unho avatar vankasteelj avatar yarons avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gaupol's Issues

Disable autoplay

Whenever I load a video, the first thing I do is press the pause button. Please disable autoplay or add an option to disable it through the preferences. Thank you.

Recent file menus and item states not updating correctly

Giving a try to the current gaupol-master in a live session of Fedora 24 Workstation:

  • Create a new document, add a new subtitle and the respective translation.
  • Save both files, and close the tab.
  • Now there aren't open files. Open the File menu: note that the menuitem "Open translation" is disabled, but the submenu "Open recent translations" have enabled subentries. Clicking in one of these files triggers the next error:

File: /home/liveuser/Downloads/gaupol-master/gaupol/agents/menu.py
Line: 96
In: _on_open_recent_translation_file_activate

    self.open_translation(action.gaupol_path)

File: /home/liveuser/Downloads/gaupol-master/aeidon/deco.py
Line: 218
In: inner_wrapper

    return function(_args, *_kwargs)

File: /home/liveuser/Downloads/gaupol-master/gaupol/agents/open.py
Line: 286
In: open_translation

    page = self._open_file(path, encodings, aeidon.documents.TRAN)

File: /home/liveuser/Downloads/gaupol-master/gaupol/agents/open.py
Line: 250
In: _open_file

    n = self._try_open_file(page, doc, path, encoding)

File: /home/liveuser/Downloads/gaupol-master/gaupol/agents/open.py
Line: 392
In: _try_open_file

    return page.project.open(doc, path, encoding, **kwargs)

AttributeError: 'NoneType' object has no attribute 'project'

Environment

Platform: Linux-4.5.5-300.fc24.i686-i686-with-fedora-24-Twenty_Four
Locale: en_US.utf_8

Versions

aeidon: 0.91
chardet: 2.2.1
enchant: 1.6.6
gaupol: 0.91
gstreamer: 1.8.1.0
gtk+: 3.20.6
pygobject: 3.20.1
python: 3.5.1

Add automatic synchronization?

For cases where you have video and a transcript, but no timing.

aeneas automatically generates a synchronization map between a list of text fragments and an audio file containing the narration of the text. In computer science this task is known as (automatically computing a) forced alignment.

https://www.readbeyond.it/aeneas/

I can't tell if it would work well enough to be useful, but it looks worth testing. Testing can probably be done using aeneas directly from the command line. Any help testing and reports of results with real data appreciated.

Requiring namespace 'Gst' version '0.10', but '1.0' is already loaded

Hi, when I try to load a video I get the error "Failed to initialize playblack: Requiring namespace 'Gst' version '0.10', but '1.0' is already loaded".

I am not an expert but from the message I think Gaupol requires an earlier version of gstreamer. Would you be able to update the dependency or..? How should I proceed?
WP

Error trying to undo more of the possible actions done

With Gaupol 0.92:

  • Open a big subtitle file (1 hour or longer).
  • Do an expensive action (e.g. change framerates).
  • Press quickly Ctrl+Z multiple times to undo the action.

While the application is trying to undo the action done (it takes 1-2 seconds here), the second undo request seems be registered too, triggering the following error:

Traceback

File: /usr/lib/python3.5/site-packages/gaupol/agents/edit.py
Line: 310
In: _on_undo_action_activate

    self.undo()

File: /usr/lib/python3.5/site-packages/gaupol/agents/edit.py
Line: 395
In: undo

    page.project.undo(count)

File: /usr/lib/python3.5/site-packages/aeidon/agents/register.py
Line: 199
In: undo

    return self._revert_multiple(count, aeidon.registers.UNDO)

File: /usr/lib/python3.5/site-packages/aeidon/agents/register.py
Line: 167
In: _revert_multiple

    self._do_description = stack[0].description

IndexError: list index out of range

Environment

Platform: Linux-4.7.6-200.fc24.i686+PAE-i686-with-fedora-24-Twenty_Four
Locale: es_ES.utf_8

Versions

aeidon: 0.92
chardet: 2.2.1
enchant: 1.6.6
gaupol: 0.92
gstreamer: 1.8.3.0
gtk+: 3.20.9
pygobject: 3.20.1
python: 3.5.1

All actions enabled after subtitle cell editing cancelled

Hi,
Giving a try to the current gaupol from git in a live session of Fedora 24 Workstation:

  • Open gaupol and create a new document. Note that the "Preview in external video player" button in the main menu toolbar is disabled, as it's expected.
  • Click to edit the text of the unique subtitle created by default. NO add any text to it. Click outside of it to close the edition mode.
  • Now the Preview button is found enabled. Clicking in it triggers an error:

File: /home/liveuser/Descargas/gaupol-0.91/gaupol/agents/preview.py
Line: 63
In: _on_preview_activate

    self.preview(page, position, doc)

File: /home/liveuser/Descargas/gaupol-0.91/gaupol/agents/preview.py
Line: 73
In: preview

    position, doc, command, offset, encoding, temp)

File: /home/liveuser/Descargas/gaupol-0.91/aeidon/agents/preview.py
Line: 123
In: preview

    VIDEOFILE=aeidon.util.shell_quote(self.video_path))

File: /home/liveuser/Descargas/gaupol-0.91/aeidon/util.py
Line: 407
In: shell_quote

    path = path.replace("", "\")

AttributeError: 'NoneType' object has no attribute 'replace'

Environment

Platform: Linux-4.5.5-300.fc24.i686-i686-with-fedora-24-Twenty_Four
Locale: es_ES.utf_8

Versions

aeidon: 0.91
chardet: 2.2.1
enchant: 1.6.6
gaupol: 0.91
gstreamer: 1.8.1.0
gtk+: 3.20.6
pygobject: 3.20.1
python: 3.5.1

Conversion error with float cell renderer

From @Blogodorio: This software indicates an error that I don't know what about... It says that I must send a message about some bug, but I could not find out how to fix it...
I have installed it on PC - Windows 10 - 32bits/2gb ram

image

"Cancel" button when exiting Gaupol with an unsaved document

Version 0.24.3 for Windows.

When there's an unsaved document and you try to quit the app, you're offered to "Close Without Saving", "Cancel" or "Save" the document. However, "Cancel" does the same as "Close Without Saving" instead of cancelling the operation, which is what I would expect.

Confirming the "Save file" dialog via Enter doesn't add a missing extension

Giving a try to the current gaupol from git in a live session of Fedora 24 Workstation:

  • Create a new document, then trigger the "save" action: the save dialog is opened.
  • Write some name for the file, without to specify any extension. Note here that the "SubRip" format is selected by default in the respective drop-down menu.
  • Still having the focus in the filename box, press Enter. The file is created with the given name without any extension; If I would chosen to click in the Save button to confirm the action, the created file would have the extension .srt, as it corresponds to the selected format.

Audio waveform widget

After using Gaupol for some time I must say it's a great tool, but I lack one thing. It's pretty difficult to make the timing right if there is just the audio feedback and the speed the reaction of your fingers. I think way better would be to have a simple audio frequency visualization with the possibility to select range with mouse. One could then add a new subtitle record, write some text and then select beginning with mouse left click and select end with mouse right click - both on a stripe visualizing the audio frequency.

The selection on the stripe shall be synchronized with selected subtitle record, so that one can scroll in the list of subtitle records, click on one and the visualization of audio frequency will immediately select the corresponding range.

What do you think?

Add action Set Start From Video Position

To complement Set End From Video Position (in the Edit menu, or shortcut K). This could be helpful to deal with out-of-sync subtitles, especially if the function Seek backward/forward was made more powerful (by allowing not just big jumps, but also 50-100ms jumps).

gtk-3.22 segfault in _gtk_style_provider_private_get_settings

Hi. I'm not sure if this is a GTK or a gaupol bug (but I've only seen this happen with gaupol). If I try to run gaupol (from master) on openSUSE Tumbleweed, gaupol will segfault. I'm currently trying to upload the gaupol package on openSUSE (because 0.28 is quite old) but I can't run any version of gaupol at the moment.

% /usr/bin/gaupol
[1]    8000 segmentation fault (core dumped)  /usr/bin/gaupol

Here's the stack trace, it looks like a NULL pointer is being passed to _gtk_style_provider_private_get_settings internally. I've tried to print debug the code to find where it's happening (I'm assuming it's somewhere in gaupol/style.py) but I'm not very familiar with PyGTK. Hopefully this is enough for you to be able to figure out what's going on. I can post the core dump if it'll make it easier.

% gdb /usr/bin/python3
GNU gdb (GDB; openSUSE Tumbleweed) 7.12.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-suse-linux".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://bugs.opensuse.org/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) run /usr/bin/gaupol
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff08278a9 in _gtk_style_provider_private_get_settings (provider=0x0) at gtkstyleproviderprivate.c:123
123     gtkstyleproviderprivate.c: No such file or directory.
(gdb) bt
#0  0x00007ffff08278a9 in _gtk_style_provider_private_get_settings (provider=0x0) at gtkstyleproviderprivate.c:123
#1  0x00007ffff06c3518 in gtk_css_value_initial_compute (value=<optimized out>, property_id=1, provider=0x0, style=0x8920d0, parent_style=0x0) at gtkcssinitialvalue.c:52
#2  0x00007ffff06d8614 in gtk_css_static_style_compute_value (style=0x8920d0, provider=<optimized out>, parent_style=<optimized out>, id=1, specified=0x7ffff0e4f200 <inherit>, section=0x0) at gtkcssstaticstyle.c:237
#3  0x00007ffff06c484c in _gtk_css_lookup_resolve (lookup=lookup@entry=0x80c110, provider=provider@entry=0x0, style=style@entry=0x8920d0, parent_style=parent_style@entry=0x0) at gtkcsslookup.c:122
#4  0x00007ffff06d853c in gtk_css_static_style_new_compute (provider=provider@entry=0x0, matcher=matcher@entry=0x0, parent=parent@entry=0x0) at gtkcssstaticstyle.c:195
#5  0x00007ffff06d8595 in gtk_css_static_style_get_default () at gtkcssstaticstyle.c:164
#6  0x00007ffff06c51b2 in gtk_css_node_init (cssnode=0x889eb0) at gtkcssnode.c:663
#7  0x00007ffff2d65caf in g_type_create_instance () at /usr/lib64/libgobject-2.0.so.0
#8  0x00007ffff2d47b8b in  () at /usr/lib64/libgobject-2.0.so.0
#9  0x00007ffff2d4959d in g_object_newv () at /usr/lib64/libgobject-2.0.so.0
#10 0x00007ffff2d49d54 in g_object_new () at /usr/lib64/libgobject-2.0.so.0
#11 0x00007ffff06e0a7a in gtk_css_widget_node_new (widget=widget@entry=0x890260) at gtkcsswidgetnode.c:297
#12 0x00007ffff08be967 in gtk_widget_init (instance=0x890260, g_class=0x88a390) at gtkwidget.c:4414
#13 0x00007ffff2d65caf in g_type_create_instance () at /usr/lib64/libgobject-2.0.so.0
#14 0x00007ffff2d47b8b in  () at /usr/lib64/libgobject-2.0.so.0
#15 0x00007ffff2d4959d in g_object_newv () at /usr/lib64/libgobject-2.0.so.0
#16 0x00007ffff31ceb0c in  () at /usr/lib64/python3.6/site-packages/gi/_gi.cpython-36m-x86_64-linux-gnu.so
#17 0x00007ffff31d5ab1 in  () at /usr/lib64/python3.6/site-packages/gi/_gi.cpython-36m-x86_64-linux-gnu.so
#18 0x00007ffff79b260e in  () at /usr/lib64/libpython3.6m.so.1.0
#19 0x00007ffff796a18c in _PyObject_FastCallDict () at /usr/lib64/libpython3.6m.so.1.0
#20 0x00007ffff79fb326 in  () at /usr/lib64/libpython3.6m.so.1.0
#21 0x00007ffff79f30e7 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#22 0x00007ffff79fcc62 in _PyFunction_FastCallDict () at /usr/lib64/libpython3.6m.so.1.0
#23 0x00007ffff796a266 in _PyObject_FastCallDict () at /usr/lib64/libpython3.6m.so.1.0
#24 0x00007ffff796ab72 in _PyObject_Call_Prepend () at /usr/lib64/libpython3.6m.so.1.0
#25 0x00007ffff796a5ab in PyObject_Call () at /usr/lib64/libpython3.6m.so.1.0
#26 0x00007ffff79b4cdd in  () at /usr/lib64/libpython3.6m.so.1.0
#27 0x00007ffff79b260e in  () at /usr/lib64/libpython3.6m.so.1.0
#28 0x00007ffff796a18c in _PyObject_FastCallDict () at /usr/lib64/libpython3.6m.so.1.0
#29 0x00007ffff79fb326 in  () at /usr/lib64/libpython3.6m.so.1.0
#30 0x00007ffff79f30e7 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#31 0x00007ffff79f2279 in PyEval_EvalCodeEx () at /usr/lib64/libpython3.6m.so.1.0
#32 0x00007ffff79f201b in PyEval_EvalCode () at /usr/lib64/libpython3.6m.so.1.0
#33 0x00007ffff79f02e8 in  () at /usr/lib64/libpython3.6m.so.1.0
#34 0x00007ffff79a3056 in PyCFunction_Call () at /usr/lib64/libpython3.6m.so.1.0
#35 0x00007ffff79f8fd3 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#36 0x00007ffff79fb891 in  () at /usr/lib64/libpython3.6m.so.1.0
#37 0x00007ffff79fb29b in  () at /usr/lib64/libpython3.6m.so.1.0
#38 0x00007ffff79f30e7 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#39 0x00007ffff79fb59a in  () at /usr/lib64/libpython3.6m.so.1.0
#40 0x00007ffff79fb29b in  () at /usr/lib64/libpython3.6m.so.1.0
#41 0x00007ffff79f30e7 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#42 0x00007ffff79fb59a in  () at /usr/lib64/libpython3.6m.so.1.0
#43 0x00007ffff79fb29b in  () at /usr/lib64/libpython3.6m.so.1.0
#44 0x00007ffff79f30e7 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#45 0x00007ffff79fb59a in  () at /usr/lib64/libpython3.6m.so.1.0
#46 0x00007ffff79fb29b in  () at /usr/lib64/libpython3.6m.so.1.0
#47 0x00007ffff79f30e7 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#48 0x00007ffff79fcc62 in _PyFunction_FastCallDict () at /usr/lib64/libpython3.6m.so.1.0
#49 0x00007ffff796a266 in _PyObject_FastCallDict () at /usr/lib64/libpython3.6m.so.1.0
#50 0x00007ffff796b534 in _PyObject_CallMethodIdObjArgs () at /usr/lib64/libpython3.6m.so.1.0
#51 0x00007ffff7a0f124 in PyImport_ImportModuleLevelObject () at /usr/lib64/libpython3.6m.so.1.0
#52 0x00007ffff79f0648 in  () at /usr/lib64/libpython3.6m.so.1.0
#53 0x00007ffff79a2ff6 in PyCFunction_Call () at /usr/lib64/libpython3.6m.so.1.0
#54 0x00007ffff79f8fd3 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#55 0x00007ffff79fb891 in  () at /usr/lib64/libpython3.6m.so.1.0
#56 0x00007ffff79fb29b in  () at /usr/lib64/libpython3.6m.so.1.0
#57 0x00007ffff79f30e7 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#58 0x00007ffff79fcc62 in _PyFunction_FastCallDict () at /usr/lib64/libpython3.6m.so.1.0
#59 0x00007ffff796a266 in _PyObject_FastCallDict () at /usr/lib64/libpython3.6m.so.1.0
#60 0x00007ffff796b534 in _PyObject_CallMethodIdObjArgs () at /usr/lib64/libpython3.6m.so.1.0
#61 0x00007ffff7a0f0bf in PyImport_ImportModuleLevelObject () at /usr/lib64/libpython3.6m.so.1.0
#62 0x00007ffff79f56f8 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#63 0x00007ffff79f2279 in PyEval_EvalCodeEx () at /usr/lib64/libpython3.6m.so.1.0
#64 0x00007ffff79f201b in PyEval_EvalCode () at /usr/lib64/libpython3.6m.so.1.0
#65 0x00007ffff79f02e8 in  () at /usr/lib64/libpython3.6m.so.1.0
#66 0x00007ffff79a3056 in PyCFunction_Call () at /usr/lib64/libpython3.6m.so.1.0
#67 0x00007ffff79f8fd3 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#68 0x00007ffff79fb891 in  () at /usr/lib64/libpython3.6m.so.1.0
#69 0x00007ffff79fb29b in  () at /usr/lib64/libpython3.6m.so.1.0
#70 0x00007ffff79f30e7 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#71 0x00007ffff79fb59a in  () at /usr/lib64/libpython3.6m.so.1.0
#72 0x00007ffff79fb29b in  () at /usr/lib64/libpython3.6m.so.1.0
#73 0x00007ffff79f30e7 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#74 0x00007ffff79fb59a in  () at /usr/lib64/libpython3.6m.so.1.0
#75 0x00007ffff79fb29b in  () at /usr/lib64/libpython3.6m.so.1.0
#76 0x00007ffff79f30e7 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#77 0x00007ffff79fb59a in  () at /usr/lib64/libpython3.6m.so.1.0
#78 0x00007ffff79fb29b in  () at /usr/lib64/libpython3.6m.so.1.0
#79 0x00007ffff79f30e7 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#80 0x00007ffff79fcc62 in _PyFunction_FastCallDict () at /usr/lib64/libpython3.6m.so.1.0
#81 0x00007ffff796a266 in _PyObject_FastCallDict () at /usr/lib64/libpython3.6m.so.1.0
#82 0x00007ffff796b534 in _PyObject_CallMethodIdObjArgs () at /usr/lib64/libpython3.6m.so.1.0
#83 0x00007ffff7a0f124 in PyImport_ImportModuleLevelObject () at /usr/lib64/libpython3.6m.so.1.0
#84 0x00007ffff79f56f8 in _PyEval_EvalFrameDefault () at /usr/lib64/libpython3.6m.so.1.0
#85 0x00007ffff79f2279 in PyEval_EvalCodeEx () at /usr/lib64/libpython3.6m.so.1.0
#86 0x00007ffff79f201b in PyEval_EvalCode () at /usr/lib64/libpython3.6m.so.1.0
#87 0x00007ffff7a7aa02 in  () at /usr/lib64/libpython3.6m.so.1.0
#88 0x00007ffff7a7ad6d in PyRun_FileExFlags () at /usr/lib64/libpython3.6m.so.1.0
#89 0x00007ffff7a7ac37 in PyRun_SimpleFileExFlags () at /usr/lib64/libpython3.6m.so.1.0
#90 0x00007ffff7a81c47 in Py_Main () at /usr/lib64/libpython3.6m.so.1.0
#91 0x0000000000400ada in main ()

Here's my libgtk-3-0 version.

% rpm -qi libgtk-3-0                                                                                                                                                                                       [GNU/Linux 10.26(8)]
Name        : libgtk-3-0
Version     : 3.22.11
Release     : 1.1
Architecture: x86_64
Install Date: Sat 25 Mar 2017 01:50:45 AM AEDT
Group       : System/Libraries
Size        : 9345091
License     : LGPL-2.1+
Signature   : RSA/SHA256, Thu 23 Mar 2017 10:01:52 AM AEDT, Key ID b88b2fd43dbdc284
Source RPM  : gtk3-3.22.11-1.1.src.rpm
Build Date  : Thu 23 Mar 2017 10:00:18 AM AEDT
Build Host  : lamb14
Relocations : (not relocatable)
Packager    : https://bugs.opensuse.org
Vendor      : openSUSE
URL         : http://www.gtk.org/
Summary     : The GTK+ toolkit library (version 3)
Description :
GTK+ is a multi-platform toolkit for creating graphical user interfaces.
Offering a complete set of widgets, GTK+ is suitable for projects
ranging from small one-off projects to complete application suites.
Distribution: openSUSE Tumbleweed

Error saving from time-based format to frame-based

This happens when I try to save a SubRip file to MicroDVD. Let me know if you need additional info.

Traceback

File: /home/sbraz/gaupol/aeidon/deco.py
Line: 218
In: inner_wrapper

    return function(*args, **kwargs)

File: /home/sbraz/gaupol/gaupol/agents/save.py
Line: 67
In: _on_save_main_document_as_activate

    self.save_main_as(page)

File: /home/sbraz/gaupol/gaupol/agents/save.py
Line: 129
In: save_main_as

    file = self._select_file(_("Save As"), page, file)

File: /home/sbraz/gaupol/gaupol/agents/save.py
Line: 188
In: _select_file

    action.activate()

TypeError: activate() missing 1 required positional argument: 'parameter'

Environment

Platform: Linux-4.6.4-1-ARCH-x86_64-with-arch
Locale: en_GB.utf_8

Versions

aeidon: 0.91
chardet: 2.3.0
enchant: 1.6.6
gaupol: 0.91
gstreamer: 1.8.2.0
gtk+: 3.20.8
pygobject: 3.20.1
python: 3.5.2

Allow using multiple dictionaries for spell-check

Which local dictionary file to add new custom words to? If there's a common prefix, we can use that, e.g. with en_GB and en_US, add to en. But this won't work if there's no common prefix. And if addition is done via enchant, then enchant needs to have a dictionary for the common one.

Gtk-WARNING: Allocating size to GtkApplicationWindow

Every time a new file is opened, we get

(python3:15155): Gtk-WARNING **: Allocating size to
GtkApplicationWindow 0x13f2830 without calling
gtk_widget_get_preferred_width/height(). How does the code know
the size to allocate?

I can't tell where this originates from. The warning seems to be harmless, but I would of course like to get rid of it.

The Undo dropmarker is enabled yet when no documents are open

Hi,
Giving a try to the current gaupol from git in a live session of Fedora 24 Workstation (from Fedora-Workstation-Live-i386-24-1.2.iso):

  • Open gaupol.
  • Note that, even if no documents are open, the dropmarker of the Undo button is not disabled, though the Undo button itself is disabled.
  • Clicking the dropmarker triggers the next error:

File: /home/liveuser/Descargas/gaupol-0.91/gaupol/agents/menu.py
Line: 165
In: _on_undo_button_show_menu

    for i, action in enumerate(page.project.undoables):

AttributeError: 'NoneType' object has no attribute 'project'

Environment

Platform: Linux-4.5.5-300.fc24.i686-i686-with-fedora-24-Twenty_Four
Locale: es_ES.utf_8

Versions

aeidon: 0.91
chardet: 2.2.1
enchant: 1.6.6
gaupol: 0.91
gstreamer: 1.8.1.0
gtk+: 3.20.6
pygobject: 3.20.1
python: 3.5.1

I didn't try to update the system of the live session, so I don't know if the involved packages are really up-to-date.

Highlight changed parts in "Correct Texts"

Sometimes it's hard to see what changed, especially when it's only whitespace. You could probably take advantage of difflib's SequenceMatcher to do this. I looked around but I don't see another library which would make it easier.
Feel free to re-use my code if it helps:
highlight

#!/usr/bin/env python3

import sys
import difflib

import colorama

def highlight_diff(a, b, a_delim_start, a_delim_end, b_delim_start, b_delim_end):
  s = difflib.SequenceMatcher(a=a, b=b)
  matching_block = s.get_matching_blocks()
  previous_index_a, previous_index_b = (0, 0)
  highlighted_a, highlighted_b = ("", "")
  for block in matching_block:
    highlighted_a += (a_delim_start + a[previous_index_a:block.a] +
            a_delim_end + a[block.a:block.a + block.size])
    previous_index_a = block.a + block.size
    highlighted_b += (b_delim_start + b[previous_index_b:block.b] +
            b_delim_end + b[block.b:block.b + block.size])
    previous_index_b = block.b + block.size
  return highlighted_a, highlighted_b

if __name__ == "__main__":
    a, b = sys.argv[1:]
    print("\n".join(highlight_diff(a, b, colorama.Style.BRIGHT + colorama.Fore.RED,
        colorama.Style.RESET_ALL, colorama.Style.BRIGHT + colorama.Fore.GREEN,
        colorama.Style.RESET_ALL)))

Restore API documentation

I removed API documentation in c341071. In hindsight, users of aeidon might actually need this, but the way it's generated from source should preferrably be changed so that it could be auto-built and put at readthedocs.org or something.

This is not an immediate problem as there have been no significant API changes on the aeidon part, so we can continue pointing people to the old documentation.

Possibility of changing italics format

It's very common in subtitles that italics are forwarded by '/' character instead of '{Y:i}' sequence. It would be nice to have possibility of transform from one notation to the other, maybe in text correction tool?

Internal video player doesn't work on Wayland

Hi guys,
I have downloaded subtitles&video from: https://www.youtube.com/watch?v=CeBHA2m8xm4
I have dragged and dropped automatically generated subtitles (srt) into the program. Then I have tried to load video, unfortunately app has crashed. Video is of the format.
I'm attaching bugreport and mediainfo information. Thank you for your work and time guys!

**Traceback**

File: /usr/lib/python3.6/site-packages/gaupol/agents/video.py
Line: 184
In: _on_load_video_activate

    self.player.set_path(path)

File: /usr/lib/python3.6/site-packages/gaupol/player.py
Line: 331
In: set_path

    self.set_uri(aeidon.util.path_to_uri(path))

File: /usr/lib/python3.6/site-packages/gaupol/player.py
Line: 340
In: set_uri

    self._xid = self.widget.get_window().get_xid()

AttributeError: 'GdkWaylandWindow' object has no attribute 'get_xid'

**Environment**

Platform: Linux-4.11.10-300.fc26.x86_64-x86_64-with-fedora-26-Twenty_Six
Locale: en_GB.utf_8

**Versions**

aeidon: 1.0
chardet: 2.3.0
enchant: 1.6.10
gaupol: 1.0
gstreamer: 1.12.2.0
gtk+: 3.22.17
pygobject: 3.24.1
python: 3.6.2

No video preview on elementary OS

Hello, thank you for this great subtitle editor!

I'm just having an issue with it on elementary OS. Everything is working fine except the video preview.
I can hear the sound but there's no video on the application itself. But if I preview it on MPlayer I have sound and image. I've also tried it on Linux Mint and still no video. It works fine on GNOME and Kubuntu though... Do I need to install something else to make work?

Thank you and keep up the great work!

Video player actions sensitive when playback initialization fails

I only report this because an error message invited me to, the bug is not annoying to me.
Here is how I can make it happen:

  1. GStreamer Libav plug-in must not be installed.
  2. Load a .srt file.
  3. Load a video for which gaupol requires the above plug-in. A message appears saying that a GStreamer plug-in is missing (“Failed to initialize playback”).
  4. Select subtitles and press O (or select Video > Play Selection in the menu bar). An error message appears with the following information:

Traceback

File: /usr/lib/python3.6/site-packages/gaupol/agents/video.py
Line: 208
In: _on_play_selection_activate

    self.player.play_segment(start, end)

File: /usr/lib/python3.6/site-packages/gaupol/player.py
Line: 299
In: play_segment

    end = min(duration, self.calc.to_seconds(end)) * Gst.SECOND

TypeError: '<' not supported between instances of 'float' and 'NoneType'

Environment

Platform: Linux-4.11.9-1-ARCH-x86_64-with-arch
Locale: en_US.utf_8

Versions

aeidon: 1.2
chardet: 3.0.4
enchant: 1.6.8
gaupol: 1.2
gstreamer: 1.12.2.0
gtk+: 3.22.16
pygobject: 3.24.1
python: 3.6.1

Error if closing Gaupol while it's still loading a file

Steps to reproduce:

  • Open a subtitle file from your file manager with gaupol.
  • A empty gaupol window is shown first; before it loads the contents of the file itself, close the window via Alt+F4.

Here I get the Gaupol error window with the next traceback:

File: /usr/lib/python3.5/site-packages/gaupol/applicationman.py
Line: 95
In: _on_activate

    self._init_application(opts, args)

File: /usr/lib/python3.5/site-packages/gaupol/applicationman.py
Line: 56
In: _init_application

    application.open_main(paths, opts.encoding)

File: /usr/lib/python3.5/site-packages/aeidon/deco.py
Line: 218
In: inner_wrapper

    return function(*args, **kwargs)

File: /usr/lib/python3.5/site-packages/gaupol/agents/open.py
Line: 271
In: open_main

    self.add_page(page)

File: /usr/lib/python3.5/site-packages/gaupol/agents/open.py
Line: 54
In: add_page

    self.emit("page-added", page)

File: /usr/lib/python3.5/site-packages/aeidon/observable.py
Line: 129
In: emit

    method(*((self,) + args + data))

File: /usr/lib/python3.5/site-packages/gaupol/agents/menu.py
Line: 266
In: _update_projects_menu

    action.set_state(str(i))

AttributeError: 'NoneType' object has no attribute 'set_state'

Environment

Platform: Linux-4.11.8-100.fc24.i686+PAE-i686-with-fedora-24-Twenty_Four
Locale: es_ES.utf_8

Versions

aeidon: 1.2
chardet: 2.2.1
enchant: 1.6.8
gaupol: 1.2
gstreamer: 1.8.3.0
gtk+: 3.20.10
pygobject: 3.20.1
python: 3.5.3

Time jumps make Gaupol freeze after audio track change

How I can make the bug happen:

  1. Load subtitles.
  2. Load a video having two soundtracks.
  3. Pause it.
  4. Switch to the other soundtrack.
  5. Move the video's time cursor (either manually, or through an automated function, like Seek … or Play Selection, but not Play/Pause).

Workaround:

Let the video play with the newly selected soundtrack before making a time jump. In other terms, either omit step 3, or unpause the video right after step 4. Note that one can then pause the video and make time jumps at will without the bug occurring, unless the sountrack is changed during a pause again.

Please add support for webvtt

Hi.

Some devices, like the high-profile chromecasts, can support subtitles, but only in a format called WebVTT. The format is based on srt and a simple conversion can be achieved by using something like:

ffmpeg -i input.srt output.vtt

It would be superb if gaupol supported WebVTT out-of-the-box, even if not in its full generality, since this is one of the formats that we can expect other software/hardware to support and gain adoption, due to the W3 Consortium formalizing it.

Thanks for maintaining gaupol as one excellent subtitle editor,

Rogério.

P.S.: Subtitles served via Youtube already are downloaded in WebVTT and youtube-dl converts them to srt via ffmpeg, an external tool.

Add option to remove exact duplicate subtitles

Hi.

First of all, thank you for adding the support for WebVTT to gaupol. It is really appreciated.

I would like to request a feature that would make gaupol nice to remove some subtitles that are exact duplicates with everything like start time, end time, duration (of course) and text.

In my experience, these are present when the original is malformed and, to get the files tidy, I would like to eliminate such problematic captions.

I'm attaching a file with such a problem here. (Sorry that I had to put a txt extension or github wouldn't allow me to upload the file).

Thanks for this creating amazing tool,

Rogério.

greys-anatomy-s13e07.srt.txt

Display applied fixes in "Correct Texts"

It would be nice to have an option to show what fixes were applied to each line (especially when we want to disable them because they are false positives). Maybe this could be shown when hovering over the line?
I haven't looked at the code so I don't know if it's easily doable, maybe you don't check which fixes cause changes.

How to install gaupol on ubuntu 16.04

Hi @otsaloma first of all thanks for developing gaupol! I looked around in the subtitle editors for linux and gaupol seems to be the best (at the least of those I was able to run and whose version is not 2 years old).

I was able to run gaupol without installing it following the instruction in the readme.md. However when I try to install it (as per install.md) I am stuck.

I use cd to enter gaupol folder and then I run: python3 setup.py install [--prefix=...]

But I get: invalid command name '[--prefix=...]'

How do I solve that?

Thanks a lot!

Can't load any Videos

I'm trying to load a video but it can't be done in Windows... The fields and buttons are disabled.
2017-03-14

Load video by drag-and-drop

When dragging and dropping a video file on Gaupol, it tells the user that the file seems too big to be a text-based subtitle file. I suggest asking the user to choose between loading the file as a video or as subtitles. (Edit: the issue also happens when passing a video file as an argument when launching Gaupol from the command line. The -v option does not solve the issue as it does not load the video in Gaupol's player.)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.