Автор Тема: LibreOffice / Создание расширений для применения настроек  (Прочитано 2372 раз)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Всем привет!

Тема перекочевала отсюда https://forum.altlinux.org/index.php?topic=35285.msg283452#msg283452.

И так, читаю https://wiki.documentfoundation.org/images/b/b0/LibreOffice_config_extension_writing.pdf.

Делаю:

mkdir -p my_ext/META-INF
touch my_ext/common.xcu
touch my_ext/META-INF/manifest.xml

Привожу содержимое файлов к виду:

common.xcu
<oor:component-data oor:name="Common" oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <node oor:name="Jobs">
        <node oor:name="UpdateCheck">
            <node oor:name="Arguments">
                <prop oor:name="AutoCheckEnabled" oor:type="xs:boolean" oor:finalized="true">
                    <value>false</value>
                </prop>
                <prop oor:name="AutoDownloadEnabled" oor:type="xs:boolean" oor:finalized="true">
                    <value>false</value>
                </prop>
                <prop oor:name="CheckInterval" oor:type="xs:int" oor:finalized="true">
                    <value>86400</value>
                </prop>
                <prop oor:name="LastCheck" oor:type="xs:int" oor:finalized="true">
                    <value>0</value>
                </prop>
            </node>
        </node>
    </node>
    <node oor:name="Linguistic">
<node oor:name="SpellChecking">
<prop oor:name="IsSpellAuto" oor:type="xs:boolean" oor:finalized="true">
<value>true</value>
</prop>
</node>
    </node>
</oor:component-data>

manifest.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest:manifest>
<manifest:file-entry manifest:full-path="common.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
</manifest:manifest>

Выполняю:
zip -r my_config_extension.oxt "."
Устанавливаю расширение:
/opt/libreoffice5.0/program/unopkg add --shared my_config_extension.oxt
Открываю LO5, там моё расширение есть, но настройки не применяются.
Почему ? Кто подскажет...
« Последнее редактирование: 10.04.2016 12:45:15 от berkut_174 »
Сноси Винду, переходи на Линукс ! :)

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 251
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Попробуйте включить отладку (шаг 4)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Попробуйте включить отладку (шаг 4)
Уже нашёл ошибку, посмотрев на пример.

В common.xcu забыл вначале строку:
<?xml version="1.0" encoding="UTF-8"?>и
<oor:component-data oor:name="Common" oor:package="...заменить на
<oor:component-data oor:name="Jobs" oor:package="
В общем работает, но перезаписывать пользовательские настройки получилось только с finalized="true", а он даёт такой эффект, что, если пользователь захочет поставить галку на "Проверять обновления автоматически", то получит крах LO, что тоже не очень выходит. Как-то по-другому перезаписать настройки пользователя не получилось...
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Причём Fatal Error только для настроек с обновлением, другие настройки (автопроверка орфографии, например) не вызывает такой ошибки. Похоже как повезёт:
(Sometimes the finalized settings are visibly disabled in the GUI. In some other cases, if the user tries to modify it, LibreOffice will crash/close with the error “configmgr modification of finalized item”.)
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Может с этими параметрами нужно поиграться, в частности интересны (кроме finalized) -- mandatory и readonly. Но что-то они не дают эффекта, либо я не могу понять их логику работы...
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Хм, что касается обновлений, то просто не нужно устанавливать пакет libobasis4.4-onlineupdate. :-) И нет проблем.

А вот проверка орфографии так и не применяется, проверяю на чистом профиле с LO4.2.5, который сейчас в p7. Ставлю рядом LO4.4.7, ставлю расширение и не работает орфография.

Вот такой манифест использую:
<?xml version="1.0" encoding="UTF-8"?>
<oor:component-data oor:name="Linguistic" oor:package="org.openoffice.Office"
    xmlns:oor="http://openoffice.org/2001/registry"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" >

    <node oor:name="SpellChecking">
    <prop oor:name="IsSpellAuto" oor:type="xs:boolean" oor:finalized="true">
        <value>true</value>
    </prop>
    </node>

    <node oor:name="GrammarChecking">
    <prop oor:name="IsAutoCheck" oor:type="xs:boolean" oor:finalized="true">
        <value>true</value>
    </prop>
    </node>

</oor:component-data>
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Причём сам манифест рабочий (finalized отрабатывает), потому что если галку про орфографию снять, то при следующем входе она снова установлена и дальше всё корректно работает. Видимо, это действительно баг и его не обойти таким способом...
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Так, проблема найдена, нужно выполнить такой манифест:
    <node oor:name="ServiceManager">
        <node oor:name="SpellCheckerList" oor:finalized="true">
            <prop oor:name="be-BY" oor:op="remove"/>
    <prop oor:name="kk-KZ" oor:op="remove"/>
    <prop oor:name="ru" oor:op="remove"/>
    <prop oor:name="uk-UA" oor:op="remove"/>
        </node>
    </node>
Только он не работает :-)

Старые словари ALT-овские мешаются, если их убрать, то становится всё норм.
Вот diff сделал:
326c299
< <item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/SpellCheckerList"><prop oor:name="be-BY" oor:op="remove"/></item>
---
> <item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/SpellCheckerList"><prop oor:name="be-BY" oor:op="fuse" oor:type="oor:string-list"><value></value></prop></item>
347c320
< <item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/SpellCheckerList"><prop oor:name="kk-KZ" oor:op="remove"/></item>
---
> <item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/SpellCheckerList"><prop oor:name="kk-KZ" oor:op="fuse" oor:type="oor:string-list"><value></value></prop></item>
349c322
< <item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/SpellCheckerList"><prop oor:name="ru" oor:op="remove"/></item>
---
> <item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/SpellCheckerList"><prop oor:name="ru" oor:op="fuse" oor:type="oor:string-list"><value></value></prop></item>
351c324
< <item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/SpellCheckerList"><prop oor:name="uk-UA" oor:op="remove"/></item>
---
> <item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/SpellCheckerList"><prop oor:name="uk-UA" oor:op="fuse" oor:type="oor:string-list"><value></value></prop></item>

Может кто подскажет как правильно манифест для remove сделать, у меня не получается  :'-(
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Срабатывает вот так:
    <node oor:name="ServiceManager">
        <node oor:name="SpellCheckerList" oor:finalized="true">
    <prop oor:name="ru-RU" oor:type="oor:string-list">
        <value><it>org.openoffice.lingu.MySpellSpellChecker</it></value>
    </prop>
        </node>
    </node>
При этом, понятное дело, что все остальные spell удаляются, но для русского орфография будет работать.

Если же думать над удалением тех несчастных 4 строчек, то обязано просто работать вот так:
    <node oor:name="ServiceManager">
        <node oor:name="SpellCheckerList">
            <prop oor:name="be-BY" oor:op="remove" oor:finalized="true"/>
    <prop oor:name="kk-KZ" oor:op="remove" oor:finalized="true"/>
    <prop oor:name="ru" oor:op="remove" oor:finalized="true"/>
    <prop oor:name="uk-UA" oor:op="remove" oor:finalized="true"/>
        </node>
    </node>
Но не работает... прям не знаю что я упускаю...
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Так-так-так...

Все что выше рецепты писал, не удалось воспроизвести, видимо, где-то просто промахнулся при поиске решения.

В общем вот эти проклятые строки в конфиге нужно вручную удалить, иначе НИКАК:
<item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/LastFoundSpellCheckers"><prop oor:name="be-BY" oor:op="remove"/></item>
<item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/LastFoundSpellCheckers"><prop oor:name="kk-KZ" oor:op="remove"/></item>
<item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/LastFoundSpellCheckers"><prop oor:name="ru" oor:op="remove"/></item>
<item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/LastFoundSpellCheckers"><prop oor:name="uk-UA" oor:op="remove"/></item>
<item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/SpellCheckerList"><prop oor:name="be-BY" oor:op="fuse" oor:type="oor:string-list"><value></value></prop></item>
<item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/SpellCheckerList"><prop oor:name="uk-UA" oor:op="fuse" oor:type="oor:string-list"><value></value></prop></item>
<item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/SpellCheckerList"><prop oor:name="kk-KZ" oor:op="fuse" oor:type="oor:string-list"><value></value></prop></item>
<item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/SpellCheckerList"><prop oor:name="ru" oor:op="fuse" oor:type="oor:string-list"><value></value></prop></item>
(достаточно последние четыре удалить, первые четыре удалятся при следующем запуске LO)

Зашибись...

UPD: Было бы не "ru", а "ru-RU", то, предположительно, можно установить langpack для остальных локализаций и всё было бы норм. Почему вдруг просто "ru" ?..
« Последнее редактирование: 09.04.2016 15:00:57 от berkut_174 »
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Продолжаю расследование...

Пришёл к выводу, что для решения проблемы с орфографией достаточно удалить всего лишь одну строчку:
<item oor:path="/org.openoffice.Office.Linguistic/ServiceManager/SpellCheckerList"><prop oor:name="ru" oor:op="fuse" oor:type="oor:string-list"><value></value></prop></item>
Откуда она вообще берётся -- загадка. Её создаёт LO из p7, но если её удалить из конфига, то LO из p7 тоже продолжает нормально работать! То есть эта строчка ему не нужна! Вот зачем он её создаёт ?
Проверил на LO 4.4.7, 5.0.4, 5.1.1 -- везде, если удалить эту строку из конфига, то орфография начинает работать.

PS. Вообще данные по пути "/org.openoffice.Office.Linguistic/ServiceManager/..." создаются при первом вводе слова, наверно, в этот момент LO как раз читает словари. Ну откуда же берётся этот "ru" ?.. разгадка где-то рядом...
Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Ура! Решение найдено, такой манифест нужно выполнить:
<?xml version="1.0" encoding="UTF-8"?>
<oor:component-data oor:name="Linguistic" oor:package="org.openoffice.Office"
    xmlns:oor="http://openoffice.org/2001/registry"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" >

<node oor:name="ServiceManager">
    <node oor:name="SpellCheckerList">
<prop oor:name="ru" oor:type="oor:string-list" oor:op="replace" oor:finalized="true">
    <value xsi:nil="true"></value>
</prop>
    </node>
</node>

</oor:component-data>

Проверил на LO 4.4.7, 5.0.4, 5.1.1.

[решено]
Сноси Винду, переходи на Линукс ! :)

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 920
    • Домашняя страница
    • Email
У меня проверка орфографии заработала на p7 после установки LibreOffice4-extension-CyrillicTools.
Андрей Черепанов (cas@)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Я решал проблему отказа работы автоматической проверки орфографии при переходе с LO собранного в p7, на статичные сборки с оф. сайта LO. То есть, имеем конфиг LO в каталоге пользователя, созданный LO из бранча. Ставим LO с оф. сайта, запускаем и получаем нерабочую автопроверку орфографии.

LibreOffice4-extension-CyrillicTools
К сожалению, указанный пакет не помог решить эту проблему, если речь об этом.

Проверял так:
# apt-get install LibreOffice4-extension-CyrillicTools
$ rm -rf $HOME/.config/libreoffice
$ lowriter
Ввожу какое-н. слово, чтобы словари записались в конфиг и визуально было видно, что автопроверка работает. Работает. Закрываю LO Writer.
$ /opt/libreoffice4.4/program/swriterВвожу какое-н. слово, чтобы визуально было видно, что автопроверка работает. Но она не работает.
Сноси Винду, переходи на Линукс ! :)