View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0002333SAS.ПланетаРефакторингpublic06-02-2014 08:2321-12-2019 09:14
Reporterzed 
Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
StatusconfirmedResolutionopen 
PlatformOSOS Version
Product Version131111 
Target Version2012xxFixed in Version 
Summary0002333: Добавить нотифаеры в качалку видимой области
DescriptionСейчас качалка никак не реагирует на смену версии/url и типа хранилища, а реагировать нужно (делать хард ресет и перезапускать закачку).

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

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

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

-  Notes
(0013740)
vdemidov (manager)
06-02-2014 12:49

Может не стоит вывешивать ITileStorageChangeble наружу, а просто подписываться на изменения в тайлохранилище, но перезапускать загрузку только если это обновление всего тайлохранилища, а не конкретного тайла - там есть способ их различать.
(0013741)
zed (manager)
06-02-2014 13:16

> а просто подписываться на изменения в тайлохранилище
Ты про какой конкретно метод и где?
(0013742)
vdemidov (manager)
06-02-2014 13:25

у тайлохранилища есть нотифаер, который уведомляет о всех изменениях в том числе и о полном обновлении.
(0013743)
zed (manager)
06-02-2014 13:45

Ты про INotifierTilePyramidUpdate? По крайней мере других нотифаеров там нету. И на что там подписываться, чтобы словить момент переключения типа хранилища с тайлового на Беркли (к примеру)?
(0013744)
vdemidov (manager)
06-02-2014 13:50

Да. Просто на AddListener и ловить событие с nil сообщением, а все остальные игнорировать.
(0013745)
zed (manager)
06-02-2014 14:18

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

И насколько я понял по исходникам, чтобы прилетел nil, должен дёргаться метод TileFullUpdateNotify, который никогда и никем на самом деле не дёргается. Плюс, есть косяк из-за которого может внезапно прилететь nil не там где надо.
(0013747)
vdemidov (manager)
06-02-2014 14:25

Мда. Похоже я это только планировал сделать. Ну тогда вперед. Возможно так действительно будет лучше.
(0013748)
zed (manager)
06-02-2014 14:30

Ок, а что по поводу версии и url (aka DefUrlBase)?
(0013749)
vdemidov (manager)
06-02-2014 14:35

Ну там же есть конфиг. Добавь подписку на его изменения да и ладно.
(0013750)
zed (manager)
06-02-2014 17:35

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

Кстати, по этой же подписке прилетает и изменение типа хранилища. Короче, глючит со всех сторон :(
(0013751)
vdemidov (manager)
06-02-2014 18:21

Пожалуйста не трогай ничего связанного с версиями,а то мне сложно мержить будет то что я уже наковырял.
(0013754)
vdemidov (manager)
07-02-2014 06:28

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

>Кстати, по этой же подписке прилетает и изменение типа хранилища.
Это временно. После переделки версий и добавления в них хэшей перестанет.
(0013757)
zed (manager)
08-02-2014 14:35

> Если сделаешь ITileStorageChangeble
Как его лучше делать?
(0013758)
vdemidov (manager)
09-02-2014 16:55

Если б я знал как лучше...
(0013858)
vdemidov (manager)
24-02-2014 16:13

В общем нужно решать, или делать прокси для INotifierTilePyramidUpdate и возвращать его из TTileStorageOfMapType. Или делать ITileStorageChangeble и при его изменении все заинтересованные должны будут переподписываться. У этого подхода есть преимущество - пропадает один захват примитива синхронизации при каждой операции с тайлохранилищем, но появляется риск, что старый экземпляр объекта-тайлохранилища будет жить пока не закончится фоновая операция, а для операций склейки/экспорта это может быть весьма долго.
Второй вариант мне нравится больше, так что скорее всего программе предстоит еще одна массовая правка.
(0016456)
vdemidov (manager)
18-09-2015 13:58

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

- Users who viewed this issue
User List Anonymous (2402x), vdemidov (5x), ygorigor (1x), Papazol (1x), Garl (1x), gma (1x), zed (1x)
Total Views 2412
Last View 22-09-2020 00:36

- 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 => 2012xx



Copyright © 2007 - 2020 SAS.Planet Team