>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Странные записи в places.sqlite http://forum.mozilla-russia.org/viewtopic.php?id=79311 |
yup > 17-02-2025 22:32:26 |
Люди добрые, подскажите, кто знает. Решил я немного повысить функциональность окна истории посещений и в процессе своих ковыряний обнаружил в places.sqlite в таблице moz_places странные записи. У них в поле last_visit_date стоит совершенно нормальная (и даже правдоподобная) дата, но при этом в поле visit_count стоит 0. Потом уже, глядя на URL-ы в этих записях, я выяснил, что и браузер в своём окне истории их показывает. И если столбец "Число посещений" сделать видимым, то оказывается, что у всех прочих записей там стоит число, а у этих - пустое место. Вопрос: Является ли наличие подобных записей нормальным или это последствия каких-то сбоев в работе с БД? И если это нормально, то как подобные записи образуются? |
_zt > 18-02-2025 07:38:04 |
yup |
yup > 18-02-2025 11:23:07 |
Нет, я не с закладками разбираюсь, а с историей посещений. Понятно, что таблица moz_places общая для всего, но те ссылки я никогда в закладки не помещал. Это совершенно точно. Пока склоняюсь к мысли, что это последствия зависаний браузера и его последующего убивания через Диспетчер задач. Но в этом предположении слишком много "если" и "может быть". |
Dumby > 18-02-2025 12:35:45 |
yup пишет
Ну, раз загрузки могут образовывать подобные записи, |
_zt > 18-02-2025 14:01:37 |
yup |
yup > 18-02-2025 15:10:39 |
Dumby пишет
А вот это вопрос интересный. У меня же Iceape (Seamonkey), а там загрузки лежат в отдельном файле - downloads.sqlite. И счётчика посещений у них нет. Но для нулевого счётчика у Firefox-овых загрузок хотя бы смысл и механизм понятен - они в historyvisits не пишутся, и frecency для них считать незачем. А тут посещения... _zt пишет
Я вчера вечером выделил время и заново посетил все эти ссылки. Нет, всё честно, никаких перенаправлений. Максимум, "Домен не существует" или "Страница не существует". Но раз в places.sqlite у них записан title, то значит тогда по этому адресу открылась именно страница. Да, и ещё один нюанс: у Seamonkey, в отличие от Firefox, те URL-ы, которые ответили перенаправлением, в базу данных вообще не попадают. Поэтому текущая (сомнительная) гипотеза такая: браузер перед зависанием успел внести запись в moz_places, но не успел в moz_historyvisits. А потом какой-то внутренний процесс (возможно, подсчёт frecency) пересчитал записи в historyvisits и внёс актуальное значение (ноль) в moz_places. Dumby Моя затея с расширением для улучшения окна истории оказалась несколько сложнее, чем представлялось изначально. Похоже, что слишком много собственного кода браузера придётся подменять своим. Если самому с чем-то справиться не удастся, можно за помощью обратиться? Осталось ещё что-то в памяти о XUL-расширениях? |
Dumby > 18-02-2025 17:29:55 |
yup пишет
Обратиться-то можно, но будет ли от этого толк?
Нет такого понятия. Были оверлейные расширения. Были и есть bootstrapped расширения. |
yup > 18-02-2025 19:55:36 |
Dumby пишет
Вот я и спросил - будет ли? Dumby пишет
Не обязательно. Я под него перенёс с полсотни расширений и кнопок CustomButtons от Seamonkey. Процентов 80 из них не потребовали вообще никаких изменений, только новый ID в install.rdf записать. А у большинства из оставшихся 20% - этот же ID добавить в chrome.manifest. А сама программа берётся здесь: https://o.rthost.win/hbl-uxp/index.php? … &order=asc Dumby пишет
Ну так для работы с историей доступ к Интернету не требуется. Я даже places.sqlite подкину, если что. Хотя там вопросы предвидятся типа: "Как вот из этого места кода достучаться до вон той функции?" Dumby пишет
Официально нет. Потому что сначала только такие и были. Потом появились другие - им названия дали, чтобы отличать. А этим так и не удосужились. А как-то же сейчас называть надо. "Оверлейные расширения" тоже ведь не совсем официальное название. Поэтому приходится между собой договариваться. Каждому микросообществу в отдельности. Dumby пишет
А разве bootstrapped в нынешнем FF поддерживаются? Я думал, от всего "проклятого прошлого" давно отреклись в угоду WebExtensions. |
T0PMØ3iLLA > 18-02-2025 21:00:45 |
Скажу более… настройки — Cookies — Управление данными… |
yup > 18-02-2025 21:16:08 |
T0PMØ3iLLA Операция уменьшения ("vacuum") в браузере есть, но, по-моему, она там только вручную запускается. Ну, и минимальный размер у некоторых из этих файлов совсем не маленький. Даже у абсолютно пустых, свежесозданных. (У меня всю жизнь в настройках политика обращения с куками - "удалять по завершении сеанса". А у файла cookies.sqlite размер сейчас полмегабайта. Но это же не значит, что в нём столько хранится. С точки зрения движка SQLite он практически пустой.) |
Dumby > 18-02-2025 23:57:06 |
yup пишет
Откуда же мне знать не видя вопроса, тут не угадаешь.
Фух, скачал 52.9.20250206, развернул, запихал CB и DOMi, можно смотреть. Так вот, система-то оффлайн, но есть прога Wampserver, Открываю вкладку, набираю адрес, страница открывается. Теперь, Ctrl+H, ПКМ —> «Delete» Теперь, ПКМ по этой странице —> «Save Page As…», сохраняю. Кстати, на странице есть ссылка. Это я не к тому, что у тебя они именно так и образовались,
Да, ты всё верно говоришь. Если имеется в виду как разновидность расширения, А если имеется в виду как противопоставление WebExtensions, Ну, таково моё мнение, которое, впрочем, да и вообще, не важно.
Конечно нет. И уже давно. Но засунуть можно. |
yup > 19-02-2025 01:15:18 |
Dumby пишет
А я напишу. Всю историю - от первоначальной задумки до той ситуации, до которой я сейчас "докатился". Но чуть позже - чтобы это отдельным сообщением было. Dumby пишет
Да уж... Ну и где логика (разработчиков)? (На всякий случай: это я сейчас в Iceape сижу, но используемый places.sqlite унаследован от Seamonkey, и записи в нём копились лет 20. А эти "обнулённые" и очень старые нашлись, и совсем свежие, буквально позавчерашние.) Dumby пишет
Ну ладно, это ещё как-то понять можно - фактически страницу не посещали. Но теперь мне надо эту новость обдумать и поизучать ситуацию самому. А пока объясню, почему возник интерес к этим нулям. Я пока пришёл к тому, что для реализации моей идеи придётся самому формировать SQL-ный запрос к БД и самому заполнять окно истории. А выяснить, какой запрос туда уходит от штатного кода, не удалось. Пришлось экспериментировать. Первый заезд был с очевидным условием: visit_count > 0. Записей вернулось в несколько раз больше, чем показывает окно истории. Посмотрел на эти записи, увидел, что у многих стоит hidden = 1. Что это hidden означает, не знаю, но добавил в запрос NOT hidden. Получил чуть-чуть меньше записей, чем в окне истории. Тогда просто сохранил в один текстовый файл URL-ы из моего запроса, в другой - URL-ы из окна истории, и сравнил их. А потом нашёл в БД эти записи и прикинул, чем они отличаются от "нормальных", после чего заменил visit_count > 0 на last_visit_date <> 0. В результате, наконец, получил точное совпадение. Всё. В том смысле, что к этим нулям я прицепился только из дотошности - хочу, чтобы показываемая моим кодом история содержала ровно те же записи, что и в штатном случае. Dumby пишет
Но тут такая ситуация: 1. Название "оверлейные расширения" ссылается на те же самые XUL overlays, что и название "XUL-расширения". 2. Я "за рулём" компьютеров с 70-х годов. И тогда, и в 80-е, и в начале 90-х в программировании широко использовались термины "оверлеи" и "оверлейные программы". Причём эти понятия не имели никакого отношения к UI, а описывали особенности внутреннего устройства самих программ. Dumby пишет
Разве? По-моему, как минимум один файл .XUL должен быть, пусть даже и не меняющий ничего во внешнем виде. Иначе как код расширения запускаться будет? |
T0PMØ3iLLA > 19-02-2025 21:34:47 |
Я про размер не самого файла базы данных, а конкретно про столбец Storage в окне Firefox (как со столбцом кол-ва посещений у истории) — тоже пишет в мегабайтах, хотя у столбца “Cookies” слева показывает значение 0: Выделить код Код:data:image/png;base64,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 Кусты реестра SOFTWARE тоже у мн. пользователей за полсотню метров "растягивались" из-за каких-то несчастных пары значений в Microsoft\Windows NT\CurrentVersion\Perflib\CurrentLanguage (ошибка загрузки счётчиков в perfmon.msc), занявших десятки мегабайт — lodctr /r хоть и исправило данные (соответственно, размер там стал куда более адекватным), но сам куст SOFTWARE так и остался за полсотню метров… А использовать "оптимизаторы реестра" опасно, т.к. фрагментироваться новые данные станут сильнее — знать бы, как это всё перераспределить (дефрагментировать) вручную, оставив ещё разряжённые участки между определёнными подразделами… скрытый текст не совсем уж и проблема, если есть куда перекинуть все данные, знать бы, как вместе с жёсткими и символическими ссылками переместить (и то, если нигде не использовался \\?\Volume{guid}\ конкретно на этот + хорошо бы как с robocopy /COPY:DATSO, /DCOPY:T, хотя, права доступа тоже "от корня" надо соответствующим образом задать заранее, а то этот robocopy сохраняет не «то наследование», которое нужно было) а там потом тупо пересоздать ещё раз тот же раздел с гораздо меньшим размером, затем расширить! Затем с резервного вернуть обратно (с теми же жёсткими и символьными ссылками), и глянуть, насколько в этот раз MFT расширило… Правда, у одного моего 1-терабайтного hdd банальное СОЗДАНИЕ какого-либо раздела внутри расширенного приводит к удалению трёх других, так же располагающихся в расширенном (хотя в нём же и ещё два других находятся, но те при каждой такой попытке остаются на месте)! Причём повторяется у меня такое и на 7-ке, и на 8.1 Embedded, и на 20H2! Только благодаря установщику WinXP получается их ещё раз создавать — вот тут уже либо мне придётся расширить те "неубиваемые" два раздела внутри расширенного до их пределов, либо переносить на третий hdd, сносить всё, да по-новой "шинковать", отказавшись на этот раз от этого глючного ResierFS, из-за которого, скорее всего, винда и не может адекватно определить, где же на самом деле начинается расширенный раздел: в diskmgmt.msc: только с третьего (после него ещё последним идёт primary), т.е. после незанятого пространства первые два определяет как primary, а в diskpart: сразу после пустого незанятого 16МБ пространства первый считает расширенным, т.е. все = logical, и только последний primary! И всё бы ничего, если бы и diskart тоже не повисал бы при попытке создать раздел в той части диска… тут похоже только "хирургическим" путём нужно как-то чинить таблицу разделов… |
Dumby > 19-02-2025 23:57:05 |
T0PMØ3iLLA пишет
Что ещё за «хотя»? Столбец «Cookies» — это количество кук. Оконце ведь называется «Manage Cookies and Site Data», |
yup > Сегодня 03:03:24 |
Ну вот, собрался с силами и попытаюсь описать, в чём состояла затея и до чего я докатился. Есть у браузера один недостаток, который много лет не даёт мне радоваться жизни. Когда я смотрю на окно закладок, я для каждой записи сразу вижу, есть ли в истории посещений отметка, что я там был, и дату посещения. А обратное, увы, невозможно: когда я смотрю на любую запись в окне истории, я никак не могу определить, есть ли у меня закладка с таким URL или нет. Вот это безобразие и хочется устранить. Да чего там делать-то? Желание же самое простое: добавить в таблицу, где история отображается, ещё один столбец, в котором как-нибудь (да хоть просто плюсиком) будет обозначаться наличие посещённой страницы в закладках. И реализация представлялась несложной. Есть XUL окна (chrome://communicator/content/history/history.xul) с этой таблицей, программно добавляем в эту таблицу новый столбец. Невыносимая сложность простоты Трудность внезапно всплыла с запросом. Оказалась, что его просто-напросто нет. Функция, которая получает данные для таблицы, запроса сама не формирует, а нижележащим функциям передаёт в качестве параметра пустую строку (или не пустую, но тогда это то, что в окне истории набрано в строке поиска). А нижележащие функции, которые вызываются, это History API, в котором нет ничего в данном случае полезного. Там можно управлять перечнем запрашиваемых полей, но выбор только из жёстко заданного набора, в котором ничего подходящего для меня нет. Всё ниже, и ниже, и ниже Но History API это всего лишь надстройка над Places API. Сначала Places API обнадёжило: оказалось, что у каждом возвращаемой записи истории есть поле bookmarkIndex. Я обрадовался, решив, что это индекс в таблице moz_bookmarks, и значит, если у записи там стоит осмысленное число, то закладка есть. Но эксперимент показал, что для всех записей из моей истории там возвращается -1, хотя многие из них в закладках точно имеются. А критический взгляд на описание этого поля в документации показал, что описание это неоднозначное, и прочитать его можно по-разному - в зависимости от того, как хочешь его прочитать. Затем из документации выяснил, что поле itemId у результатов это тоже индекс в закладках. Правда, для моих записей в нём тоже всегда -1 стоит. И да, его описание тоже можно прочитать по-разному, было бы желание. Прошёл отладчиком дальше (в смысле - ниже) и добрался в конце концов до вызова Сишной функции, но формирования запроса, который можно было бы модифицировать, так и не встретил. Мы пойдём другим путём Параллельно с попытками что-то сделать через высокоуровневое API я рассматривал вариант полностью самому задать SQL-ный запрос, напрямую отправить его в БД, и потом скормить таблице полученный результат. Сначала подобрал запрос к moz_places, дающий такой же результат, как и штатный код (именно тогда и возник вопрос о нулях). Что дальше, Дава? И теперь я не могу решить, куда дальше двигать. Для ковыряния в истории SQL-запросами в Places API есть парочка функций, унаследованных от Storage API:
executeAsync(). Возвращает (в моём эксперименте) примерно 15 записей за раз. То есть, её тоже нужно крутить в цикле, но, по крайней мере, браузер не заклинит. Зато есть опасение, что таблица на глазах у пользователя будет заполняться рывками. Чтобы этого избежать, придётся куда-то перекладывать полученные порции данных, и только после полного получения всего приступать к заполнению таблицы. А последнее предложение в п.2 неплохо сочетается с двумя нюансами, которые тоже хочется использовать:
Сейчас заполнение таблицы реализовано элементарно просто (см. функцию load() в chrome://communicator/content/history/tree.xml). Очень хочется преобразовать то, что возвращает executeAsync(), в то, что можно скормить PlacesTreeView внутри load(), и таким образом обойтись только навешиванием своей простейшей надстройки над getCellText() из chrome://communicator/content/history/treeView.js Вот над этим сейчас голову и ломаю (по мере наличия времени). А всё так хорошо начиналось... |