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

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

Potlatch 1.2b

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