<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def GetShowDetails(self):
 """ Extract show name, season number and episode number from file name. Supports formats S<NUM>E<NUM> or <NUM>x<NUM> for season and episode numbers where letters are case insensitive and number can be one or more digits. It expects season number to be unique however it can handle either single or multipart episodes (consecutive values only). All information preceeding season number is used for the show name lookup. This string is forced to lowercase and stripped of special characters Returns boolean False if an incompatible file name is found, otherwise return True. """


    fileName = os.path.splitext(os.path.basename(self.fileInfo.origPath))[0]

    # Episode Number
    episodeNumSubstring = set(re.findall("(?<=[0-9])[xXeE][0-9]+(?:[xXeE_.-][0-9]+)*", fileName))

    if len(episodeNumSubstring) != 1:
      goodlogging.Log.Info("TVFILE", "Incompatible filename no episode match detected: {0}".format(self.fileInfo.origPath))
      return False

    episodeNumSet = set(re.findall("(?<=[xXeE_.-])[0-9]+", episodeNumSubstring.pop()))

    episodeNumList = [int(i) for i in episodeNumSet]
    episodeNumList.sort()

    episodeNum = "{0}".format(episodeNumList[0])
    if len(episodeNumList) > 1:
      episodeNumReference = episodeNumList[0]
      for episodeNumIter in episodeNumList[1:]:
        if episodeNumIter == (episodeNumReference+1):
          strNum = "{0}".format(episodeNumIter)
          if len(strNum) == 1:
            strNum = "0{0}".format(strNum)

          self.showInfo.multiPartEpisodeNumbers.append(strNum)
          episodeNumReference = episodeNumIter
        else:
          break

    if len(episodeNum) == 1:
      episodeNum = "0{0}".format(episodeNum)

    self.showInfo.episodeNum = episodeNum

    # Season Number
    seasonNumSet = set(re.findall("[sS]([0-9]+)", fileName))
    preceedingS = True

    if len(seasonNumSet) == 1:
      seasonNum = seasonNumSet.pop()
    else:
      seasonNumSet = set(re.findall("([0-9]+)[xX](?:[0-9]+[xX])*", fileName))
      preceedingS = False

      if len(seasonNumSet) == 1:
        seasonNum = seasonNumSet.pop()
      else:
        goodlogging.Log.Info("TVFILE", "Incompatible filename no season match detected: {0}".format(self.fileInfo.origPath))
        return False

    if len(seasonNum) == 1:
      seasonNum = "0{0}".format(seasonNum)

    self.showInfo.seasonNum = seasonNum

    # Show Name
    if preceedingS is True:
      showNameList = re.findall("(.+?)\s*[_.-]*\s*[sS][0-9]+[xXeE][0-9]+.*", fileName)
    else:
      showNameList = re.findall("(.+?)\s*[_.-]*\s*[0-9]+[xXeE][0-9]+.*", fileName)

    if len(showNameList) == 1:
      showName = util.StripSpecialCharacters(showNameList[0].lower(), stripAll=True)
    else:
      goodlogging.Log.Info("TVFILE", "Incompatible filename no show name detected: {0}".format(self.fileInfo.origPath))
      return False

    self.fileInfo.showName = showName
    return True