abonander / mime_guess

MIME type guessing of file extensions for Rust.
MIT License
162 stars 56 forks source link

Missing mime types for some extensions #73

Open qarmin opened 2 years ago

qarmin commented 2 years ago

Below is list of 90 most popular extensions on my OS, that doesn't have any mime type assigned some like qml are easy to assign, unlike generic extension file

a - file created by compilers o - file created by compiles pyc - compiled python gd - Godot Engine script file qml - QT language ui - interface file(Glade/Cambalache etc.)

28636 - ko
27767 - d
25827 - mo
16772 - final
15620 - file
11143 - o
9470 - pyc
6494 - idx
3848 - cache
3448 - 0
3267 - timestamp
3236 - import
2668 - gd
2661 - qm
2577 - qml
2499 - cache-7
2393 - md5sums
2287 - rmeta
2109 - docbook
1870 - md5
1858 - rlib
1844 - a
1823 - len
1660 - tscn
1590 - g2d
1587 - desktop
1524 - stex
1475 - desc
1398 - fastresume
1369 - vim
1318 - sqlite
1311 - sample
1291 - page
1243 - ui
1232 - 1
1138 - pyi
1108 - triggers
1102 - rb
1064 - shlibs
954 - qmlc
947 - dirtree
897 - nls
859 - lng
778 - po
772 - jsonlz4
673 - spec
652 - symbols
634 - info
624 - tres
617 - service
578 - 2
575 - 3
533 - postinst
483 - cdb
483 - bik
477 - hdb
465 - tmpl
464 - postrm
447 - g16
445 - properties
380 - prerm
379 - done
370 - hyb
362 - code
358 - 5
354 - cocci
310 - cache-6
293 - 6
284 - rst
265 - _
258 - old
258 - tablet
255 - whs
254 - mpi
251 - preinst
249 - 26
248 - at
247 - g17
244 - mtl
236 - fw
236 - mmg
234 - conffiles
228 - storage
228 - Debian
218 - 4
211 - ejs
209 - out
209 - pod
205 - pack
200 - fon
qarmin commented 2 years ago

Code used to find such extensions

pub fn mime_check() {
    let allowed_extensions = vec![];
    let checked_dir = vec!["/home/", "/mnt"];

    let collected_files = collect_files(checked_dir, allowed_extensions);

    let collected_extensions: Vec<_> = collected_files
        .into_iter()
        .filter_map(|path| {
            let path = Path::new(&path);
            if let Some(extension) = path.extension() {
                let extension = extension.to_string_lossy().to_string();
                let mime_g = mime_guess::from_ext(extension.as_str());
                let mime_number = mime_g.iter().count();
                if extension == "a" {
                    println!("{:?}", path);
                }
                if mime_number == 0 {
                    return Some(extension);
                }
            }
            None
        })
        .collect();
    let mut btree: HashMap<String, u32> = Default::default();
    for i in collected_extensions {
        btree.entry(i.clone()).or_insert(0);
        *btree.get_mut(&i).unwrap() += 1;
    }

    let mut new_vec = Vec::new();
    for i in btree {
        new_vec.push(i);
    }
    new_vec.sort_by(|(_ext, number), (_ext2, number2)| {
        return if number < number2 {
            Ordering::Greater
        } else {
            Ordering::Less
        };
    });

    for (ext, number) in new_vec {
        println!("{} - {}", number, ext);
    }
}