anchor.diff:      local_name_prefix(Url) ++ ".metadata".
   
   metadata_name_for_local(Local) ->
  -	string:substr(Local, 1, string:str(Local, ".cachedata")) ++ "metadata".
  +    string:substr(Local, 1, string:str(Local, ".cachedata")) ++ "metadata".
   
   hexify([]) ->
       "";
  
positive.code: 	    ok;
  	false ->
  	    PartFilename = Filename ++ ".part",
          case http:request(get, {Url, []}, [], [{stream, PartFilename}]) of
          {ok, saved_to_file} ->
              ok = try_rename(PartFilename, Filename, 5, no_previous_error),
  	        CommandString =
  		        jukebox:priv_dir() ++ "/metadata/get_metadata.py " ++ 
  		        filename:extension(Url) ++ " " ++ Filename ++ " " ++ 
  		        local_name_prefix(Url),
  	        case os:cmd(CommandString) of
  		    "" -> ok;
  		    MetadataOutput ->
  		        jukebox:log_error("urlcache",
  				          [{"metadata_command", list_to_binary(CommandString)},
  				           {"metadata_error", list_to_binary(MetadataOutput)}])
  	        end;
          {ok, {{_, ResponseCode, _}, _, _}} ->
              file:write_file(local_metadata_name_for(Url), io_lib:format("No file, HTTP code: ~p~n", [ResponseCode])), %% So that wait_for_completion will find it
  		    ok = jukebox:log_http_error(ResponseCode, Url);
          {error, Error} ->
              file:write_file(local_metadata_name_for(Url), io_lib:format("No file, Error: ~p~n", [Error])),
  		    ok = jukebox:log_http_error(Error, Url)
          end
      end,
      gen_server:cast(CachePid, {download_done, Url}),
      ok.
  
negative.code: get_info(_Entry=#entry{url=Url}) ->
      get_info(Url);
  get_info(Url) ->
      get_info_from_metadata_name(local_metadata_name_for(Url), Url).
  
  get_info_from_local_name(Local_name) ->
      get_info_from_metadata_name(metadata_name_for_local(Local_name), Local_name).
  
  get_info_from_metadata_name(MetadataFilename, DisplayUrl) ->
      case file:read_file(MetadataFilename) of
          {error,_} -> dict:new();
          {ok, File} ->
              case binary_to_list(File) of
                  "No file" ++ _ ->
                      %% We logged the error below when file failed to download, just ignore
                      dict:new();
                  _ ->
                      case catch parse_info(File) of
                          {'EXIT', _} ->
                              jukebox:log_error("urlcache",
                                                [{"url", list_to_binary(DisplayUrl)},
                                                 {"metadata_error", File}]),
                              dict:new();
                          Dict -> Dict
                      end
              end
      end.
  
  parse_info(File) ->
      [StatusLine | Lines] = string:tokens(binary_to_list(File), "\r\n"),
      case StatusLine of
          "+" ++ _ ->
              dict:from_list(tupleise(Lines, []))
      end.
  
  tupleise([], List) -> List;
  