#!/bin/bash

# Copyright (C) 2013-2025 Marcin Krol <hawk@tld-linux.org>
# All Rights Reserved

. /lib/cri/vars

# read current configuration

check_media () {
  mountpoint -q "/media/cri" 1>/dev/null 2>/dev/null
  result=$?
  if [ "${result}" -eq 0 ]; then
    umount /media/cri
  fi
  if mount | grep -q -E "^${1}"; then
    umount "${1}"
  fi
  mount "${1}" /media/cri 1>/dev/null 2>/dev/null
  result=$?
  if [ "${result}" -eq 0 ]; then
    cri_id=$(find /media/cri -type f -name cri.id 2>/dev/null 2>/dev/null | head -n 1)
    if [ -n "${cri_id}" ]; then
      echo "${1}" >>/tmp/crimedia
    fi
    umount "${1}" 1>/dev/null 2>/dev/null
  fi
}

# load kernel modules for cd/dvd and usb storage device support
for mod in "usb_storage" "sd_mod" "sr_mod" "ide_cd_mod"; do
  modprobe "${mod}" 2>/dev/null
done

# cleanup
rm -f /tmp/crimedia

echo "Searching for CRI media, please wait..."

# for every disk device...
for disk in $(lsdev disk 2>/dev/null); do
  # check if its removable
  removable=$(cat "/sys/block/${disk}/removable" 2>/dev/null)
  if [ "${removable}" = "1" ]; then
    # it is removable
    # for every partition...
    for part in $(lsdev part 2>/dev/null | grep -E "^"${disk}); do
      check_media "/dev/${part}"
    done
  fi
done

# for every rom device...
for rom in $(lsdev rom 2>/dev/null); do
  # check if its removable
  removable=$(cat "/sys/block/${rom}/removable" 2>/dev/null)
  if [ "${removable}" = "1" ]; then
    # it is removable
    check_media "/dev/${rom}"
  fi
done

# save list of detected CRI devices
if [ -f "/tmp/crimedia" ]; then
  sort -u "/tmp/crimedia" >"/lib/cri/media" 2>/dev/null
fi

# cleanup
rm -f /tmp/crimedia

exit 0
