Changeset 20


Ignore:
Timestamp:
Apr 6, 2013 5:17:47 PM (9 years ago)
Author:
ilavsky
Message:

Nika added monthly check for updates and reminder with publications

Location:
User Procedures
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • User Procedures/Irena/IR1_Main.ipf

    r19 r20  
    20912091        //create list of Igor procedure files on this machine
    20922092        IR2C_ListIgorProcFiles()
    2093         DoWIndow CheckForUpdatePanel
     2093        DoWIndow CheckForIrenaUpdatePanel
    20942094        if(V_Flag)
    2095                 DoWIndow/F CheckForUpdatePanel                                                         
     2095                DoWIndow/F CheckForIrenaUpdatePanel                                                             
    20962096        else
    2097                 Execute("CheckForUpdatePanel()")                       
     2097                Execute("CheckForIrenaUpdatePanel()")                   
    20982098        endif
    20992099        //Irena code
     
    25492549//***********************************
    25502550
    2551 Window CheckForUpdatePanel() : Panel
     2551Window CheckForIrenaUpdatePanel() : Panel
    25522552        PauseUpdate; Silent 1           // building window...
    25532553        NewPanel /W=(116,68,880,550)/K=1 as "Irena check for updates"
  • User Procedures/Nika/NI1_Main.ipf

    r6 r20  
    11#pragma rtGlobals=1             // Use modern global access method.
    2 #pragma version=1.60
     2#pragma version=1.61
    33
    44//*************************************************************************\
     
    88//*************************************************************************/
    99 
     10 //1.61 added Monthly check for updates and reminder with citations
     11 //1.60  forgot to write what was changed
    1012 //1.59 Minor updates
    1113//1.58 Fixed GUI fonts/size controls issues on Widonws 7, modified Configure Nika preferences to include action on double click.
     
    6466        "Nika Mailing list signup and options", NI1_SignUpForMailingList()
    6567        help={"Opens web page in the browser where you can sing up or control options for nika_users mailing list."}
     68        "Check for updates", NI1_CheckNikaUpdate(1)
     69        help={"Run Check for update and present citations to use in publications"}     
    6670        "About", NI1_AboutPanel()
    6771        help={"Get Panel with info about this release of Nika macros"}
     
    117121//*****************************************************************************************************************
    118122//*****************************************************************************************************************
     123//
     124//****************************************************************************************
     125//****************************************************************************************
     126//****************************************************************************************
     127
     128static Function AfterCompiledHook( )                    //check if all windows are up to date to match their code
     129
     130        //these are tools which have been upgraded to this functionality
     131        //Modeling II = LSQF2_MainPanel
     132//      string WindowProcNames="LSQF2_MainPanel=IR2L_MainCheckVersion;IR2H_ControlPanel=IR2H_MainCheckVersion;DataMiningTool=IR2M_MainCheckVersion;DataManipulationII=IR3M_MainCheckVersion;"
     133//      WindowProcNames+="IR1I_ImportData=IR1I_MainCheckVersion;IR2S_ScriptingToolPnl=IR2S_MainCheckVersion;IR1R_SizesInputPanel=IR1R_MainCheckVersion;IR1A_ControlPanel=IR1A_MainCheckVersion;"
     134//      WindowProcNames+="IR1P_ControlPanel=IR1P_MainCheckVersion;IR2R_ReflSimpleToolMainPanel=IR2R_MainCheckVersion;IR3DP_MainPanel=IR3GP_MainCheckVersion;"
     135//      WindowProcNames+="IR1V_ControlPanel=IR1V_MainCheckVersion;IR2D_ControlPanel=IR2D_MainCheckVersion;IR2Pr_ControlPanel=IR2Pr_MainCheckVersion;UnivDataExportPanel=IR2E_MainCheckVersion;"
     136//      WindowProcNames+="IR1D_DataManipulationPanel=IR1D_MainCheckVersion;"
     137       
     138//      IR2C_CheckWIndowsProcVersions(WindowProcNames)
     139        NI1_CheckNikaUpdate(0)
     140end
    119141
    120142
     
    322344//      int16 LegendUseFolderName               //font size as integer
    323345//      int16 LegendUseWaveName         //font size as integer
     346        variable LastUpdateCheck
    324347        uint32 reserved[99]                     // Reserved for future use
    325348       
     
    722745//***********************************************************
    723746//***********************************************************
     747//****************************************************************
     748//****************************************************************
     749//***********************************
     750//***********************************
     751
     752Function NI1_CheckNikaUpdate(CalledFromMenu)
     753        variable CalledFromMenu
     754        //CalledFromMenu=1 run always...
     755        struct  NikaPanelDefaults Defs
     756        LoadPackagePreferences /MIS=1   "Nika" , "NikaDefaultPanelControls.bin", 0 , Defs
     757        if(V_Flag==0 && CalledFromMenu==0)             
     758                //print Defs
     759                if(Defs.Version==2)             //Lets declare the one we know as 1
     760                        if(datetime - Defs.LastUpdateCheck >30 * 24 * 60 * 60 || CalledFromMenu)
     761                                //call check version procedure and advise user on citations
     762                                NI1_CheckVersions()
     763                                Defs.LastUpdateCheck = datetime
     764                                SavePackagePreferences /FLSH=1   "Nika" , "NikaDefaultPanelControls.bin", 0 , Defs
     765                        endif
     766                else
     767                        Defs.Version                    =               2
     768                        Defs.LastUpdateCheck = datetime
     769                        NI1_CheckVersions()
     770                        SavePackagePreferences /FLSH=1   "Nika" , "NikaDefaultPanelControls.bin", 0 , Defs
     771                endif
     772        else            //either preferences do not exist or user asked for the check
     773                Defs.Version                    =               2
     774                Defs.LastUpdateCheck = datetime
     775                NI1_CheckVersions()
     776                SavePackagePreferences /FLSH=1   "Nika" , "NikaDefaultPanelControls.bin", 0 , Defs
     777        endif
     778         
     779end
     780
     781//****************************************************************
     782//****************************************************************
     783static Function NI1_CheckVersions()
     784        string PackageString   
     785        //create list of Igor procedure files on this machine
     786        NI1_ListIgorProcFiles()
     787        DoWIndow CheckForNikaUpdatePanel
     788        if(V_Flag)
     789                DoWIndow/F CheckForNikaUpdatePanel                                                             
     790        else
     791                Execute("CheckForNikaUpdatePanel()")                   
     792        endif
     793        //Nika code
     794        string OldDf=GetDataFolder(1)
     795        //create location for the results waves...
     796        NewDataFolder/O/S root:Packages
     797        NewDataFolder/O/S root:Packages:UseProcedureFiles
     798        variable/g InstalledNikaVersion
     799        variable/g WebNikaVersion               
     800        InstalledNikaVersion = NI1_FindFileVersion("Boot Nika.ipf")     
     801        //now get the web based version.
     802        NewPath  /O/Q TempPath  (SpecialDirPath("temporary", 0, 0, 0 ))
     803        //download the file
     804        variable InstallHadFatalError
     805        InstallHadFatalError = NI1_DownloadFile("IgorCode/Igor Procedures/Boot Nika.ipf","TempPath", "Boot Nika.ipf")
     806        sleep/s 1
     807        WebNikaVersion = NI1_FindVersionOfSingleFile("Boot Nika.ipf","TempPath")
     808        if(InstallHadFatalError || numtype(WebNikaVersion)!=0)
     809                DoAlert 0, "Check for latest Nika version failed. Check you Internet connection. Try later again..."
     810        endif
     811        DeleteFile /Z /P=tempPath "Boot Nika.ipf"       
     812        SetDataFOlder OldDf
     813end     
     814//****************************************************************
     815//****************************************************************
     816static Function NI1_FindFileVersion(FilenameStr)
     817        string FilenameStr
     818       
     819        Wave/T PathToFIles= root:Packages:UseProcedureFiles:PathToFIles
     820        Wave/T FileNames=root:Packages:UseProcedureFiles:FileNames
     821        Wave FileVersions =root:Packages:UseProcedureFiles:FileVersions
     822        variable i, imax=Numpnts(FileNames), versionFound
     823        string tempname
     824        versionFound=-1
     825        For(i=0;i<imax;i+=1)
     826                tempname = FileNames[i]
     827                if(stringmatch(tempname,FileNameStr))
     828                        versionFound = FileVersions[i]
     829                        return versionFound
     830                endif
     831        endfor
     832        return -1
     833end
     834//****************************************************************
     835//****************************************************************
     836//****************************************************************
     837//****************************************************************
     838
     839static Function NI1_FindVersionOfSingleFile(tempFileName,PathStr)
     840        string tempFileName, PathStr
     841               
     842                string tempScraptext
     843                Grep/P=$(PathStr)/Z/E="(?i)^#pragma[ ]*version[ ]*=[ ]*" tempFileName as "Clipboard"
     844                sleep/s (0.02)
     845                tempScraptext = GetScrapText()
     846                if(strlen(tempScraptext)>10)            //found line with #pragma version"
     847                        tempScraptext = replaceString("#pragma",tempScraptext,"")       //remove #pragma
     848                        tempScraptext = replaceString("version",tempScraptext,"")               //remove version
     849                        tempScraptext = replaceString("=",tempScraptext,"")                     //remove =
     850                        tempScraptext = replaceString("\t",tempScraptext,"  ")                  //remove optional tabulators, some actually use them.
     851                        tempScraptext = RemoveEnding(tempScraptext,"\r")                        //remove optional tabulators, some actually use them.
     852                        //forget about the comments behind the text.
     853                    //str2num is actually quite clever in this and converts start of the string which makes sense.
     854                        return str2num(tempScraptext)
     855                else             //no version found, set to NaN
     856                        return NaN
     857                endif
     858
     859end
     860
     861
     862//****************************************************************
     863//****************************************************************
     864//****************************************************************
     865//****************************************************************
     866static Function NI1_ListIgorProcFiles()
     867        GetFileFolderInfo/Q/Z/P=Igor "Igor Procedures" 
     868        if(V_Flag==0)
     869                NI1_ListProcFiles(S_Path,1 )
     870        endif
     871        GetFileFolderInfo/Q/Z NI1_GetIgorUserFilesPath()+"Igor Procedures:"
     872        if(V_Flag==0)
     873                NI1_ListProcFiles(NI1_GetIgorUserFilesPath()+"Igor Procedures:",0)
     874        endif
     875        KillPath/Z tempPath
     876end
     877 //****************************************************************
     878//****************************************************************
     879//****************************************************************
     880//****************************************************************
     881static Function NI1_ListProcFiles(PathStr, resetWaves)
     882        string PathStr
     883        variable resetWaves
     884       
     885        String abortMessage     //HR Used if we have to abort because of an unexpected error
     886       
     887        string OldDf=GetDataFolder(1)
     888        //create location for the results waves...
     889        NewDataFolder/O/S root:Packages
     890        NewDataFolder/O/S root:Packages:UseProcedureFiles
     891        //if this is top call to the routine we need to wipe out the waves so we remove old junk
     892        string CurFncName=GetRTStackInfo(1)
     893        string CallingFncName=GetRTStackInfo(2)
     894        variable runningTopLevel=0
     895        if(!stringmatch(CurFncName,CallingFncName))
     896                runningTopLevel=1
     897        endif
     898        if(resetWaves)
     899                        Make/O/N=0/T FileNames         
     900                        Make/O/N=0/T PathToFiles
     901                        Make/O/N=0 FileVersions
     902        endif
     903       
     904       
     905        //if this was first call, now the waves are gone.
     906        //and now we need to create the output waves
     907        Wave/Z/T FileNames
     908        Wave/Z/T PathToFiles
     909        Wave/Z FIleVersions
     910        If(!WaveExists(FileNames) || !WaveExists(PathToFiles) || !WaveExists(FIleVersions))
     911                Make/O/T/N=0 FileNames, PathToFIles
     912                Make/O/N=0 FileVersions
     913                Wave/T FileNames
     914                Wave/T PathToFiles
     915                Wave FileVersions
     916                //I am not sure if we really need all of those declarations, but, well, it should not hurt...
     917        endif
     918       
     919        //this is temporary path to the place we are looking into now... 
     920        NewPath/Q/O tempPath, PathStr
     921        if (V_flag != 0)                //HR Add error checking to prevent infinite loop
     922                sprintf abortMessage, "Unexpected error creating a symbolic path pointing to \"%s\"", PathStr
     923                Print abortMessage      // To make debugging easier
     924                Abort abortMessage
     925        endif
     926
     927        //list al items in this path
     928        string ItemsInTheFolder= IndexedFile(tempPath,-1,"????")+IndexedDir(tempPath, -1, 0 )
     929       
     930        //HR If there is a shortcut in "Igor Procedures", ItemsInTheFolder will include something like "HDF5 Browser.ipf.lnk". Windows shortcuts are .lnk files.       
     931       
     932        //remove all . files.
     933        ItemsInTheFolder = GrepList(ItemsInTheFolder, "^\." ,1)
     934        //Now we removed all junk files on Macs (starting with .)
     935        //now lets check what each of these files are and add to the right lists or follow...
     936        variable i, imax=ItemsInList(ItemsInTheFolder)
     937        string tempFileName, tempScraptext, tempPathStr
     938        variable IamOnMac, isItXOP
     939        if(stringmatch(IgorInfo(2),"Windows"))
     940                IamOnMac=0
     941        else
     942                IamOnMac=1
     943        endif
     944        For(i=0;i<imax;i+=1)
     945                tempFileName = stringfromlist(i,ItemsInTheFolder)
     946                GetFileFolderInfo/Z/Q/P=tempPath tempFileName
     947                isItXOP = IamOnMac * stringmatch(tempFileName, "*xop*" )
     948               
     949                if(V_isAliasShortcut)
     950                        //HR If tempFileName is "HDF5 Browser.ipf.lnk", or any other shortcut to a file, S_aliasPath is a path to a file, not a folder.
     951                        //HR Thus the "NewPath tempPath" command will fail.
     952                        //HR Thus tempPath will retain its old value, causing you to recurse the same folder as before, resulting in an infinite loop.
     953                       
     954                        //is alias, need to follow and look further. Use recursion...
     955                        if(strlen(S_aliasPath)>3)               //in case user has stale alias, S_aliasPath has 0 length. Need to skip this pathological case.
     956                                //HR Recurse only if S_aliasPath points to a folder. I don't really know what I'm doing here but this seems like it will prevent the infinite loop.
     957                                GetFileFolderInfo/Z/Q/P=tempPath S_aliasPath   
     958                                isItXOP = IamOnMac * stringmatch(S_aliasPath, "*xop*" )
     959                                if (V_flag==0 && V_isFolder&&!isItXOP)          //this is folder, so all items in the folder are included... Except XOP is folder too...
     960                                        NI1_ListProcFiles(S_aliasPath, 0)
     961                                elseif(V_flag==0 && (!V_isFolder || isItXOP))   //this is link to file. Need to include the info on the file...
     962                                        //*************
     963                                        Redimension/N=(numpnts(FileNames)+1) FileNames, PathToFiles,FileVersions
     964                                        tempFileName =stringFromList(ItemsInList(S_aliasPath,":")-1, S_aliasPath,":")
     965                                        tempPathStr = RemoveFromList(tempFileName, S_aliasPath,":")
     966                                        FileNames[numpnts(FileNames)] = tempFileName
     967                                        PathToFiles[numpnts(FileNames)] = tempPathStr
     968                                        //try to get version from #pragma version = ... This seems to be the most robust way I found...
     969                                        if(stringmatch(tempFileName, "*.ipf"))
     970                                                Grep/P=tempPath/E="(?i)^#pragma[ ]*version[ ]*=[ ]*" tempFileName as "Clipboard"
     971                                                sleep/s (0.02)
     972                                                tempScraptext = GetScrapText()
     973                                                if(strlen(tempScraptext)>10)            //found line with #pragma version"
     974                                                        tempScraptext = replaceString("#pragma",tempScraptext,"")       //remove #pragma
     975                                                        tempScraptext = replaceString("version",tempScraptext,"")               //remove version
     976                                                        tempScraptext = replaceString("=",tempScraptext,"")                     //remove =
     977                                                        tempScraptext = replaceString("\t",tempScraptext,"  ")                  //remove optional tabulators, some actually use them.
     978                                                        tempScraptext = removeending(tempScraptext," \r")                       //remove optional tabulators, some actually use them.
     979                                                        //forget about the comments behind the text.
     980                                                       //str2num is actually quite clever in this and converts start of the string which makes sense.
     981                                                        FileVersions[numpnts(FileNames)]=str2num(tempScraptext)
     982                                                else             //no version found, set to NaN
     983                                                        FileVersions[numpnts(FileNames)]=NaN
     984                                                endif
     985                                        else                    //no version for non-ipf files
     986                                                FileVersions[numpnts(FileNames)]=NaN
     987                                        endif
     988                                //************
     989
     990
     991                                endif
     992                        endif
     993                        //and now when we got back, fix the path definition to previous or all will crash...
     994                        NewPath/Q/O tempPath, PathStr
     995                        if (V_flag != 0)                //HR Add error checking to prevent infinite loop
     996                                sprintf abortMessage, "Unexpected error creating a symbolic path pointing to \"%s\"", PathStr
     997                                Print abortMessage      // To make debugging easier
     998                                Abort abortMessage
     999                        endif
     1000                elseif(V_isFolder&&!isItXOP)   
     1001                        //is folder, need to follow into it. Use recursion.
     1002                        NI1_ListProcFiles(PathStr+tempFileName+":", 0)
     1003                        //and fix the path back or all will fail...
     1004                        NewPath/Q/O tempPath, PathStr
     1005                        if (V_flag != 0)                //HR Add error checking to prevent infinite loop
     1006                                sprintf abortMessage, "Unexpected error creating a symbolic path pointing to \"%s\"", PathStr
     1007                                Print abortMessage      // To make debugging easier
     1008                                Abort abortMessage
     1009                        endif
     1010                elseif(V_isFile||isItXOP)
     1011                        //this is real file. Store information as needed.
     1012                        Redimension/N=(numpnts(FileNames)+1) FileNames, PathToFiles,FileVersions
     1013                        FileNames[numpnts(FileNames)-1] = tempFileName
     1014                        PathToFiles[numpnts(FileNames)-1] = PathStr
     1015                        //try to get version from #pragma version = ... This seems to be the most robust way I found...
     1016                        if(stringmatch(tempFileName, "*.ipf"))
     1017                                Grep/P=tempPath/E="(?i)^#pragma[ ]*version[ ]*=[ ]*" tempFileName as "Clipboard"
     1018                                sleep/s(0.02)
     1019                                tempScraptext = GetScrapText()
     1020                                if(strlen(tempScraptext)>10)            //found line with #pragma version"
     1021                                        tempScraptext = replaceString("#pragma",tempScraptext,"")       //remove #pragma
     1022                                        tempScraptext = replaceString("version",tempScraptext,"")               //remove version
     1023                                        tempScraptext = replaceString("=",tempScraptext,"")                     //remove =
     1024                                        tempScraptext = replaceString("\t",tempScraptext,"  ")                  //remove optional tabulators, some actually use them.
     1025                                        //forget about the comments behind the text.
     1026                                       //str2num is actually quite clever in this and converts start of the string which makes sense.
     1027                                        FileVersions[numpnts(FileNames)-1]=str2num(tempScraptext)
     1028                                else             //no version found, set to NaN
     1029                                        FileVersions[numpnts(FileNames)-1]=NaN
     1030                                endif
     1031                        else                    //no version for non-ipf files
     1032                                FileVersions[numpnts(FileNames)-1]=NaN
     1033                        endif
     1034                endif
     1035        endfor
     1036//      if(runningTopLevel)
     1037//              //some output here...
     1038//              print "Found   "+num2str(numpnts(FileNames))+"  files in   "+PathStr+" folder, its subfolders and linked folders and subfolders"
     1039//              KillPath/Z tempPath
     1040//      endif
     1041 
     1042        setDataFolder OldDf
     1043end
     1044
     1045
     1046//***********************************
     1047//***********************************
     1048//***********************************
     1049//***********************************
     1050static Function /S NI1_Windows2IgorPath(pathIn)
     1051        String pathIn
     1052        String pathOut = ParseFilePath(5, pathIn, ":", 0, 0)
     1053        return pathOut
     1054End
     1055//***********************************
     1056//***********************************
     1057//***********************************
     1058//***********************************
     1059
     1060static Function/S NI1_GetIgorUserFilesPath()
     1061        // This should be a Macintosh path but, because of a bug prior to Igor Pro 6.20B03
     1062        // it may be a Windows path.
     1063        String path = SpecialDirPath("Igor Pro User Files", 0, 0, 0)
     1064        path = NI1_Windows2IgorPath(path)
     1065        return path
     1066End
     1067
     1068//***********************************
     1069//***********************************
     1070//****************************************************************
     1071//****************************************************************
     1072
     1073static Function NI1_DownloadFile(StringWithPathAndname,LocalPath, LocalName)
     1074        string StringWithPathAndname, LocalPath, LocalName
     1075
     1076        variable InstallUsingLocalCopy = 0
     1077        variable InstallUsinghttp = 1
     1078        variable i
     1079        variable APSError=0
     1080        variable OtherError=0
     1081        if(InstallUsingLocalCopy)               
     1082                string tempFldrNm
     1083                tempFldrNm = removeFromList("IgorCode",StringWithPathAndname,"/")
     1084                PathInfo LocalCopyForInstallation
     1085                if(V_Flag==0)           //local copy path was not found.
     1086                        //let's try to find in where Igor experiment started from, that path is known as "home"
     1087                        string ItemsInTheFolder= IndexedDir(home, -1, 0 )
     1088                        if(stringmatch(ItemsInTheFolder, "*IgorCode;*" ))
     1089                                PathInfo/S home
     1090                                NewPath /C/O/Q  LocalCopyForInstallation, S_Path+"IgorCode:"
     1091                                Print "Found IgorCode folder in location where this experiment started, using that folder as file source"
     1092                        else           
     1093                                NewPath /C/M="Find Folder called \"IgorCode\""/O/Q  LocalCopyForInstallation
     1094                                if(V_Flag!=0)
     1095                                        abort "Local copy of Installation files not found and user cancelled. Visit: http://usaxs.xray.aps.anl.gov/staff/ilavsky/Nika.html if you want to download it"
     1096                                endif
     1097                        endif
     1098                endif
     1099                PathInfo LocalCopyForInstallation
     1100                GetFileFolderInfo  /P=$(LocalPath) /Q /Z S_Path+ReplaceString("/", tempFldrNm, ":")
     1101                if(V_Flag!=0)
     1102                        NewPath /C/M="Find Folder called \"IgorCode\""/O/Q  LocalCopyForInstallation
     1103                endif
     1104                PathInfo LocalCopyForInstallation
     1105                CopyFile /O/P=$(LocalPath)/Z S_Path+ReplaceString("/", tempFldrNm, ":")  as LocalName
     1106                // Remove ReadOnly property from the file. This is important on WIndows when copying from CD or DVD
     1107                SetFileFolderInfo/P=$(LocalPath)/RO=0 LocalName
     1108        elseif(!InstallUsinghttp)
     1109                string httpurl="http://ftp.xray.aps.anl.gov/usaxs/"
     1110                //string url="http://ftp.xray.aps.anl.gov/usaxs/"               //this is http address for future use with URLencode, URLdecode, and FetchURL
     1111                String httpPath = httpurl+StringWithPathAndname //HR Use local variable for easier debugging.
     1112                //HR Print ftpPath      //HR For debugging
     1113                        //// Get a binary image file from a web server and then
     1114                        //// save the image to a file on the desktop.
     1115                httpPath =  ReplaceString(" ", httpPath, "%20")         //handle just spaces here...
     1116                String fileBytes, tempPathStr
     1117                Variable error = GetRTError(1)
     1118                i=0
     1119                Do
     1120                         fileBytes = FetchURL(httpPath)
     1121                         error = GetRTError(1)
     1122                         sleep/S 0.2
     1123                         if(error!=0)
     1124                                 print "file: "+httpPath+" download FAILED, this was http download attempt No: "+num2str(i)
     1125                                // print "file: "+httpPath+" downloaded "+num2str(i+1)+" times"
     1126                                 print "Trying to download same file using ftp"
     1127                                 tempPathStr = ReplaceString("http://ftp.xray.aps.anl.gov/usaxs/", httpPath, "ftp://ftp.xray.aps.anl.gov/pub/usaxs/")
     1128                                 fileBytes = FetchURL(tempPathStr)
     1129                                 error = GetRTError(1)
     1130                                 sleep/S 0.2
     1131                                 if(error!=0)
     1132                                         print "file: "+tempPathStr+" download FAILED, this was ftp download attempt No: "+num2str(i+1)
     1133                                 else
     1134                                         print "file: "+tempPathStr+" downloaded succesfully by ftp, this was ftp download attempt No: "+num2str(i+1)
     1135                                 endif
     1136                        endif
     1137                        i+=1
     1138                while((error!=0 || GrepString(fileBytes, "ERROR: Proxy Error" ))&& i<5)
     1139                if ( error != 0 || GrepString(fileBytes, "ERROR: Proxy Error" ) || i>=5)
     1140                        if(GrepString(fileBytes, "ERROR: Proxy Error" ) )
     1141                                Print "********************     APS Proxy error           *******************"
     1142                                Print "**** Please, try installing later again or try using ftp protocol or local copy method."
     1143                                Print "**** Also, report problem to ilavsky@aps.anl.gov  the following, so we can get this fixed:"
     1144                                Print "APS proxy error has consistently produced error while trying to download following file:"+StringWithPathAndname
     1145                                Print Date() +"   "+time()
     1146                                print "Igor version :"+IgorInfo(3)
     1147                                APSError+=1
     1148                        elseif(error != 0 || i>=5)
     1149                                Print "*************         S E R V E R      E R R O R                 ****************"
     1150                                Print "**** Please, report problem to ilavsky@aps.anl.gov  the following:"
     1151                                Print "Failed to get from http/ftp server following file.....   " + StringWithPathAndname
     1152                                Print Date() +"   "+time()
     1153                                print "Igor version :"+IgorInfo(3)
     1154                        endif
     1155                        print "********************  end of error message  ********************"
     1156                        OtherError=1
     1157                else
     1158                        Variable refNum
     1159                        Open/P=$(LocalPath)  refNum as LocalName
     1160                        FBinWrite refNum, fileBytes
     1161                        Close refNum
     1162                        SetFileFolderInfo/P=$(LocalPath)/RO=0 LocalName         
     1163                endif
     1164                //FTPDownload /O/V=0/P=$(LocalPath)/Z ftpPath, LocalName       
     1165        else
     1166                string url="ftp://ftp.xray.aps.anl.gov/pub/usaxs/"
     1167                //string url="http://ftp.xray.aps.anl.gov/usaxs/"               //this is http address for future use with URLencode, URLdecode, and FetchURL
     1168                String ftpPath = url+StringWithPathAndname      //HR Use local variable for easier debugging.
     1169                //HR Print ftpPath      //HR For debugging
     1170                //ftpPath = ReplaceString("GenCurvefit", ftpPath, "GenCurveFit", 1)     //HR Quick and Dirty fix - change spelling so we find the file on the FTP server.
     1171                FTPDownload /O/V=0/P=$(LocalPath)/Z ftpPath, LocalName 
     1172       
     1173                if(V_flag!=0)   //ftp failed...
     1174                        Print "*************                  E R R O R                       ****************"
     1175                        Print "**** Please, report problem to ilavsky@aps.anl.gov  the following:"
     1176                        Print "Failed to load from ftp server following file.....   " + StringWithPathAndname
     1177                        Print Date() +"   "+time()
     1178                        print "Igor version :"+IgorInfo(3)
     1179                        print "********************  end of error message  ********************"
     1180                else //ftyp success, change the read only flag here...
     1181                // Remove ReadOnly property from the file:
     1182                SetFileFolderInfo/P=$(LocalPath)/RO=0 LocalName         
     1183                endif
     1184        endif
     1185        variable nosuccess
     1186        if(V_Flag!=0)
     1187                nosuccess=1
     1188        endif
     1189        return OtherError+APSError
     1190       
     1191end
     1192
     1193//****************************************************************
     1194//****************************************************************
     1195//***********************************
     1196//***********************************
     1197
     1198
     1199//Motofit paper [J. Appl. Cryst. 39, 273-276]
     1200//http://scripts.iucr.org/cgi-bin/paper?S0021889806005073
     1201//J. Appl. Cryst. (2006). 39, 273-276    [ doi:10.1107/S0021889806005073 ]
     1202//A. Nelson, Co-refinement of multiple-contrast neutron/X-ray reflectivity data using MOTOFIT
     1203//
     1204
     1205
     1206
     1207Function NI1_CheckVersionButtonProc(ba) : ButtonControl
     1208        STRUCT WMButtonAction &ba
     1209
     1210        switch( ba.eventCode )
     1211                case 2: // mouse up
     1212                        // click code here
     1213                        if(stringmatch(ba.ctrlName,"OpenNikaWebPage"))
     1214                                //open web page with Nika
     1215                                BrowseURL "http://usaxs.xray.aps.anl.gov/staff/ilavsky/nika.html"
     1216                        endif
     1217                        if(stringmatch(ba.ctrlName,"OpenNikaManuscriptWebPage"))
     1218                                //open web page with Nika
     1219                                BrowseURL "http://dx.doi.org/10.1107/S0021889812004037"
     1220                        endif
     1221                        if(stringmatch(ba.ctrlName,"OpenGCManuscriptWebPage"))
     1222                                //doi:10.1007/s11661-009-9950-x
     1223                                BrowseURL "http://www.jomgateway.net/ArticlePage.aspx?DOI=10.1007/s11661-009-9950-x"
     1224                        endif
     1225                       
     1226                        break
     1227                case -1: // control being killed
     1228                        break
     1229        endswitch
     1230
     1231        return 0
     1232End
     1233//****************************************************************
     1234//****************************************************************
     1235//***********************************
     1236//***********************************
     1237
     1238Window CheckForNikaUpdatePanel() : Panel
     1239        PauseUpdate; Silent 1           // building window...
     1240        NewPanel /W=(116,68,880,400)/K=1 as "Nika check for updates"
     1241        SetDrawLayer UserBack
     1242        SetDrawEnv fsize= 20,fstyle= 3,textrgb= (0,0,65535)
     1243        DrawText 114,37,"Once-per-month reminder to check for Nika update"
     1244        SetDrawEnv fsize= 14,fstyle= 3,textrgb= (65535,0,0)
     1245        DrawText 27,110,"Reminder: When publishing data reduced using Nika package, please cite following manuscripts:"
     1246        SetDrawEnv textrgb= (0,0,65535)
     1247        DrawText 27,133,"J. Ilavsky Nika: software for two-dimensional data reduction "
     1248        SetDrawEnv textrgb= (0,0,65535)
     1249        DrawText 27,158,"J. Appl. Cryst. (2012). 45, 324Ð328"
     1250        SetDrawEnv textrgb= (0,0,65535)
     1251        DrawText 27,205,"Glassy Carbon Absolute Int. Calibration: F. Zhang, J. Ilavsky, G. G. Long, J. P.G. Quintana, "
     1252        SetDrawEnv textrgb= (0,0,65535)
     1253        DrawText 27,230,"A. J. Allen, and P. Jemian, Glassy Carbon as an Absolute Intensity Calibration Standard"
     1254        SetDrawEnv textrgb= (0,0,65535)
     1255        DrawText 27,255,"for Small-Angle Scattering, MMTA, DOI: 10.1007/s11661-009-9950-x"
     1256
     1257        SetDrawEnv fstyle= 2,fsize= 10,textrgb= (0,0,0)
     1258        DrawText 10,320,"This tool runs automatically every 30 days on each computer. It can be also called from the SAS2D menu as \"Check for updates\""
     1259
     1260        SetVariable InstalledNikaVersion,pos={48,56},size={199,15},bodyWidth=100,title="Installed Nika Version"
     1261        SetVariable InstalledNikaVersion,help={"This is the current Nika version installed"}
     1262        SetVariable InstalledNikaVersion,fStyle=1
     1263        SetVariable InstalledNikaVersion,limits={0,0,0},value= root:Packages:UseProcedureFiles:InstalledNikaVersion,noedit= 1
     1264        SetVariable WebNikaVersion,pos={297,56},size={183,15},bodyWidth=100,title="Web Nika Version"
     1265        SetVariable WebNikaVersion,help={"This is the current Nika version installed"}
     1266        SetVariable WebNikaVersion,fStyle=1
     1267        SetVariable WebNikaVersion,limits={0,0,0},value= root:Packages:UseProcedureFiles:WebNikaVersion,noedit= 1
     1268        Button OpenNikaWebPage,pos={551,53},size={150,20},proc=NI1_CheckVersionButtonProc,title="Open Nika web page"
     1269        Button OpenNikaManuscriptWebPage,pos={551,143},size={150,20},proc=NI1_CheckVersionButtonProc,title="Manuscript web page"
     1270        Button OpenGCManuscriptWebPage,pos={551,240},size={150,20},proc=NI1_CheckVersionButtonProc,title="Manuscript web page"
     1271EndMacro
     1272//****************************************************************
     1273//****************************************************************
     1274//***********************************
     1275//***********************************
Note: See TracChangeset for help on using the changeset viewer.