فهرست منبع

[add] native externs
[add] "local" url skip account interractions (for SMS local use)

B Thibault 8 سال پیش
والد
کامیت
2515f882d2
6فایلهای تغییر یافته به همراه45 افزوده شده و 27 حذف شده
  1. 1 1
      Makefile
  2. 8 0
      cli/externs/native.js
  3. 23 21
      cli/workflow.js
  4. 1 1
      srv/public/mimouchat.min.js
  5. 5 4
      srv/src/template/index.js
  6. 7 0
      srv/src/template/local.js

+ 1 - 1
Makefile

@@ -33,7 +33,7 @@ SRC=		srv/src/context.js			\
 			cli/commands/core.js		\
 			cli/commands/sherlock.js
 
-EXTERNS=	--externs cli/externs/hljs.js
+EXTERNS=	--externs cli/externs/hljs.js --externs cli/externs/native.js
 
 OUTPUT=		srv/public/mimouchat.min.js
 

+ 8 - 0
cli/externs/native.js

@@ -0,0 +1,8 @@
+
+var __native = {
+    /** @type {function()} */
+    "login": function() {}
+};
+/** @type {boolean} */
+var IS_LOCAL;
+

+ 23 - 21
cli/workflow.js

@@ -91,29 +91,31 @@ function onConfigUpdated() {
 }
 
 function poll(callback) {
-    new HttpRequest("api?v=" +DATA.lastServerVersion)
-        .callback(function(statusCode, statusText, resp) {
-            var success = Math.floor(statusCode / 100) === 2;
-
-            if (success) {
-                if (NEXT_RETRY) {
-                    NEXT_RETRY = 0;
-                    onNetworkStateUpdated(true);
-                }
-            } else {
-                if (NEXT_RETRY) {
-                    NEXT_RETRY += Math.floor((NEXT_RETRY || 5)/2);
-                    NEXT_RETRY = Math.min(60, NEXT_RETRY);
+    if (!IS_LOCAL) {
+        new HttpRequest("api?v=" +DATA.lastServerVersion)
+            .callback(function(statusCode, statusText, resp) {
+                var success = Math.floor(statusCode / 100) === 2;
+
+                if (success) {
+                    if (NEXT_RETRY) {
+                        NEXT_RETRY = 0;
+                        onNetworkStateUpdated(true);
+                    }
                 } else {
-                    NEXT_RETRY = 5;
-                    onNetworkStateUpdated(false);
+                    if (NEXT_RETRY) {
+                        NEXT_RETRY += Math.floor((NEXT_RETRY || 5)/2);
+                        NEXT_RETRY = Math.min(60, NEXT_RETRY);
+                    } else {
+                        NEXT_RETRY = 5;
+                        onNetworkStateUpdated(false);
+                    }
                 }
-            }
-            callback(success, resp);
-        })
-        .setResponseType(HttpRequestResponseType.JSON)
-        .setTimeout(1000 * 60 * 1)
-        .send();
+                callback(success, resp);
+            })
+            .setResponseType(HttpRequestResponseType.JSON)
+            .setTimeout(1000 * 60 * 1)
+            .send();
+    }
 }
 
 function outOfSync() {

+ 1 - 1
srv/public/mimouchat.min.js

@@ -113,7 +113,7 @@ g.createLinearGradient(0,0,0,p);a.addColorStop(0,"#4D394B");a.addColorStop(1,"#2
 g.beginPath();g.moveTo(c+l/2,d+m);g.lineTo(c-m+l,d+l/2);g.lineTo(c+l/2,d-m+l);g.lineTo(c+m,d+l/2);g.closePath();g.fill();g.putImageData(f(g.getImageData(c+m,d+m,u,u),b),c+m,d+m)}var k=document.createElement("canvas"),g=k.getContext("2d"),n=k.width=250,p=k.height=290,l=(n-40)/3,m=.1*l,u=Math.floor(l-2*m),A=.5*u,x={},y={},M={};return function(b,d,f){if(x[b])f(x[b]);else if(M[b])y[b]?y[b].push(f):y[b]=[f];else{var g=e(),h=[];M[b]=!0;y[b]?y[b].push(f):y[b]=[f];for(var l in d)d[l].Va||d[l].vb||h.push({src:pa(d[l])});
 c(h,function(c){a(g,c);x[b]=k.toDataURL();y[b].forEach(function(a){a(x[b])})})}}}();var W=0,Q=null,P=null,S=null,R=null,Bb=[];function Jb(){O(Ea(Da(N(new K("highlight.pack.js"),function(a,b,c){a=document.createElement("script");b=document.createElement("link");a.innerHTML=c;a.language="text/javascript";b.href="hljs-androidstudio.css";b.rel="stylesheet";document.head.appendChild(b);document.body.appendChild(a)}),function(){console.error("Failure loading hljs required files")})))}
 function cc(){var a=Q;O(Ca(N(Fa(new K("api/hist?room="+a.id),"json"),function(b,c,d){if(d){b=C.a[a.id];var e=Date.now();b?c=!!la(b,d,e):(b=C.a[a.id]=new Y(a,100,d,e),c=!0);c&&(b.a.length&&ha(a,na(b).m,e),ac(D(C.context,a.id),a,d),a===Q&&ub())}}),function(){}))}function Qb(){a:{var a=X.U;for(var b in a)if(a.hasOwnProperty(b)){a=!1;break a}a=!0}a&&Mb.Bb(!1).display(Mb.yb.U);a=X.h;dc(a&&Rb[a]?Rb[a]:ec);document.getElementById("customsheet").innerHTML=fc()}
-function Ob(){var a=gc;O(Ea(Fa(Ca(new K("api?v="+C.b),function(b,c,d){(b=2===Math.floor(b/100))?W&&(W=0,sb(!0)):W?(W+=Math.floor((W||5)/2),W=Math.min(60,W)):(W=5,sb(!1));a(b,d)}),"json")))}function gc(a,b){a?(b&&C.update(b),Ob()):setTimeout(hc,1E3*W)}function hc(){Ob()}
+function Ob(){var a=gc;IS_LOCAL||O(Ea(Fa(Ca(new K("api?v="+C.b),function(b,c,d){(b=2===Math.floor(b/100))?W&&(W=0,sb(!0)):W?(W+=Math.floor((W||5)/2),W=Math.min(60,W)):(W=5,sb(!1));a(b,d)}),"json")))}function gc(a,b){a?(b&&C.update(b),Ob()):setTimeout(hc,1E3*W)}function hc(){Ob()}
 function ic(a){Q&&(document.getElementById("room_"+Q.id).classList.remove("selected"),document.getElementById("chatSystemContainer").classList.add("no-room-selected"));document.getElementById("room_"+a.id).classList.add("selected");document.body.classList.remove("no-room-selected");Q=a;P=D(C.context,a.id);tb();Kb.sb();ob(P.a.id,P.i,function(a){document.getElementById("chatCtx").style.backgroundImage="url("+a+")"});(!C.a[Q.id]||100>C.a[Q.id].a.length)&&cc();document.getElementById("chatSystemContainer").classList.remove("no-room-selected");
 document.getElementById("chatCtx").classList.remove("opened")}function mb(){var a=document.location.hash.substr(1),b=wa(a);b&&b!==Q?ic(b):(a=F(a))&&a.O&&ic(a.O)}function Nb(a,b,c){var d=Q;new FileReader;var e=new FormData;e.append("file",b);e.append("filename",a);O(Da(N(new K("POST","api/file?room="+d.id),function(){c(null)}),function(a,b){c(b)}),e)}
 function cb(a,b,c,d){b="api/msg?room="+a.id+"&text="+encodeURIComponent(b);d&&(b+="&attachments="+encodeURIComponent(JSON.stringify([{fallback:d.text,author_name:F(d.K).getName(),text:d.text,footer:a.h?J.message:a.name,ts:d.m}])));O(N(Fa(new K("POST",b),"json"),function(a,b,d){d&&void 0!==d.pendingId&&(c.na=d.pendingId)}))}function Fb(a,b){O(new K("DELETE","api/pinMsg?room="+a.id+"&msgId="+b.id))}

+ 5 - 4
srv/src/template/index.js

@@ -3,7 +3,7 @@ const templates = require('./_templates.js'),
         config = require('../../config.js');
 
 module.exports.exec = function(req, res) {
-    if (!req.account.cguReadAndAccepted) {
+    if (req.account && !req.account.cguReadAndAccepted) {
         if (config.allowNewAccounts)
             return {
                 status: 200,
@@ -19,8 +19,9 @@ module.exports.exec = function(req, res) {
             return require('./_403.js').exec(req, res);
     }
     var serviceProviderOptionList = "";
-    for (var serviceName in config.services)
-        serviceProviderOptionList += `<option value="${config.services[serviceName].connectLink}">${serviceName}</option>`;
+    if (req.account)
+        for (var serviceName in config.services)
+            serviceProviderOptionList += `<option value="${config.services[serviceName].connectLink}">${serviceName}</option>`;
     return {
         status: 200
         ,body: templates.header("Mimouchat", ["style.css", "styleResponsive.css", "_customsheet"], ['<link href="favicon_err.png" type="image/png" rel="icon" id="linkFavicon" />'])
@@ -99,7 +100,7 @@ module.exports.exec = function(req, res) {
               <a id="fileUploadCancel" class="button"/></a>
               <input type="submit" class="button"/>
           </form></div>
-          <div class="error" id="neterror"></div>`
+          <div class="error" id="neterror"></div><script>var IS_LOCAL=` +!!(!req.account || req.urlObj.urlParts[0] === 'local') +`;</script>`
         +templates.footer(["mimouchat.min.js"])
     };
 };

+ 7 - 0
srv/src/template/local.js

@@ -0,0 +1,7 @@
+
+module.exports.exec = require("./index.js").exec;
+module.exports.match = function(url) {
+    return url.urlParts[0] === 'local' && url.urlParts.length === 1;
+};
+module.exports.needLogin = false;
+