@@ -333,7 +333,7 @@ const IO = Module("io", {
333
333
// XXX: nsIDownloadManager is deprecated on Firefox 26
334
334
// FIXME: need to listen to download state ? -- teramako
335
335
// FIXME: need to adapt to Download.jsm instead of nsIDownloadManager
336
- try {
336
+ if ( services . get ( "vc" ) . compare ( Application . version , "26.0a1" ) < 0 ) {
337
337
this . downloadListener = {
338
338
onDownloadStateChange : function ( state , download ) {
339
339
if ( download . state == services . get ( "downloads" ) . DOWNLOAD_FINISHED ) {
@@ -351,13 +351,50 @@ const IO = Module("io", {
351
351
onSecurityChange : function ( ) { }
352
352
} ;
353
353
services . get ( "downloads" ) . addListener ( this . downloadListener ) ;
354
- } catch ( e ) {
355
- Cu . reportError ( e ) ;
354
+ } else {
355
+ let downloadListener = this . downloadListener = {
356
+ onDownloadChanged : function ( download ) {
357
+ if ( download . succeeded ) {
358
+ let {
359
+ source : { url } ,
360
+ target : { path : file } ,
361
+ totalBytes : size ,
362
+ } = download ;
363
+ let title = File ( file ) . leafName ;
364
+ liberator . echomsg ( "Download of " + title + " to " + file + " finished" ) ;
365
+ autocommands . trigger ( "DownloadPost" , { url : url , title : title , file : file , size : size } ) ;
366
+ }
367
+ } ,
368
+ } ;
369
+ let { Downloads} = Cu . import ( "resource://gre/modules/Downloads.jsm" , { } ) ;
370
+ //let listName = (window.QueryInterface(Ci.nsIInterfaceRequestor)
371
+ // .getInterface(Ci.nsIWebNavigation)
372
+ // .QueryInterface(Ci.nsILoadContext)
373
+ // .usePrivateBrowsing)
374
+ // ? "getPrivateDownloadList"
375
+ // : "getPublicDownloadList";
376
+ for ( let listName of [ "getPrivateDownloadList" , "getPublicDownloadList" ] ) {
377
+ Downloads [ listName ] ( )
378
+ . then ( function ( downloadList ) {
379
+ downloadList . addView ( downloadListener ) ;
380
+ } ) ;
381
+ }
356
382
}
357
383
} ,
358
384
359
385
destroy : function ( ) {
360
- services . get ( "downloads" ) . removeListener ( this . downloadListener ) ;
386
+ if ( services . get ( "vc" ) . compare ( Application . version , "26.0a1" ) < 0 ) {
387
+ services . get ( "downloads" ) . removeListener ( this . downloadListener ) ;
388
+ } else {
389
+ let { Downloads} = Cu . import ( "resource://gre/modules/Downloads.jsm" , { } ) ;
390
+ let downloadListener = this . downloadListener ;
391
+ for ( let listName of [ "getPrivateDownloadList" , "getPublicDownloadList" ] ) {
392
+ Downloads [ listName ] ( )
393
+ . then ( function ( downloadList ) {
394
+ downloadList . removeView ( downloadListener ) ;
395
+ } ) ;
396
+ }
397
+ }
361
398
for ( let [ , plugin ] in Iterator ( plugins . contexts ) )
362
399
if ( plugin . onUnload )
363
400
plugin . onUnload ( ) ;
0 commit comments