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

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

Potlatch 1.0

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