1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | import theTranslator from './uiLib/Translator.js'; |
26 | import theTravelNotesData from '../data/TravelNotesData.js'; |
27 | import GpxParser from './lib/GpxParser.js'; |
28 | import theErrorsUI from '../uis/errorsUI/ErrorsUI.js'; |
29 | import theMouseUI from '../uis/mouseUI/MouseUI.js'; |
30 | import theMapLayersManager from './MapLayersManager.js'; |
31 | import theRouteEditor from './RouteEditor.js'; |
32 | import FileCompactor from './lib/FileCompactor.js'; |
33 | import theEventDispatcher from './lib/EventDispatcher.js'; |
34 | import theProfileDialogsManager from './ProfileDialogsManager.js'; |
35 | import Zoomer from './Zoomer.js'; |
36 | import Travel from '../data/Travel.js'; |
37 | |
38 | import { INVALID_OBJ_ID, ROUTE_EDITION_STATUS, SAVE_STATUS } from '../main/Constants.js'; |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | class FileLoader { |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | #display ( ) { |
53 | |
54 | |
55 | theEventDispatcher.dispatch ( 'removeallobjects' ); |
56 | |
57 | |
58 | document.title = |
59 | 'Travel & Notes' + |
60 | ( '' === theTravelNotesData.travel.name ? '' : ' - ' + theTravelNotesData.travel.name ); |
61 | |
62 | |
63 | const routesIterator = theTravelNotesData.travel.routes.iterator; |
64 | while ( ! routesIterator.done ) { |
65 | if ( ROUTE_EDITION_STATUS.notEdited === routesIterator.value.editionStatus ) { |
66 | theEventDispatcher.dispatch ( |
67 | 'routeupdated', |
68 | { |
69 | removedRouteObjId : INVALID_OBJ_ID, |
70 | addedRouteObjId : routesIterator.value.objId |
71 | } |
72 | ); |
73 | } |
74 | } |
75 | |
76 | |
77 | if ( INVALID_OBJ_ID !== theTravelNotesData.editedRouteObjId ) { |
78 | theEventDispatcher.dispatch ( |
79 | 'routeupdated', |
80 | { |
81 | removedRouteObjId : INVALID_OBJ_ID, |
82 | addedRouteObjId : theTravelNotesData.travel.editedRoute.objId |
83 | } |
84 | ); |
85 | } |
86 | |
87 | |
88 | const notesIterator = theTravelNotesData.travel.notes.iterator; |
89 | while ( ! notesIterator.done ) { |
90 | theEventDispatcher.dispatch ( |
91 | 'noteupdated', |
92 | { |
93 | removedNoteObjId : INVALID_OBJ_ID, |
94 | addedNoteObjId : notesIterator.value.objId |
95 | } |
96 | ); |
97 | } |
98 | theEventDispatcher.dispatch ( 'updatetravelnotes' ); |
99 | |
100 | |
101 | new Zoomer ( ).zoomToTravel ( ); |
102 | |
103 | |
104 | theMapLayersManager.setMapLayer ( theTravelNotesData.travel.layerName ); |
105 | |
106 | |
107 | if ( INVALID_OBJ_ID !== theTravelNotesData.editedRouteObjId ) { |
108 | const providerName = theTravelNotesData.travel.editedRoute.itinerary.provider; |
109 | if ( |
110 | ( '' !== providerName ) |
111 | && |
112 | ! theTravelNotesData.providers.get ( providerName.toLowerCase ( ) ) |
113 | ) { |
114 | theErrorsUI.showError ( |
115 | theTranslator.getText ( |
116 | 'FileLoader - Not possible to select as provider', |
117 | { provider : providerName } |
118 | ) |
119 | ); |
120 | } |
121 | else { |
122 | |
123 | |
124 | theEventDispatcher.dispatch ( 'setprovider', { provider : providerName } ); |
125 | |
126 | const transitMode = theTravelNotesData.travel.editedRoute.itinerary.transitMode; |
127 | if ( '' !== transitMode ) { |
128 | theEventDispatcher.dispatch ( 'settransitmode', { transitMode : transitMode } ); |
129 | } |
130 | } |
131 | } |
132 | |
133 | theRouteEditor.chainRoutes ( ); |
134 | |
135 | |
136 | theEventDispatcher.dispatch ( 'updatetravelproperties' ); |
137 | theEventDispatcher.dispatch ( 'updateroadbook' ); |
138 | } |
139 | |
140 | |
141 | |
142 | |
143 | |
144 | constructor ( ) { |
145 | Object.freeze ( this ); |
146 | } |
147 | |
148 | |
149 | |
150 | |
151 | |
152 | |
153 | openLocalGpxFile ( fileContent ) { |
154 | |
155 | |
156 | theProfileDialogsManager.deleteAllProfiles ( ); |
157 | |
158 | |
159 | theTravelNotesData.travel.jsonObject = new GpxParser ( ).parse ( fileContent ).jsonObject; |
160 | theTravelNotesData.editedRouteObjId = INVALID_OBJ_ID; |
161 | |
162 | |
163 | this.#display ( ); |
164 | |
165 | |
166 | theMouseUI.saveStatus = SAVE_STATUS.saved; |
167 | |
168 | } |
169 | |
170 | |
171 | |
172 | |
173 | |
174 | |
175 | openLocalTrvFile ( fileContent ) { |
176 | |
177 | |
178 | theProfileDialogsManager.deleteAllProfiles ( ); |
179 | |
180 | const travelJsonObject = JSON.parse ( fileContent ); |
181 | |
182 | |
183 | new FileCompactor ( ).decompress ( travelJsonObject ); |
184 | theTravelNotesData.travel.jsonObject = travelJsonObject; |
185 | theTravelNotesData.editedRouteObjId = INVALID_OBJ_ID; |
186 | theTravelNotesData.travel.routes.forEach ( |
187 | route => { |
188 | if ( ROUTE_EDITION_STATUS.notEdited !== route.editionStatus ) { |
189 | theTravelNotesData.editedRouteObjId = route.objId; |
190 | } |
191 | } |
192 | ); |
193 | |
194 | |
195 | this.#display ( ); |
196 | |
197 | |
198 | theMouseUI.saveStatus = SAVE_STATUS.saved; |
199 | } |
200 | |
201 | |
202 | |
203 | |
204 | |
205 | |
206 | #mergeTravel ( mergedTravel ) { |
207 | |
208 | |
209 | const routesIterator = mergedTravel.routes.iterator; |
210 | while ( ! routesIterator.done ) { |
211 | theTravelNotesData.travel.routes.add ( routesIterator.value ); |
212 | } |
213 | |
214 | |
215 | const notesIterator = mergedTravel.notes.iterator; |
216 | while ( ! notesIterator.done ) { |
217 | theTravelNotesData.travel.notes.add ( notesIterator.value ); |
218 | } |
219 | |
220 | |
221 | this.#display ( ); |
222 | |
223 | |
224 | theMouseUI.saveStatus = SAVE_STATUS.modified; |
225 | } |
226 | |
227 | |
228 | |
229 | |
230 | |
231 | |
232 | mergeLocalGpxFile ( fileContent ) { |
233 | this.#mergeTravel ( new GpxParser ( ).parse ( fileContent ) ); |
234 | } |
235 | |
236 | |
237 | |
238 | |
239 | |
240 | |
241 | mergeLocalTrvFile ( fileContent ) { |
242 | |
243 | const travelJsonObject = JSON.parse ( fileContent ); |
244 | |
245 | |
246 | new FileCompactor ( ).decompress ( travelJsonObject ); |
247 | const mergedTravel = new Travel ( ); |
248 | mergedTravel.jsonObject = travelJsonObject; |
249 | |
250 | this.#mergeTravel ( mergedTravel ); |
251 | } |
252 | } |
253 | |
254 | export default FileLoader; |
255 | |
256 | |
257 | |