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

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

Potlatch 1.1a

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