View Issue Details

IDProjectCategoryView StatusLast Update
0002333SAS.ПланетаРефакторинг / Refactoringpublic30-12-2021 08:59
Reporterzed Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status confirmedResolutionopen 
Product Version131111 
Target Version42xxxx 
Summary0002333: Добавить нотифаеры в качалку видимой области
DescriptionСейчас качалка никак не реагирует на смену версии/url и типа хранилища, а реагировать нужно (делать хард ресет и перезапускать закачку).

Нужно добавить нотифаер в TTileStorageOfMapType и расширить интерфейс до ITileStorageChangeble. Фактически, сейчас это хранилище изменяемое, а не простое ITileStorage, но оно никого не уведомляет о своих изменениях и шифруется под статический сторедж.

По поводу нотифаера о смене версии и url нужно смотреть дополнительно, где их там лучше сделать.
TagsNo tags attached.

Relationships

related to 0002387 closedvdemidov Закачка тайлов взамен удалённых 
child of 0001255 confirmed Добавить режим "Интернет без записи в кэш".  

Activities

vdemidov

06-02-2014 12:49

manager   ~0013740

Может не стоит вывешивать ITileStorageChangeble наружу, а просто подписываться на изменения в тайлохранилище, но перезапускать загрузку только если это обновление всего тайлохранилища, а не конкретного тайла - там есть способ их различать.

zed

06-02-2014 13:16

manager   ~0013741

> а просто подписываться на изменения в тайлохранилище
Ты про какой конкретно метод и где?

vdemidov

06-02-2014 13:25

manager   ~0013742

у тайлохранилища есть нотифаер, который уведомляет о всех изменениях в том числе и о полном обновлении.

zed

06-02-2014 13:45

manager   ~0013743

Ты про INotifierTilePyramidUpdate? По крайней мере других нотифаеров там нету. И на что там подписываться, чтобы словить момент переключения типа хранилища с тайлового на Беркли (к примеру)?

vdemidov

06-02-2014 13:50

manager   ~0013744

Да. Просто на AddListener и ловить событие с nil сообщением, а все остальные игнорировать.

zed

06-02-2014 14:18

manager   ~0013745

Во-первых, это очень неочевидный способ - поди-ка догадайся сходу, что нужно ловить nil у тайлового нотифаера. Т.е. это можно рассматривать как недокументированную возможность (причём, теоретическую - см. далее). А во-вторых, при смене хранилища не прилетает вообще никаких сообщений. Сообщения прилетают только при движении карты (какие-то ITileKey).

zed

06-02-2014 14:25

manager   ~0013746

И насколько я понял по исходникам, чтобы прилетел nil, должен дёргаться метод TileFullUpdateNotify, который никогда и никем на самом деле не дёргается. Плюс, есть косяк из-за которого может внезапно прилететь nil не там где надо.

vdemidov

06-02-2014 14:25

manager   ~0013747

Мда. Похоже я это только планировал сделать. Ну тогда вперед. Возможно так действительно будет лучше.

zed

06-02-2014 14:30

manager   ~0013748

Ок, а что по поводу версии и url (aka DefUrlBase)?

vdemidov

06-02-2014 14:35

manager   ~0013749

Ну там же есть конфиг. Добавь подписку на его изменения да и ладно.

zed

06-02-2014 17:35

manager   ~0013750

Подписался на изменения VersionConfig и качалка стала реагировать, а вот "отображалка" тупит. Видно как счётчик загруженных тайлов крутится и тайлы загружаются, но на экране изменения не отображаются...

Кстати, по этой же подписке прилетает и изменение типа хранилища. Короче, глючит со всех сторон :(

vdemidov

06-02-2014 18:21

manager   ~0013751

Пожалуйста не трогай ничего связанного с версиями,а то мне сложно мержить будет то что я уже наковырял.

vdemidov

07-02-2014 06:28

manager   ~0013754

>Видно как счётчик загруженных тайлов крутится и тайлы загружаются, но на экране изменения не отображаются...
Так и должно быть. Все дело именно в INotifierTilePyramidUpdate который при смене тайлохранилища не уведомляет ничего подписчикам потому что у нового создается новый экземпляр. Я вспомнил что это не доделал. Если сделаешь ITileStorageChangeble и в нужных местах поцепишь на него листенеры то эта проблема решиться.

>Кстати, по этой же подписке прилетает и изменение типа хранилища.
Это временно. После переделки версий и добавления в них хэшей перестанет.

zed

08-02-2014 14:35

manager   ~0013757

> Если сделаешь ITileStorageChangeble
Как его лучше делать?

vdemidov

09-02-2014 16:55

manager   ~0013758

Если б я знал как лучше...

vdemidov

24-02-2014 16:13

manager   ~0013858

В общем нужно решать, или делать прокси для INotifierTilePyramidUpdate и возвращать его из TTileStorageOfMapType. Или делать ITileStorageChangeble и при его изменении все заинтересованные должны будут переподписываться. У этого подхода есть преимущество - пропадает один захват примитива синхронизации при каждой операции с тайлохранилищем, но появляется риск, что старый экземпляр объекта-тайлохранилища будет жить пока не закончится фоновая операция, а для операций склейки/экспорта это может быть весьма долго.
Второй вариант мне нравится больше, так что скорее всего программе предстоит еще одна массовая правка.

vdemidov

18-09-2015 13:58

manager   ~0016456

Кстати, TTileStorageOfMapType уже довольно давно уведомляет о полном изменении тайлохранилища и можно было бы на это подписываться. И как я понимаю нужно еще за настройками генерации урлов для карты следить.

Issue History

Date Modified Username Field Change
06-02-2014 08:23 zed New Issue
06-02-2014 12:49 vdemidov Note Added: 0013740
06-02-2014 13:16 zed Note Added: 0013741
06-02-2014 13:25 vdemidov Note Added: 0013742
06-02-2014 13:45 zed Note Added: 0013743
06-02-2014 13:50 vdemidov Note Added: 0013744
06-02-2014 14:18 zed Note Added: 0013745
06-02-2014 14:25 zed Note Added: 0013746
06-02-2014 14:25 vdemidov Note Added: 0013747
06-02-2014 14:30 zed Note Added: 0013748
06-02-2014 14:35 vdemidov Note Added: 0013749
06-02-2014 17:35 zed Note Added: 0013750
06-02-2014 18:21 vdemidov Note Added: 0013751
07-02-2014 06:28 vdemidov Note Added: 0013754
08-02-2014 14:33 zed Status new => confirmed
08-02-2014 14:33 zed Target Version => 140303
08-02-2014 14:35 zed Note Added: 0013757
09-02-2014 16:55 vdemidov Note Added: 0013758
17-02-2014 10:49 vdemidov Relationship added child of 0001255
24-02-2014 16:13 vdemidov Note Added: 0013858
03-03-2014 08:47 vdemidov Target Version 140303 => 140404
19-03-2014 08:03 vdemidov Target Version 140404 => 141111
22-03-2014 11:15 zed Relationship added related to 0002387
26-03-2014 04:19 Djon 1 File Added: 100k--m53-003.gif
26-03-2014 08:21 zed File Deleted: 100k--m53-003.gif
23-10-2014 09:04 vdemidov Target Version 141111 => 150915
21-01-2015 10:39 vdemidov Target Version 150915 => 151010
25-01-2015 20:07 vdemidov Target Version 151010 => 150915
23-02-2015 20:27 vdemidov Target Version 150915 => 151010
18-09-2015 13:58 vdemidov Note Added: 0016456
10-10-2015 15:33 vdemidov Target Version 151010 => 151111
06-11-2015 08:20 vdemidov Target Version 151111 => 191221
21-12-2019 09:14 zed Target Version 191221 => 211230
30-12-2021 08:59 zed Target Version 211230 => 42xxxx
08-08-2025 13:25 zed Category Рефакторинг => Рефакторинг / Refactoring