EDCD / EDDI

Companion application for Elite Dangerous
Other
437 stars 81 forks source link

EDDI crashing on launch - galnetmonitor.json issue #1213

Closed clinkingdog closed 5 years ago

clinkingdog commented 5 years ago

EDDI version in which issue found

3.3.6 - both VA and standalone

Steps to reproduce

  1. Launch VoiceAttack with EDDI plugin, or launch EDDI directly (I usually run VA as administrator, and I've tested EDDI desktop both with and without running as admin.)

Observed

VA crashes a second or two after loading. EDDI desktop does the same, or crashes so fast that I never even see it :(

Investigation

Everything's been working fine the last few days! I'm not sure what I can have changed to affect this.

I restarted my PC, no joy, and I've tried running the EDDI installer again. I don't want to uninstall altogether unless absolutely necessary because I have a bunch of customised scripts which I foolishly forgot to back up. My latest eddi.log is attached. I don't seem to get that exception if it's launched in VA - the log in that case has no evidence of error.

I'm about to try removing the %appdata%\EDDI settings and adding them back in. I'll report back shortly - but wanted to get this up with my log file before I write too many more of those and forget which is which :)

clinkingdog commented 5 years ago

Ok. Using some good ol' binary chop, I've narrowed it down to the galnetmonitor.json file. I've attached my old one, but actually even starting without one (which worked fine) and changing one setting in order to create a new one with different data caused the crash again on next load.

I hope that's useful! Meanwhile I'll just fly with the default Galnet settings, it seems like everything else is working so that's fine for now.

clinkingdog commented 5 years ago

(I spoke too soon - it seems EDDI writes itself a galnetmonitor.json at some point even if I don't change the settings from default - so it's still crashing regularly unless I delete the file each time. However, that's a probable workaround, or I can just - gasp - live without EDDI for a bit and upload journals etc. manually.)

clinkingdog commented 5 years ago

Interestingly, EDDI is crashing periodically anyway seemingly without the galnetmonitor.json file. This doesn't happen on launch though so may be a different issue - but odd that it's started happening at the same time. Nothing notable in the logs in these cases.

Sorry for all the comments, I keep finding new things out and don't want my previous diagnoses to mislead anyone if the new info renders them invalid!

Tkael commented 5 years ago

What language settings are you using please?

clinkingdog commented 5 years ago

EDDI itself is left on "Automatic". The Galnet Monitor is on "English". (I don't think I've changed either of these at any point.)

Tkael commented 5 years ago

Alright. So the exception in your log is probably significant.

f1fff9923b51:System.Xml.XmlException: For security reasons DTD is prohibited in this XML document. To enable DTD processing set the DtdProcessing property on XmlReaderSettings to Parse and pass the settings into XmlReader.Create method.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res)
   at System.Xml.XmlTextReaderImpl.ParseDoctypeDecl()
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.XmlReader.MoveToContent()
   at System.Xml.XmlReader.IsStartElement(String localname, String ns)
   at System.ServiceModel.Syndication.Atom10FeedFormatter.CanRead(XmlReader reader)
   at System.ServiceModel.Syndication.SyndicationFeed.Load[TSyndicationFeed](XmlReader reader)
   at SimpleFeedReader.FeedReader.RetrieveFeed(String uri, IFeedItemNormalizer normalizer)
   at GalnetMonitor.GalnetMonitor.<monitor>g__monitorGalnet|16_0()
   at GalnetMonitor.GalnetMonitor.monitor()
   at GalnetMonitor.GalnetMonitor.Start()
   at Eddi.EDDI.<>c__DisplayClass119_0.<keepAlive>b__1()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart() 

If there's a problem with the contents of the feed, we can expect more reports of this issue.

Tkael commented 5 years ago

I'm getting this issue too. GalnetMonitor.cs line 161. Looks like something has changed in the structure of the Galnet feed.

rodan123 commented 5 years ago

Same here. https://community.elitedangerous.com/en/galnet-rss isn't there anymore. Found others having the same issues; https://forums.frontier.co.uk/showthread.php/479057-What-happened-to-the-GalNet-rss-feed-!

Tkael commented 5 years ago

It sounds like this is a consequence of changes FDev is making to their website. I've submitted a PR to prevent this crash in the future, but we may be unable to access a feed for a little while. The very short term fix until the next update will be to disable the Galnet monitor.

rodan123 commented 5 years ago

@Tkael What do you think about this JSON Galnet link? Could be a stable replacement for the XML RSS feed. https://elitedangerous-website-backend-production.elitedangerous.com/api/galnet?_format=json

Tkael commented 5 years ago

I've seen that. I think we need to handle the exception first (which my current PR will do) so that EDDI doesn't crash.

It seems like like a potentially viable replacement for English, though it'd require a rewrite since we're used to receiving an xml formatted RSS feed. Other languages are left out in the cold for the time being it seems.

Whether we should adopt that url in the future depends on whether a new RSS feed will be made available in the short term or not. If we're looking at a few days of down time, re-coding the Galnet monitor to read json rather than xml may not be worth the effort.