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

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

yay, I found the "negative ID in putway" bug

  • Property svn:executable set to *
File size: 7.2 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                switch (code) {
8                        case -1:        errorDialogue(msg,150); break;
9                        case -2:        errorDialogue(msg+iText("\n\nPlease e-mail richard\@systemeD.net with a bug report, saying what you were doing at the time.",'emailauthor'),200); break;
10                        case -3:        resolveConflict(msg,result); break;             // version conflict
11                        case -4:        deleteObject(msg,result[0]); break;             // object not found
12                        case -5:        break;                                                                  // not executed due to previous error
13                }
14        }
15
16        function errorDialogue(t,h) {
17                abortUpload();
18                _root.windows.attachMovie("modal","error",++windowdepth);
19                _root.windows.error.init(350,h,new Array(iText('Ok','ok')),null);
20                _root.windows.error.box.createTextField("prompt",2,7,9,325,h-30);
21                writeText(_root.windows.error.box.prompt,t);
22                _root.windows.error.box.prompt.selectable=true;
23        }
24
25        function handleWarning() {
26                abortUpload();
27                _root.windows.attachMovie("modal","error",++windowdepth);
28                _root.windows.error.init(275,130,new Array(iText('Retry','retry'),iText('Cancel','cancel')),handleWarningAction);
29                _root.windows.error.box.createTextField("prompt",2,7,9,250,100);
30        _root.uploading=false;
31                if (writeError) {
32                        writeText(_root.windows.error.box.prompt,iText("Sorry - the connection to the OpenStreetMap server failed. Any recent changes have not been saved.\n\nWould you like to try again?",'error_connectionfailed'));
33                } else {
34                        writeText(_root.windows.error.box.prompt,iText("Sorry - the OpenStreetMap server didn't respond when asked for data.\n\nWould you like to try again?",'error_readfailed'));
35                }
36        };
37
38        function handleWarningAction(choice) {
39                _root.panel.i_warning._visible=false;
40                _root.writesrequested=0;
41                _root.waysrequested=_root.waysreceived=_root.whichrequested=_root.whichreceived=0;
42        var retry=(choice==iText('Retry','retry'));
43                if (writeError) {
44                        // loop through all ways which are uploading, and reupload
45                        if (retry) { establishConnections(); }
46                        for (var q in _root.map.ways) {
47                                if (_root.map.ways[q].uploading) {
48                                        _root.map.ways[q].uploading=false;
49                                        _root.map.ways[q].clean=false;
50                                        var z=_root.map.ways[q].path; for (var i in z) { z[i].uploading=false; }
51                                        if (!_root.sandbox && retry) { _root.map.ways[q].upload(); }
52                                }
53                        }
54                        for (var q in _root.map.relations) {
55                                if (_root.map.relations[q].uploading) {
56                                        _root.map.relations[q].uploading=false;
57                                        _root.map.relations[q].clean=false;
58                                        if (!_root.sandbox && retry) { _root.map.relations[q].upload(); }
59                                }
60                        }
61                        for (var q in _root.map.pois) {
62                                if (_root.map.pois[q].uploading) {
63                                        _root.map.pois[q].uploading=false;
64                                        _root.map.pois[q].clean=false;
65                                        if (!_root.sandbox && retry) { _root.map.pois[q].upload(); }
66                                }
67                        }
68                        if (_root.sandbox && retry) { prepareUpload(); }
69                }
70                if (readError) { 
71                        bigedge_l=bigedge_b= 999999;
72                        bigedge_r=bigedge_t=-999999;
73                        whichWays();
74                }
75                writeError=false; readError=false;
76        };
77
78        // Delete object from Potlatch if server reports it doesn't exist
79
80        function deleteObject(type,id) {
81                switch (type) {
82                        case 'way':
83                                if (_root.map.ways[id]) {
84                                        var w=_root.map.ways[id];
85                                        w.removeNodeIndex();
86                                        memberDeleted('Way', id);
87                                        if (id==wayselected) { stopDrawing(); deselectAll(); }
88                                        removeMovieClip(_root.map.areas[id]);
89                                        removeMovieClip(w);
90                                }
91                                break;
92                        case 'relation':
93                                if (_root.map.relations[id]) {
94                                        var mems=_root.map.relations[id].members;
95                                        for (var i in mems) { var r=findLinkedHash(mems[i][0],mems[i][1]); delete r[id]; }
96                                        removeMovieClip(_root.map.relations[id]);
97                                }
98                                break;
99                        case 'node':
100                                if (_root.map.pois[id]) {
101                                        if (id==_poiselected) { deselectAll(); }
102                                        removeMovieClip(_root.map.pois[id]);
103                                }
104                                break;
105                }
106        }
107
108        // =====================================================================
109        // Conflict management
110
111        function resolveConflict(msg,result) {
112                //  msg[0] is type (node/way)
113                //  msg[1] is version
114                // (msg[2] is type actually causing conflict, and msg[3] id, if in a way)
115                //  result[0] is id
116                _root.cmsg=msg; _root.cresult=result;           // _root. so we can access them from the "Ok" function
117                var ctype=msg[0]; var cid=result[0];
118                var t1,t2;
119
120                abortUpload();
121                switch (ctype) {
122                        case 'way':             var n=getName(_root.map.ways[cid].attr,waynames); if (n) { n=" ("+n+")"; }
123                                                        t1=iText("Since you started editing, someone else has changed way $1$2.","conflict_waychanged",cid,n);
124                                                        t2=iText("Click 'Ok' to show the way.","conflict_visitway"); break;
125                        case 'node':    var n=getName(_root.map.pois[cid].attr,nodenames); if (n) { n=" ("+n+")"; }
126                                                        t1=iText("Since you started editing, someone else has changed point $1$2.","conflict_poichanged",cid,n);
127                                                        t2=iText("Click 'Ok' to show the point.","conflict_visitpoi"); break;
128                        case 'relation':var n=_root.map.relations[cid].verboseText(); if (n) { n=" ("+n+")"; }
129                                                        t1=iText("Since you started editing, someone else has changed relation $1$2.","conflict_relchanged",cid,n);
130                                                        t2=""; break;
131                }
132                _root.windows.attachMovie("modal","resolve",++windowdepth);
133                _root.windows.resolve.init(300,150,new Array('Ok'),function() { handleConflictAction(_root.windows.resolve.box.fixoption.selected); });
134                var box=_root.windows.resolve.box;
135
136                box.createTextField("prompt1",2,7,9,282,200);
137                writeText(box.prompt1,t1); var t=box.prompt1.textHeight;
138
139                box.attachMovie("radio","fixoption",3);
140                box.fixoption.addButton(10,t+22,iText("Download their version",'conflict_download'));
141                box.fixoption.addButton(10,t+40,iText("Overwrite their version",'conflict_overwrite'));
142                box.fixoption.select(1);
143
144                if (t2) {
145                        box.createTextField("prompt2",4,7,t+60,282,20);
146                        writeText(box.prompt2,t2);
147                }
148        }
149       
150        function handleConflictAction(choice) {
151                var tx,ty;
152                var ctype=_root.cmsg[0]; var cid=_root.cresult[0];
153                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; }
154                else if (ctype=='node' && _root.map.pois[cid]) { prenode=cid; tx=_root.nodes[cid].x; ty=_root.nodes[cid].y; }
155
156                if (choice==1) { deselectAll(); deleteObject(ctype,cid); }      // downloading new version, so delete old one from Potlatch
157                if (tx && ty && (tx<long2coord(_root.edge_l) || tx>long2coord(_root.edge_r) || ty<lat2coord(_root.edge_t) || ty>lat2coord(_root.edge_b))) {
158                        updateCoords(tx,ty);
159                }
160
161                if (choice==1) {
162                        // download new (more up-to-date) version and select it
163                        whichWays(true);
164                } else {
165                        // select problem object
166                        if              (ctype=='way' ) { _root.map.ways[cid].select(); }
167                        else if (ctype=='node') { _root.map.pois[cid].select(); }
168                        // change version number
169                        var v=_root.cmsg[1]; var rtype,rid;
170                        if (_root.cmsg[2]) { rtype=_root.cmsg[2]; rid=_root.cmsg[3]; ctype=ctype+","+rtype; }
171                        switch (ctype) {
172                                case 'way,way':         _root.map.ways[cid].version=v; _root.map.ways[cid].clean=false; break;
173                                case 'way,node':        _root.nodes[rid].version=v; _root.nodes[rid].markDirty(); _root.map.ways[cid].clean=false; break;
174                                case 'node':            _root.nodes[cid].version=v; _root.nodes[cid].markDirty(); _root.map.pois[cid].clean=false; break;
175                                case 'relation':        _root.map.relations[cid].version=v; _root.map.relations[cid].clean=false; break;
176                        }
177                }
178        }
Note: See TracBrowser for help on using the repository browser.