2 # POC FTP Browser for Enigma2
5 # for localized messages
9 from Components.config import config, ConfigInteger, ConfigSubList, \
10 ConfigSubsection, ConfigText, ConfigPassword, ConfigYesNo
12 config.plugins.ftpbrowser = ConfigSubsection()
13 config.plugins.ftpbrowser.server = ConfigSubList()
14 config.plugins.ftpbrowser.servercount = ConfigInteger(0)
16 append = config.plugins.ftpbrowser.server.append
17 while i < config.plugins.ftpbrowser.servercount.value:
18 newServer = ConfigSubsection()
20 newServer.name = ConfigText("Name", fixed_size=False)
21 newServer.address = ConfigText("192.168.2.12", fixed_size=False)
22 newServer.username = ConfigText("root", fixed_size=False)
23 newServer.password = ConfigPassword("dreambox")
24 newServer.port = ConfigInteger(21, (1, 65535))
25 newServer.passive = ConfigYesNo(False)
31 from FTPBrowser import FTPBrowser
32 from FTPServerManager import ftpserverFromURI
36 def createSingleton(session):
39 ftpbrowser = session.instantiateDialog(FTPBrowser)
43 def main(session, **kwargs):
44 createSingleton(session)
45 session.execDialog(ftpbrowser)
47 def filescan_chosen(session, item):
49 createSingleton(session)
50 ftpbrowser.connect(ftpserverFromURI(item[1], save = False))
51 session.execDialog(ftpbrowser)
53 def filescan_open_connected(res, items, session, **kwargs):
55 ftpbrowser.disconnect()
56 filescan_open(items, session, **kwargs)
58 def filescan_open(items, session, **kwargs):
59 if createSingleton(session) and ftpbrowser.ftpclient:
60 from Screens.MessageBox import MessageBox
61 from Tools.BoundFunction import boundFunction
63 session.openWithCallback(
64 boundFunction(filescan_open_connected, items, session, **kwargs),
66 _("There already is an active connection.\nDo you want to abort it?"),
67 type = MessageBox.TYPE_YESNO
73 from Screens.ChoiceBox import ChoiceBox
74 from Tools.BoundFunction import boundFunction
76 session.openWithCallback(
77 boundFunction(filescan_chosen, session),
79 _("Which server do you want to connect to?"),
80 [(item, item) for item in items]
83 filescan_chosen(items[0])
85 def filescan(**kwargs):
86 from Components.Scanner import Scanner, ScanPath
88 # Overwrite checkFile to detect remote files
89 class RemoteScanner(Scanner):
90 def checkFile(self, file):
91 return file.path.startswith("ftp://")
98 ScanPath(path = "", with_subdirs = False),
101 description = _("Connect to FTP..."),
102 openfnc = filescan_open,
106 def Plugins(**kwargs):
107 from Plugins.Plugin import PluginDescriptor
112 description = _("A basic FTP client"),
113 where = PluginDescriptor.WHERE_PLUGINMENU,
119 where = PluginDescriptor.WHERE_FILESCAN,