Commit 05328cef authored by Paul Asmuth's avatar Paul Asmuth
Browse files

fix asset reg.

parent ccd605d3
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -2,9 +2,8 @@
set -e
source $(dirname $0)/../src/libfnord/fnord-base/assets.sh

assets_init

# fnord/3rdparty/codemirror.js
fn_assets_init
fn_assets_add "fnord/3rdparty/codemirror.js" "src/libfnord/fnord-webcomponents/3rdparty/codemirror.js" # 

#(
#  asset_uniq "fnordmetric_webui_fnordmetric_webui_css"
+11 −8
Original line number Diff line number Diff line
@@ -14,9 +14,10 @@

namespace fnord {

static std::unordered_map<
    std::string, std::pair<const unsigned char*, size_t>> asset_lib;
static std::mutex asset_lib_mutex;
Assets::AssetMap* Assets::globalMap() {
  static AssetMap map;
  return &map;
}

Assets::AssetFile::AssetFile(
    const std::string& name,
@@ -29,8 +30,9 @@ void Assets::registerAsset(
    const std::string& filename,
    const unsigned char* data,
    size_t size) {
  std::lock_guard<std::mutex> lock_holder(asset_lib_mutex);
  asset_lib.emplace(filename, std::make_pair(data, size));
  auto asset_map = Assets::globalMap();
  std::lock_guard<std::mutex> lock_holder(asset_map->mutex);
  asset_map->assets.emplace(filename, std::make_pair(data, size));
}

std::string Assets::getAsset(const std::string& filename) {
@@ -48,10 +50,11 @@ std::string Assets::getAsset(const std::string& filename) {
  }
#endif

  std::lock_guard<std::mutex> lock_holder(asset_lib_mutex);
  const auto asset = asset_lib.find(filename);
  auto asset_map = Assets::globalMap();
  std::lock_guard<std::mutex> lock_holder(asset_map->mutex);
  const auto asset = asset_map->assets.find(filename);

  if (asset != asset_lib.end()) {
  if (asset != asset_map->assets.end()) {
    const auto& data = asset->second;
    return std::string((const char*) data.first, data.second);
  }
+11 −2
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#include <string>
#include <unordered_map>
#include <vector>
#include <mutex>

namespace fnord {

@@ -33,8 +34,16 @@ public:
  static std::string getAsset(const std::string& filename);

protected:
  static std::unordered_map<
      std::string, std::pair<const unsigned char*, size_t>>* global_map();

  struct AssetMap {
    std::mutex mutex;
    std::unordered_map<
        std::string,
        std::pair<const unsigned char*, size_t>> assets;
  };

  static AssetMap* globalMap();

};

} // namespace fnord
+13 −6
Original line number Diff line number Diff line
#/bin/bash
set -e

assets_init() {
fn_assets_init() {
  if [[ -z $ASSETS_FILE ]]; then
    echo "ASSETS_FILE env var must be set"
    exit 1
@@ -10,13 +10,20 @@ assets_init() {
  echo "#include <fnord-base/assets.h>" > $ASSETS_FILE
}

assets_add() {
  uniq="blah"
# $1 => asset logical/fake path
# $2 => asset real path
fn_assets_add() {
  if [[ -z $ASSETS_FILE ]]; then
    echo "ASSETS_FILE env var must be set"
    exit 1
  fi;

  uniq=$(echo $ASSETS_FILE | sed -e 's/[^a-zA-Z0-9]/_/g')

  (
    echo "static const unsigned char __${uniq}_data[] = {"
    (cat $1 | xxd -i)
    (cat $2 | xxd -i)
    echo "};"
    echo "static fnordmetric::util::Assets::AssetFile __${uniq}(\"$2\", __${uniq}_data, sizeof(__${uniq}_data));"
  ) >> $assets_file
    echo "static fnord::Assets::AssetFile __${uniq}(\"$1\", __${uniq}_data, sizeof(__${uniq}_data));"
  ) >> $ASSETS_FILE
}