package me.kavin.piped.utils; import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.JoinType; import jakarta.persistence.criteria.Root; import me.kavin.piped.consts.Constants; import me.kavin.piped.utils.obj.db.*; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.hibernate.SharedSessionContract; import org.hibernate.StatelessSession; import org.schabi.newpipe.extractor.channel.ChannelInfo; import org.schabi.newpipe.extractor.channel.tabs.ChannelTabInfo; import org.schabi.newpipe.extractor.exceptions.ExtractionException; import org.schabi.newpipe.extractor.stream.StreamInfoItem; import java.io.IOException; import java.util.Collection; import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; import static me.kavin.piped.consts.Constants.YOUTUBE_SERVICE; public class DatabaseHelper { public static User getUserFromSession(String session) { try (StatelessSession s = DatabaseSessionFactory.createStatelessSession()) { return getUserFromSession(session, s); } } public static User getUserFromSession(String session, SharedSessionContract s) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery cr = cb.createQuery(User.class); Root root = cr.from(User.class); cr.select(root).where(cb.equal(root.get("sessionId"), session)); return s.createQuery(cr).uniqueResult(); } public static User getUserFromSessionWithSubscribed(String session) { try (StatelessSession s = DatabaseSessionFactory.createStatelessSession()) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery cr = cb.createQuery(User.class); Root root = cr.from(User.class); root.fetch("subscribed_ids", JoinType.LEFT); cr.select(root).where(cb.equal(root.get("sessionId"), session)); return s.createQuery(cr).uniqueResult(); } } public static Channel getChannelFromId(SharedSessionContract s, String id) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery cr = cb.createQuery(Channel.class); Root root = cr.from(Channel.class); cr.select(root).where(cb.equal(root.get("uploader_id"), id)); return s.createQuery(cr).uniqueResult(); } public static Channel getChannelFromId(String id) { try (StatelessSession s = DatabaseSessionFactory.createStatelessSession()) { return getChannelFromId(s, id); } } public static List getChannelsFromIds(SharedSessionContract s, Collection id) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery cr = cb.createQuery(Channel.class); Root root = cr.from(Channel.class); cr.select(root).where(root.get("uploader_id").in(id)); return s.createQuery(cr).list(); } public static Video getVideoFromId(SharedSessionContract s, String id) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery