Commit 357d923c authored by Boris Kocherov's avatar Boris Kocherov

working but bad solution of "transaction close on onsuccess callback ended" problem.

parent ea932ba9
......@@ -303,8 +303,7 @@
};
IndexedDBStorage.prototype.getAttachment = function (id, name, options) {
var transaction,
type,
var type,
start,
end;
if (options === undefined) {
......@@ -312,48 +311,63 @@
}
return openIndexedDB(this)
.push(function (db) {
transaction = openTransaction(db, ["attachment", "blob"], "readonly");
// XXX Should raise if key is not good
return handleGet(transaction.objectStore("attachment")
.get(buildKeyPath([id, name])));
})
.push(function (attachment) {
var total_length = attachment.info.length,
i,
promise_list = [],
store = transaction.objectStore("blob"),
start_index,
end_index;
type = attachment.info.content_type;
start = options.start || 0;
end = options.end || total_length;
if (end > total_length) {
end = total_length;
}
if (start < 0 || end < 0) {
throw new jIO.util.jIOError("_start and _end must be positive",
400);
}
if (start > end) {
throw new jIO.util.jIOError("_start is greater than _end",
400);
}
start_index = Math.floor(start / UNITE);
end_index = Math.floor(end / UNITE);
if (end % UNITE === 0) {
end_index -= 1;
}
for (i = start_index; i <= end_index; i += 1) {
promise_list.push(
handleGet(store.get(buildKeyPath([id,
name, i])))
);
}
return RSVP.all(promise_list);
return new RSVP.Promise(function (resolve, reject) {
var transaction = openTransaction(db, ["attachment", "blob"],
"readonly"),
// XXX Should raise if key is not good
request = transaction.objectStore("attachment")
.get(buildKeyPath([id, name]));
request.onerror = function (error) {
transaction.abort();
reject(error);
};
request.onsuccess = function () {
var attachment = request.result,
total_length,
i,
promise_list = [],
store = transaction.objectStore("blob"),
start_index,
end_index;
if (!attachment) {
return reject(
new jIO.util.jIOError("Cannot find attachment", 404)
);
}
total_length = attachment.info.length;
type = attachment.info.content_type;
start = options.start || 0;
end = options.end || total_length;
if (end > total_length) {
end = total_length;
}
if (start < 0 || end < 0) {
throw new jIO.util.jIOError("_start and _end must be positive",
400);
}
if (start > end) {
throw new jIO.util.jIOError("_start is greater than _end",
400);
}
start_index = Math.floor(start / UNITE);
end_index = Math.floor(end / UNITE);
if (end % UNITE === 0) {
end_index -= 1;
}
for (i = start_index; i <= end_index; i += 1) {
promise_list.push(
handleGet(store.get(buildKeyPath([id,
name, i])))
);
}
resolve(RSVP.all(promise_list));
};
});
})
.push(function (result_list) {
var array_buffer_list = [],
......@@ -413,10 +427,12 @@
}
// Remove previous attachment
transaction = openTransaction(db, ["attachment", "blob"], "readwrite");
transaction = openTransaction(db, ["attachment", "blob"],
"readwrite", false);
return removeAttachment(transaction, id, name);
})
.push(function () {
transaction = openTransaction(db, ["attachment", "blob"], "readwrite");
var promise_list = [
handleRequest(transaction.objectStore("attachment").put({
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment