From 627524dcb77c765def0a9a579c19f193583639c0 Mon Sep 17 00:00:00 2001 From: Tim Ittermann Date: Wed, 3 May 2017 23:10:58 +0200 Subject: [PATCH 1/7] Create TimeAPI.java --- .../core/apis/TimeAPI.java | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 src/main/java/dan200.computercraft/core/apis/TimeAPI.java diff --git a/src/main/java/dan200.computercraft/core/apis/TimeAPI.java b/src/main/java/dan200.computercraft/core/apis/TimeAPI.java new file mode 100644 index 000000000..9618999cb --- /dev/null +++ b/src/main/java/dan200.computercraft/core/apis/TimeAPI.java @@ -0,0 +1,136 @@ +package dan200.computercraft.core.apis; + +import dan200.computercraft.api.lua.ILuaContext; +import dan200.computercraft.api.lua.LuaException; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + + +public class TimeAPI implements ILuaAPI{ + + private static final String DEFAULT_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss"; + + private String formatDate(String pattern, Date date) { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + return sdf.format(date); + } + + private long parseDate(String pattern, String value) throws LuaException { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + long timestamp; + try { + timestamp = sdf.parse(value).getTime(); + } catch (ParseException parseException) { + throw new LuaException("Date can't parsed"); + } + return timestamp; + } + + @Override + public String[] getNames() { + return new String[]{ + "time", + }; + } + + @Override + public void startup() {} + + @Override + public void advance(double _dt) {} + + @Override + public void shutdown() {} + + @Override + public String[] getMethodNames() { + return new String[] { + "format", + "getDay", + "getMonth", + "getYear", + "getHour", + "getMinute", + "getSecound", + "getTime", + "parse" + }; + } + + @Override + public Object[] callMethod(ILuaContext context, int method, Object[] args) throws LuaException, InterruptedException { + + //timestamp like PHP without mills! + + Calendar cal = Calendar.getInstance(); + + //If timestamp is given + if (args.length > 0 && args[0] != null && args[0] instanceof Double) { + long argTime = ((Double)args[0]).longValue()*1000; + cal.setTimeInMillis(argTime); + } + + Object[] returnArray = new Object[1]; + int calendarValue = -1; + int addValue = 0; + + switch (method) { + case 0: + //format() + String format = DEFAULT_TIME_FORMAT; + if (args.length == 1 && args[0] instanceof String) { + format = (String) args[0]; + } + else if (args.length == 2 && args[1] instanceof String) { + format = (String) args[1]; + } + returnArray[0] = formatDate(format, cal.getTime()); + break; + case 1: + //getDay() + calendarValue = Calendar.DAY_OF_MONTH; + break; + case 2: + //getMonth() + calendarValue = Calendar.MONTH; + addValue = 1; + break; + case 3: + //getYear() + calendarValue = Calendar.YEAR; + break; + case 4: + //getHour() + calendarValue = Calendar.HOUR_OF_DAY; + break; + case 5: + //getMinute() + calendarValue = Calendar.MINUTE; + break; + case 6: + //getSecound() + calendarValue = Calendar.SECOND; + break; + case 7: + //getTime() + returnArray[0] = cal.getTimeInMillis() / 1000; + break; + case 8: + //parse(String pattern, String input) + if (args.length < 2 || args[0] == null || args[1] == null || !(args[0] instanceof String) || !(args[1] instanceof String)) { + throw new LuaException("String expected!"); + } + String pattern = (String) args[0], + input = (String) args[1]; + returnArray[0] = parseDate(pattern, input) / 1000; + } + + if (calendarValue != -1 && returnArray[0] == null) { + returnArray[0] = cal.get(calendarValue)+addValue; + } + return returnArray; + } +} From c1d5ae2a09647ffafffefeb8c3bf20552d229b41 Mon Sep 17 00:00:00 2001 From: Tim Ittermann Date: Wed, 3 May 2017 23:11:52 +0200 Subject: [PATCH 2/7] Rename src/main/java/dan200.computercraft/core/apis/TimeAPI.java to src/main/java/dan200/computercraft/core/apis/TimeAPI.java --- .../computercraft}/core/apis/TimeAPI.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/java/{dan200.computercraft => dan200/computercraft}/core/apis/TimeAPI.java (100%) diff --git a/src/main/java/dan200.computercraft/core/apis/TimeAPI.java b/src/main/java/dan200/computercraft/core/apis/TimeAPI.java similarity index 100% rename from src/main/java/dan200.computercraft/core/apis/TimeAPI.java rename to src/main/java/dan200/computercraft/core/apis/TimeAPI.java From b2cc6ec82ac09f8ce3f90a97b400f3836caa2cd7 Mon Sep 17 00:00:00 2001 From: Tim Ittermann Date: Wed, 3 May 2017 23:12:48 +0200 Subject: [PATCH 3/7] Add TimeAPI to Computers APIs --- src/main/java/dan200/computercraft/core/computer/Computer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/dan200/computercraft/core/computer/Computer.java b/src/main/java/dan200/computercraft/core/computer/Computer.java index 6b3840e8f..c496a663a 100644 --- a/src/main/java/dan200/computercraft/core/computer/Computer.java +++ b/src/main/java/dan200/computercraft/core/computer/Computer.java @@ -615,6 +615,7 @@ public class Computer m_apis.add( new PeripheralAPI( m_apiEnvironment ) ); m_apis.add( new OSAPI( m_apiEnvironment ) ); m_apis.add( new BitAPI( m_apiEnvironment ) ); + m_apis.add( new TimeAPI() ); //m_apis.add( new BufferAPI( m_apiEnvironment ) ); if( ComputerCraft.http_enable ) { From 45803e4a492897f0f559927b966fc95ca57de46a Mon Sep 17 00:00:00 2001 From: Tim Ittermann Date: Thu, 4 May 2017 23:18:03 +0200 Subject: [PATCH 4/7] Replace get...() functions with properties. NOT ALL TESTED YET! --- .../computercraft/core/apis/TimeAPI.java | 145 ++++++++---------- .../computercraft/core/apis/TimeUtilsAPI.java | 92 +++++++++++ .../computercraft/core/computer/Computer.java | 2 +- .../core/lua/LuaJLuaMachine.java | 4 + 4 files changed, 157 insertions(+), 86 deletions(-) create mode 100644 src/main/java/dan200/computercraft/core/apis/TimeUtilsAPI.java diff --git a/src/main/java/dan200/computercraft/core/apis/TimeAPI.java b/src/main/java/dan200/computercraft/core/apis/TimeAPI.java index 9618999cb..8ccabc674 100644 --- a/src/main/java/dan200/computercraft/core/apis/TimeAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/TimeAPI.java @@ -1,94 +1,36 @@ package dan200.computercraft.core.apis; -import dan200.computercraft.api.lua.ILuaContext; -import dan200.computercraft.api.lua.LuaException; +import org.luaj.vm2.LuaTable; +import org.luaj.vm2.LuaValue; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.Calendar; -import java.util.Date; +import java.util.TimeZone; -public class TimeAPI implements ILuaAPI{ +public class TimeAPI extends LuaTable { - private static final String DEFAULT_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss"; + private TimeZone timeZone; + private Calendar calendarInstance; - private String formatDate(String pattern, Date date) { - SimpleDateFormat sdf = new SimpleDateFormat(pattern); - return sdf.format(date); + public TimeAPI() { + timeZone = TimeZone.getDefault(); + calendarInstance = Calendar.getInstance( timeZone ); } - private long parseDate(String pattern, String value) throws LuaException { - SimpleDateFormat sdf = new SimpleDateFormat(pattern); - long timestamp; - try { - timestamp = sdf.parse(value).getTime(); - } catch (ParseException parseException) { - throw new LuaException("Date can't parsed"); - } - return timestamp; + public void setTimeZone(String timeZoneId) { + timeZone = TimeZone.getTimeZone(timeZoneId); + calendarInstance = Calendar.getInstance( timeZone ); } - @Override - public String[] getNames() { - return new String[]{ - "time", - }; - } - - @Override - public void startup() {} - - @Override - public void advance(double _dt) {} - - @Override - public void shutdown() {} - - @Override - public String[] getMethodNames() { - return new String[] { - "format", - "getDay", - "getMonth", - "getYear", - "getHour", - "getMinute", - "getSecound", - "getTime", - "parse" - }; - } - - @Override - public Object[] callMethod(ILuaContext context, int method, Object[] args) throws LuaException, InterruptedException { + public LuaValue getResult(int method) { //timestamp like PHP without mills! - Calendar cal = Calendar.getInstance(); - - //If timestamp is given - if (args.length > 0 && args[0] != null && args[0] instanceof Double) { - long argTime = ((Double)args[0]).longValue()*1000; - cal.setTimeInMillis(argTime); - } - - Object[] returnArray = new Object[1]; + Object returnValue = null; int calendarValue = -1; int addValue = 0; switch (method) { - case 0: - //format() - String format = DEFAULT_TIME_FORMAT; - if (args.length == 1 && args[0] instanceof String) { - format = (String) args[0]; - } - else if (args.length == 2 && args[1] instanceof String) { - format = (String) args[1]; - } - returnArray[0] = formatDate(format, cal.getTime()); - break; case 1: //getDay() calendarValue = Calendar.DAY_OF_MONTH; @@ -116,21 +58,54 @@ public class TimeAPI implements ILuaAPI{ break; case 7: //getTime() - returnArray[0] = cal.getTimeInMillis() / 1000; - break; - case 8: - //parse(String pattern, String input) - if (args.length < 2 || args[0] == null || args[1] == null || !(args[0] instanceof String) || !(args[1] instanceof String)) { - throw new LuaException("String expected!"); - } - String pattern = (String) args[0], - input = (String) args[1]; - returnArray[0] = parseDate(pattern, input) / 1000; + return wrap( Math.floor( calendarInstance.getTimeInMillis() / 1000 ) ); } - if (calendarValue != -1 && returnArray[0] == null) { - returnArray[0] = cal.get(calendarValue)+addValue; + if (calendarValue != -1 && returnValue == null) { + return wrap( calendarInstance.get(calendarValue)+addValue ); } - return returnArray; + else + return LuaValue.NIL; + } + + @Override + public LuaValue get(LuaValue luaValue) { + + String searched = luaValue.toString(); + + if (searched.equals("day")) + return getResult(1); + else if (searched.equals("month")) + return getResult(2); + else if (searched.equals("year")) + return getResult(3); + else if (searched.equals("hour")) + return getResult(4); + else if (searched.equals("minute")) + return getResult(5); + else if (searched.equals("second")) + return getResult(6); + else if (searched.equals("timezone")) + return wrap(timeZone.getID()); + else + return super.get(luaValue); + } + + @Override + public void set(LuaValue key, LuaValue value) { + if (key.toString().equals("timezone")) { + setTimeZone( value.toString() ); + } + else { + super.set(key, value); + } + } + + private LuaValue wrap(double number) { + return LuaValue.valueOf(number); + } + + private LuaValue wrap(String value) { + return LuaValue.valueOf(value); } } diff --git a/src/main/java/dan200/computercraft/core/apis/TimeUtilsAPI.java b/src/main/java/dan200/computercraft/core/apis/TimeUtilsAPI.java new file mode 100644 index 000000000..0a23d388c --- /dev/null +++ b/src/main/java/dan200/computercraft/core/apis/TimeUtilsAPI.java @@ -0,0 +1,92 @@ +package dan200.computercraft.core.apis; + +import dan200.computercraft.api.lua.ILuaContext; +import dan200.computercraft.api.lua.LuaException; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +/** + * Created by timia2109 (Tim Ittermann) on 04.05.2017. + * + * @author timia2109 (Tim Ittermann) + */ +public class TimeUtilsAPI implements ILuaAPI { + + private static final String DEFAULT_TIME_FORMAT = "yyyy-MM-dd"; + + private String formatDate(String pattern, Date date) { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + return sdf.format(date); + } + + private long parseDate(String pattern, String value) throws LuaException { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + long timestamp; + try { + timestamp = sdf.parse(value).getTime(); + } catch (ParseException parseException) { + throw new LuaException("Date can't parsed"); + } + return timestamp; + } + + @Override + public String[] getNames() { + return new String[]{ + "timeutils" + }; + } + + @Override + public void startup() { + } + + @Override + public void advance(double _dt) { + } + + @Override + public void shutdown() { + } + + @Override + public String[] getMethodNames() { + return new String[]{ + "format", + "parse" + }; + } + + @Override + public Object[] callMethod(ILuaContext context, int method, Object[] args) throws LuaException, InterruptedException { + Calendar cal = Calendar.getInstance(); + + if (args.length > 0 && args[0] != null && args[0] instanceof Double) { + long argTime = ((Double) args[0]).longValue() * 1000; + cal.setTimeInMillis(argTime); + } + + switch (method) { + case 0: + String format = DEFAULT_TIME_FORMAT; + if (args.length == 1 && args[0] instanceof String) { + format = (String) args[0]; + } else if (args.length == 2 && args[1] instanceof String) { + format = (String) args[1]; + } + return new Object[]{formatDate(format, cal.getTime())}; + case 1: + //parse(String pattern, String input) + if (args.length < 2 || args[0] == null || args[1] == null || !(args[0] instanceof String) || !(args[1] instanceof String)) { + throw new LuaException("String expected!"); + } + String pattern = (String) args[0], + input = (String) args[1]; + return new Object[]{parseDate(pattern, input) / 1000}; + } + return null; + } +} diff --git a/src/main/java/dan200/computercraft/core/computer/Computer.java b/src/main/java/dan200/computercraft/core/computer/Computer.java index c496a663a..9f72fb79f 100644 --- a/src/main/java/dan200/computercraft/core/computer/Computer.java +++ b/src/main/java/dan200/computercraft/core/computer/Computer.java @@ -615,7 +615,7 @@ public class Computer m_apis.add( new PeripheralAPI( m_apiEnvironment ) ); m_apis.add( new OSAPI( m_apiEnvironment ) ); m_apis.add( new BitAPI( m_apiEnvironment ) ); - m_apis.add( new TimeAPI() ); + m_apis.add( new TimeUtilsAPI() ); //m_apis.add( new BufferAPI( m_apiEnvironment ) ); if( ComputerCraft.http_enable ) { diff --git a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java index 16cefb4b8..5cc3e0b62 100644 --- a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java +++ b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java @@ -12,6 +12,7 @@ import dan200.computercraft.api.lua.ILuaObject; import dan200.computercraft.api.lua.ILuaTask; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.core.apis.ILuaAPI; +import dan200.computercraft.core.apis.TimeAPI; import dan200.computercraft.core.computer.Computer; import dan200.computercraft.core.computer.ITask; import dan200.computercraft.core.computer.MainThread; @@ -120,6 +121,9 @@ public class LuaJLuaMachine implements ILuaMachine m_softAbortMessage = null; m_hardAbortMessage = null; + + //Add to use lua setters at the TimeAPI + m_globals.set("time", new TimeAPI()); } @Override From e0e81a9b18410af1a4230488ae8a9810720c3c65 Mon Sep 17 00:00:00 2001 From: Tim Ittermann Date: Sat, 6 May 2017 14:24:48 +0200 Subject: [PATCH 5/7] Put time functions into the OS API --- .../dan200/computercraft/core/apis/OSAPI.java | 74 ++++++++++-- .../computercraft/core/apis/TimeAPI.java | 111 ------------------ .../computercraft/core/apis/TimeUtilsAPI.java | 92 --------------- .../computercraft/core/computer/Computer.java | 1 - .../core/lua/LuaJLuaMachine.java | 3 - .../computercraft/lua/rom/help/changelog | 2 + .../assets/computercraft/lua/rom/help/os | 4 +- .../computercraft/lua/rom/help/whatsnew | 2 + 8 files changed, 70 insertions(+), 219 deletions(-) delete mode 100644 src/main/java/dan200/computercraft/core/apis/TimeAPI.java delete mode 100644 src/main/java/dan200/computercraft/core/apis/TimeUtilsAPI.java diff --git a/src/main/java/dan200/computercraft/core/apis/OSAPI.java b/src/main/java/dan200/computercraft/core/apis/OSAPI.java index f2d5e70b7..b1642f6ff 100644 --- a/src/main/java/dan200/computercraft/core/apis/OSAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/OSAPI.java @@ -10,10 +10,7 @@ import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.shared.util.StringUtil; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; +import java.util.*; public class OSAPI implements ILuaAPI { @@ -294,17 +291,74 @@ public class OSAPI implements ILuaAPI case 11: { // m_time - synchronized( m_alarms ) - { - return new Object[] { m_time }; + if (args.length == 0) { + synchronized (m_alarms) { + return new Object[]{m_time}; + } + } + else if (args.length > 0 && args[0] != null && args[0] instanceof String) { + String param = (String) args[0]; + //Get Hour of day (UTC) + if (param.equals("utc")) { + Calendar c = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + return new Object[] {c.get(Calendar.HOUR_OF_DAY)}; + } + //Get Hour of day (local time) + else if (param.equals("local")) { + Calendar c = Calendar.getInstance(); + return new Object[] {c.get(Calendar.HOUR_OF_DAY)}; + } + //Get ingame hour + else if (param.equals("ingame")) { + return callMethod(context, method, new Object[0]); + } + //Get timestamp (without mills) + else if (param.equals("timestamp")) { + long timestamp = Calendar.getInstance().getTimeInMillis()/1000; + return new Object[]{timestamp}; + } + else { + throw new LuaException("Unsupported operation"); + } + } + else { + throw new LuaException("Expected string"); } } case 12: { // day - synchronized( m_alarms ) - { - return new Object[] { m_day }; + if (args.length == 0 ) { + synchronized (m_alarms) { + return new Object[]{m_day}; + } + } + else if (args.length > 0 && args[0] != null && args[0] instanceof String) { + String param = (String) args[0]; + //Get numbers of days since 1970-01-01 (utc) + if (param.equals("utc")) { + long timestamp = Calendar.getInstance().getTimeInMillis(); + timestamp /= 86400000; //Secounds of a day + return new Object[] {timestamp}; + } + //Get numbers of days since 1970-01-01 (local time) + else if (param.equals("local")) { + long timestamp = Calendar.getInstance().getTimeInMillis(); + int offset = TimeZone.getDefault().getRawOffset(); + timestamp += offset; //Add TZOffset to mills + timestamp /= 86400000; //Secounds of a day + return new Object[] {timestamp}; + } + //Get game day + else if (param.equals("ingame")){ + return callMethod(context, method, new Object[0]); //Normal os.day() + } + else { + throw new LuaException("Unsupported operation"); + } + } + else { + throw new LuaException("Expected string"); } } case 13: diff --git a/src/main/java/dan200/computercraft/core/apis/TimeAPI.java b/src/main/java/dan200/computercraft/core/apis/TimeAPI.java deleted file mode 100644 index 8ccabc674..000000000 --- a/src/main/java/dan200/computercraft/core/apis/TimeAPI.java +++ /dev/null @@ -1,111 +0,0 @@ -package dan200.computercraft.core.apis; - -import org.luaj.vm2.LuaTable; -import org.luaj.vm2.LuaValue; - -import java.util.Calendar; -import java.util.TimeZone; - - -public class TimeAPI extends LuaTable { - - private TimeZone timeZone; - private Calendar calendarInstance; - - public TimeAPI() { - timeZone = TimeZone.getDefault(); - calendarInstance = Calendar.getInstance( timeZone ); - } - - public void setTimeZone(String timeZoneId) { - timeZone = TimeZone.getTimeZone(timeZoneId); - calendarInstance = Calendar.getInstance( timeZone ); - } - - public LuaValue getResult(int method) { - - //timestamp like PHP without mills! - - Object returnValue = null; - int calendarValue = -1; - int addValue = 0; - - switch (method) { - case 1: - //getDay() - calendarValue = Calendar.DAY_OF_MONTH; - break; - case 2: - //getMonth() - calendarValue = Calendar.MONTH; - addValue = 1; - break; - case 3: - //getYear() - calendarValue = Calendar.YEAR; - break; - case 4: - //getHour() - calendarValue = Calendar.HOUR_OF_DAY; - break; - case 5: - //getMinute() - calendarValue = Calendar.MINUTE; - break; - case 6: - //getSecound() - calendarValue = Calendar.SECOND; - break; - case 7: - //getTime() - return wrap( Math.floor( calendarInstance.getTimeInMillis() / 1000 ) ); - } - - if (calendarValue != -1 && returnValue == null) { - return wrap( calendarInstance.get(calendarValue)+addValue ); - } - else - return LuaValue.NIL; - } - - @Override - public LuaValue get(LuaValue luaValue) { - - String searched = luaValue.toString(); - - if (searched.equals("day")) - return getResult(1); - else if (searched.equals("month")) - return getResult(2); - else if (searched.equals("year")) - return getResult(3); - else if (searched.equals("hour")) - return getResult(4); - else if (searched.equals("minute")) - return getResult(5); - else if (searched.equals("second")) - return getResult(6); - else if (searched.equals("timezone")) - return wrap(timeZone.getID()); - else - return super.get(luaValue); - } - - @Override - public void set(LuaValue key, LuaValue value) { - if (key.toString().equals("timezone")) { - setTimeZone( value.toString() ); - } - else { - super.set(key, value); - } - } - - private LuaValue wrap(double number) { - return LuaValue.valueOf(number); - } - - private LuaValue wrap(String value) { - return LuaValue.valueOf(value); - } -} diff --git a/src/main/java/dan200/computercraft/core/apis/TimeUtilsAPI.java b/src/main/java/dan200/computercraft/core/apis/TimeUtilsAPI.java deleted file mode 100644 index 0a23d388c..000000000 --- a/src/main/java/dan200/computercraft/core/apis/TimeUtilsAPI.java +++ /dev/null @@ -1,92 +0,0 @@ -package dan200.computercraft.core.apis; - -import dan200.computercraft.api.lua.ILuaContext; -import dan200.computercraft.api.lua.LuaException; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; - -/** - * Created by timia2109 (Tim Ittermann) on 04.05.2017. - * - * @author timia2109 (Tim Ittermann) - */ -public class TimeUtilsAPI implements ILuaAPI { - - private static final String DEFAULT_TIME_FORMAT = "yyyy-MM-dd"; - - private String formatDate(String pattern, Date date) { - SimpleDateFormat sdf = new SimpleDateFormat(pattern); - return sdf.format(date); - } - - private long parseDate(String pattern, String value) throws LuaException { - SimpleDateFormat sdf = new SimpleDateFormat(pattern); - long timestamp; - try { - timestamp = sdf.parse(value).getTime(); - } catch (ParseException parseException) { - throw new LuaException("Date can't parsed"); - } - return timestamp; - } - - @Override - public String[] getNames() { - return new String[]{ - "timeutils" - }; - } - - @Override - public void startup() { - } - - @Override - public void advance(double _dt) { - } - - @Override - public void shutdown() { - } - - @Override - public String[] getMethodNames() { - return new String[]{ - "format", - "parse" - }; - } - - @Override - public Object[] callMethod(ILuaContext context, int method, Object[] args) throws LuaException, InterruptedException { - Calendar cal = Calendar.getInstance(); - - if (args.length > 0 && args[0] != null && args[0] instanceof Double) { - long argTime = ((Double) args[0]).longValue() * 1000; - cal.setTimeInMillis(argTime); - } - - switch (method) { - case 0: - String format = DEFAULT_TIME_FORMAT; - if (args.length == 1 && args[0] instanceof String) { - format = (String) args[0]; - } else if (args.length == 2 && args[1] instanceof String) { - format = (String) args[1]; - } - return new Object[]{formatDate(format, cal.getTime())}; - case 1: - //parse(String pattern, String input) - if (args.length < 2 || args[0] == null || args[1] == null || !(args[0] instanceof String) || !(args[1] instanceof String)) { - throw new LuaException("String expected!"); - } - String pattern = (String) args[0], - input = (String) args[1]; - return new Object[]{parseDate(pattern, input) / 1000}; - } - return null; - } -} diff --git a/src/main/java/dan200/computercraft/core/computer/Computer.java b/src/main/java/dan200/computercraft/core/computer/Computer.java index 9f72fb79f..6b3840e8f 100644 --- a/src/main/java/dan200/computercraft/core/computer/Computer.java +++ b/src/main/java/dan200/computercraft/core/computer/Computer.java @@ -615,7 +615,6 @@ public class Computer m_apis.add( new PeripheralAPI( m_apiEnvironment ) ); m_apis.add( new OSAPI( m_apiEnvironment ) ); m_apis.add( new BitAPI( m_apiEnvironment ) ); - m_apis.add( new TimeUtilsAPI() ); //m_apis.add( new BufferAPI( m_apiEnvironment ) ); if( ComputerCraft.http_enable ) { diff --git a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java index 5cc3e0b62..27d93c1a4 100644 --- a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java +++ b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java @@ -121,9 +121,6 @@ public class LuaJLuaMachine implements ILuaMachine m_softAbortMessage = null; m_hardAbortMessage = null; - - //Add to use lua setters at the TimeAPI - m_globals.set("time", new TimeAPI()); } @Override diff --git a/src/main/resources/assets/computercraft/lua/rom/help/changelog b/src/main/resources/assets/computercraft/lua/rom/help/changelog index cf2a62de0..988d20f48 100644 --- a/src/main/resources/assets/computercraft/lua/rom/help/changelog +++ b/src/main/resources/assets/computercraft/lua/rom/help/changelog @@ -3,6 +3,8 @@ New Features in ComputerCraft 1.80: * Added .getResponseHeaders() to HTTP responses. * Return a HTTP response when a HTTP error occurs. * Added a GUI to change ComputerCraft config options +* os.time( ... ) now accept parameters to get real timestamp and real hour of day +* os.day ( ... ) now accept parameters to get real day since 1970-01-01 New Features in ComputerCraft 1.79: diff --git a/src/main/resources/assets/computercraft/lua/rom/help/os b/src/main/resources/assets/computercraft/lua/rom/help/os index d4c6f75cc..a53f03205 100644 --- a/src/main/resources/assets/computercraft/lua/rom/help/os +++ b/src/main/resources/assets/computercraft/lua/rom/help/os @@ -12,8 +12,8 @@ os.clock() os.startTimer( timeout ) os.cancelTimer( token ) os.sleep( timeout ) -os.time() -os.day() +os.time( [source] ) +os.day( [source] ) os.setAlarm( time ) os.cancelAlarm( token ) os.shutdown() diff --git a/src/main/resources/assets/computercraft/lua/rom/help/whatsnew b/src/main/resources/assets/computercraft/lua/rom/help/whatsnew index 6b15bf545..ed569ec53 100644 --- a/src/main/resources/assets/computercraft/lua/rom/help/whatsnew +++ b/src/main/resources/assets/computercraft/lua/rom/help/whatsnew @@ -3,5 +3,7 @@ New Features in ComputerCraft 1.80: * Added .getResponseHeaders() to HTTP responses. * Return a HTTP response when a HTTP error occurs. * Added a GUI to change ComputerCraft config options +* os.time( ... ) now accept parameters to get real timestamp and real hour of day +* os.day ( ... ) now accept parameters to get real day since 1970-01-01 Type "help changelog" to see the full version history. From f89bbeee5410aa8454d7a2eac79c10171db93958 Mon Sep 17 00:00:00 2001 From: Tim Ittermann Date: Sat, 6 May 2017 14:30:19 +0200 Subject: [PATCH 6/7] Remove import --- src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java index 27d93c1a4..16cefb4b8 100644 --- a/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java +++ b/src/main/java/dan200/computercraft/core/lua/LuaJLuaMachine.java @@ -12,7 +12,6 @@ import dan200.computercraft.api.lua.ILuaObject; import dan200.computercraft.api.lua.ILuaTask; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.core.apis.ILuaAPI; -import dan200.computercraft.core.apis.TimeAPI; import dan200.computercraft.core.computer.Computer; import dan200.computercraft.core.computer.ITask; import dan200.computercraft.core.computer.MainThread; From f1c4634dfa8620dd9a57511e72af720f5cbf51dd Mon Sep 17 00:00:00 2001 From: Tim Ittermann Date: Sat, 6 May 2017 14:52:02 +0200 Subject: [PATCH 7/7] os.time( ... ) now returns float --- src/main/java/dan200/computercraft/core/apis/OSAPI.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/dan200/computercraft/core/apis/OSAPI.java b/src/main/java/dan200/computercraft/core/apis/OSAPI.java index b1642f6ff..7ecf7e327 100644 --- a/src/main/java/dan200/computercraft/core/apis/OSAPI.java +++ b/src/main/java/dan200/computercraft/core/apis/OSAPI.java @@ -301,12 +301,16 @@ public class OSAPI implements ILuaAPI //Get Hour of day (UTC) if (param.equals("utc")) { Calendar c = Calendar.getInstance(TimeZone.getTimeZone("UTC")); - return new Object[] {c.get(Calendar.HOUR_OF_DAY)}; + float hourOfDay = c.get(Calendar.HOUR_OF_DAY); + hourOfDay += ((float)c.get(Calendar.MINUTE)/60)+(float)(c.get(Calendar.SECOND)/60*60); + return new Object[] {hourOfDay}; } //Get Hour of day (local time) else if (param.equals("local")) { Calendar c = Calendar.getInstance(); - return new Object[] {c.get(Calendar.HOUR_OF_DAY)}; + float hourOfDay = c.get(Calendar.HOUR_OF_DAY); + hourOfDay += ((float)c.get(Calendar.MINUTE)/60)+(float)(c.get(Calendar.SECOND)/60*60); + return new Object[] {hourOfDay}; } //Get ingame hour else if (param.equals("ingame")) {