I've noticed that with TVH, EPG information is only populated after the EPG source/channel is linked to a Channel in TVH. So you have to run your grabber to populate the "EPG Channels", then assign those "EPG Channels" to a Channel but setting is as a source, and then finally re-run the grabber so it knows which channel information to actually parse. (I believe that if an "EPG Channel" is not linked as a source for a Channel, TVH will merely ignore the XMLTV entries that have no corresponding Channel.)
In your other post, you seemed to indicate that you were using
tv_grab_combined
or somesuch, which is a grabber I am unfamiliar with. You are also using the xmltv.sock. It sounds as if your grabber is running multiple grabbers, combining them into a single XMLTV, and then feeding that to the socket. I wonder if this is the problem, as your "combined" XMLTV might not contain all of the information at once, and when TVH receives new XMLTV listings from the socket, some entries may not be present, and so they are removed from its EPG database.
Since TVH supports multiple simultaneous grabbers, why don't you have your individual grabbers themselves being run from within TVH? As long as TVH can find them (in
/usr/bin
or
/usr/sbin@, usually), and they have already been set up (by @tv_grab_random_grabber_name --configure --config-file /path/to/random_grabber.conf@), then enable each one in the TVH grabber module menu, indicating the appropriate @--config-file ...
in the argument field? That seems like the easiest and most consistent manner ...