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

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

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

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

Postby CAEman » Sat Sep 30, 2017 10:08 am

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

Баги:
1. Отсоединённая панель Навигация после повторного запуска программы (даже свёрнутой в системный лоток: впрочем, это беда всех окон программы, что они не сворачиваются в лоток вместе с главным окном при его закрытии, правда, в отличие от панели сворачиваются в панель задач вместе с программой) открывается на всех рабочих столах поверх всех окон (и при этом нет возможности встроить панель на пустое место справа от меню).
2. Не работает автозапуск программы.
РЕШЕНИЕ (замена соответствующего кода в файле 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. После нажатия кнопки Пересканировать во вкладке Источники / Файлы окна Словари (даже без изменения словарей) если выбран поиск в группе "Все", то число открытых программой файлов (проверка: в консоли запускаем команду 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. Добавить в Пути для поиска файлов словарей что-то вроде "Включён/Отключён", чтобы не приходилось делать лишнюю подпапку для использования в этих целях "Рекурсивно".
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 );
  }
}

Судя по всему, файл описания, например, 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: 134
Joined: Sat Nov 24, 2012 12:13 pm

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

Postby CAEman » Sat Oct 14, 2017 12:38 pm

04.10.17
Исправлен стиль Modern.
CAEman
 
Posts: 134
Joined: Sat Nov 24, 2012 12:13 pm

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

Postby CAEman » Sat Oct 21, 2017 11:28 am

10.10.17
Никаких исправлений или доработок отслеживаемых в теме багов и недостатков...
CAEman
 
Posts: 134
Joined: Sat Nov 24, 2012 12:13 pm

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

Postby CAEman » Sat Oct 28, 2017 6:43 am

17.10.17
--//--
CAEman
 
Posts: 134
Joined: Sat Nov 24, 2012 12:13 pm

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

Postby CAEman » Sat Nov 11, 2017 9:52 am

25.10.17
--//--
CAEman
 
Posts: 134
Joined: Sat Nov 24, 2012 12:13 pm

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

Postby CAEman » Sat Nov 18, 2017 8:28 am

08.11.17
--//--
CAEman
 
Posts: 134
Joined: Sat Nov 24, 2012 12:13 pm

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

Postby CAEman » Sat Nov 25, 2017 7:36 am

13.11.17
--//--
CAEman
 
Posts: 134
Joined: Sat Nov 24, 2012 12:13 pm

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

Postby CAEman » Fri Dec 29, 2017 8:10 am

10.12.17
--//--
CAEman
 
Posts: 134
Joined: Sat Nov 24, 2012 12:13 pm

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

Postby CAEman » Sat Jan 13, 2018 12:45 pm

21.12.17
--//--
CAEman
 
Posts: 134
Joined: Sat Nov 24, 2012 12:13 pm

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

Postby CAEman » Sat Jan 20, 2018 9:39 am

10.01.18
--//--
CAEman
 
Posts: 134
Joined: Sat Nov 24, 2012 12:13 pm

PreviousNext

Return to Общий

Who is online

Users browsing this forum: No registered users and 3 guests

cron