from UM.Qt.ListModel import ListModel
from UM.Application import Application

from PyQt5.QtCore import Qt, pyqtProperty, pyqtSignal, QUrl

import os
import os.path

class DirectoryListModel(ListModel):
    NameRole = Qt.UserRole + 1
    UrlRole = Qt.UserRole + 2

    def __init__(self):
        super().__init__()

        self.addRoleName(self.NameRole, 'name')
        self.addRoleName(self.UrlRole, 'url')

        self._directory = None

    directoryChanged = pyqtSignal()

    def getDirectory(self):
        return self._directory

    def setDirectory(self, path):
        if path != self._directory:
            if path.startswith('file://'):
                path = path[7:]
            self._directory = os.path.dirname(path)

            self.clear()
            extensions = Application.getInstance().getMeshFileHandler().getSupportedFileTypesRead()
            for entry in os.listdir(self._directory):
                if os.path.splitext(entry)[1] in extensions:
                    self.appendItem({ 'name': os.path.basename(entry), 'url': QUrl.fromLocalFile(os.path.join(self._directory, entry)) })

        self.sort(lambda e: e['name'])

    directory = pyqtProperty(str, fget = getDirectory, fset = setDirectory, notify = directoryChanged)

from UM.Qt.ListModel import ListModel
from UM.Application import Application

from PyQt5.QtCore import Qt, pyqtProperty, pyqtSignal, QUrl

import os
import os.path
import platform

class DirectoryListModel(ListModel):
    NameRole = Qt.UserRole + 1
    UrlRole = Qt.UserRole + 2

    def __init__(self):
        super().__init__()

        self.addRoleName(self.NameRole, 'name')
        self.addRoleName(self.UrlRole, 'url')

        self._directory = None

    directoryChanged = pyqtSignal()

    def getDirectory(self):
        return self._directory

    def setDirectory(self, path):
        if path != self._directory:
            if path.startswith('file://'):
                if platform.system() == "Windows" and path.startswith('file:///'):
                    path = path[8:]
                else:
                    path = path[7:]
            self._directory = os.path.dirname(path)

            self.clear()
            extensions = Application.getInstance().getMeshFileHandler().getSupportedFileTypesRead()
            for entry in os.listdir(self._directory):
                if os.path.splitext(entry)[1] in extensions:
                    self.appendItem({ 'name': os.path.basename(entry), 'url': QUrl.fromLocalFile(os.path.join(self._directory, entry)) })

        self.sort(lambda e: e['name'])

    directory = pyqtProperty(str, fget = getDirectory, fset = setDirectory, notify = directoryChanged)

Fix directory listing on windows.
Fix directory listing on windows.

  from UM.Qt.ListModel import ListModel
  from UM.Application import Application
  
  from PyQt5.QtCore import Qt, pyqtProperty, pyqtSignal, QUrl
  
  import os
  import os.path
+ import platform
  
  class DirectoryListModel(ListModel):
      NameRole = Qt.UserRole + 1
      UrlRole = Qt.UserRole + 2
  
      def __init__(self):
          super().__init__()
  
          self.addRoleName(self.NameRole, 'name')
          self.addRoleName(self.UrlRole, 'url')
  
          self._directory = None
  
      directoryChanged = pyqtSignal()
  
      def getDirectory(self):
          return self._directory
  
      def setDirectory(self, path):
          if path != self._directory:
              if path.startswith('file://'):
+                 if platform.system() == "Windows" and path.startswith('file:///'):
+                     path = path[8:]
+                 else:
-                 path = path[7:]
+                     path = path[7:]
              self._directory = os.path.dirname(path)
  
              self.clear()
              extensions = Application.getInstance().getMeshFileHandler().getSupportedFileTypesRead()
              for entry in os.listdir(self._directory):
                  if os.path.splitext(entry)[1] in extensions:
                      self.appendItem({ 'name': os.path.basename(entry), 'url': QUrl.fromLocalFile(os.path.join(self._directory, entry)) })
  
          self.sort(lambda e: e['name'])
  
      directory = pyqtProperty(str, fget = getDirectory, fset = setDirectory, notify = directoryChanged)
  
Fix directory listing on windows.
## Code Before:
from UM.Qt.ListModel import ListModel
from UM.Application import Application

from PyQt5.QtCore import Qt, pyqtProperty, pyqtSignal, QUrl

import os
import os.path

class DirectoryListModel(ListModel):
    NameRole = Qt.UserRole + 1
    UrlRole = Qt.UserRole + 2

    def __init__(self):
        super().__init__()

        self.addRoleName(self.NameRole, 'name')
        self.addRoleName(self.UrlRole, 'url')

        self._directory = None

    directoryChanged = pyqtSignal()

    def getDirectory(self):
        return self._directory

    def setDirectory(self, path):
        if path != self._directory:
            if path.startswith('file://'):
                path = path[7:]
            self._directory = os.path.dirname(path)

            self.clear()
            extensions = Application.getInstance().getMeshFileHandler().getSupportedFileTypesRead()
            for entry in os.listdir(self._directory):
                if os.path.splitext(entry)[1] in extensions:
                    self.appendItem({ 'name': os.path.basename(entry), 'url': QUrl.fromLocalFile(os.path.join(self._directory, entry)) })

        self.sort(lambda e: e['name'])

    directory = pyqtProperty(str, fget = getDirectory, fset = setDirectory, notify = directoryChanged)

## Instruction:
Fix directory listing on windows.
## Code After:
from UM.Qt.ListModel import ListModel
from UM.Application import Application

from PyQt5.QtCore import Qt, pyqtProperty, pyqtSignal, QUrl

import os
import os.path
import platform

class DirectoryListModel(ListModel):
    NameRole = Qt.UserRole + 1
    UrlRole = Qt.UserRole + 2

    def __init__(self):
        super().__init__()

        self.addRoleName(self.NameRole, 'name')
        self.addRoleName(self.UrlRole, 'url')

        self._directory = None

    directoryChanged = pyqtSignal()

    def getDirectory(self):
        return self._directory

    def setDirectory(self, path):
        if path != self._directory:
            if path.startswith('file://'):
                if platform.system() == "Windows" and path.startswith('file:///'):
                    path = path[8:]
                else:
                    path = path[7:]
            self._directory = os.path.dirname(path)

            self.clear()
            extensions = Application.getInstance().getMeshFileHandler().getSupportedFileTypesRead()
            for entry in os.listdir(self._directory):
                if os.path.splitext(entry)[1] in extensions:
                    self.appendItem({ 'name': os.path.basename(entry), 'url': QUrl.fromLocalFile(os.path.join(self._directory, entry)) })

        self.sort(lambda e: e['name'])

    directory = pyqtProperty(str, fget = getDirectory, fset = setDirectory, notify = directoryChanged)
