palpo_data/
media.rs

1use diesel::prelude::*;
2
3use crate::core::identifiers::*;
4use crate::core::UnixMillis;
5use crate::schema::*;
6use crate::{connect, DataResult};
7
8#[derive(Insertable, Identifiable, Queryable, Debug, Clone)]
9#[diesel(table_name = media_metadatas)]
10pub struct DbMetadata {
11    pub id: i64,
12    pub media_id: String,
13    pub origin_server: OwnedServerName,
14    pub content_type: Option<String>,
15    pub disposition_type: Option<String>,
16    pub file_name: Option<String>,
17    pub file_extension: Option<String>,
18    pub file_size: i64,
19    pub file_hash: Option<String>,
20    pub created_by: Option<OwnedUserId>,
21    pub created_at: UnixMillis,
22}
23#[derive(Insertable, Debug, Clone)]
24#[diesel(table_name = media_metadatas)]
25pub struct NewDbMetadata {
26    pub media_id: String,
27    pub origin_server: OwnedServerName,
28    pub content_type: Option<String>,
29    pub disposition_type: Option<String>,
30    pub file_name: Option<String>,
31    pub file_extension: Option<String>,
32    pub file_size: i64,
33    pub file_hash: Option<String>,
34    pub created_by: Option<OwnedUserId>,
35    pub created_at: UnixMillis,
36}
37
38pub fn get_metadata(server_name: &ServerName, media_id: &str) -> DataResult<Option<DbMetadata>> {
39    media_metadatas::table
40        .filter(media_metadatas::media_id.eq(media_id))
41        .filter(media_metadatas::origin_server.eq(server_name))
42        .first::<DbMetadata>(&mut *connect()?)
43        .optional()
44        .map_err(Into::into)
45}
46
47#[derive(Insertable, Identifiable, Queryable, Debug, Clone)]
48#[diesel(table_name = media_thumbnails)]
49pub struct DbThumbnail {
50    pub id: i64,
51    pub media_id: String,
52    pub origin_server: OwnedServerName,
53    pub content_type: String,
54    pub file_size: i64,
55    pub width: i32,
56    pub height: i32,
57    pub resize_method: String,
58    pub created_at: UnixMillis,
59}
60#[derive(Insertable, Debug, Clone)]
61#[diesel(table_name = media_thumbnails)]
62pub struct NewDbThumbnail {
63    pub media_id: String,
64    pub origin_server: OwnedServerName,
65    pub content_type: String,
66    pub file_size: i64,
67    pub width: i32,
68    pub height: i32,
69    pub resize_method: String,
70    pub created_at: UnixMillis,
71}
72
73pub fn get_thumbnail(
74    origin_server: &ServerName,
75    media_id: &str,
76    width: u32,
77    height: u32,
78) -> DataResult<Option<DbThumbnail>> {
79    media_thumbnails::table
80        .filter(media_thumbnails::origin_server.eq(origin_server))
81        .filter(media_thumbnails::media_id.eq(media_id))
82        .filter(media_thumbnails::width.eq(width as i32))
83        .filter(media_thumbnails::height.eq(height as i32))
84        .first::<DbThumbnail>(&mut *connect()?)
85        .optional()
86        .map_err(Into::into)
87}