main.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include <iostream>
  2. #include <map>
  3. #include <string>
  4. #include <vector>
  5. #include "main.hpp"
  6. std::string viewer_name() {
  7. return "Flyfish Viewer";
  8. }
  9. bool PreviewFile::requiresAsyncChunk() const {
  10. return renderer != "fallback";
  11. }
  12. std::string extensionOf(const std::string& filename) {
  13. const auto dot = filename.find_last_of('.');
  14. return dot == std::string::npos ? "" : filename.substr(dot + 1);
  15. }
  16. std::optional<std::string> rendererFor(const std::string& extension) {
  17. static const std::map<std::string, std::string> renderers = {
  18. {"pdf", "pdfjs-dist"},
  19. {"ofd", "DLTech21/ofd.js"},
  20. {"dxf", "@flyfish-dev/cad-viewer"},
  21. {"dwg", "@flyfish-dev/cad-viewer"},
  22. {"dwf", "@flyfish-dev/cad-viewer"},
  23. {"dwfx", "@flyfish-dev/cad-viewer"},
  24. {"xps", "@flyfish-dev/cad-viewer"},
  25. {"cpp", "highlight.js"}
  26. };
  27. const auto found = renderers.find(extension);
  28. if (found == renderers.end()) return std::nullopt;
  29. return found->second;
  30. }
  31. std::vector<PreviewFile> createPreviewQueue(const std::vector<std::string>& filenames) {
  32. std::vector<PreviewFile> queue;
  33. for (const auto& name : filenames) {
  34. queue.push_back({ name, rendererFor(extensionOf(name)).value_or("fallback"), 0 });
  35. }
  36. return queue;
  37. }
  38. int main() {
  39. for (const auto& file : createPreviewQueue({"contract.pdf", "house.dwfx", "main.cpp"})) {
  40. std::cout << file.name << " -> " << file.renderer << std::endl;
  41. }
  42. return 0;
  43. }