22f81e2dbff975a735189a5e8040349fc7d803b0
[vuplus_openvuplus_3.0] / meta-openvuplus / recipes-core / udev / udev-182 / automount.py
1 #!/usr/bin/python
2 import os
3 import sys
4 import glob
5
6 def readFile(fn):
7         return open(fn, "r").read()
8
9 def getLabelFromDevName(dev_kernel):
10         for label in glob.glob("/dev/disk/by-label/*"):
11                 realPath = os.path.realpath(label)
12                 if realPath == dev_kernel:
13                         return os.path.basename(label)
14         return None
15
16 def getModel(dev_base):
17         model = None
18         modelpath = "/sys/block/%s/device/model" % dev_base
19         if os.access(modelpath, os.F_OK):
20                 model = open(modelpath, "r").read().strip().replace(' ','-')
21         return model
22
23 def isMountedByDevName(devName):
24         ismounted = False
25         mounts = file('/proc/mounts').read().split('\n')
26         for x in mounts:
27                 if not x.startswith('/'):
28                         continue
29
30                 devpath, mountpoint  = x.split()[:2]
31                 if devpath == devName:
32                         ismounted = True
33                         break
34
35         return ismounted
36
37 def isUsbDevice(dev_base):
38         phyPath = os.path.realpath('/sys/block/' + dev_base)
39         for x in glob.glob("/sys/bus/usb/devices/usb*"):
40                 if phyPath.find(os.path.realpath(x)) != -1:
41                         return True
42         return False
43
44 def automount():
45         kernel = sys.argv[1]
46         dev_kernel = os.path.join("/dev/", kernel)
47         dev_index = os.path.basename(kernel)[-1]
48         dev_base = os.path.basename(kernel)[:-1]
49         removable=readFile("/sys/block/%s/removable" % dev_base).strip() == "1"
50         dev_real_path = os.path.realpath("/sys/block/%s/device" % dev_base)
51
52         if isMountedByDevName(dev_kernel):
53                 return
54
55         mountPoint = None
56         if dev_index == "1":
57                 usbDevice = removable or isUsbDevice(dev_base)
58                 if not usbDevice:
59                         mountPoint = "/media/hdd"
60
61         if (mountPoint == None) or (os.path.ismount(mountPoint)):
62                 label = getLabelFromDevName(dev_kernel)
63                 if label:
64                         mountPoint = "/media/" + label
65                         if dev_index and dev_index != '1':
66                                 mountPoint += "_%s" % dev_index
67
68         if (mountPoint == None) or (os.path.ismount(mountPoint)):
69                 model = getModel(dev_base)
70                 if model:
71                         mountPoint = "/media/" + model
72                         if dev_index and dev_index != '1':
73                                 mountPoint += "_%s" % dev_index
74
75         if (mountPoint == None) or (os.path.ismount(mountPoint)):
76                 mountPoint = "/media/" + kernel
77
78         if not os.access(mountPoint, os.F_OK):
79                 os.mkdir(mountPoint)
80                 if not os.access(mountPoint, os.F_OK):
81                         return
82
83         if os.system("mount -t auto -o noatime %s %s" % (dev_kernel, mountPoint)):
84                 os.rmdir(mountPoint)
85         else:
86                 if mountPoint == "/media/hdd":
87                         defaultMoviePath = "/media/hdd/movie"
88                         if not os.access(defaultMoviePath, os.F_OK):
89                                 os.mkdir(defaultMoviePath)
90
91 if __name__=="__main__":
92         automount()