file_item.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import gi
  2. gi.require_version("Gtk", "3.0")
  3. from gi.repository import GLib, Gio, Gtk
  4. import os
  5. import mimetypes
  6. from PyPPUB import ppub_builder
  7. import datetime
  8. @Gtk.Template.from_file("ppublisher/file.ui")
  9. class FileItem(Gtk.Box):
  10. __gtype_name__ = "file_item"
  11. list_filename: Gtk.Label = Gtk.Template.Child()
  12. star: Gtk.Image = Gtk.Template.Child()
  13. list_mimetype: Gtk.Label = Gtk.Template.Child()
  14. def __init__(self, path, is_metadata = False):
  15. super(Gtk.Box, self).__init__()
  16. self.path = path
  17. self.filename = "metadata"
  18. self.is_main = False
  19. self.is_poster = False
  20. self.is_metadata = is_metadata
  21. if(not is_metadata):
  22. if(path.endswith(".pvpd")):
  23. self.mimetype = "application/x-pvpd"
  24. else:
  25. self.mimetype = mimetypes.guess_type(path)[0] or "application/octet-stream"
  26. self.filename = os.path.split(path)[1]
  27. self.list_filename.set_text(self.filename)
  28. self.list_mimetype.set_text(self.mimetype)
  29. else:
  30. self.list_filename.set_text("Metadata")
  31. self.list_mimetype.set_text("application/x-ppub-metadata")
  32. self.mimetype = "application/x-ppub-metadata"
  33. self.star.set_from_icon_name("document-properties-symbolic", Gtk.IconSize.MENU)
  34. self.title = "My book"
  35. self.author = ""
  36. self.description = ""
  37. self.tags = ""
  38. self.licence = ""
  39. self.copyright = ""
  40. self.set_main(False)
  41. def set_main(self, main):
  42. self.is_main = main
  43. if(not self.is_metadata):
  44. if(main):
  45. self.star.set_from_icon_name("starred-symbolic", Gtk.IconSize.MENU)
  46. else:
  47. self.star.set_from_icon_name("non-starred-symbolic", Gtk.IconSize.MENU)
  48. def set_poster(self, poster):
  49. self.is_poster = poster
  50. def build_metadata(self):
  51. metadata = ppub_builder.Metadata()
  52. def add_if_present(field, value):
  53. if(value != None or value != ""):
  54. metadata.set_value(field, value)
  55. add_if_present("title", self.title)
  56. add_if_present("author", self.author)
  57. add_if_present("description", self.description)
  58. add_if_present("tags", self.tags)
  59. add_if_present("licence", self.licence)
  60. add_if_present("copyright", self.copyright)
  61. metadata.set_value("date", datetime.datetime.now().astimezone().isoformat())
  62. return metadata