Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jio
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boris Kocherov
jio
Commits
357d923c
Commit
357d923c
authored
May 16, 2016
by
Boris Kocherov
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
working but bad solution of "transaction close on onsuccess callback ended" problem.
parent
ea932ba9
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
61 additions
and
45 deletions
+61
-45
src/jio.storage/indexeddbstorage.js
src/jio.storage/indexeddbstorage.js
+61
-45
No files found.
src/jio.storage/indexeddbstorage.js
View file @
357d923c
...
...
@@ -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
({
...
...
Boris Kocherov
@bk
mentioned in commit
2b211fb4
·
Dec 29, 2016
mentioned in commit
2b211fb4
mentioned in commit 2b211fb419f79b8d341d3c5a1582fadaf8b0caf9
Toggle commit list
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment