[sword-devel] Question regarding InstallMgr

P Mosier paladin1 at sdf.org
Wed Dec 14 20:26:20 EST 2022


Okay, so I've made some progress but appear to be stalled a bit.

When instructed to install a module, the command line installmgr doesn't 
seem to call InstallMgr::refreshRemoteSource() at all, and somehow the 
call to do the install succeeds.  Yet my example below fails if I don't 
call to refresh the source.

However, if I DO call refreshRemoteSource(), I will end up downloading 
EVERY module, despite only specifying one:

int myInstallModule(const char* modname) {
     sword::InstallSource is("FTP");
     is.source = "ftp.crosswire.org";
     is.directory = "/pub/sword/raw";

     sword::SWBuf installpath = getenv("HOME");
     installpath += "/.sword/";
     sword::InstallMgr* im = new sword::InstallMgr(installpath);
     im->setUserDisclaimerConfirmed(true);

     // XXX -- the call below appears to be required
     int refresh = im->refreshRemoteSource(&is);
     if (refresh) {
         printf("Refresh call failed, error: %d\n", refresh);
         exit(0);
     }

     // XXX -- this installs EVERY module, not just what is passed as an 
argument
     return im->installModule(&swrd, 0, modname, &is);
}

Someone have an idea what I might be missing?

Thanks,
- Paul M

On 12/8/22 16:18, Greg Hellings wrote:
> I believe you will need to refresh that source before you call the 
> install method. It's trying to look up the config file for that module 
> and isn't finding it. Those get downloaded and cached by the 
> Installmgr class when it refreshes a source.
>
> --Greg
>
> On Thu, Dec 8, 2022, 14:51 P Mosier <paladin1 at sdf.org> wrote:
>
>     Hello,
>
>     I am trying to figure out what the appropriate steps to take are for
>     programmatically installing a module through FTP.  Looking through
>     the
>     backend codebase, it seems like there are some configuration settings
>     that have to be initialized in SWMgr order for
>     InstallMgr::installModule
>     to work.  However, tracking this down has eluded me as InstallMgr
>     never
>     seems to be set up and called the same way twice.
>
>     I have this as a simple example:
>
>          sword::SWMgr swrd;
>          sword::InstallSource is("FTP");
>          is.source = "ftp.crosswire.org <http://ftp.crosswire.org>";
>          is.directory = "/pub/sword";
>
>          sword::InstallMgr im;
>          im.installModule(&swrd, 0, "KJVA", &is);
>
>     The call to installModule segfaults at this line:
>
>          module = mgr.config->getSections().find(modName);
>
>     I recognize it might be related to my own environment.  This is the
>     entire content of my /etc/sword:
>     [Install]
>     DataPath=/usr/share/sword/
>
>     Does someone have an idea for what I'm missing, or an example to
>     direct
>     me to so I can get a better handle on this area of code?
>
>     Thanks,
>     - Paul M
>
>     _______________________________________________
>     sword-devel mailing list: sword-devel at crosswire.org
>     http://crosswire.org/mailman/listinfo/sword-devel
>     Instructions to unsubscribe/change your settings at above page
>
>
> _______________________________________________
> sword-devel mailing list:sword-devel at crosswire.org
> http://crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://crosswire.org/pipermail/sword-devel/attachments/20221214/be3d0784/attachment.htm>


More information about the sword-devel mailing list