2 function Vendor(name) {
7 function Ebook(vendor, id) {
9 this.id = id; // external ID for this title
10 this.rec_id; // bre.id for this title's MARC record
11 this.title; // title of ebook
12 this.author; // author of ebook
13 this.avail; // availability info for this title
14 this.holdings = {}; // holdings info
15 this.conns = {}; // references to Dojo event connection for performing actions with this ebook
18 Ebook.prototype.getDetails = function(callback) {
19 var ses = this.ses || dojo.cookie(this.vendor);
21 new OpenSRF.ClientSession('open-ils.ebook_api').request({
22 method: 'open-ils.ebook_api.title.details',
23 params: [ ses, ebook.id ],
25 oncomplete: function(r) {
28 console.log('title details response: ' + resp.content());
29 ebook.title = resp.content().title;
30 ebook.author = resp.content().author;
31 if (typeof resp.content().formats !== 'undefined')
32 ebook.formats = resp.content().formats;
33 return callback(ebook);
39 Ebook.prototype.getAvailability = function(callback) {
40 var ses = this.ses || dojo.cookie(this.vendor);
41 new OpenSRF.ClientSession('open-ils.ebook_api').request({
42 method: 'open-ils.ebook_api.title.availability',
43 params: [ ses, this.id ],
45 oncomplete: function(r) {
48 console.log('availability response: ' + resp.content());
49 this.avail = resp.content();
50 return callback(resp.content());
56 Ebook.prototype.getHoldings = function(callback) {
57 var ses = this.ses || dojo.cookie(this.vendor);
58 new OpenSRF.ClientSession('open-ils.ebook_api').request({
59 method: 'open-ils.ebook_api.title.holdings',
60 params: [ ses, this.id ],
62 oncomplete: function(r) {
65 console.log('holdings response: ' + resp.content());
66 this.holdings = resp.content();
67 return callback(resp.content());
73 Ebook.prototype.checkout = function(authtoken, patron_id, callback) {
74 var ses = this.ses || dojo.cookie(this.vendor);
76 // get selected checkout format (optional, used by OverDrive)
78 var format_selector = dojo.byId('checkout-format');
79 if (format_selector) {
80 checkout_format = format_selector.value;
83 new OpenSRF.ClientSession('open-ils.ebook_api').request({
84 method: 'open-ils.ebook_api.checkout',
85 params: [ authtoken, ses, ebook.id, patron_id, checkout_format ],
87 oncomplete: function(r) {
90 console.log('checkout response: ' + resp.content());
91 return callback(resp.content());
97 Ebook.prototype.placeHold = function(authtoken, patron_id, callback) {
98 var ses = this.ses || dojo.cookie(this.vendor);
100 new OpenSRF.ClientSession('open-ils.ebook_api').request({
101 method: 'open-ils.ebook_api.place_hold',
102 params: [ authtoken, ses, ebook.id, patron_id, patron_email ],
104 oncomplete: function(r) {
107 console.log('place hold response: ' + resp.content());
108 return callback(resp.content());
114 Ebook.prototype.cancelHold = function(authtoken, patron_id, callback) {
115 var ses = this.ses || dojo.cookie(this.vendor);
117 new OpenSRF.ClientSession('open-ils.ebook_api').request({
118 method: 'open-ils.ebook_api.cancel_hold',
119 params: [ authtoken, ses, ebook.id, patron_id ],
121 oncomplete: function(r) {
124 console.log('cancel hold response: ' + resp.content());
125 return callback(resp.content());
131 Ebook.prototype.download = function() {
132 var ses = this.ses || dojo.cookie(this.vendor);
135 var format_selector = dojo.byId('download-format');
136 if (!format_selector) {
137 console.log('could not find a specified format for download');
140 request_link = format_selector.value;
142 // Request links include params like "errorpageurl={errorpageurl}"
143 // for redirecting the user if there's an error doing the download, etc.
144 // In these scenarios we always redirect the user to the current page.
145 // TODO: Add params to the current-page URL so that, if redirected, we
146 // can detect those params on page reload and show a useful message.
147 request_link = request_link.replace('{errorpageurl}', window.location.href);
148 request_link = request_link.replace('{odreadauthurl}', window.location.href);
149 // Now we're ready to request our download link.
150 new OpenSRF.ClientSession('open-ils.ebook_api').request({
151 method: 'open-ils.ebook_api.title.get_download_link',
152 params: [ authtoken, ses, request_link ],
154 oncomplete: function(r) {
157 if (resp.content().error_msg) {
158 console.log('download link request failed: ' + resp.content().error_msg);
159 } else if (resp.content().url) {
160 var url = resp.content().url;
161 console.log('download link received: ' + url);
162 window.location = url;
164 console.log('unknown error requesting download link');