import cryptobox.plugins.base
from cryptobox.core.exceptions import *


class volume_rename(cryptobox.plugins.base.CryptoBoxPlugin):

	pluginCapabilities = [ "volume" ]
	pluginVisibility = [ "properties" ]
	requestAuth = False
	rank = 60


	def doAction(self, store=None, vol_name=None):
		self.container = self.cbox.getContainer(self.device)
		if not self.container:
			return None
		self.__prepareHDF()
		if store and vol_name:
			return self.__setVolumeName(vol_name)
		else:
			return "volume_rename"
	

	def getStatus(self):
		self.container = self.cbox.getContainer(self.device)
		if not self.container:
			return "invalid device"
		return "name=%s" % self.container.getName()
	

	def __prepareHDF(self):
		self.hdf[self.hdf_prefix + "vol_name"] = self.container.getName()
	

	def __setVolumeName(self, vol_name):
		if not vol_name:
			self.hdf["Data.Warning"] = "Plugins.volume_rename.InvalidVolumeName"
			return "volume_rename"
		if vol_name == self.container.getName():
			## nothing has to be done
			return "volume_rename"
		try:
			self.container.setName(vol_name)
			self.hdf["Data.Success"] = "Plugins.volume_rename.VolumeNameChanged"
		except CBVolumeIsActive:
			self.hdf["Data.Warning"] = "Plugins.volume_rename.NoRenameIfActive"
		except CBInvalidName:
			self.hdf["Data.Warning"] = "Plugins.volume_rename.InvalidVolumeName"
		except CBNameIsInUse:
			self.hdf["Data.Warning"] = "Plugins.volume_rename.VolumeNameIsInUse"
		except CBContainerError:
			self.hdf["Data.Warning"] = "Plugins.volume_rename.SetVolumeNameFailed"
		## reread the volume name
		self.__prepareHDF()
		return "volume_rename"

