修改查票流程

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.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(); return new notify();
@ -428,12 +437,21 @@ var CFG_MANGER = (function () {
return url.replace(qtc, escape(ntc)); 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) { function processRequest(details) {
var url = details.url; var url = details.url;
var skipBlacklist = !CFG_MANGER.config.blockDynamicJs; var skipBlacklist = !CFG_MANGER.config.blockDynamicJs;
var newHeaders = {}; var newHeaders = {};
var newCookies = null;
var oldCookiesValue = null;
for (var i = 0; i < details.requestHeaders.length; ++i) { for (var i = 0; i < details.requestHeaders.length; ++i) {
var h = details.requestHeaders[i]; var h = details.requestHeaders[i];
var name = h.name; var name = h.name;
@ -446,13 +464,21 @@ var CFG_MANGER = (function () {
} else if (h.name == "Referer") { } else if (h.name == "Referer") {
if (!newHeaders["Referer"] && value.indexOf("12306.cn") != -1) if (!newHeaders["Referer"] && value.indexOf("12306.cn") != -1)
newHeaders["Referer"] = value; 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); name = name.substr(5);
if (!value) {
if (newHeaders[name]) if (name === "Cookie") {
delete newHeaders[name]; newCookies = parseCookies(value);
} else { } else {
newHeaders[name] = value; if (!value) {
if (newHeaders[name])
delete newHeaders[name];
} else {
newHeaders[name] = value;
}
} }
skipBlacklist = true; skipBlacklist = true;
} else if (!newHeaders[name]) { } 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 = []; var headerCollection = [];
for (var i in newHeaders) { for (var i in newHeaders) {
headerCollection.push({ name: i, value: newHeaders[i] }); headerCollection.push({ name: i, value: newHeaders[i] });

View File

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

View File

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

View File

@ -120,7 +120,7 @@
} }
var t = serverSuggestion.pop(); 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 () { .done(function () {
loaded.unshift(t); loaded.unshift(t);
@ -235,6 +235,10 @@
var ctx = { var ctx = {
TSS: new TSS(), TSS: new TSS(),
setQueryResult: function (result, queryCount) { setQueryResult: function (result, queryCount) {
//改签或学生票,忽略
if (cp.reisgn || cp.studentTicket)
return;
ctx.TSS.setQueryResult(result, queryCount); ctx.TSS.setQueryResult(result, queryCount);
}, },
clearQueryResultCache: function () { clearQueryResultCache: function () {

View File

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

View File

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

View File

@ -354,7 +354,7 @@
queryLoadingRow.show(); queryLoadingRow.show();
queryErrorRow.hide(); 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 () { .done(function () {
traindata = this; traindata = this;
if (!this.original.length) { if (!this.original.length) {

View File

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

View File

@ -62,7 +62,7 @@
var tip = new mp.MessagePopup("loading", "正在查询中,请稍等..."); var tip = new mp.MessagePopup("loading", "正在查询中,请稍等...");
tip.show(); 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 () { .done(function () {
tip.setState("ok", "查询成功!"); tip.setState("ok", "查询成功!");
tip.close(); tip.close();