[Gambas-user] Get the default file manager

System64 Development 64xcode at gmail.com
Sun Feb 18 12:51:06 CET 2024


play whit this if you want, maybe this code shows Caja.

' Gambas class file

Public Sub Form_Open()

   Dim o As Collection
   Dim sMessage As String

   'o = DeskApps("FileManager")
   o = DeskApps()

   If o.Count > 0 Then
     If o.Count > 1 Then
       sMessage = Subst(("You have &1 file managers in your desktop"), 
CStr(o.Count)) & gb.NewLine & o.Keys.Join("\n")
     Else
       sMessage = Subst(("You have &1 file manager in your desktop"), 
CStr(o.Count)) & gb.NewLine & o.Keys.Join("\n")
     Endif
     sMessage &= gb.NewLine & ("Your default file manager application 
is:") & gb.NewLine & DesktopFile.FromMime("inode/directory")[0].ProgramName
     Message.Info(sMessage)

     'If 
DesktopFile.FromMime("inode/directory")[0].Categories.Exist("FileManager") 
Then
     '  DesktopFile.FromMime("inode/directory")[0].Run(User.Home)
     'Endif

   Endif

End

'' This function list all the .desktop applications in the directory 
/usr/share/applications with the asociated relevant data in a 
collection. Is possible provide a text filter for the categories section.

Public Function DeskApps(Optional sFilter As String) As Collection

   Dim a As String[]
   Dim aTags As String[] = ["Name", "Comment", "GenericName", 
"Keywords", "Exec", "Icon", "Terminal", "Type", "Categories", "MimeType"]
   Dim q As Integer
   Dim s As String
   Dim sEntry As String
   Dim oTmp As New Collection
   Dim oData As New Collection
   Dim l As String
   Dim sTag As String
   Dim sVal As String
   Dim k As String

   'a = ScanFiles("/usr/share/applications", ["desktop"], 1)
   a = ScanFiles("/usr/share/applications", [], 1)
   a.Sort(gb.Ascent)
   For Each s In a
     sEntry = File.Load(s)
     q = 0
     oTmp.Clear

     For Each k In aTags
       For Each l In Split(sEntry, "\n")
         If InStr(l, "=") > 0 Then
           sTag = Split(l, "=")[0]
           sVal = Split(l, "=")[1]
           If Not oTmp.Exist(sTag) Then
             If k = sTag Then
               oTmp[sTag] = sVal
               Inc q
               If q > aTags.Count + 1 Then
                 Break
               Endif
             Endif
           Endif
         Endif
       Next
     Next
     'If sFilter <> "" Then
     'If oTmp.Exist("Categories") Then
     ' If InStr(Lower(oTmp["Categories"]), Lower(sFilter)) > 0 Then
     ' oData[s] = oTmp.Copy()
     ' Endif
     'Endif
     'Else
     oData[s] = oTmp.Copy()
     'Endif

   Next

   Return oData

End

'' <b>RAD Extension.</b><br>
'' Return a files list nested in a directory using a find command

Static Public Function ScanFiles(sPath As String, ext As String[], 
Optional maxdepth As Integer, Optional sFilter As String) As String[]

   Dim out As New String[]
   Dim t As String
   Dim ex As String
   Dim sTmp As String
   Dim aOut As New String[]

   If maxdepth = Null Or maxdepth < 1 Then
     maxdepth = 1
   Endif

   If Exist(sPath) Then
     Select ext.Count
       Case 0
         Shell "find '" & sPath & "' -maxdepth " & CStr(maxdepth) & " 
-type f -printf '%p\n' 2>&1" To t
       Case 1
         Shell "find '" & sPath & "' -maxdepth " & CStr(maxdepth) & " 
-type f -name '*.'" & ext[0] & " -printf '%p\n' 2>&1" To t
       Case Else
         ex = "\\( -name \"*."
         ex &= ext.Join("\" -o -name \"*.")
         ex &= "\" \\)"
         Shell "find '" & sPath & "' -maxdepth " & CStr(maxdepth) & " 
-type f " & ex & " -printf '%p\n' 2>&1" To t
     End Select

     out = Split(t, "\n")

     If out.Count > 0 Then
       If out[out.Max] = "" Then
         out.Remove(out.Max, 1)
       Endif
     Endif

   Endif

   If sFilter <> "" Then
     For Each sTmp In out
       If InStr(sTmp, sFilter) > 0 Then
         aOut.Add(sTmp)
       Endif
     Next
   Else
     aOut = out.Copy()
   Endif

   Return aOut

End




More information about the User mailing list