New user registration is currently disabled due to spam abuse / Регистрация новых пользователей в настоящее время приостановлена из-за злоупотреблений спаммерами

Баги, пожелания, тестовые сборки

Обо всём по программе

Re: Баги, пожелания, тестовые сборки

Postby CAEman » Sat Jun 03, 2017 11:46 am

0(у рекомендуемой разработчиками, по крайней мере, в целях тестирования нескомпилированной версии). В OpenSUSE приходится в /usr/lib64/ копировать символическую ссылку liblzo2.so.2 в liblzo2.so и установить пакет lzo-devel (или в /usr/include/ создать символическую ссылку на подпапку maclibs/include/lzo папки исходников), а в большинстве других дистрибутивов вообще отсутствует qmake.

Баги:
1. Отсоединённая панель Навигация после повторного запуска программы (даже свёрнутой в системный лоток: впрочем, это беда всех окон программы, что они не сворачиваются в лоток вместе с главным окном при его закрытии, правда, в отличие от панели сворачиваются в панель задач вместе с программой) открывается на всех рабочих столах поверх всех окон {СМ. РИС. на с.1} (и при этом нет возможности встроить панель на пустое место справа от меню).
2. Не работает автозапуск программы {СМ. РИС. на с.1}.
РЕШЕНИЕ (замена соответствующего кода в файле mainwindow.cc):
Code: Select all
void MainWindow::setAutostart(bool autostart)
{
#ifdef Q_OS_WIN32
    QSettings reg("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run",
                  QSettings::NativeFormat);
    if (autostart) {
        QString app_fname = QString("\"%1\"").arg( QCoreApplication::applicationFilePath() );
        app_fname.replace("/", "\\");
        reg.setValue(QCoreApplication::applicationName(), app_fname);
    }
    else {
        reg.remove(QCoreApplication::applicationName());
    }
    reg.sync();
#else
    // this is for Linux
    QString app_fname = QFileInfo(QCoreApplication::applicationFilePath()).baseName();
    QString lnk(QDir::homePath()+"/.config/autostart/"+"goldendict.desktop");
    if (autostart) {
        QFile f("/usr/share/applications/goldendict.desktop");
        f.link(lnk);
    } else {
        QFile::remove(lnk);
    }
#endif
}

3. При сохранении файлов из оболочки (например, нажатии кнопки "Экспорт" в окне Заголовков словаря или выбора "Сохранить изображение..." контекстного меню рисунка в статье словаря) программа "вылетает" (при подключённом большом количестве словарей) с ошибкой (выдаваемой на консоль в случае запуска из неё оболочки) "*** buffer overflow detected ***: /usr/bin/goldendict terminated", если не нажать предварительно кнопку Пересканировать во вкладке Источники / Файлы окна Словари (без изменения словарей).
4. После нажатия кнопки Пересканировать во вкладке Источники / Файлы окна Словари {СМ. РИС. на с.1} (даже без изменения словарей) если выбран поиск в группе "Все", то число открытых программой файлов (проверка: в консоли запускаем команду lsof -p `pgrep goldendict` | wc -l) вырастает на число, равное 2-х кратному количеству подключённых словарей, причём максимальному количеству, т.е. первоначальному количеству - при его уменьшении или конечному - в случае увеличения, что может привести к "вылету" программы, если у пользователя установлено недостаточно большое значение параметра maximum file descriptor number that can be opened by a process (см. примечание) (проверка: в консоли запускаем команду ulimit -Sn), и только после нажатия кнопки ОК оно уменьшается до итогового значения, когда как при выборе меню Файл / Пересканировать файлы Ctrl+F5, или когда поиск задан в др. группе словарей, наоборот, число резко падает, а потом по мере пересканирования достигает (в случае Ctrl+F5) итогового значения.

Пожелания:
0. Доработать механизм индексации (чтобы после прерывания процесса полнотекстового индексирования словаря из-за завершения работы приложения при возобновлении процесса индексация словаря продолжилась с того же или близкого по времени места, на котором была прервана, а также чтобы при неизменности указанного в конфигурации пути к словарям, в т.ч. сформированного при помощи символических ссылок, переиндексация данных словарей не происходила в случае изменения "реального" пути монтирования, например, как в StarDict).
1. Доработать механизм запросов при помощи шаблонов (чтобы, например, запросы "аб?в" и "аб?в*" различались).
2. Чтобы при запросе заголовков с буквой "ё" выдавались и статьи с точно такими же заголовками, только с буквой "е" (поскольку имеется огромное количество словарей, где вместо "ё" написано "е").
3. Чтобы функция выделения слова одиночным щелчком срабатывала только в случае отпускания в месте нажатия, т.е. сохранилась бы возможность выделения части слова.
4. Чтобы к XDXF словарям подгружались dict.bmp иконки.
РЕШЕНИЕ (замена соответствующего кода в файле xdxf.cc):
Code: Select all
void XdxfDictionary::loadIcon() throw()
{
  if ( dictionaryIconLoaded )
    return;

  QString fileName =
    QDir::fromNativeSeparators( FsEncoding::decode( getDictionaryFilenames()[ 0 ].c_str() ) );

  QFileInfo baseInfo( fileName );

  fileName = baseInfo.absoluteDir().absoluteFilePath( "icon32.png" );
  QFileInfo info( fileName );

  if( !info.isFile() )
  {
      fileName = baseInfo.absoluteDir().absoluteFilePath( "icon16.png" );
      info = QFileInfo( fileName );
  }

  if( !info.isFile() )
  {
      fileName = baseInfo.absoluteDir().absoluteFilePath( "dict.bmp" );
      info = QFileInfo( fileName );
  }

  if ( info.isFile() )
    loadIconFromFile( fileName, true );

  if ( dictionaryIcon.isNull() )
  {
    // Load failed -- use default icons

    dictionaryIcon = QIcon(":/icons/icon32_xdxf.png");
    dictionaryNativeIcon = QIcon(":/icons/icon32_xdxf.png");
  }

  dictionaryIconLoaded = true;
}

5. Чтобы при выборе в Параметрах Интерфейса Дополнительного стиля прибавилась бы возможность изменения (за счёт появления рядом нового списка и|или контекстного меню при щелчке правой кнопкой мыши на соответствующей панели) таких параметров, как цвет фона, размер шрифта Панели навигации по переводу и т.п., а для начала, если всё это сложно, хотя бы добавить возможность изменения размера шрифта Панели навигации по переводу (пусть и вместе со всеми остальными списками, кроме списка слов), как это сделано для Панели поиска (т.е. списка слов) и содержания статей.
6. Добавить в Пути для поиска файлов словарей что-то вроде "Включён/Отключён", чтобы не приходилось делать лишнюю подпапку для использования в этих целях "Рекурсивно". {СМ. РИС. на с.1}
7. ОЧЕНЬ ЖЕЛАТЕЛЬНО, чтобы в окне Порядка словарей в первой строке контекстного меню находилось бы безобидное "Заголовки словаря", поскольку из-за срабатывания выбора первой строки контекстного меню при нечаянном смещении мыши во время щелчка правой кнопкой происходит пересортировка словарей, что можно и не заметить из-за отсутствия смещения находящегося в центре внимания выбранного словаря (особенно при включённой фильтрации) и нажать кнопку "ОК", что, в свою очередь, для восстановления нужного пользователю порядка словарей при отсутствии резервной копии файла конфигурации приводит к необходимости ручной пересортировки всех словарей (которых может быть и тысячи)!
РЕШЕНИЕ (замена соответствующего кода в файле orderandprops.cc):
Code: Select all
void OrderAndProps::contextMenuRequested( const QPoint & pos )
{
  QMenu menu( this );
   QModelIndex idx = ui.searchLine->mapToSource( ui.dictionaryOrder->indexAt( pos ) );
 sptr< Dictionary::Class > dict;
   if( idx.isValid() && (unsigned)idx.row() < ui.dictionaryOrder->getCurrentDictionaries().size() )
    dict = ui.dictionaryOrder->getCurrentDictionaries()[ idx.row() ];

  QAction * showHeadwordsAction = NULL;
  if ( dict && dict->getWordCount() > 0 )
  {
    showHeadwordsAction = new QAction( tr( "Dictionary headwords" ), &menu );
    menu.addAction( showHeadwordsAction );
  }

 QAction * sortNameAction = new QAction( tr( "Sort by name" ), &menu );
  menu.addAction( sortNameAction );
  QAction * sortLangAction = new QAction( tr( "Sort by languages" ), &menu );
  menu.addAction( sortLangAction );


  QAction * result = menu.exec( ui.dictionaryOrder->mapToGlobal( pos ) );

  if( result && result == showHeadwordsAction )
  {
    emit showDictionaryHeadwords( QString::fromUtf8( dict->getId().c_str() ) );
  }

  if( result == sortNameAction || result == sortLangAction )
  {
    vector< sptr< Dictionary::Class > > sortedDicts = ui.dictionaryOrder->getCurrentDictionaries();
    if( result == sortNameAction )
      sort( sortedDicts.begin(), sortedDicts.end(), dictNameLessThan );
    else
      sort( sortedDicts.begin(), sortedDicts.end(), dictLessThan );
    ui.dictionaryOrder->populate( sortedDicts );
  }
}

8. В окне Файлов, из которых состоит словарь, при их количестве 3 (а при не умещении в окне полного пути файла - и при 2) появляется справа полоса прокрутки с возможностью прокрутки на 1 строку (а при 4 файлах или 3 файлах с неумещением - на 2 строки), когда как имеется место для отображения 4 файлов.
РЕШЕНИЕ:
замена в файле orderandprops.ui в свойствах minimumSize и maximumSize значений 65 на 70, т.е.:
Code: Select all
          <property name="minimumSize">
           <size>
            <width>0</width>
            <height>70</height>
           </size>
          </property>
          <property name="maximumSize">
           <size>
            <width>16777215</width>
            <height>70</height>
           </size>
          </property>

Судя по всему, файл описания, например, ifo присутствует в данном списке, а ann - нет (при том, что бывают DSL словари как с файлом аннотации *.ann, так и без него, т.е. точно также, как в случае присутствующего в упомянутом списке файла аббревиатур) поскольку первый увеличивает число открытых дескрипторов (см. примечание), а второй - нет...


Примечание. Имея права суперпользователя (root), увеличить данное значение можно путём редактирования значений параметров:
1) в старых системах - HARDFDLIMITS и SOFTFDLIMITS в файле /etc/sysconfig/ulimit
(а, например, в OpenSUSE это можно сделать также в Центре управления Yast2: Система/"Редактор /etc/sysconfig": System/Limits),
где можно установить указанные значения равными 4096, 8192, 16384, 32768, 65536, ..., при этом значение SOFTFDLIMITS не должно превышать таковое для HARDFDLIMITS,
а в файле /etc/initscript присваивание значения HARDFDLIMITS обязательно ДОЛЖНО ВЕЗДЕ ПРЕДШЕСТВОВАТЬ таковому для SOFTFDLIMITS, например:
Code: Select all
  test -z "$HARGS"  || ulimit $HARGS
  test -z "$SARGS"  || ulimit $SARGS
,
но не наоборот (тогда необходимо поменять их местами)!
2) в новых системах - DefaultLimitNOFILE в файле /etc/systemd/system.conf (можно установить и =infinity - будут тогда равными 65536 и ulimit -Hn, и ulimit -Sn)

Если же прав суперпользователя нет, а значение ulimit -Hn больше ulimit -Sn,
то программу можно запускать через скрипт (т.е., например, созданный в файловом менеджере текстовый файл с установленными в его свойствах правами на выполнение) следующего содержания:
Code: Select all
#! /bin/sh
#
ulimit -Sn 8192
ulimit -Sn
goldendict

где при необходимости изменяем 8192, чтобы было не больше значения, выдаваемого командой ulimit -Hn, а если программа не установлена (например, просто скомпилирована без make install), то перед исполняемым файлом goldendict указываем полный путь к нему.
CAEman
 
Posts: 138
Joined: Sat Nov 24, 2012 12:13 pm

Re: Баги, пожелания, тестовые сборки

Postby CAEman » Sat Jun 10, 2017 11:00 am

01.06.17
Никаких исправлений или доработок...
CAEman
 
Posts: 138
Joined: Sat Nov 24, 2012 12:13 pm

Re: Баги, пожелания, тестовые сборки

Postby CAEman » Sat Jun 17, 2017 2:03 pm

09.06.17
--//--
При этом испорчен стиль интерфейса "Modern" (как и "Lingoes-blue"). Пришлось перейти на "Lingvo"...
CAEman
 
Posts: 138
Joined: Sat Nov 24, 2012 12:13 pm

Re: Баги, пожелания, тестовые сборки

Postby CAEman » Sat Jun 24, 2017 12:35 pm

13.06.17
Никаких исправлений указанных багов и недоработок (в т.ч. и свеженаделанных)...
CAEman
 
Posts: 138
Joined: Sat Nov 24, 2012 12:13 pm

Re: Баги, пожелания, тестовые сборки

Postby CAEman » Sat Jul 01, 2017 4:07 pm

22.06.17
Внесённые ранее баги в стили исправлены.
CAEman
 
Posts: 138
Joined: Sat Nov 24, 2012 12:13 pm

Re: Баги, пожелания, тестовые сборки

Postby CAEman » Fri Jul 14, 2017 2:46 pm

07.07.17
Вообще не компилируется:
Code: Select all
bgl_babylon.cc: В функции-члене «void Babylon::convertToUtf8(std::string&, unsigned int)»:
bgl_babylon.cc:795:80: ошибка: нет декларации «errno» в этой области видимости
       gdWarning( "\"%s\" - error in iconv conversion (%s)\n", inbuf, strerror( errno ) );
                                                                                ^
Makefile:1901: ошибка выполнения рецепта для цели «build/bgl_babylon.o»
make: *** [build/bgl_babylon.o] Ошибка 1
CAEman
 
Posts: 138
Joined: Sat Nov 24, 2012 12:13 pm

Re: Баги, пожелания, тестовые сборки

Postby CAEman » Fri Jul 21, 2017 2:01 pm

14.07.17
По-прежнему не компилируется.
Last edited by CAEman on Sat Sep 30, 2017 9:47 am, edited 1 time in total.
CAEman
 
Posts: 138
Joined: Sat Nov 24, 2012 12:13 pm

Re: Баги, пожелания, тестовые сборки

Postby CAEman » Sat Sep 16, 2017 7:28 am

20.07.17
Последний баг исправлен.
Но теперь в большинстве систем (с libhunspell старее 1.5) при компиляции необходимо добавлять в команду qmake:
Code: Select all
CONFIG+=old_hunspell
Last edited by CAEman on Sat Sep 30, 2017 9:46 am, edited 1 time in total.
CAEman
 
Posts: 138
Joined: Sat Nov 24, 2012 12:13 pm

Re: Баги, пожелания, тестовые сборки

Postby CAEman » Sat Sep 23, 2017 6:38 am

08.09.17
Никаких исправлений отслеживаемых багов и недоработок.
Last edited by CAEman on Sat Sep 30, 2017 9:51 am, edited 2 times in total.
CAEman
 
Posts: 138
Joined: Sat Nov 24, 2012 12:13 pm

Re: Баги, пожелания, тестовые сборки

Postby CAEman » Sat Sep 30, 2017 9:56 am

22.09.17
Устранена недоработка: в окне Файлов, из которых состоит словарь, при их количестве 3 (а при не умещении в окне полного пути файла - и при 2) появление справа полосы прокрутки с возможностью прокрутки на 1 строку (а при 4 файлах или 3 файлах с неумещением - на 2 строки).
Но при этом был "навёрнут" стиль Modern...
CAEman
 
Posts: 138
Joined: Sat Nov 24, 2012 12:13 pm

PreviousNext

Return to Общий

Who is online

Users browsing this forum: No registered users and 12 guests