|
import json |
|
import os |
|
import time |
|
import webbrowser |
|
import sys |
|
import re |
|
|
|
|
|
def handleWindows(extra_seconds): |
|
print("OS : Windows") |
|
local_settings = r"{}\Balsamiq\Balsamiq Wireframes\LocalSettings.json".format(os.getenv('APPDATA')) |
|
print("Reading from {}".format(local_settings)) |
|
with open(local_settings) as reader: |
|
json_data = json.load(reader) |
|
json_data['DefaultSelectionColorRGBA'] = int(time.time()) + extra_seconds |
|
print("Writing to {}".format(local_settings)) |
|
with open(local_settings, 'w') as outfile: |
|
json.dump(json_data, outfile) |
|
|
|
|
|
def handleMacos(trial_days_left=30, debug_mode=False): |
|
print("OS : macOS") |
|
print("Debug Mode: " + str(debug_mode)) |
|
|
|
def dump_debug(start_func, end_func, content_func, new_func): |
|
print("function start line: {}".format(start_func)) |
|
print("function end line: {}".format(end_func)) |
|
print("function content:") |
|
print(content_func) |
|
print("new function content:") |
|
print(new_func) |
|
|
|
editor_macos = "/Applications/Balsamiq Wireframes.app/Contents/Resources/editor-macos.js" |
|
editor_macos_test = r"C:\Users\housi\Desktop\Balsamiq\editor-macos-test.js" |
|
if debug_mode: |
|
editor_macos = editor_macos_test |
|
print(editor_macos) |
|
if not os.path.exists(editor_macos): |
|
print("editor-macos.js NOT FOUND!") |
|
exit(0) |
|
get_trial_days_left_pattern = re.compile(r"\s*function\s+getTrialDaysLeftFromNativeData\(\w+\)\s*{") |
|
func_start_line = -1 |
|
func_end_line = -1 |
|
found_a_match = False |
|
function_content = "" |
|
with open(editor_macos, encoding="utf8") as reader: |
|
line_number = 0 |
|
# it starts at 1 because w have already matched one '{' |
|
curly_braces_balance = 1 |
|
for line in reader.readlines(): |
|
line_number += 1 |
|
if not found_a_match: |
|
match = get_trial_days_left_pattern.match(line) |
|
if match is not None: |
|
found_a_match = True |
|
func_start_line = line_number |
|
# TODO what if the start line is also the end line, One-Liner function |
|
|
|
else: |
|
curly_braces_balance += line.count("{") |
|
curly_braces_balance -= line.count("}") |
|
if curly_braces_balance == 0: |
|
function_content = function_content + line |
|
func_end_line = line_number |
|
break |
|
if func_start_line != -1: |
|
function_content = function_content + line |
|
|
|
body = "return {};".format(trial_days_left) |
|
new_function_signature = "\nfunction getTrialDaysLeftFromNativeData(nativeData) {\n\t" + body + "\n}\n\n" |
|
|
|
if debug_mode: |
|
dump_debug(func_start_line, func_end_line, function_content, new_function_signature) |
|
|
|
with open(editor_macos, encoding="utf8") as reader: |
|
lines = reader.readlines() |
|
|
|
# The first -1 to make it base 0 and the second one refers to the previous index |
|
index = (func_start_line - 1) - 1 |
|
leading_count = 0 |
|
# Removing leading blank lines before the function definition |
|
while not lines[index].strip(): |
|
lines.pop(index) |
|
index -= 1 |
|
leading_count += 1 |
|
|
|
# The start and end indexes will change after removing the leading blank lines |
|
func_start_line -= leading_count |
|
func_end_line -= leading_count |
|
|
|
# Removing trailing blank lines after the function end |
|
index = func_end_line |
|
while not lines[index].strip(): |
|
lines.pop(index) |
|
|
|
# Removing the old function |
|
for i in range(func_end_line - func_start_line + 1): |
|
lines.pop(func_start_line - 1) |
|
|
|
# Replacing it with the new function |
|
lines.insert(func_start_line - 1, new_function_signature) |
|
|
|
# Writing changes back to file |
|
with open(editor_macos, "w", encoding="utf8") as f: |
|
lines = "".join(lines) |
|
f.write(lines) |
|
|
|
|
|
print("IMPORTANT! please make sure to close Balsamiq before proceeding or the script won't have any effect") |
|
years = int(input("How many years of trial do you want :) ")) |
|
|
|
if sys.platform.startswith("win"): |
|
handleWindows(years * 365 * 24 * 60 * 60) |
|
elif sys.platform.startswith("darwin"): |
|
handleMacos(years * 365) |
|
else: |
|
print("Sorry, operating system not supported") |
|
exit(0) |
|
|
|
print("****************************************************************") |
|
print("* Congratulations! You gained {} days of trial".format(years * 365)) |
|
print("* Please don't forget to leave a star ✭") |
|
print("****************************************************************") |
|
print("https://gist.github.com/HoussemNasri/c09e55e0e5f451aa10f8621a6680ba28") |
|
webbrowser.open("https://gist.github.com/HoussemNasri/c09e55e0e5f451aa10f8621a6680ba28") |
|
input("Press ENTER to exit") |
@ahmadtc
This doesn't work for me, Even if this is showing big number of days, but when you check it via "About Balsm...." you can see still exact correct day. Check what showing to me