修改查票流程

This commit is contained in:
iFish 2014-09-13 15:58:20 +08:00
parent 57801451f1
commit 87f2abae80
9 changed files with 85 additions and 19 deletions

View File

@ -122,6 +122,15 @@ var notification = (function () {
chrome.windows.update((m.detail && m.detail.windowid), { drawAttention: true, focused: true, state: "maximized" });
}
});
chrome.runtime.onMessage.addListener(function (m, sender) {
if (!m || !m.action)
return;
if (m.action === "attention" && sender.tab) {
chrome.tabs.update((m.detail && m.detail.tabid) || sender.tab.id, { active: true, highlighted: true });
chrome.windows.update((m.detail && m.detail.windowid), { drawAttention: true, focused: true, state: "maximized" });
}
});
};
return new notify();
@ -428,12 +437,21 @@ var CFG_MANGER = (function () {
return url.replace(qtc, escape(ntc));
};
function parseCookies(v) {
var arr = {};
v.split('; ').forEach(function (x) { var idx = x.indexOf("="); arr[x.substr(0, idx)] = x.substr(idx + 1); });
return arr;
};
function processRequest(details) {
var url = details.url;
var skipBlacklist = !CFG_MANGER.config.blockDynamicJs;
var newHeaders = {};
var newCookies = null;
var oldCookiesValue = null;
for (var i = 0; i < details.requestHeaders.length; ++i) {
var h = details.requestHeaders[i];
var name = h.name;
@ -446,13 +464,21 @@ var CFG_MANGER = (function () {
} else if (h.name == "Referer") {
if (!newHeaders["Referer"] && value.indexOf("12306.cn") != -1)
newHeaders["Referer"] = value;
} else if (name.indexOf("Fish-") != -1) {
} else if (name === "Cookie") {
oldCookiesValue = value;
newHeaders["Cookie"] = value;
} else if (name.indexOf("Fish-") !== -1) {
name = name.substr(5);
if (!value) {
if (newHeaders[name])
delete newHeaders[name];
if (name === "Cookie") {
newCookies = parseCookies(value);
} else {
newHeaders[name] = value;
if (!value) {
if (newHeaders[name])
delete newHeaders[name];
} else {
newHeaders[name] = value;
}
}
skipBlacklist = true;
} else if (!newHeaders[name]) {
@ -460,6 +486,14 @@ var CFG_MANGER = (function () {
}
}
if (newCookies) {
var oc = parseCookies(oldCookiesValue);
newCookies = _.extend({}, oc, newCookies);
newHeaders["Cookie"] = _.map(newCookies, function (v, k) {
return k + "=" + encodeURIComponent((v));
}).join("; ");
}
var headerCollection = [];
for (var i in newHeaders) {
headerCollection.push({ name: i, value: newHeaders[i] });

View File

@ -56,7 +56,7 @@
"description": "12306订票助手 v7: 帮您订票的小助手 by 木鱼,全力为您的车票购买献计献策!",
"key": "7k6gnXVACvUPU2DfslJgSrWJTHqIg5uwd+Kgl/5zSg==",
"name": "猎豹抢票党/12306订票助手 V7",
"version": "7.1.1",
"version": "7.2.1",
"manifest_version": 2,
"icons": {
"16": "icons/icon_16.png",

View File

@ -4,6 +4,8 @@
var parser = require("../platform/parser.js");
var ev = require("../platform/EventObject.js");
var extensionVersion = parseInt(document.body.dataset["targetExtensionVersion"].replace(/\./g, ""));
exports.events = new ev();
//记录参数
@ -148,7 +150,7 @@
return trainData;
};
exports.queryTicket = function (from, to, date, student, noProcess, noAction) {
exports.queryTicket = function (from, fromName, to, toName, date, student, resign, noProcess, noAction) {
var def = new $.Deferred();
var queryCount = 0;
@ -163,6 +165,19 @@
"leftTicketDTO.to_station": to,
"purpose_codes": student ? "0X00" : "ADULT"
};
var cookie = (function (obj) { var arr = [];
_.forEach(obj, function (v, k) { arr.push(k + '=' + v); });
return arr.join("; ");
})(extensionVersion >= 720 ? {
"_jc_save_fromStation": escape(fromName + "," + from),
"_jc_save_toStation": escape(toName + "," + to),
"_jc_save_fromDate": date,
"_jc_save_toDate": date,
"_jc_save_wfdc_flag": resign ? "gc" : "dc"
} : {});
if (isLogOpen) {
exports.log(p, cookie);
}
ajax.sendGet(queryTicketUrl, "leftTicket/init", p, "json", function () {
//url changed?
if (!this.model.status && this.model.c_url) {
@ -183,6 +198,8 @@
def.reject("重试次数过多,请重新点击查询按钮");
}
}, false, {
"Cookie": cookie
});
};
var fetchTicketUrl = function () {
@ -217,11 +234,17 @@
return def.promise();
};
exports.log = function (data) {
exports.log = function (data, cookies) {
if (!isLogOpen || (lastLogTime && (new Date() - lastLogTime) < 5000))
return;
lastLogTime = new Date();
ajax.sendGet("leftTicket/log", "leftTicket/init", data, "json");
ajax.sendGet("leftTicket/log", "leftTicket/init", data, "json", function() {
},function() {
}, false, {
"Cookie": cookies
});
};
exports.queryTrainStop = function (id, from, to, date) {

View File

@ -120,7 +120,7 @@
}
var t = serverSuggestion.pop();
query.queryTicket(t.fromCode, t.toCode, t.date, cp.studentTicket, false, true)
query.queryTicket(t.fromCode, t.fromText, t.toCode, t.toText, t.date, cp.studentTicket, false, false, true)
.done(function () {
loaded.unshift(t);
@ -235,6 +235,10 @@
var ctx = {
TSS: new TSS(),
setQueryResult: function (result, queryCount) {
//改签或学生票,忽略
if (cp.reisgn || cp.studentTicket)
return;
ctx.TSS.setQueryResult(result, queryCount);
},
clearQueryResultCache: function () {

View File

@ -20,6 +20,7 @@
exports.notify = function (title, content) {
port.sendMessage({ action: "notify", title: title, content: content });
port.sendMessage({ action: "attention" });
}
$("#btn_stop_sound").click(exports.stop);

View File

@ -16,7 +16,7 @@ define(function (require, exports, module) {
if (url[4] === ":" || url[5] === ":") return url;
return config.baseUri + url;
};
this.send = function (method, url, refer, data, responseType, done, failed, appendatt) {
this.send = function (method, url, refer, data, responseType, done, failed, appendatt, headers) {
var def = new $.Deferred();
if (appendatt) {
@ -30,7 +30,8 @@ define(function (require, exports, module) {
timeout: 120000,
type: method,
dataType: responseType,
refer: that.getFullUri(refer)
refer: that.getFullUri(refer),
headers: headers
};
var e = new CustomEvent("ajaxproxy", { detail: { data: xhrData, index: ajaxCount++ }, cancelable: true });
@ -77,7 +78,7 @@ define(function (require, exports, module) {
return def;
};
this.sendGet = function (url, refer, data, responseType, done, failed, appendatt) {
this.sendGet = function (url, refer, data, responseType, done, failed, appendatt, headers) {
/// <summary>以GET模式发送AJAX请求</summary>
/// <param name="url">要请求的地址</param>
/// <param name="refer">请求的引用地址</param>
@ -85,9 +86,9 @@ define(function (require, exports, module) {
/// <param name="responseType">要请求的地址</param>
/// <param name="done">完成请求的回调</param>
/// <param name="failed">请求失败的回调</param>
return that.send("GET", url, refer, data, responseType, done, failed, appendatt);
return that.send("GET", url, refer, data, responseType, done, failed, appendatt, headers);
};
this.sendPost = function (url, refer, data, responseType, done, failed, appendatt) {
this.sendPost = function (url, refer, data, responseType, done, failed, appendatt, headers) {
var args = [].slice.call(arguments);
args.unshift("POST");
return that.send.apply(this, args);

View File

@ -354,7 +354,7 @@
queryLoadingRow.show();
queryErrorRow.hide();
query.queryTicket(cp.fromCode, cp.toCode, cp.depDate, cp.studentTicket, true)
query.queryTicket(cp.fromCode, cp.fromText, cp.toCode, cp.toText, cp.depDate, cp.studentTicket, cp.resign || false, true)
.done(function () {
traindata = this;
if (!this.original.length) {

View File

@ -50,12 +50,15 @@
this.clear = function () {
$("#result").empty();
};
this.load = function (ui, from, to, date, stu) {
this.load = function (ui, from, fromText, to, toText, date, stu, resign) {
ui = ui === undefined ? true : ui;
from = from || sessMgr.currentProfile.fromCode;
fromText = fromText || sessMgr.currentProfile.fromText;
to = to || sessMgr.currentProfile.toCode;
toText = toText || sessMgr.currentProfile.toText;
date = date || sessMgr.currentProfile.depDate;
stu = stu || sessMgr.currentProfile.studentTicket;
resign = resign || sessMgr.currentProfile.resign || false;
if (!from || !to || !date) {
mp.showMessagePopup("error", "亲,还没有设置查询的条件哦。");
@ -73,7 +76,7 @@
tip.show();
}
ticketQuery
.queryTicket(from, to, date, stu)
.queryTicket(from, fromText, to, toText, date, stu, resign)
.done(function () {
if (tip) {
tip.setState("ok", "完成...");

View File

@ -62,7 +62,7 @@
var tip = new mp.MessagePopup("loading", "正在查询中,请稍等...");
tip.show();
query.queryTicket(sessMgr.currentProfile.fromCode, sessMgr.currentProfile.toCode, utility.formatDate(data.maxDate, 'yyyy-MM-dd'), sessMgr.currentProfile.studentTicket, true)
query.queryTicket(sessMgr.currentProfile.fromCode, sessMgr.currentProfile.fromText, sessMgr.currentProfile.toCode, sessMgr.currentProfile.toText, utility.formatDate(data.maxDate, 'yyyy-MM-dd'), sessMgr.currentProfile.studentTicket, sessMgr.currentProfile.resign || false, true)
.done(function () {
tip.setState("ok", "查询成功!");
tip.close();