Skip to content

Instantly share code, notes, and snippets.

@darthoctopus
Last active October 15, 2020 00:34
Show Gist options
  • Save darthoctopus/8528a1b26745d0cb658682f4e6f66278 to your computer and use it in GitHub Desktop.
Save darthoctopus/8528a1b26745d0cb658682f4e6f66278 to your computer and use it in GitHub Desktop.
FITS handler for GNOME Sushi. Put fits.js in /usr/share/sushi/js/viewers, and put fits.thumbnailer in ~/.local/share/thumbnailers.
/*
* Copyright (C) 2011 Red Hat, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*
* The Sushi project hereby grant permission for non-gpl compatible GStreamer
* plugins to be used and distributed together with GStreamer and Sushi. This
* permission is above and beyond the permissions granted by the GPL license
* Sushi is covered by.
*
* Authors: Cosimo Cecchi <cosimoc@redhat.com>
*
*/
const {GLib, GObject, Gio} = imports.gi;
const Renderer = imports.ui.renderer;
const Image = imports.viewers.image
const tmpdir = "/tmp/sushifits"
const convert = "/usr/bin/convert"
const args = "-auto-level"
var Klass = GObject.registerClass({
Implements: [Renderer.Renderer],
Properties: {
fullscreen: GObject.ParamSpec.boolean('fullscreen', '', '',
GObject.ParamFlags.READABLE,
false),
ready: GObject.ParamSpec.boolean('ready', '', '',
GObject.ParamFlags.READABLE,
false)
},
}, class FITSRenderer extends Image.Klass {
get ready() {
return !!this._ready;
}
get fullscreen() {
return !!this._fullscreen;
}
_init(file) {
GLib.spawn_command_line_sync("/usr/bin/mkdir -p " + tmpdir);
let _path = file.get_path();
let _hashstr = _path + file.query_info(Gio.FILE_ATTRIBUTE_TIME_MODIFIED,0,null).get_attribute_uint64(Gio.FILE_ATTRIBUTE_TIME_MODIFIED);
let _hash = GLib.compute_checksum_for_string (GLib.ChecksumType.SHA512, _hashstr, _hashstr.length);
let _newname = tmpdir + "/" + _hash + ".jpg"
let _file2 = Gio.file_new_for_path(_newname);
if (!(_file2.query_exists(null))) GLib.spawn_command_line_sync(convert + " \"" + _path + "\" " + args + " \"" + _newname + "\"");
super._init(_file2);
}
});
var mimeTypes = ['image/fits', 'image/x-fits'];
[Thumbnailer Entry]
Exec=/usr/bin/convert %i -auto-level -geometry x%s png:%o
MimeType=image/fits;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment