@Nullable
    @WorkerThread
    public static SearchResult searchByGeocode(@Nullable final String geocode, @Nullable final String guid, final boolean forceReload, @Nullable final DisposableHandler handler) {
        if (StringUtils.isBlank(geocode) && StringUtils.isBlank(guid)) {
            Log.e("Geocache.searchByGeocode: No geocode nor guid given");
            return null;
        }

        if (!forceReload && (DataStore.isOffline(geocode, guid) || DataStore.isThere(geocode, guid, true))) {
            final SearchResult search = new SearchResult();
            final String realGeocode = StringUtils.isNotBlank(geocode) ? geocode : DataStore.getGeocodeForGuid(guid);
            search.addGeocode(realGeocode);
            return search;
        }


        SearchResult result = null;
        // if we have no geocode, we can't dynamically select the handler, but must explicitly use GC
        if (geocode == null) {
            result = GCConnector.getInstance().searchByGeocode(null, guid, handler);
        } else {
            final IConnector connector = ConnectorFactory.getConnector(geocode);
            if (connector instanceof ISearchByGeocode) {
                result = ((ISearchByGeocode) connector).searchByGeocode(geocode, guid, handler);
            }
        }
        AmendmentUtils.amendCaches(result);
        return result;
    }
Download and store a cache synchronous

@param origCache       the cache which should be refreshed, can be null
@param geocode         the geocode of the cache which should be downloaded
@param lists           to which lists the cache should be added
@param forceRedownload whether the cache should be re-downloaded, even if it's already stored offline
@param handler         a handler to receive status updates, can be null
@return true, if the cache was stored successfully
main/src/main/java/cgeo/geocaching/models/Geocache.java