pro sxi_sswdb_l1q, t0,t1, queue_days=queue_days, parent=parent, $
   goesn=goesn, no_purge=no_purge, no_delete=no_delete, $
   force_recopy=force_recopy, purge_only=purge_only
;
;+
;   Name: sxi_sswdb_l1q
;
;   Purpose: populate recent data queue in $SSWDB, optionally cleanup old
;
;   Input Parameters:
;      t0,t1 - if not most recent NN days, input time range
;      
;
;   Keyword Parameters
;      queue_days - number of days to consider (and optionally delete older)
;      parent     - top directory - default is $SSWDB/goes/sxigNN/l1q
;      goesn      - GOES sat# (default is 12, the first)
;      no_delete  - (switch) if set, don't do the cleanup/delete of older
;        no_purge   - (switch) synonym for no_delete
;        purge_only - (switch) if set, only do purge ; skip copy
;
;
;   History:
;      5-Feb-2003 - for quicklook/spaceweather apps.
;     12-Feb-2003 - check file_sizes first for speed, add /FORCE_RECOPY
;                   to override (passed to sxi_copy via /CLOBBER if set)
;     22-jun-2006 - add time range option
;
;   Calls:
;      sxi_files, sxi_copy, and usual ssw suspects
;


if n_elements(queue_days) eq 0 then queue_days=1           ; number of days in Q
if n_elements(goesn) eq 0 then goesn=12               ; 1st come 1st served
sgoesn=strtrim(goesn,2)                               ; string equiv
force_recopy=keyword_set(force_recopy)                ; avoid uneeded sxi_copy

archive=n_params() eq 2 ; not    
                                                      ; calls  
no_purge=keyword_set(no_purge) or keyword_set(no_delete) or archive
purge_only=keyword_set(purge_only)

if n_elements(parent) eq 0 then parent= $
   concat_dir(concat_dir(concat_dir('$SSWDB','goes'),'sxig'+sgoesn),'l1q')

if archive then parent=str_replace(parent,'l1q','archive')
if get_host(/short) eq 'vestige' then $
   parent='/Volumes/disk1/ops/DataCenter/sswdb/goes/sxig12/archive'

case 1 of 
   archive:  ; user supplied times
   else: begin 
      t0=reltime(days=-(queue_days))
      t1=reltime(hour=1)
   endcase
endcase

level0=goesn eq 13
sxifiles=sxi_files(anytim(t0,/date_only,/ecs), $
                   anytim(t1,/ecs),/ngdc,/full_path,goesn=goesn,level0=level0)

sxifiles=sxifiles(uniq(sxifiles))
sxifiles=reverse(sxifiles)

sxiserv=sxi_server(path=path,sat=goesn)
optsize=([1074240,550000])(level0) ; optimal file size - Level dependent

if not purge_only then begin
if not force_recopy then begin 
   outfiles=str_replace(sxifiles,path,parent)
 
   fsizes=file_size(outfiles)   
   needss=where(fsizes lt optsize,sscnt)
   if sscnt eq 0 then begin 
      box_message,'All files copied already - use /FORCE_RECOPY to refresh'
      return
   endif else box_message,'Need to copy ' + strtrim(sscnt,2) + ' files...'
   sxifiles=sxifiles(needss)
endif 


outdirs=concat_dir(parent,strextract(sxifiles,path+'/','SXI'))
rstring='/goes'+sgoesn+''
outdirs=str_replace(outdirs,rstring,'')
udirs=uniq(outdirs)

; create non-existant subdirectories
for i=0,n_elements(udirs)-1 do $  
   spawn,['mkdir','-p',outdirs(udirs(i))],/noshell


; copy files (sxi_copy includes caching to avoid recopies)

for i=0,n_elements(sxifiles)-1 do begin 
   box_message,['Copying>> ' + sxifiles(i) ,$
                'To>> ' + outdirs(i)]
   server=sxi_server(path=topdir)
   sock_copy,server+sxifiles(i),out_dir=outdirs(i), clobber=force_recopy
endfor

endif else box_message,'PURGE_ONLY'
if not no_purge then begin 
   tgrid=timegrid(reltime(days=-7),reltime(days=-(queue_days+1)),$
      /day,out='ecs',/date_only)
   pdirs=concat_dir(parent,tgrid)
   for i=0,n_elements(pdirs)-1 do begin 
      box_message,'Purging: ' + pdirs(i)
      spawn,['rm','-rf',pdirs(i)],/noshell
   endfor
endif

return
end
   

