source: subversion/applications/editors/potlatch/error.as

Last change on this file was 19965, checked in by richard, 10 years ago

bunch of join/unjoin fixes

  • Property svn:executable set to *
File size: 9.3 KB
Line 
1
2        // =====================================================================
3        // Error handling
4
5        function handleError(code,msg,result) {
6                if (code==-2 && msg.indexOf('allocate memory')>-1) { code=-1; }
7                if (msg.indexOf('changeset')>-1) { _root.changeset=null; msg+=iText('newchangeset'); }  // we really need a dedicated error code for this
8                if (msg.indexOf('logged')>-1) { loginDialogue(); return; }
9                switch (code) {
10                        case -1:        errorDialogueAbortUpload(msg,150); break;
11                        case -2:        errorDialogueAbortUpload(msg+iText('emailauthor'),200); break;
12                        case -3:        resolveConflict(msg,result); break;             // version conflict
13                        case -4:        deleteObject(msg,result[0]); break;             // object not found
14                        case -5:        break;                                                                  // not executed due to previous error
15                }
16        }
17
18        function errorDialogueAbortUpload(t,h) {
19                abortUpload();
20                errorDialogue(t,h);
21        }
22        function errorDialogue(t,h) {
23                _root.windows.attachMovie("modal","error",++windowdepth);
24                _root.windows.error.init(350,h,new Array(iText('ok')),null);
25                _root.windows.error.box.createTextField("prompt",2,7,9,325,h-40);
26                writeText(_root.windows.error.box.prompt,t);
27                _root.windows.error.box.prompt.selectable=true;
28        }
29
30        function handleWarning() {
31                abortUpload();
32                _root.windows.attachMovie("modal","error",++windowdepth);
33                _root.windows.error.init(275,130,new Array(iText('cancel'),iText('retry')),handleWarningAction);
34                _root.windows.error.box.createTextField("prompt",2,7,9,250,100);
35                _root.uploading=false;
36                if (writeError) {
37                        writeText(_root.windows.error.box.prompt,iText('error_connectionfailed'));
38                } else {
39                        writeText(_root.windows.error.box.prompt,iText('error_readfailed'));
40                }
41        };
42
43        function handleWarningAction(choice) {
44                _root.panel.i_warning._visible=false;
45                _root.writesrequested=0;
46                _root.waysrequested=_root.waysreceived=_root.whichrequested=_root.whichreceived=0;
47                var retry=(choice==iText('retry'));
48                if (writeError) {
49                        // loop through all ways which are uploading, and reupload
50                        if (retry) { establishConnections(); }
51                        for (var q in _root.nodes) {
52                                if (_root.nodes[q].uploading) {
53                                        _root.nodes[q].uploading=false;
54                                        _root.nodes[q].clean=false;
55                                }
56                        }
57                        for (var q in _root.map.ways) {
58                                if (_root.map.ways[q].uploading) {
59                                        _root.map.ways[q].uploading=false;
60                                        _root.map.ways[q].clean=false;
61                                        if (!_root.sandbox && retry) { _root.map.ways[q].upload(); }
62                                }
63                        }
64                        for (var q in _root.map.relations) {
65                                if (_root.map.relations[q].uploading) {
66                                        _root.map.relations[q].uploading=false;
67                                        _root.map.relations[q].clean=false;
68                                        if (!_root.sandbox && retry) { _root.map.relations[q].upload(); }
69                                }
70                        }
71                        for (var q in _root.map.pois) {
72                                if (_root.map.pois[q].uploading) {
73                                        _root.map.pois[q].uploading=false;
74                                        _root.map.pois[q].clean=false;
75                                        if (!_root.sandbox && retry) { _root.map.pois[q].upload(); }
76                                }
77                        }
78                        if (_root.sandbox && retry) { prepareUpload(); }
79                }
80                if (readError) { 
81                        bigedge_l=bigedge_b= 999999;
82                        bigedge_r=bigedge_t=-999999;
83                        whichWays();
84                }
85                writeError=false; readError=false;
86        };
87
88        // Delete object from Potlatch if server reports it doesn't exist
89
90        function deleteObject(type,id) {
91                abortUpload();
92                setAdvice(true,iText('advice_conflict'));
93                switch (type) {
94                        case 'way':
95                                delete _root.waystodelete[id];
96                                if (_root.map.ways[id]) {
97                                        var w=_root.map.ways[id];
98                                        w.removeNodeIndex();
99                                        memberDeleted('Way', id);
100                                        if (id==wayselected) { stopDrawing(); deselectAll(); }
101                                        removeMovieClip(_root.map.areas[id]);
102                                        removeMovieClip(w);
103                                }
104                                break;
105                        case 'relation':
106                                if (_root.map.relations[id]) {
107                                        var mems=_root.map.relations[id].members;
108                                        for (var i in mems) { var r=findLinkedHash(mems[i][0],mems[i][1]); delete r[id]; }
109                                        removeMovieClip(_root.map.relations[id]);
110                                }
111                                break;
112                        case 'node':
113                                delete _root.poistodelete[id];
114                                if (_root.map.pois[id]) {
115                                        if (id==_poiselected) { deselectAll(); }
116                                        removeMovieClip(_root.map.pois[id]);
117                                }
118                                if (_root.nodes[id]) { 
119                                        _root.nodes[id].unsetPosition();
120                                        var w=_root.nodes[id].ways;
121                                        for (var i in w) {
122                                                var s=_root.map.ways[i]; delete s.deletednodes[id];
123                                                for (var q=_root.map.ways[i].path.length-1; q>=0; q--) {
124                                                        _root.map.ways[i].path.splice(q,1);
125                                                }
126                                                _root.map.ways[i].redraw();
127                                                delete _root.nodes[id];
128                                        }
129                                }
130                                break;
131                }
132        }
133
134        // =====================================================================
135        // Login management
136       
137        function loginDialogue() {
138                _root.windows.attachMovie("modal","login",++windowdepth);
139                _root.windows.login.init(300,140,new Array(iText('cancel'),iText('retry')),retryLogin); 
140                var box=_root.windows.login.box;
141               
142                box.createTextField("title",10,7,7,280,20);
143                box.title.text = iText("login_title");
144                with (box.title) { setTextFormat(boldText); selectable=false; type='dynamic'; }
145                adjustTextField(box.title);
146
147                box.createTextField('prompt',11, 8,33,280,40);
148                with (box.prompt) { text=iText('login_retry'); setTextFormat(plainSmall); selectable=false; }
149                adjustTextField(box.prompt);
150
151                box.createTextField('uidt',12, 8,63,160,20);
152                with (box.uidt) { text=iText('login_uid'); setTextFormat(plainSmall); selectable=false; }
153                adjustTextField(box.uidt); var r=box.uidt.textWidth+25;
154                box.createTextField('uidi',13,r,63,120,17);
155                box.uidi.setNewTextFormat(plainSmall); box.uidi.type='input';
156                box.uidi.text='';
157                box.uidi.background=true; box.uidi.backgroundColor=0xDDDDDD;
158                box.uidi.border=true; box.uidi.borderColor=0xFFFFFF;
159
160                box.createTextField('pwdt',14, 8,83,160,20);
161                with (box.pwdt) { text=iText('login_pwd'); setTextFormat(plainSmall); selectable=false; }
162                adjustTextField(box.pwdt);
163                box.createTextField('pwdi',15,r,83,120,17);
164                box.pwdi.setNewTextFormat(plainSmall); box.pwdi.type='input';
165                box.pwdi.text='';
166                box.pwdi.background=true; box.pwdi.backgroundColor=0xDDDDDD;
167                box.pwdi.border=true; box.pwdi.borderColor=0xFFFFFF;
168                box.pwdi.password=true;
169        }
170       
171        function retryLogin(choice) {
172                if (choice==iText('retry')) {
173                        _root.usertoken=_root.windows.login.box.uidi.text+":"+_root.windows.login.box.pwdi.text;
174                }
175                _root.changeset=null;
176                _root.uploading=false;
177                _root.windows.login.remove();
178                _root.windows.upload.remove();
179                _root.windows.pleasewait.remove();
180                if (!_root.sandbox) { _root.changecomment=''; startChangeset(true); }
181                writeError=true; handleWarningAction(choice);
182        }
183
184        // =====================================================================
185        // Conflict management
186
187        function resolveConflict(rootobj,conflictobj) {
188                //      rootobj is         [root object, id]
189                //      conflictobj is [conflicting object, id, version]
190                _root.croot=rootobj; _root.cconflict=conflictobj;               // _root. so we can access them from the "Ok" function
191                var t1,t2; var id=rootobj[1];
192
193                abortUpload();
194                switch (rootobj[0]) {
195                        case 'way':             var n=getName(_root.map.ways[id].attr,waynames); if (n) { n=" ("+n+")"; }
196                                                        t1=iText("conflict_waychanged",id,n);
197                                                        t2=iText("conflict_visitway"); break;
198                        case 'node':    var n=getName(_root.map.pois[id].attr,nodenames); if (n) { n=" ("+n+")"; }
199                                                        t1=iText("conflict_poichanged",id,n);
200                                                        t2=iText("conflict_visitpoi"); break;
201                        case 'relation':var n=_root.map.relations[id].verboseText(); if (n) { n=" ("+n+")"; }
202                                                        t1=iText("conflict_relchanged",id,n);
203                                                        t2=""; break;
204                }
205                _root.windows.attachMovie("modal","resolve",++windowdepth);
206                _root.windows.resolve.init(300,150,new Array('Ok'),function() { handleConflictAction(_root.windows.resolve.box.fixoption.selected); });
207                var box=_root.windows.resolve.box;
208
209                box.createTextField("prompt1",2,7,9,282,200);
210                writeText(box.prompt1,t1); var t=box.prompt1.textHeight;
211
212                box.attachMovie("radio","fixoption",3);
213                box.fixoption.addButton(10,t+22,iText('conflict_download'));
214                box.fixoption.addButton(10,t+40,iText('conflict_overwrite'));
215                box.fixoption.select(1);
216
217                if (t2) {
218                        box.createTextField("prompt2",4,7,t+60,282,20);
219                        writeText(box.prompt2,t2);
220                }
221        }
222       
223        function handleConflictAction(choice) {
224                var tx,ty;
225                var ctype=_root.croot[0]; var cid=_root.croot[1];
226                if              (ctype=='way'  && _root.map.ways[cid]) { preway=cid;  tx=_root.map.ways[cid].path[0].x; ty=_root.map.ways[cid].path[0].y; }
227                else if (ctype=='node' && _root.map.pois[cid]) { prenode=cid; tx=_root.nodes[cid].x; ty=_root.nodes[cid].y; }
228
229                if (choice==1) { deselectAll(); deleteObject(ctype,cid); }      // downloading new version, so delete old one from Potlatch
230                if (tx && ty && (tx<long2coord(_root.edge_l) || tx>long2coord(_root.edge_r) || ty<lat2coord(_root.edge_t) || ty>lat2coord(_root.edge_b))) {
231                        updateCoords(tx,ty);
232                        redrawBackground();
233                }
234
235                if (choice==1) {
236                        // download new (more up-to-date) version and select it
237                        whichWays(true);
238                } else {
239                        // select problem object
240                        if              (ctype=='way' ) { _root.map.ways[cid].select(); }
241                        else if (ctype=='node') { _root.map.pois[cid].select(); }
242                        // change version number
243                        var rtype=_root.cconflict[0];
244                        var rid  =_root.cconflict[1];
245                        var v    =_root.cconflict[2];
246                        switch (ctype+","+_root.cconflict[0]) {
247                                case 'way,way':                         _root.map.ways[cid].version=v; _root.map.ways[cid].clean=false; break;
248                                case 'way,node':                        _root.nodes[rid].version=v; _root.nodes[rid].markDirty(); _root.map.ways[cid].clean=false; break;
249                                case 'node,node':                       _root.nodes[cid].version=v; _root.nodes[cid].markDirty(); _root.map.pois[cid].clean=false; break;
250                                case 'relation,relation':       _root.map.relations[cid].version=v; _root.map.relations[cid].clean=false; break;
251                        }
252                }
253        }
Note: See TracBrowser for help on using the repository browser.