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

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

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: 100
Joined: Sat Nov 24, 2012 12:13 pm

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

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

01.06.17
Никаких исправлений или доработок...
CAEman
 
Posts: 100
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: 100
Joined: Sat Nov 24, 2012 12:13 pm

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

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

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

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

Postby lofe63 » Tue Jun 27, 2017 8:16 am

pretty good staff
___
Londonescortsagency
lofe63
 
Posts: 3
Joined: Fri May 19, 2017 4:27 pm

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

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

22.06.17
Внесённые ранее баги в стили исправлены.
CAEman
 
Posts: 100
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: 100
Joined: Sat Nov 24, 2012 12:13 pm

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

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

14.07.17
Как известно, после 2013 г. у Goldendict баги не исправляются (а только добавляются). Поэтому оболочка по-прежнему не компилируется и вряд ли когда-либо будет.
Поэтому привожу ссылки: последнюю рабочую сборку (с указанными ранее исправлениями) можно скачать отсюда; скомпилированную под Linux_x86-64 версию - отсюда (зеркало).
CAEman
 
Posts: 100
Joined: Sat Nov 24, 2012 12:13 pm

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

Postby golfprice » Thu Jul 27, 2017 5:44 am

best price taylormade m2 driver uk putting hours in around the chipping green, few of today’s top players are known for their short games. And it’s instructive that it was working on his wedges that was the most important factor in Dustin Johnson rising to being the current No. 1.

http://www.golfprice.co.uk/TaylorMade-M2-Driver-82.html was set up by an artful pitch and run with a lob wedge that had to land on a precise spot, then almost die at the top of a slope before trickling down near the hole. It was every bit


taylormade m2 irons for sale
best price taylormade m2 irons uk
golfprice
 
Posts: 20
Joined: Sat Jul 22, 2017 2:58 am

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

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

20.07.17
Code: Select all
hunspell.cc: В функции-члене «void HunspellMorpho::{anonymous}::HunspellArticleRequest::run()»:
hunspell.cc:273:38: ошибка: нет подходящей функции для вызова «Hunspell::spell(std::string&)»
     if ( hunspell.spell( encodedWord ) )
                                      ^
hunspell.cc:273:38: замечание: candidate is:
In file included from hunspell.cc:22:0:
/usr/include/hunspell/hunspell.hxx:56:7: замечание: int Hunspell::spell(const char*, int*, char**)
   int spell(const char * word, int * info = NULL, char ** root = NULL);
       ^
/usr/include/hunspell/hunspell.hxx:56:7: замечание:   no known conversion for argument 1 from «std::string {aka std::basic_string<char>}» to «const char*»
hunspell.cc:285:49: ошибка: нет подходящей функции для вызова «Hunspell::suggest(std::string&)»
     suggestions = hunspell.suggest( encodedWord );
                                                 ^
hunspell.cc:285:49: замечание: candidate is:
In file included from hunspell.cc:22:0:
/usr/include/hunspell/hunspell.hxx:66:7: замечание: int Hunspell::suggest(char***, const char*)
   int suggest(char*** slst, const char * word);
       ^
/usr/include/hunspell/hunspell.hxx:66:7: замечание:   candidate expects 2 arguments, 1 provided
hunspell.cc: В функции «QVector<std::basic_string<wchar_t> > HunspellMorpho::{anonymous}::suggest(std::wstring&, Mutex&, Hunspell&)»:
hunspell.cc:507:49: ошибка: нет подходящей функции для вызова «Hunspell::analyze(std::string&)»
     suggestions = hunspell.analyze( encodedWord );
                                                 ^
hunspell.cc:507:49: замечание: candidate is:
In file included from hunspell.cc:22:0:
/usr/include/hunspell/hunspell.hxx:78:7: замечание: int Hunspell::analyze(char***, const char*)
   int analyze(char*** slst, const char * word);
       ^
/usr/include/hunspell/hunspell.hxx:78:7: замечание:   candidate expects 2 arguments, 1 provided
hunspell.cc: В функции-члене «void HunspellMorpho::{anonymous}::HunspellPrefixMatchRequest::run()»:
hunspell.cc:662:38: ошибка: нет подходящей функции для вызова «Hunspell::spell(std::string&)»
     if ( hunspell.spell( encodedWord ) )
                                      ^
hunspell.cc:662:38: замечание: candidate is:
In file included from hunspell.cc:22:0:
/usr/include/hunspell/hunspell.hxx:56:7: замечание: int Hunspell::spell(const char*, int*, char**)
   int spell(const char * word, int * info = NULL, char ** root = NULL);
       ^
/usr/include/hunspell/hunspell.hxx:56:7: замечание:   no known conversion for argument 1 from «std::string {aka std::basic_string<char>}» to «const char*»
Makefile:2408: ошибка выполнения рецепта для цели «build/hunspell.o»
make: *** [build/hunspell.o] Ошибка 1
CAEman
 
Posts: 100
Joined: Sat Nov 24, 2012 12:13 pm

PreviousNext

Return to Общий

Who is online

Users browsing this forum: No registered users and 1 guest