Changeset 11024:e7cba04312ff in orange


Ignore:
Timestamp:
11/14/12 13:29:21 (17 months ago)
Author:
Matija Polajnar <matija.polajnar@…>
Branch:
default
Message:

Add-ons: more robust handling of the add-ons database.

Location:
Orange
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/orngCanvas.pyw

    r11021 r11024  
    847847        lastRefresh = self.settings["lastAddonsRefresh"] 
    848848        dlg = orngDlgs.AddOnManagerDialog(self, self) 
    849         if t - lastRefresh > 7*24*3600: 
     849        if t - lastRefresh > 7*24*3600 or Orange.utils.addons.addons_corrupted: 
    850850            dlg.show() 
    851             if QMessageBox.question(self, "Refresh", 
    852                                     "List of add-ons in repository has %s. Do you want to %s the list now?" % 
    853                                     (("not yet been loaded" if lastRefresh==0 else "not been refreshed for more than a week"), 
    854                                      ("download" if lastRefresh==0 else "reload")), 
     851            if Orange.utils.addons.addons_corrupted or \ 
     852               QMessageBox.question(self, "Refresh", 
     853                                    "List of add-ons in repository has not been refreshed for more than a week. Do you want to download the list now?", 
    855854                                     QMessageBox.Yes | QMessageBox.Default, 
    856855                                     QMessageBox.No | QMessageBox.Escape) == QMessageBox.Yes: 
    857                  
     856 
    858857                try: 
    859858                    dlg.reloadRepo() 
  • Orange/utils/addons.py

    r11022 r11024  
    4848AOLIST_FILE = os.path.join(Orange.utils.environ.orange_settings_dir, "addons.shelve") 
    4949try: 
    50     addons = shelve.open(AOLIST_FILE) 
     50    addons = shelve.open(AOLIST_FILE, 'c') 
    5151    list(addons.items())  # Try to read the whole list. 
    5252except: 
     53    if os.path.isfile(AOLIST_FILE): 
     54        os.remove(AOLIST_FILE) 
    5355    addons = shelve.open(AOLIST_FILE, 'n') 
     56 
     57addons_corrupted = len(addons)==0 
    5458 
    5559addon_refresh_callback = [] 
     
    132136        if progress_callback: 
    133137            progress_callback(len(pkg_dict)+1, i+2) 
     138    addons_corrupted = False 
     139    addons.sync() 
    134140 
    135141    rebuild_index() 
     
    161167    for name in set(addons).difference(found): 
    162168        addons[name] = addons[name]._replace(installed_version = None) 
     169    addons.sync() 
    163170    rebuild_index() 
    164171 
Note: See TracChangeset for help on using the changeset viewer.