<?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>AutoUpdater - About (All Contents)</title> <meta name="keywords" content="omnis studio, autoupdater documentation" /> <link rel="stylesheet" type="text/css" href="http://www.studiotips.net/css/codedoc.css" /> <link rel="stylesheet" type="text/css" media="print" href="http://www.studiotips.net/css/codedoc_print.css" /> </head> <body> <div id="container"> <p><a href = ../index.html > Autoupdater </a> &nbsp &gt; &nbsp <a href = index.html > About </a> &nbsp &gt; &nbsp About (All Contents)</p> <a name="autoupdater" /> <h2>AutoUpdater</h2> <p>AutoUpdater is a utility can be implemented for any Omnis Studio application. AutoUpdater can be used by developers to simplify and automate the process of updating runtime clients with newer release files of any Omnis Studio application which the developer creates.</p> <p>AutoUpdater is a single Omnis Studio library. The AutoUpdater library is unlocked. All of the AutoUpdater code is good old Omnis Studio code which developers can read, step through, and if necessary debug.</p> <p>AutoUpdater supports serving newer release files on:</p> <ol> <li><strong>FTP</strong> - any FTP server accessible by the runtime clients.</li> <li><strong>DB</strong> - any database accessible by the runtime clients.</li> <li><strong>LAN</strong> - any mountable drive accessible by the runtime clients on a local area network. (This is the least recommended approach)</li> </ol> <p>Runtime clients can specifiy:</p> <ol> <li>Release type of <em>Final</em> or <em>Beta</em> and switch back and forth at any time.</li> <li>Update frequency of <em>Manual</em> or <em>On Launch</em>.</li> <li><em>Prompt before Installing Updates</em> or automatically download and install newer releases.</li> </ol> <p>Developers can specify:</p> <ol> <li><em>Expiry Date</em> - after which period the runtime client must obtain an new AutoUpdater library from the developer in order to be able to download new updates.</li> <li><em>Server Type</em> (<span class="code">FTP, DB, LAN</span>), and the address, user name and password. The user name and password are not accessible by the runtime clients.</li> <li><em>Package(s)</em> to be included with the application. Each package specifies the files included in the package.</li> </ol> <p>Developers upload files to their AutoUpdater files server and prepare an AutoUpdater library for their specific application and client. The AutoUpdater library is shipped to the runtime client. When the AutoUpdater library is opened it immediately downloads and installs the packages and files included with the application and then opens the application.</p> Newer release files are uploaded to the files server by the developer. The runtime client AutoUpdater library checks the file server for new updates and if found, downloads and installs the newer version files on the client's computer. <a name="aboutthismanual" /> <h3>About this Manual</h3> <p>This manual begins with a <span class="nav">QuickStart Tutorial</span> which will take you through the basics of setting up <span class="nav">AutoUpdater</span> to work with your Omnis Studio application.</p> The more detailed documentation is after the <span class="nav">Quickstart Tutorial</span>. You should scan through the <span class="nav">AutoUpdater Documentation</span> after you complete the <span class="nav">Quickstart Tutorial</span> to get a deeper understanding of AutoUpdater and to learn about the advanced features of AutoUpdater. <a name="quickstarttutorial" /> <h2>Quickstart Tutorial</h2> For those of you who don't like reading documentation, this <span class="nav">Quickstart Tutorial</span> will get you up and running quickly with your own <span class="nav">AutoUpdater</span> library. <a name="preparingyourautoupdaterlibrary" /> <h3>Preparing your AutoUpdater Library</h3> <ol> <li>Create a new folder and name it whatever you call your Omnis Studio application. The folder name can be any name. For this tutorial we will refer to the folder as the <span class="file">APP</span> folder.</li> <li>Put a <strong>copy</strong> of the <span class="file">AutoUpdater.lbs</span> library inside your APP folder.</li> <li><strong>Rename</strong> the <span class="file">AutoUpdater.lbs</span> library to something appropriate for you application. e.g. <span class="file">MyAppName_AutoUpdater.lbs</span> (<span class="file">MyAppName</span> would be replaced with the short name for your application.)</li> <li>Make a <em>subfolder</em> inside the <span class="file">APP</span> folder, name it <span class="file">libraries</span>. </li> <li>Drag your application's library(s) and folders into the <span class="file">libraries</span> <em>subfolder</em>.<br /> <br /> <div class="image_sideline"><img src="http://www.studiotips.net/css/images/warning.gif" alt="Warning" /><p><strong>Note</strong>: If your application has large size files and many of them, just create and drag in a small test library for this quick start tutorial.</p> </div></li> <li>Open the <span class="file">MyAppName_AutoUpdater.lbs</span> library with a developer version of Omnis Studio.</li> <li>You will be asked if you want to open the main library. Click the <span class="nav">No</span> button.</li> <li>The <span class="nav">AutoUpdater</span> menu will be installed. Select the <span class="nav">Your App Name</span> menu line. This opens the <span class="nav">AutoUpdater</span> window.</li> <li>The <span class="nav">AutoUpdater</span> window will open to the <span class="nav">Preferences</span> > <span class="nav">Developer</span> tab.</li> <li>Enter the full name of your application in the <span class="nav">Application Name</span> field.</li> <li>Enter the short name of your application in the <span class="nav">Package Name</span> field. If you want to have client specific packages append the short name with a client ID. e.g. <kbd>MyAppName_Jones</kbd></li> <li>Select the <span class="nav">Preferences</span> > <span class="nav">Files Sever</span> tab. For testing purposes you can leave the current settings which will use the <span class="file">studiotips.net</span> FTP server. Later on you will want to set the files server to your own FTP server or a database on your local network.</li> <li>Select the <span class="nav">Preferences</span> > <span class="nav">Runtime User</span> tab. Take a look at the settings. You can change them if you like.</li> <li>Select the <span class="nav">Create Package</span> tab.</li> <li>Click the <span class="nav">Prepare Pacakge</span> button. All of the files inside your <span class="file">APP</span> folder should be listed, except the <span class="file">MyAppName_AutoUpdater.lbs</span> library.</li> <li>Click the <span class="nav">Upload Package and Files...</span> button. This should upload your package description file and your files to the <span class="file">studiotips.net</span> server.</li> <li><span class="nav">Quit</span> your developer version of Omnis Studio.</li> </ol>You are now ready to runtime test your <span class="file">MyAppName_AutoUpdater</span> library. <a name="testingyourautoupdaterlibrary" /> <h3>Testing Your AutoUpdater Library</h3> <ol> <li>Create a <strong>new empty</strong> folder on your <span class="file">Desktop</span>. Name it <span class="file">AutoUpdater_Test1</span></li> <li>Put a <strong>copy</strong> of your <span class="file">MyAppName_AutoUpdater</span> library into the <span class="file">AutoUpdater_Test1</span> folder.</li> <li>Using a runtime version of Omnis Studio open the <span class="file">MyAppName_AutoUpdater</span> library inside the <span class="file">AutoUpdaterTest1</span> folder.</li> <li>All going well the <span class="nav">AutoUpdater</span> library will prompt you with a window informing you that an update can be downloaded. </li> <li>Click the <span class="nav">Install</span> button to proceed.</li> <li>All going well <span class="nav">AutoUpdater</span> will download the package and files from the server, create the subfolder(s) inside the <span class="file">AutoUpdater_Test1</span> folder, install the downloaded files, and then open the library(s) directly inside the <span class="file">libraries</span> folder.</li> </ol> <p>There you have it, <span class="nav">Quickstart AutoUpdater</span>!</p> You are now ready to test uploading newer version files. <a name="uploadingnewerversionfiles" /> <h3>Uploading Newer Version Files</h3> <p>In this section of the tutorial we will use <span class="nav">AutoUpdater</span> to upload a newer version library to the files server with a <strong>developer</strong> version of Omnis Studio, then open the <span class="file">AutoUpdater_Test1</span> with a <strong>runtime</strong> version of Omnis Studio to watch how it downloads the newer version of the library to the runtime user.</p> <ol> <li>Using a <strong>developer</strong> version of Omnis Studio reopen the <span class="file">MyAppName_AutoUpdater</span> library which which you prepared in the first section of this tutorial. (<strong>Not</strong> the one inside the <span class="file">AutoUpater_Test1</span> folder.)</li> <li>When it asks if you want to open the main library, click the <span class="nav">Yes</span> button.</li> <li>Go into the <span class="code">mMainWindow</span> of your application's main library and add a comment line in text field on the window or make some other change that you will be able to see. (Drag and drop a button on the window)</li> <li>Right-click on the main library in the <span class="nav">F2 Browser</span> and select <span class="nav">Save</span> to make sure that the change is saved to the disk.</li> <li>Open the <span class="nav">AutoUpdater</span> window from the <span class="nav">AutoUpdater</span> menu.</li> <li>Click the <span class="nav">File Updates</span> tab.</li> <li>Click the <span class="nav">Add Files...</span> button. You will be prompted to select a file. Navigate to and select the main library which you just modified. (You can also drag and drop files onto the files list.)</li> <li>In the <span class="nav">Release Date</span> line of the <span class="nav">File Updates</span> tab window increment the release hour droplist to the next hour. <br /> <br /> <div class="image_sideline"><img src="http://www.studiotips.net/css/images/note.gif" alt="Note" /><p>The release hour droplist defaults to the current hour. If you do more than one release of the same library in the same hour, you need to manually increment it to the next hour.</p> </div></li> <li>Click the <span class="nav">Upload Files...</span> button. All going well your newer file will be uploaded to the server and you will see it appear in the <span class="nav">Server Files</span> list, replacing the older version in the list.<br /> <br /> <div class="image_sideline"><img src="http://www.studiotips.net/css/images/warning.gif" alt="Warning" /><p>Windows users may need to first close the library files which they wish to upload before cliciking the <span class="nav">Upload Files...</span> button.</p> </div></li> <li>Click the <span class="nav">Show All Files</span> radio button below the <span class="nav">Server Files</span> list. You will see all of the files which have been uploaded for the selected package.</li> </ol> <p>You are now ready to test updating the runtime library.</p> You can leave your developer version of Omnis Studio open. <a name="updatingtheruntimeapp" /> <h3>Updating the Runtime App</h3> <ol> <li>Using a runtime version of Omnis Studio open the <span class="file">MyAppName_AutoUpdater</span> library inside the <span class="file">AutoUpdater_Test1</span> folder.</li> <li>All going well the <span class="nav">AutoUpdater</span> library will prompt you with a window informing you that an update can be downloaded. The file which you uploaded to the files server should be list.</li> <li>Click the <span class="nav">Download</span> button to proceed.</li> <li>All going well <span class="nav">AutoUpdater</span> will download the newer version library from the server, install the downloaded file, and then open the library(s) directly inside the <span class="file">libraries</span> folder.</li> </ol> <p>That's it for the <span class="nav">Quickstart Tutorial</span>.</p> You now have the basics for using <span class="nav">AutoUpdater</span>. Scan through the <span class="nav">AutoUpdater</span> documentation to learn more features and ways to customize <span class="nav">AutoUpdater</span> to suit your requirements. <a name="addingautoupdatertoyourapp" /> <h2>Adding AutoUpdater to Your App</h2> This section covers adding AutoUpdater to your existing Omnis Studio application. <a name="filestructure" /> <h3>File Structure</h3> <p>The strategy behind AutoUpdater is that the user opens the AutoUpdater library rather than opening you application's library(s).</p> <p>This give the AutoUpdater library a chance to:</p> <ol> <li>Check to make sure all the files which are supposed to be include in the application are present and download and install any missing files.</li> <li>Check for any newer version files on the files server and download and replace any older version files.</li> </ol> <p>AutoUpdater then opens your application's main library. Your application's main library is responsible for opening any additional libraries if your have a multi-library app.</p> <p>In order to make it simple for the user, it is recommended that you do the following to set up your application for use with AutoUpdater.</p> <ol> <li>Create a new empty folder. Name it an appropriate name, such as your application's short name. e.g. <span class="file">MyAmazingApp</span> In this AutoUpdater documentation we refer to this folder as the <span class="file">APP</span> folder.</li> <li>Put a copy of the AutoUpdater library inside the <span class="file">APP</span> folder. Rename to an appropriate name that makes sense to your users. e.g. <span class="file">open_MyAmazingApp</span> or <span class="file">MyAmazingApp_AutoUpdater</span>. This is the file your users will double-click to open your application on their computer.</li> <li>Create a <em>subfolder</em> inside the <span class="file">APP</span> folder. Name it <kbd>libraries</kbd>.</li> <li>Drag your application's files and folders inside the <span class="file">libraries</span> folder. Your application's main library (the one users used to double-click to open your application) must be located directly inside the <span class="file">libraries</span> subfolder.</li> </ol><div class="image_sideline"><img src="http://www.studiotips.net/css/images/note.gif" alt="Note" /><p>Some developers have indicated that they want to copy the AutoUpdater library classes into their own main library, negating the need for a separate AutoUpdater library. Theoretically this is possible to do, however, I have not attempted to do this with any of my own applications. It does mean that whenever your main library is updated you will have to do a self-update... a tricky operation because it involves an open library to replace itself.</p> </div> <a name="copyclasses" /> <h3>Copy Classes</h3> <p>There are a few AutoUpdater classes which you need to copy to your application's main library.</p> <ol> <li>Open the AutoUpdater library located in your <span class="file">APP</span> folder using your developer version of Omnis Studio.<br /> <br /> <div class="image_sideline"><img src="http://www.studiotips.net/css/images/warning.gif" alt="Warning" /><p><strong>Never</strong> open the AutoUpdater library in your development APP folder with a <em>runtime</em> version of OMST! Doing so could cause your development libraries to be overwritten with the last version of the libraries on the files server. Not a good thing!<br /> <br /> AutoUpdater will <strong>not</strong> download files from the files server if you are using a <em>developer</em> version of Omnis Studio.</p> </div></li> <li>When AutoUpdater asks if you want to open the main library, click the <span class="nav">Yes</span> button. All going well your application will be opened.</li> <li>Press <kbd>F2</kbd> to open the <span class="nav">F2 Browser</span>.</li> <li>Expand the AutoUpdater library node under the Libraries not of the F2 Browser. (The AutoUpdater library will be whatever file name you gave it.)</li> <li>Select the <span class="code">Copy to Main Library</span> folder.</li> <li>Drag the <span class="code">mAutoUpdater</span> and the <span class="code">oAutoUpdater</span> classes to your application's main library.</li> </ol> <a name="menulines" /> <h3>Menu Lines</h3> <p>You will now add a menu line to one of your application's menus to give your runtime users access to sending messages to your application's AutoUpdater library.</p> <ol> <li>Add a menu line to your application's <em>main</em> menu or your application's <em>help</em> menu.</li> <li>Select the added menu line and set the following properties for the new menu line:</li><ul> <li><span class="code">$cascading</span> - select the <span class="code">mAutoUpdater</span> class</li> <li><span class="code">$name</span> - enter <kbd>AutoUpdater</kbd></li> <li><span class="code">$text</span> - enter <kbd>Updates...</kbd> or whatever is appropriate to your local language.</li> </ul> <li>Remove and reinstall the menu.</li> <li>Select the <span class="nav">Update Preferences...</span> line in the <span class="nav">Software Updates</span> cascading menu. All going well the runtime <span class="nav">AutoUpdater Preferences</span> window will be opened.</li> </ol><div class="image_sideline"><img src="http://www.studiotips.net/css/images/tip.gif" alt="Tip" /><p>You can change the menu line <span class="code">$text</span> properties of the <span class="code">mAutoUpdater</span> menu to suit your local language.</p> </div> <a name="preferences" /> <h3>Preferences</h3> <p>The next step is to set up the AutoUpdater <span class="nav">Preferences</span> for your application.</p> <ol> <li>From the AutoUpdater menu, select the menu line for your application. It might still be called <span class="nav">My App</span></li> <li>The <span class="nav">Preferences</span> > <span class="nav">Developer</span> tab will already be selected.</li> <li>Enter the full name of your application in the <span class="nav">Application Name</span> field. As you enter the application name the window title and AutoUpdater menu line will be updated.</li> <li>Enter the short name of your application in the <span class="nav">Package Name</span> field. If you have different version of your application for different clients append a client's ID to the package name.</li> </ol> <a name="filesserverdatabasesettings" /> <h3>Files Server - Database Settings</h3> <p>The next step is to set up the <em>files server</em> for your application.</p> <p>If all of your users are operating on a local network with a common database it is recommended that you use a database as a files server.</p> <p>To set up a database as a <em>files server</em>:</p> <ol> <li>Create a database named <kbd>autoupdater</kbd> using your database's administration tool.</li> <li>If required by your database create a user who has authority to create tables in the <span class="code">autoupdater</span> database. </li> <li>Select the <span class="nav">Preferences</span> > <span class="nav">Files Server</span> tab</li><ul> <li><span class="nav">Server Type</span> - select <kbd>Database</kbd></li> <li><span class="nav">DAM Name</span> - select the appropriate DAM for your database. (If your database is not listed, see the section in the documentation for adding DAMs to AUP)</li> <li>Enter the remaining fields as appropriate for the <span class="nav">AutoUpdater</span> database you have created.</li> </ul> <li>Click the <span class="nav">Ping Server</span> button. All going well, AutoUpdater will logon to your <span class="code">autoupdater</span> database and immediately create the tables it needs.</li> </ol> <a name="filesserverftpsettings" /> <h3>Files Server - FTP Settings</h3> <p>To set up an FTP server as a <em>files server</em>:</p> <ol> <li>Create an <span class="file">autoupdater</span> folder on your FTP site.</li> <li>Create an <span class="code">ftp_autoupdater</span> <em>user</em> on your FTP site with a password. The <span class="code">ftp_autoupdater</span> user should log directly into the <span class="file">autoupdater</span> directory and not have rights to go any higher in your directory structure.</li> <li>Under the <span class="nav">Preferences</span> > <span class="nav">Files Server</span> tab</li><ul> <li><span class="nav">Server Type</span> - select <kbd>FTP Server</kbd></li> <li>Enter the remaining fields as appropriate for the FTP files server you have prepared.</li> </ul> <li>Click the <span class="nav">Ping Server</span> button to make sure AutoUpdater can ping your FTP files server. (Provided it will respond to <span class="code">TCPPing</span>)</li> <li>Click the <span class="nav">Connect</span> button to FTPConnect to the FTP server.</li> </ol> <a name="createpackage" /> <h3>Create Package</h3> <p>Create and upload your first package in the same manner as you did in the <span class="nav">Quickstart Tutorial</span>.</p> <ol> <li>Select the <span class="nav">Create Package</span> tab.</li> <li>Click the <span class="nav">Prepare Package</span> button.</li> <li>Click the <span class="nav">Upload Package and Files...</span> button.</li> <li>All going well your package and files will be uploaded to (inserted into) your <span class="code">autoupdater</span> database.</li> </ol>Your application is now AutoUpdater savvy! <a name="distributingyourapplication" /> <h3>Distributing your Application</h3> <p>Distributing your AutoUpdater savvy application to runtime users who have Omnis Studio installed on their computer is easy.</p> <ol> <li>Copy your AutoUpdater library to an empty appropriately named folder. e.g. <span class="file">MyAmazingApp</span></li> <li>Copy the folder with the enclosed AutoUpdater library to the runtime computer.</li> <li>Open the AutoUpdater library using a runtime version of Omnis Studio.</li> <li>AutoUpdater will connect to the specified files server and download and install all the files specified by the package.</li> <li>Each subsequent time the runtime user opens their AutoUpdater library, newer version files will be downloaded and installed prior to opening the application.</li> </ol> <a name="summary" /> <h3>Summary</h3> <p>That covers the basics for adding AutoUpdater to your application, setting up your own files server, and distributing your AutoUpdater savvy application.</p> For a more in depth understanding of AutoUpdater and additional features read the <span class="nav">Technical Documentation</span> section. <a name="technicaldocumentation" /> <h2>Technical Documentation</h2> <p>This section of the AutoUpdater manual provides technical information on how AutoUpdater works and additional features.</p> The AutoUpdater library is unlocked, so you can look at the actual classes and code, and even step through the code to fully understand how things work. <a name="glossary" /> <h3>Glossary</h3> <p>The following is a list of terms used in the AutoUpdater documentation.</p> <ol> <li><em>Application</em> - The complete set of files which make up an Omnis Studio application. The files can be libraries, data files, text files, images files, etc. An <em>application</em> is made up of one or more <em>packages</em>.</li> <li><em>Package</em> - A text file that describes the list of files included in the package. The description includes whether the file is <em>included</em> or to be <em>deleted</em> and the relative file path on the computer. The relative path starts from the <span class="code">APP</span>, <span class="code">OMNISSTARTUP</span>, <span class="code">OMNIS</span>, or <span class="code">USERPREFS</span> folder.<br /> <br /> <p class="image"><img src="./images/AutoUpdaterAppPkgsFiles.png" alt="AutoUpdaterAppPkgsFiles.png" /></p> </li> <li><span class="code">APP</span> folder - The parent folder of the AutoUpdater library.</li> <li><span class="code">OMNIS</span> folder - The parent folder of the Omnis Studio executable.</li> <li><span class="code">OMNISSTARTUP</span> folder - A folder located in the directory tree structure at a level above the Omnis Studio executable parent folder. The file is typically located in the <span class="file">Applications</span> folder on MacOSX, in the <span class="file">Program Files</span> folder on WinXP, or <span class="file">\UserName\AppData\Local\</span> folder on WinVista.</li> <li><span class="code">USERPREFS</span> folder - A folder located in the platform specific directory normally for user preferences files.</li> <li><em>Files Server</em> - The FTP server, Database, or Local Area Network drive, where the files and packages are uploaded by the developer and can then be downloaded by a runtime client AutoUpdater library.</li> <li><em>AutoUpdater library</em> - The library which contains all of the AutoUpdater code. The developer renames the AutoUpdater library and sets the AutoUpdater preferences for their own application. The AutoUpdater library is used by the developer to create and upload files. A locked <strong>copy</strong> of the developer's AutoUpdater library is then released to the runtime clients. When opened with a runtime version of Omnis Studio the AutoUpdater library is only able to check for and download files.</li> <li><span class="code">targetfilename</span> - The actual name of the file after it is copied from the server to the location specified by the <span class="code">targetfilepath</span>.</li> <li><span class="code">targetfilepath</span> - The location on the user's computer where the downloaded file is to be copied to. The targetfilepath is always relative to the <span class="code">APP</span> or <span class="code">OMNIS</span> folder.</li> <li><span class="code">serverfilename</span> - The name of the file on the server. The server file name appends the release date/time/beta to the target file name. The release information is appended to the <span class="code">targetfilename</span> in the format <span class="code">___YYYYMMDD_HHb</span>. The <span class="code">b</span> is added for beta releases.</li> </ol> <a name="packages" /> <h3>Packages</h3> <p>A <em>package</em> describes the <em>files</em> which are included in the package. The file description includes the relative target path from the <span class="code">APP</span>, <span class="code">OMNIS</span>, <span class="code">OMNISSTARTUP</span>, or <span class="code">USERPREFS</span> folder.</p> <p>Optionally, a package can describe obsolete files which are to be deleted on the client if found.</p> <p>A package has a release date, release hour, and release type. You <strong>only</strong> need to issue a new beta or final release package if you add or remove files from an existing package. If the files included in a package do not change, there is no need to issue a new package!</p> <p>The first time an AutoUpdater library is opened by a runtime client the package fie is downloaded from the files server to the client computer. (See <span class="nav">Local Files</span> for details.)</p> <p>AutoUpdater then goes through the list of target files specified by the package to make sure they exist. Any missing files are downloaded from the files to the client computer. Folders and subfolders are created by AutoUpdater as needed.</p> <p>You just need to provide your client the AutoUpdater library inside an APP folder. AutoUpdater will do the rest for you.</p> <p>Each subsequent time the runtime client open the AutoUpdater library, AutoUpdater compares the version of the package on the local runtime client with the latest version of the package on the files server. If a newer version package exists on the server AutoUpdater downloads it to the client and then compares the list of files included or excluded with the package. AutoUpdater deletes any files which are set to excluded, then checks for all the files listed and downloads and installs any missing files.</p> Use the <span class="nav">Edit Package</span> tab to modify an existing package and then upload ito the files server.<br /> <div class="image_sideline"><img src="http://www.studiotips.net/css/images/tip.gif" alt="Tip" /><p>An application can include more than one package, though doing increases the complexity of keeping your clients properly synchronized. If you want an application to have more multiple packages list them as a comma separated string in the Package Name field in the <span class="nav">Developer</span> <span class="nav">Preferences</span>.</p> </div> <a name="files" /> <h3>Files</h3> <p>A package includes one or more files and describes where the files are to be located on the runtime client's computer.</p> <p>Each file in a package must have a unique name.</p> <p>When a file is uploaded to the files server by the developer using AutoUpdater the release date, hour and release type are included with the file.</p> AutoUpdater checks the current version of each file on the runtime client against the lastest version on the files server. If there is a new version on the files server AutoUpdater downloads the file replacing the old file with the newer version. <a name="betaversions" /> <h3>Beta Versions</h3> <p>You can upload beta version files and even beta version packages.</p> <p>If the runtime client sets their AutoUpdater version preference to Beta, AutoUpdater will check download and install a beta version file only if the release date and hour of the beta version file is greater than the non-beta version of the file installed on the runtime client computer.</p> If the runtime clients sets their AutoUpdater version preference back to Final, AutoUpdater will replace and beta version files with the latest final version file, thereby allowing the client to revert to the latest final version of your application. <a name="expirydate" /> <h3>Expiry Date</h3> In the developer preferences window you can set an <em>Expiry Date</em>. AutoUpdater will check for an expiry date and if one has been set, will be compare it the current date. If the current date is greater than the expiry date AutoUpdater will not check for, download, or install updates. The runtime user will receive an error message informing them that the AutoUpdater library has expired and it is unable to check for newer releases. <a name="localfiles" /> <h3>Local Files</h3> <p>AutoUpdater creates the following folders and files in the <span class="code">USERPREFS</span> folder.</p> <ol> <li><span class="file">USERPREFS/autoupdater</span> The root folder for the AutoUpdater files.</li> <li><span class="file">USERPREFS/autoupdater/PackageName/</span> <em>PackageName</em> is replaced with the actual package name. One <em>PackageName</em> folder is created for each package.</li> <li><span class="file">USERPREFS/autoupdater/PackageName/installedfiles.txt</span> A text file which keeps the history of all the files downloaded and installed for the package. The date and time of each downloaded and installed file is recorded in the <span class="file">installedfiles.txt</span> file.</li> <li><span class="file">USERPREFS/autoupdater/PackageName/PackageName__YYYYMMDD.txt</span> <em>PackageName</em> is replaced with the actual package name. Each package file contains a list of all the files to be included in the package. The package file is a text file. When a newer package file is installed, the older package file is deleted.</li> <li><span class="file">USERPREFS/autoupdater/PackageName/downloads</span> All newer release files for a package are first downloaded to this folder. If all the files are successfully downloaded AutoUpdater moves the files from the downloads folder to the respective <span class="code">targetfilepath</span> locations.</li> <li><span class="code">USERPREFS/autoupdater/logs</span> This folder contains the AutoUpdater log files.</li> <li><span class="code">USERPREFS/autoupdater/logs/AppName_log.txt</span> <em>AppName</em> is replaced with the actual AutoUpdater application name. One log file is created for each application. The file contains any errors that were logged by AutoUpdater for the application.</li> </ol> <a name="updateself" /> <h3>Update Self</h3> <p>If you need to update your runtime users with a newer version of your AutoUpdater library you can do so as follows:</p> <ol> <li>Open the AutoUpdater library with a developer version of Omnis Studio.</li> <li>Open the settings window from the <span class="nav">AutoUpdater</span> menu.</li> <li>Select the <span class="nav">Developer Settings</span> tab > <span class="nav">Developer</span> sub-tab.</li> <li>Click the <span class="nav">Upload Self...</span> button.<br /> <br /> The first time you do this it creates a new package on your files server specifically for your AutoUpdater library. The package file lists a single file, your AutoUpdater library, with the file path set as <span class="file">APP/YourAutoUpdaterFileName</span>. It then uploads your AutoUpdater library to the files server. (The Windows platform won't let you copy a file that is open, so for Windows a new library is created and all the classes are copied to the new library, the copy library is closed and then uploaded to the files server.)<br /> <br /> The next time you click the <span class="nav">Upload Self...</span> button it will only upload the AutoUpdater library since the package already exists.</li> </ol> <p>When a runtime user asks to update their application the AutoUpdater library will do the following:</p> <ol> <li>Checks to see if there is a newer version of your AutoUpdater library that needs to be downloaded.</li> <li>The newer version is downloaded from the file server to the <span class="file">downloads</span> folder.</li> <li>A special <span class="file">LibraryOps_AutoUpdater.lbs</span> file is created by the older version library in the <span class="file">OMNIS/autoupdater</span> folder.</li> <li>The special library is opened and then sent a message to close and delete the old library and then copy the new library to the old library's location. <br /> <br /> <div class="image_sideline"><img src="http://www.studiotips.net/css/images/note.gif" alt="Note" /><p>The code to replace the old library took me a full day to figure out because the Windows platform doesn't let you do anything to a file that is open, and Omnis Studio bails out if you close a library which is executing a method. Creating the special library and using a timer object was the eventual solution.</p> </div></li> <li>The new AutoUpdater library is opened. If set to check on startup it will look for newer version packages and files and download them as normal.</li> </ol> <a name="limitations" /> <h3>Limitations</h3> <p>There are some AutoUpdater limitations you should be aware of:</p> <ol> <li>The target file names must be <em>unique</em> within each package. You can not have the same file name in two different target folders within the same package.</li> <li>The target file name can not have a triple underscore <span class="code">___</span> in the file name. The triple underscore is reserved by AutoUpdater for separating the release date string in the server file name.</li> <li>For Mac OS 9 compatability the maximum file length name is 31 characters including the extension.</li> <li>Not all databases are supported. AutoUpdater has been designed so that other RDBMSs can be easily be added, it just needs someone to modify and test AutoUpdater with another database vendor. Email me if you need help with doing this.</li> </ol> <a name="futureenhancements" /> <h3>Future Enhancements</h3> <p>The following is a list of enhancements on the wish list for AutoUpdater.</p> <ol> <li>Platform specific updates - The ability to specify different files for different platforms. (e.g. <span class="code">MacOSX, Windows, MacOSX_intel, MacOSX_ppc, Windows_xp, Windows_vista</span>)</li> <li>Add the AutoUpdater classes to the main library and run AutoUpdater from the main library, negating the need for a separate AutoUpdater library.</li> </ol>Please email me your enhancement requests and it may be added to this list. <a name="knownbugs" /> <h3>Known Bugs</h3> <p>The following are known bugs with AutoUpdater.</p> <ol> <li><strong>Update Self</strong> - <span class="code">2007-10-22 Doug K</span> - Copying the AutoUpdater library to a MySQL database is not working. The files size binary is way too small. Haven't had time to debug this yet.</li> <li></ol> <a name="bugsandenhancements" /> <h2>Bugs and Enhancements</h2> <p>This section lists any known AutoUpdater bugs and requested enhancements.</p> Each bug or enhancement is listed with the date and the notifier/requester. <a name="bugs" /> <h3>Bugs</h3> <p>The following are known bugs with AutoUpdater.</p> <ol> <li><strong>Update Self</strong> - <span class="code">2007-10-22 Doug K</span> - Copying the AutoUpdater library to a MySQL database is not working. The files size binary is way too small. Haven't had time to debug this yet.</li> </ol> <a name="enhancements" /> <h3>Enhancements</h3> <p>The following is a list of enhancements requests for AutoUpdater.</p> <ol> <li>Platform specific updates - The ability to specify different files for different platforms. (e.g. <span class="code">MacOSX, Windows, MacOSX_intel, MacOSX_ppc, Windows_xp, Windows_vista</span>)</li> <li>Add the AutoUpdater classes to the main library and run AutoUpdater from the main library, negating the need for a separate AutoUpdater library.</li> </ol>Please email me your enhancement requests and it may be added to this list. <a name="version20120207" /> <h2>Version 2012-02-07</h2> <p>The following is a summary of the changes included in this release.</p> <ol> <li><strong>Alternative Database Ports</strong> - Added a way to specify a database port other than the default.</li> </ol>The details modifications in the release are listed below. The modifications are compiled from the <span class="code">@MOD</span> tag comments found in the methods of the classes in the library. <a name="details" /> <h3>Details</h3> <p><span class="code">oPreferences/$:DBPort.$assign</span> <span class="moddateby">(2012-02-06 Josh L.)</span><br /> Created the DB Port methods so a port different than the default can be assigned to an autoupdater session.</p> <p><span class="code">oPreferences/$:LocalDBPort</span> <span class="moddateby">(2012-02-06 Josh L.)</span><br /> Created the Local DB Port methods so a port different than the default can be assigned to an autoupdater session.</p> <p><span class="code">oPreferences/$:LocalDBPort.$assign</span> <span class="moddateby">(2012-02-06 Josh L.)</span><br /> Created the Local DB Port methods so a port different than the default can be assigned to an autoupdater session.</p> <p><span class="code">oSessionMethods_MYSQLDAM/$_prepareForLogon</span> <span class="moddateby">(2011-11-17 Josh L.)</span><br /> Changed the number to 16MB (16777216 bytes).</p> <p><span class="code">oSessionMethods_base/$_logon</span> <span class="moddateby">(2012-02-06 Josh L.)</span><br /> Added the block of code to allow a port other than the default to be specified for autoupdater sessions.</p> <p><span class="code">wPreferencesDB/$event</span> <span class="moddateby">(2012-02-06 Josh L.)</span><br /> Added the DB Port field so a port different than the default can be assigned to an autoupdater session.</p> <span class="code">wPreferencesLocalDB/$event</span> <span class="moddateby">(2012-02-06 Josh L.)</span><br /> Added the Local DB Port field so a port different than the default can be assigned to an autoupdater session. <a name="version20110130" /> <h2>Version 2011-01-30</h2> <p>The following is a summary of the changes included in this release.</p> <ol> <li><strong>Quickstart Tutorial</strong> - Added an simple tutorial to make it easier to learn and setup AutoUpdater with your application.</li> <li><strong>Create Package</strong> - Added a new window to make it much easier to create and upload a new package with the package's files to the files server.</li> <li><strong>Edit Package</strong> - Added new window to make it easier to edit existing packages and upload them.</li> <li><strong>MySQL</strong> - Added support for using MySQL as the files server. Introduced a structure for subclassing <span class="code">oLogon</span> making it easier to implement additonal DAMs.</li> <li><strong>PostgreSQL</strong> - Added support for using PostgreSQL as the files server. Live testing still needs to be done.</li> <li><strong>AutoUpdater Paths</strong> - Added <span class="code">OMNISSTARTUP</span> and <span class="code">USERPREFS</span> to the possible folders where application files can be stored.</li> <li><strong>oAutoUpdater Object</strong> - Figured out a generic way for the <span class="code">oAutoUpdater</span> object to find the <span class="code">AutoUpdater</span> task thereby allowing the object to be copied to the application's main library without modification. Added an <span class="code">mAutoUpdater</span> menu which can be simply be added as a cascading menu to an existing application's main menu with code changes.</li> </ol>The details modifications in the release are listed below. The modifications are compiled from the <span class="code">@MOD</span> tag comments found in the methods of the classes in the library. <a name="details" /> <h3>Details</h3> <p><span class="code">@10 Local Files Server/@00 About</span> <span class="moddateby">(2007-12-17 Doug K.)</span><br /> Added documentation for clients with a system administrator that wishes to run their own local files server.</p> <p><span class="code">@10 Programmer Notes/@00 About</span> <span class="moddateby">(2007-12-10 Doug K.)</span><br /> Added Programmer notes as much for myself as for other developers.</p> <p><span class="code">Startup_Task/$closeApp</span> <span class="moddateby">(2008-02-06 Doug K.)</span><br /> Added code which sends a $closeApp message to the main library's Startup_Task if the method exists. This gives the main library an opportunity to reject being closed in case there is a critical task running or a window is in edit mode.</p> <p><span class="code">Startup_Task/$construct</span> <span class="moddateby">(2010-10-14 Josh L.)</span><br /> Consolidating all of the sys(2) calls so they are easy to change.</p> <p><span class="code">oDownloadAndInstallFiles/installDownloadedPackages</span> <span class="moddateby">(2008-08-25 Doug K.)</span><br /> Check and remove any hidden files from the files list.</p> <p><span class="code">oDownloadAndInstallFiles/installDownloadedPackages</span> <span class="moddateby">(2010-11-19 Josh L)</span><br /> Realigned the If statements so the install part would happen even if there were no previously downloaded files.</p> <p><span class="code">oErrorHandler/$:PromptUsingTraceLog</span> <span class="moddateby">(2008-08-30 Doug K.)</span><br /> Added property method and property assign method. Setting this property to true will cause the $promptonceLastError method to send the last error to the trace log and then open the trace log. This is important for web apps to prevent halting the web app server.</p> <p><span class="code">oErrorHandler/$initialize</span> <span class="moddateby">(2010-10-14 Josh L.)</span><br /> Consolidating all of the sys(2) calls so they are easy to change.</p> <p><span class="code">oFTP/$#About</span> <span class="moddateby">(2008-03-19 Doug K.)</span><br /> Review all methods and use the local 'logError' method for reporting errors to remove 'errhndlr' dependency. Review all methods and remove early exits.</p> <p><span class="code">oFTP/$:FilesList_longformat</span> <span class="moddateby">(2008-03-19 Doug K.)</span><br /> Removed early exits. Use local 'logError' method for reporting errors to remove 'errhndlr' dependency.</p> <p><span class="code">oFTP/$:FilesList_shortformat</span> <span class="moddateby">(2008-03-19 Doug K.)</span><br /> Removed early exits. Use local 'logError' method for reporting errors.</p> <p><span class="code">oFTP/$:PingTimeout</span> <span class="moddateby">(2008-02-06 Doug K.)</span><br /> Added ping timeout property which can be assigned. Default 15 seconds. If set to zero the pinging the server will be skipped.</p> <p><span class="code">oFTP/$:PingTimeout.$assign</span> <span class="moddateby">(2008-02-05 Doug K.)</span><br /> Added method to allow developers to assign the $:PingTimeout value. If timeout is set to zero then this object skips pinging the server.</p> <p><span class="code">oFTP/$connect</span> <span class="moddateby">(2008-03-19 Doug K.)</span><br /> Use local 'logError' method for reporting errors to remove 'errhndlr' dependency.</p> <p><span class="code">oFTP/$initialize</span> <span class="moddateby">(2008-02-06 Doug K.)</span><br /> Corrected the method description. Remove the sentence that said this method opens a connection with the FTP server as that is no longer true.</p> <p><span class="code">oFTP/$initialize</span> <span class="moddateby">(2008-02-06 Doug K.)</span><br /> Added parameter pPingTimeoutSeconds_opt which can be used to set this object's $:PingTimeout property via the $initialize method.</p> <p><span class="code">oFTP/$initialize</span> <span class="moddateby">(2008-03-19 Doug K.)</span><br /> Added ivar ibInitOK and set it at the end of the initialize method.</p> <p><span class="code">oFTP/$pingServer</span> <span class="moddateby">(2008-02-06 Doug K.)</span><br /> Use the $:PingTimeout value to ping the server. If timeout is zero ping is skipped and zero returned.</p> <p><span class="code">oFTP/logError</span> <span class="moddateby">(2008-03-19 Doug K.)</span><br /> Added local 'logError' and $:ErrorText error handling methods so that this object can be shared independent of tvar 'errhndlr'.</p> <p><span class="code">oFTP/logError</span> <span class="moddateby">(2010-10-14 Josh L.)</span><br /> Consolidating all of the sys(2) calls so they are easy to change.</p> <p><span class="code">oFTP/logFTPError</span> <span class="moddateby">(2010-10-14 Josh L.)</span><br /> Consolidating all of the sys(2) calls so they are easy to change.</p> <p><span class="code">oFilesServer_DB/retServerFilesList</span> <span class="moddateby">(2007-12-10 Doug K.)</span><br /> Simplify the oFilesServer objects by removing parse server file name code from the object. Parsing the server file name is the responsibility of the oUpdater object.</p> <p><span class="code">oFilesServer_DB/retServerPackagesList</span> <span class="moddateby">(2007-12-10 Doug K.)</span><br /> Simplify the oFilesServer objects by removing parse package file name code from the object. Parsing the package file name is the responsibility of the oUpdater object.</p> <p><span class="code">oFilesServer_FTP/$deleteServerFiles</span> <span class="moddateby">(2008-02-28 Doug K.)</span><br /> To avoid an FTP timeout, keep issuing FTP connect inside the loop.</p> <p><span class="code">oFilesServer_FTP/$downloadServerFiles</span> <span class="moddateby">(2008-02-28 Doug K.)</span><br /> To avoid an FTP timeout, keep issuing FTP connect inside the loop.</p> <p><span class="code">oFilesServer_FTP/$initialize</span> <span class="moddateby">(2008-02-06 Doug K.)</span><br /> Get the ping timeout preference property value and include it with the oFTP object $initialize message.</p> <p><span class="code">oFilesServer_FTP/$retServerFilesList</span> <span class="moddateby">(2007-12-10 Doug K.)</span><br /> Simplify the oFilesServer objects by removing parse server file name code from the object. Parsing the server file name is the responsibility of the oUpdater object.</p> <p><span class="code">oFilesServer_FTP/$uploadServerFiles</span> <span class="moddateby">(2008-02-28 Doug K.)</span><br /> To avoid an FTP timeout, keep issuing FTP connect inside the loop.</p> <p><span class="code">oFunctions/$retOmnisLicense</span> <span class="moddateby">(2010-10-14 Josh L.)</span><br /> Created a method to lump all the sys(2) calls together so there is only one place to change them when omnis changes the method.</p> <p><span class="code">oFunctions/retEnclosedFilesList</span> <span class="moddateby">(2008-08-25 Doug K.)</span><br /> Changed from C3 to 'hidden' for the $filelist column name. (more readable code)</p> <p><span class="code">oFunctions/retEnclosedFilesList</span> <span class="moddateby">(2008-09-06 Doug K.)</span><br /> Remove any . dot prefixed files from the files list.</p> <p><span class="code">oFunctions/retEnclosedFoldersList</span> <span class="moddateby">(2007-12-17 Doug K.)</span><br /> Added FileOps Tool method.</p> <p><span class="code">oOpenURL/openURL_Windows</span> <span class="moddateby">(2010-12-10 Josh L.)</span><br /> Changed the DLL calls from A appendinx (ANSI) to W appendix (Unicode - Wide character)</p> <p><span class="code">oPaths/$:OmnisXcompFolderPath</span> <span class="moddateby">(2007-12-06 Doug K.)</span><br /> Add method to return the file path for 'xcomp' folder.</p> <p><span class="code">oPaths/retLocalSettingsAppDataFolderPath_win.Copy</span> <span class="moddateby">(2010-12-10 Josh L.)</span><br /> Changed the DLL calls from A appendinx (ANSI) to W appendix (Unicode - Wide character)</p> <p><span class="code">oPaths/retLocalSettingsInternetCacheFolderPath_win.Copy</span> <span class="moddateby">(2010-12-10 Josh L.)</span><br /> Changed the DLL calls from A appendinx (ANSI) to W appendix (Unicode - Wide character)</p> <p><span class="code">oPaths/retUserDesktop_win</span> <span class="moddateby">(2010-12-10 Josh L.)</span><br /> Changed the DLL calls from A appendinx (ANSI) to W appendix (Unicode - Wide character)</p> <p><span class="code">oPaths/retUserDocuments_win</span> <span class="moddateby">(2010-12-10 Josh L.)</span><br /> Changed the DLL calls from A appendinx (ANSI) to W appendix (Unicode - Wide character)</p> <p><span class="code">oPaths/retUserPreferences_win</span> <span class="moddateby">(2010-12-10 Josh L.)</span><br /> Changed the DLL calls from A appendinx (ANSI) to W appendix (Unicode - Wide character)</p> <p><span class="code">oPaths_autoupdater/$:PathApplicationsFolder</span> <span class="moddateby">(2008-01-02 Doug K.)</span><br /> Added method which returns the path to the 'Program Files' or 'Applications' directory, based on the operating system.</p> <p><span class="code">oPaths_autoupdater/$:PathOmnisStudioFolder</span> <span class="moddateby">(2007-12-20 Doug K.)</span><br /> Add sys(215) for Vista.</p> <p><span class="code">oPaths_autoupdater/$:PathOmnisXcompFolder</span> <span class="moddateby">(2007-12-06 Doug K.)</span><br /> Add method to return the file path for 'xcomp' folder.</p> <p><span class="code">oPaths_autoupdater/$:PathProgramFilesFolder</span> <span class="moddateby">(2008-01-02 Doug K.)</span><br /> Added method which returns the path to the 'Program Files' or 'Applications' directory, based on the operating system.</p> <p><span class="code">oPaths_autoupdater/retApplicationsOrProgramFilesFolderPath</span> <span class="moddateby">(2008-01-02 Doug K.)</span><br /> Added method which returns the path to the 'Program Files' or 'Applications' directory, based on the operating system.</p> <p><span class="code">oPaths_autoupdater/retLocalSettingsAppDataFolderPath_win.Copy</span> <span class="moddateby">(2010-12-10 Josh L.)</span><br /> Changed the DLL calls from A appendinx (ANSI) to W appendix (Unicode - Wide character)</p> <p><span class="code">oPaths_autoupdater/retLocalSettingsInternetCacheFolderPath_win.Copy</span> <span class="moddateby">(2010-12-10 Josh L.)</span><br /> Changed the DLL calls from A appendinx (ANSI) to W appendix (Unicode - Wide character)</p> <p><span class="code">oPaths_autoupdater/retUserDesktop_win</span> <span class="moddateby">(2010-12-10 Josh L.)</span><br /> Changed the DLL calls from A appendinx (ANSI) to W appendix (Unicode - Wide character)</p> <p><span class="code">oPaths_autoupdater/retUserDocuments_win</span> <span class="moddateby">(2010-12-10 Josh L.)</span><br /> Changed the DLL calls from A appendinx (ANSI) to W appendix (Unicode - Wide character)</p> <p><span class="code">oPaths_autoupdater/retUserPreferences_win</span> <span class="moddateby">(2010-12-10 Josh L.)</span><br /> Changed the DLL calls from A appendinx (ANSI) to W appendix (Unicode - Wide character)</p> <p><span class="code">oPreferences/$:FTPPingTimeout.$assign</span> <span class="moddateby">(2008-02-06 Doug K.)</span><br /> Added $:FTPPingTimeout property method and $assign method to control TCP pings. If set to zero TCPPing will not be executed.</p> <p><span class="code">oPreferences/$:PingBeforeDBConnection.$assign</span> <span class="moddateby">(2010-10-25 Josh L.)</span><br /> Created the PingBeforeDBConnection pair of methods because ping isn't guaranteed to work.</p> <p><span class="code">oSessionMethods_MYSQLDAM/$_prepareForLogon</span> <span class="moddateby">(2008-08-25 Doug K per Chuck M.)</span><br /> Set the MYSQLDAM session object $blobsize to 16777215 which is the MEDIUMBLOB maximum size for MySQL.</p> <p><span class="code">oSessionMethods_base/$pingDatabaseHost</span> <span class="moddateby">(2010-10-25 Josh L.)</span><br /> Commented out the original if isessionrow.pingdbserver because it was never implemented and used it to allow the developers to have control over whether ping is used or not.</p> <p><span class="code">oSessionMethods_base/setUniqueSessionName</span> <span class="moddateby">(2007-12-13 Doug K.)</span><br /> If the sessionname is empty use the first 5 letters of the damname + the first 7 letters of the database name. Use the rpos() function which was introduced in Omnis Studio v4.1</p> <p><span class="code">oStartupTaskDefaultMethods/$constructMethod</span> <span class="moddateby">(2008-02-14 Doug K. per Andy Hilton)</span><br /> Added back the missing code for silent updates.</p> <p><span class="code">oStartupTaskDefaultMethods/$constructMethod</span> <span class="moddateby">(2010-10-14 Josh L.)</span><br /> Consolidating all of the sys(2) calls so they are easy to change.</p> <p><span class="code">oStartupTaskDefaultMethods/$destructMethod</span> <span class="moddateby">(2010-10-14 Josh L.)</span><br /> Consolidating all of the sys(2) calls so they are easy to change.</p> <p><span class="code">oStartupTaskDefaultMethods/$openDeveloperWindow</span> <span class="moddateby">(2010-10-14 Josh L.)</span><br /> Consolidating all of the sys(2) calls so they are easy to change.</p> <p><span class="code">oStartupTaskDefaultMethods/installAutoUpdaterDeveloperMenu</span> <span class="moddateby">(2010-10-14 Josh L.)</span><br /> Consolidating all of the sys(2) calls so they are easy to change.</p> <p><span class="code">oUpdater/$downloadandinstallFiles</span> <span class="moddateby">(2008-02-14 Doug K.)</span><br /> Removed unused parameter pbShowAllFiles.</p> <p><span class="code">oUpdater/$retServerFilesList</span> <span class="moddateby">(2007-12-11 Doug K.)</span><br /> Make oUpdater responsible for adding display text columns to the server files list.</p> <p><span class="code">oUpdater/$updateSelf</span> <span class="moddateby">(2008-08-25 Doug K per Chuck M.)</span><br /> Typo fixed. LibaryOps changed to LibraryOps in working messages.</p> <p><span class="code">oUpdater/$uploadPackage</span> <span class="moddateby">(2007-12-13 Doug K.)</span><br /> Moved responsibility for parsing the packagename and packagefilename from oFilesServer objects to oUpdater.</p> <p><span class="code">oUpdater/$uploadSelf</span> <span class="moddateby">(2007-12-04 Doug K.)</span><br /> Remove ReleaseNum and use timestamp for the release date/time.</p> <p><span class="code">oUpdater/$uploadSelf</span> <span class="moddateby">(2007-12-10 Doug K.)</span><br /> Moved calculation of the sever file name and package file name to oUpdater so that file name calculations are in one place.</p> <p><span class="code">oUpdater/createTempAutoUpdaterLibrary</span> <span class="moddateby">(2007-12-25 Doug K.)</span><br /> Copy the system classes before copying the GUI classes so that fieldstyles don't get messed up.</p> <p><span class="code">oUpdaterTools/$convertTargetFilePathToLocalFilePath</span> <span class="moddateby">(2007-12-06 Doug K.)</span><br /> Added XCOMP to the possible targetfilepath prefixes handled by this method.</p> <p><span class="code">oUpdaterTools/$createTextFile</span> <span class="moddateby">(2010-11-26 Josh L.)</span><br /> Update to handle unicode files need to write character instead of write file.</p> <p><span class="code">oUpdaterTools/$getFileText</span> <span class="moddateby">(2010-11-23 Josh L.)</span><br /> Changed $readfile to $readcharacter(kunitypeuft8,text)</p> <p><span class="code">oUpdaterTools/$parsePackageFileName</span> <span class="moddateby">(2007-12-04 Doug K)</span><br /> Added 'minutes' to the release hour to make it easier for issuing more than one release in an hour.</p> <p><span class="code">oUpdaterTools/$parseServerFileName</span> <span class="moddateby">(2007-12-04 Doug K)</span><br /> Added 'platform' option for indicating any platform specific files, return via field ref parameter 'pfRetPlatformString'. Added 'minutes' to the release hour to make it easier for issuing more than one release in an hour.</p> <p><span class="code">oUpdaterTools/$retDefinedServerFilesList</span> <span class="moddateby">(2007-12-04 Doug K.)</span><br /> Added 'platform' column to the server files list definiton. ('sServerFiles_listdef')</p> <p><span class="code">oUpdaterTools/$retMainLibraryFilePath</span> <span class="moddateby">(2008-09-06 Doug K.)</span><br /> Remove hidden files from the files list.</p> <p><span class="code">oUpdaterTools/$retReleaseDateTimeString</span> <span class="moddateby">(2007-12-04 Doug K.)</span><br /> Remove the release hour parameter and just use timestamp parameter. Rename the method from $retReleaseDateString to $retReleaseDateTimeString</p> <p><span class="code">oUpdaterTools/checkFileName</span> <span class="moddateby">(2008-02-28 Doug K.)</span><br /> Removed code which did not allow spaces in the file names.</p> <p><span class="code">oUpdaterTools/parseEnvironmentString</span> <span class="moddateby">(2007-12-06 Doug K.)</span><br /> Add method to parse the environment string.</p> <p><span class="code">oUpdaterTools/parseFileNameString</span> <span class="moddateby">(2007-12-05 Doug K.)</span><br /> Modify the method to include the minutes and seconds of the release date/time string.</p> <p><span class="code">oUpdaterTools/parseFileNameString</span> <span class="moddateby">(2007-12-06 Doug K.)</span><br /> Modify the method to parse the environment string.</p> <p><span class="code">oZipUnzip/$#About</span> <span class="moddateby">(2007-12-12 Doug K.)</span><br /> Created object class to provide crossplatform support for zip and unzip of files.</p> <p><span class="code">oZipUnzip/zip_macosx</span> <span class="moddateby">(2007-12-13 Doug K.)</span><br /> Include the orginal file extension in the zip file name so that the original file name and extension can be extracted from the zip file name.</p> <p><span class="code">tBase/$sqlerror</span> <span class="moddateby">(2007-11-30 Doug K.)</span><br /> Added $errorcode and $errortext to the error message details as they can be different than $native... errors.</p> <p><span class="code">wAdministratorSettings/$#About</span> <span class="moddateby">(2008-02-06 Doug K per Andy H.)</span><br /> Set $zoombox &amp;amp; $vertscroll properties to kTrue</p> <p><span class="code">wAdministratorSettings/$event</span> <span class="moddateby">(2008-01-30 Doug K per Andy H.)</span><br /> Added kFileOpsOpenApps parameter to FileOps.$getfilename so that MacOSX can browse application contents.</p> <p><span class="code">wAdministratorSettings/setSubWindows</span> <span class="moddateby">(2008-01-29 Doug K.)</span><br /> Only set the wServerPackageAndFiles subwindow field's classname if the necessary $:LocalDB... preference properties have been set.</p> <p><span class="code">wErrorPrompt/$construct</span> <span class="moddateby">(2007-10-30 Doug K.)</span><br /> Default the 'More Info' button to hidden. Added switch/case for leaving the button hidden.</p> <p><span class="code">wErrorPrompt/viewLogFile</span> <span class="moddateby">(2008-01-30 Doug K.)</span><br /> Changed $openLogFileViewer to $openErrorLogViewer.</p> <p><span class="code">wLogFileViewer/$construct</span> <span class="moddateby">(2010-10-14 Josh L.)</span><br /> Consolidating all of the sys(2) calls so they are easy to change.</p> <p><span class="code">wPackageBuilderEditor/$#About</span> <span class="moddateby">(2007-12-04 Doug K.)</span><br /> Removed release date and release hr fields. No longer needed as uploaded now use the current timestamp. Two less things for the developer to have to worry about.</p> <p><span class="code">wPackageBuilderEditor/$#About</span> <span class="moddateby">(2008-02-06 Doug K per Chuck Martin.)</span><br /> Added button which allows the developer to add a new package directly from this window.</p> <p><span class="code">wPackageBuilderEditor/$event</span> <span class="moddateby">(2008-01-30 Doug K per Andy H.)</span><br /> Added kFileOpsOpenApps parameter to FileOps.$getfilename so that MacOSX can browse application contents.</p> <p><span class="code">wPackageBuilderEditor/loadLocalPackage</span> <span class="moddateby">(2008-01-30 Doug K per Andy H.)</span><br /> Added kFileOpsOpenApps parameter to FileOps.$getfilename so that MacOSX can browse application contents.</p> <p><span class="code">wPackageBuilderEditor/loadPackageListFromLocalFile</span> <span class="moddateby">(2007-12-04 Doug K.)</span><br /> Remove hour and release date ivars. Now just using current timestamp when uploading.</p> <p><span class="code">wPackageBuilderEditor/promptUploadFilesAndPackage</span> <span class="moddateby">(2007-12-04 Doug K.)</span><br /> Removed hour parameter and iReleaseDate parameter. Just use the timestamp for the release.</p> <p><span class="code">wPackageBuilderEditor/uploadFiles</span> <span class="moddateby">(2007-12-04 Doug K.)</span><br /> Drop use of release hour and switch to using the current timestamp for the release date/time string.</p> <p><span class="code">wPackageBuilderEditor/uploadPackage</span> <span class="moddateby">(2007-12-04 Doug K.)</span><br /> Removed hour parameter and iReleaseDate parameter. Just send #D as the timestamp for the release.</p> <p><span class="code">wPreferencesDB/$event</span> <span class="moddateby">(2008-01-30 Doug K per Andy H.)</span><br /> Added kFileOpsOpenApps parameter to FileOps.$getfilename so that MacOSX can browse application contents.</p> <p><span class="code">wPreferencesDB/$event</span> <span class="moddateby">(2010-10-25 Josh L.)</span><br /> Put this checkbox in the DB Preferences to facilitate the Developer being able to control whether ping is used.</p> <p><span class="code">wPreferencesDeveloper/$event</span> <span class="moddateby">(2007-12-04 Doug K.)</span><br /> Use timestamp instead of release number simplifying things for the developer.</p> <p><span class="code">wPreferencesDeveloper/$event</span> <span class="moddateby">(2008-01-30 Doug K.)</span><br /> Added button to the developer preferences window to open the main library.</p> <p><span class="code">wPreferencesDeveloper/uploadSelf</span> <span class="moddateby">(2007-12-04 Doug K.)</span><br /> Use timestamp instead of release number simplifying things for the developer.</p> <p><span class="code">wPreferencesFTP/$#About</span> <span class="moddateby">(2008-02-06 Doug K.)</span><br /> Added FTPPingTimeout field for the new property. Setting the value to zero skips pinging the FTP server.</p> <p><span class="code">wPreferencesLocalDB/$#About</span> <span class="moddateby">(2008-01-29 Doug K. per Andy H.)</span><br /> Fix the LocalDBDatabaseName field $dataname. It was set to prefs.$:DatabaseName, should be prefs.$LocalDBDatabaseName.</p> <p><span class="code">wPreferencesLocalDB/$event</span> <span class="moddateby">(2008-01-30 Doug K per Andy H.)</span><br /> Added kFileOpsOpenApps parameter to FileOps.$getfilename so that MacOSX can browse application contents.</p> <p><span class="code">wPreferencesRuntime/$event</span> <span class="moddateby">(2010-10-14 Josh L.)</span><br /> Consolidating all of the sys(2) calls so they are easy to change.</p> <p><span class="code">wPromptForUpdates/$#About</span> <span class="moddateby">(2008-02-06 Doug K.)</span><br /> Set the headed lists to $active=kFalse so that the use can't click on the lists which would make them think they are selecting what packages or files are to be downloading. (Not true)</p> <p><span class="code">wPromptForUpdates/$#About</span> <span class="moddateby">(2008-02-06 Doug K.)</span><br /> Changed the name and text of the 'Cancel' button to 'Skip' and the tooltip to 'Skip this update' Just saying 'Cancel' sounds like absolutely nothing is going to happen if I click it. The reality is that the Omnis Studio main library will be opened, we'll just skip the update.</p> <p><span class="code">wPromptForUpdates/$setDownloadFilesList</span> <span class="moddateby">(2008-02-06 Doug K.)</span><br /> Set the current line in the packages and files list to zero so that no lines will appear to the user to be selected in the headed list.</p> <p><span class="code">wPromptForUpdates/installUpdates</span> <span class="moddateby">(2008-02-28 Doug K.)</span><br /> Prompt and Quit Omnis if a package has been installed. The package could include external components so it is safest to restart Omnis.</p> <p><span class="code">wPromptForUpdates/installUpdates</span> <span class="moddateby">(2010-10-14 Josh L.)</span><br /> Consolidating all of the sys(2) calls so they are easy to change.</p> <p><span class="code">wShell/constructTabPane</span> <span class="moddateby">(2010-10-14 Josh L.)</span><br /> Consolidating all of the sys(2) calls so they are easy to change.</p> <p><span class="code">wUploadFiles/$#About</span> <span class="moddateby">(2007-12-04 Doug K.)</span><br /> Removed release date and release hr fields. No longer needed as uploaded now use the current timestamp. Two less things for the developer to have to worry about.</p> <p><span class="code">wUploadFiles/$#About</span> <span class="moddateby">(2008-08-25 Doug K.)</span><br /> Fix error handling on 'Add Files...' button and evDrop on the files list. Errors were not being reported.</p> <p><span class="code">wUploadFiles/$construct</span> <span class="moddateby">(2007-12-04 Doug K.)</span><br /> Add columns for setting the optional 'platform' specifiers.</p> <p><span class="code">wUploadFiles/promptaddFile</span> <span class="moddateby">(2008-01-30 Doug K per Andy H.)</span><br /> Added kFileOpsOpenApps parameter to FileOps.$getfilename so that MacOSX can browse application contents.</p> <span class="code">wUploadFiles/uploadFiles</span> <span class="moddateby">(2007-12-11 Doug K.)</span><br /> Moved responsibility for setting the packagename and serverfilename to oUpdater. <a name="version20071030" /> <h2>Version 2007-10-30</h2> <p>The following is a summary of the changes included in this release.</p> <ol> <li><strong>Quickstart Tutorial</strong> - Added an simple tutorial to make it easier to learn and setup AutoUpdater with your application.</li> <li><strong>Create Package</strong> - Added a new window to make it much easier to create and upload a new package with the package's files to the files server.</li> <li><strong>Edit Package</strong> - Added new window to make it easier to edit existing packages and upload them.</li> <li><strong>MySQL</strong> - Added support for using MySQL as the files server. Introduced a structure for subclassing <span class="code">oLogon</span> making it easier to implement additonal DAMs.</li> <li><strong>PostgreSQL</strong> - Added support for using PostgreSQL as the files server. Live testing still needs to be done.</li> <li><strong>AutoUpdater Paths</strong> - Added <span class="code">OMNISSTARTUP</span> and <span class="code">USERPREFS</span> to the possible folders where application files can be stored.</li> <li><strong>oAutoUpdater Object</strong> - Figured out a generic way for the <span class="code">oAutoUpdater</span> object to find the <span class="code">AutoUpdater</span> task thereby allowing the object to be copied to the application's main library without modification. Added an <span class="code">mAutoUpdater</span> menu which can be simply be added as a cascading menu to an existing application's main menu with code changes.</li> </ol>The details modifications in the release are listed below. The modifications are compiled from the <span class="code">@MOD</span> tag comments found in the methods of the classes in the library. <a name="details" /> <h3>Details</h3> <p><span class="code">Startup_Task/$isAutoUpdaterTask</span> <span class="moddateby">(2007-10-23 Doug K.)</span><br /> Added $isAutoUpdaterTask method to the Startup_Task so that the oAutoUpdater object can automatically find the AutoUpdater task by sending an $isAutoUpdater.$cando message to each $itask till it finds one.</p> <p><span class="code">Startup_Task/$promptonceLastError</span> <span class="moddateby">(2007-10-23 Doug K.)</span><br /> Added $promptonceLastError method so that the main library can ask the AutoUpdater task to report the last error.</p> <p><span class="code">Startup_Task/$runDemo</span> <span class="moddateby">(2007-10-23 Doug K.)</span><br /> Added method to the Startup_Task for AutoUpdater documentation (uses StudioTips)</p> <p><span class="code">Startup_Task/$updateAutoUpdaterMenuLine</span> <span class="moddateby">(2007-10-11 Doug K.)</span><br /> Added method to be allow the AutoUpdater menu line text to be updated on-the-fly.</p> <p><span class="code">mAutoUpdaterDeveloperMultiApp/$updateMenuLineText</span> <span class="moddateby">(2007-10-12 Doug K.)</span><br /> Added method to allow AutoUpdater to change the menu line text.</p> <p><span class="code">oAutoUpdater/$#About</span> <span class="moddateby">(2007-10-23 Doug K.)</span><br /> Modified the oAutoUpdater object so it can find the AutoUpdater task on its own using $isAutoUpdaterTask.</p> <p><span class="code">oAutoUpdater/$#About</span> <span class="moddateby">(2007-10-23 Doug K.)</span><br /> Modified the oAutoUpdater object so it is a 'visual' object which immediately notifies the user of any errors detected.</p> <p><span class="code">oErrorHandler/retFTPErrorText</span> <span class="moddateby">(2007-09-26 Doug K.)</span><br /> Added method to return the specified FTP error code text for the $logFTPError method.</p> <p><span class="code">oFilesServer_DB/_createTable_serverfile</span> <span class="moddateby">(2007-10-24 Doug K.)</span><br /> Add exception for MYSQLDAM to create the table using MEDIUMBLOB rather than BLOB for the filebinary datatype.</p> <p><span class="code">oFilesServer_DB/_createTable_serverpackage</span> <span class="moddateby">(2007-10-24 Doug K.)</span><br /> Add exception for MYSQLDAM to create the table using MEDIUMBLOB rather than BLOB for the filebinary datatype.</p> <p><span class="code">oFilesServer_DB/_createTable_serverpackage</span> <span class="moddateby">(2007-10-24 Doug K.)</span><br /> Add unique constraint on packagefilename.</p> <p><span class="code">oFilesServer_FTP/$deleteServerFiles</span> <span class="moddateby">(2007-10-12 Doug K.)</span><br /> Fixed the method so that is deletes FTP server files.</p> <p><span class="code">oFilesServer_FTP/$downloadServerFiles</span> <span class="moddateby">(2007-10-11 Doug K.)</span><br /> Bug fix. The PkgName was not being set the first time through the loop and therefore the working directory was not being set.</p> <p><span class="code">oFunctions/$retContainedObjs</span> <span class="moddateby">(2007-03-07 Doug K.)</span><br /> Added objdataname to the objects list.</p> <p><span class="code">oFunctions/$retEnclosedFilesList</span> <span class="moddateby">(2007-10-11 Doug K.)</span><br /> Added FileOps Tool method.</p> <p><span class="code">oFunctions/$retExportFormatsList</span> <span class="moddateby">(2007-10-11 Doug K.)</span><br /> Added FileOps Tool method.</p> <p><span class="code">oFunctions/$retFileOpsErrortext</span> <span class="moddateby">(2007-10-11 Doug K.)</span><br /> Added FileOps Tool method.</p> <p><span class="code">oFunctions/retEnclosedFilesList</span> <span class="moddateby">(2007-10-11 Doug K.)</span><br /> Added FileOps Tool method.</p> <p><span class="code">oLibraryOps_CreateLibrary/checkaddupdateLibraryOpsFile</span> <span class="moddateby">(2007-10-24 Doug K.)</span><br /> Copy the $classdata twice. Save the class each time.</p> <p><span class="code">oLibraryOps_CreateLibrary/checkaddupdateLibraryOpsFile</span> <span class="moddateby">(2007-10-24 Doug K.)</span><br /> If the LibraryOps library is already open, close it, so that it can be recreated is the file was tossed in the trash.</p> <p><span class="code">oLogon/$logon</span> <span class="moddateby">(2007-10-24 Doug K.)</span><br /> Bug fix. Combine the hostname/databasename for FrontBase.</p> <p><span class="code">oLogon_MYSQL/$logon</span> <span class="moddateby">(2007-10-13 Doug K.)</span><br /> Override the $logon method in for MySQL because the $databasename property must be set.</p> <p><span class="code">oLogon_MYSQL/$pingDatabase</span> <span class="moddateby">(2007-10-13 Doug K.)</span><br /> Override the $pingDatabase method in for MySQL and modify to suit.</p> <p><span class="code">oLogon_PGSQL/$logon</span> <span class="moddateby">(2007-10-13 Doug K.)</span><br /> Override the $logon method in for MySQL because the $databasename property must be set.</p> <p><span class="code">oLogon_PGSQL/$pingDatabase</span> <span class="moddateby">(2007-10-13 Doug K.)</span><br /> Override the $pingDatabase method in for MySQL and modify to suit.</p> <p><span class="code">oPaths/retProgramFiles_unix</span> <span class="moddateby">(2007-03-06 Doug K. per Matthias Henze)</span><br /> User getenv() function to calculate the home folder path on Unix platform.</p> <p><span class="code">oPaths/retTempFiles_unix</span> <span class="moddateby">(2007-03-06 Doug K. per Matthias Henze)</span><br /> User getenv() function to calculate the home folder path on Unix platform.</p> <p><span class="code">oPaths/trimPath</span> <span class="moddateby">(2007-07-05 Doug K.)</span><br /> Added new method which trims double quotes off file paths (from Applescript) and trims trailing path delimiters.</p> <p><span class="code">oPreferences/$:ServerInfo</span> <span class="moddateby">(2007-10-11 Doug K.)</span><br /> Changed calculation of FTP server infor to use $:FTPServerAddress rather than $:ServerAddress</p> <p><span class="code">oStartupTaskDefaultMethods/$updateAutoUpdaterMenuLine</span> <span class="moddateby">(2007-10-11 Doug K.)</span><br /> Added method to allow the AutoUpdater menu line to be updated on-the-fly.</p> <p><span class="code">oStartupTaskDefaultMethods/$updateNow</span> <span class="moddateby">(2006-07-05 Doug K.)</span><br /> Set download files list to smartlist and filter out the 'delete' files before deciding whether or not to prompt for updates.</p> <p><span class="code">oUpdater/$uploadSelf</span> <span class="moddateby">(2006-07-05 Doug K.)</span><br /> Added parameter pReleaseNum_opt so that sender can specify the version number for the current date. Previously the version number was the current hour only.</p> <p><span class="code">oUpdaterTools/$checkSourceFileName</span> <span class="moddateby">(2007-10-12 Doug K.)</span><br /> Added method to check the file name for unwanted characters.</p> <p><span class="code">oUpdaterTools/$convertSourceFilePathToTargetFilePath</span> <span class="moddateby">(2007-10-12 Doug K.)</span><br /> Added method to check and convert a sourcefilepath to a targetfilepath.</p> <p><span class="code">oUpdaterTools/$convertTargetFilePathToLocalFilePath</span> <span class="moddateby">(2007-10-12 Doug K.)</span><br /> Added OMNISSTARTUP and USERPREFS to the possible targetfilepath prefixes handled by this method.</p> <p><span class="code">wPackageEditor/checkPackageFilesList</span> <span class="moddateby">(2007-10-13 Doug K.)</span><br /> Added OMNISTARTUP and USERPREFS to the possible prefixes.</p> <p><span class="code">wPreferencesDeveloper/$event</span> <span class="moddateby">(2006-07-05 Doug K.)</span><br /> Added the release number as a parameter sent to oUpdater.$uploadSelf.</p> <p><span class="code">wPromptForUpdates/$setDownloadFilesList</span> <span class="moddateby">(2006-07-05 Doug K.)</span><br /> Set download files list to smartlist and filter out the 'delete' files before displaying the list.</p> <p><span class="code">wPromptForUpdates/installUpdates</span> <span class="moddateby">(2006-06-05 Doug K.)</span><br /> Comment out the OK message which informs the user that the new software has been successfully downloaded and installed. The messages gets annoying and it halts completion of the download, install, and restart.</p> <p><span class="code">wPromptForUpdates/installUpdates</span> <span class="moddateby">(2006-07-05 Doug K.)</span><br /> Unfilter the download files smartlist before sending the list to oUpdater.$downloadandinstallFiles.</p> <p><span class="code">wServerFiles/$#About</span> <span class="moddateby">(2007-10-11 Doug K.)</span><br /> Added radio buttons for 'Show All' and 'Show' Lastest files.</p> <p><span class="code">wServerFiles/downloadSelectedFiles</span> <span class="moddateby">(2007-10-11 Doug K.)</span><br /> The prompt title was not being calculated correctly.</p> <span class="code">wUploadFiles/$eventToTop</span> <span class="moddateby">(2007-10-12 Doug K.)</span><br /> Update the packages list each time the window comes to the front. <p class="footer">AutoUpdater Documentation - Copyright 2006 Vencor Software </p></div> </body> </html>