Skip to content

Commit

Permalink
Initial release
Browse files Browse the repository at this point in the history
  • Loading branch information
gazugafan committed May 17, 2018
1 parent 054af5c commit dbf6c26
Show file tree
Hide file tree
Showing 61 changed files with 4,828 additions and 1 deletion.
63 changes: 63 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto

###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp

###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary

###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary

###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain
12 changes: 12 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Debug
Release
bin
doc
obj
publish
*.DotSettings*
*.[Cc]ache
*.[Rr]e[Ss]harper
*.[Rr]e[Ss]harper.user
*.csproj.user
*.suo
Binary file added .vs/RestStop/DesignTimeBuild/.dtbcache
Binary file not shown.
Empty file.
Binary file added .vs/RestStop/v15/Server/sqlite3/storage.ide
Binary file not shown.
Binary file not shown.
Binary file added .vs/RestStop/v15/Server/sqlite3/storage.ide-wal
Binary file not shown.
8 changes: 8 additions & 0 deletions .vs/VSWorkspaceState.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"ExpandedNodes": [
"",
"\\gazugafan.RestStop",
"\\gazugafan.RestStop\\Icons"
],
"PreviewInSolutionExplorer": false
}
Binary file added .vs/slnx.sqlite
Binary file not shown.
1 change: 1 addition & 0 deletions EULA
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
674 changes: 674 additions & 0 deletions LICENSE

Large diffs are not rendered by default.

35 changes: 34 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,35 @@
# RestStop
It's time to rest!
### It's time to rest!

RestStop gives you non-intrusive reminders to rest after you've worked continuously for awhile.

## Yet Another Break Reminder?
There are lots of apps that do something like this already, but none of them are quite right.

Some of them don't track how long you've been active. These are essentially just timers that must be manually started and stopped. This is annoying, and you're not likely to do it consistently. Eventually, you'll probably forget you even installed the thing.

Most of them disrupt your work with a popup that must be dismissed. This is also annoying, and if you're in the middle of working, you'll likely just dismiss the popup so that you can get back to what you were doing. Eventually, you'll probably just delete the thing so it stops getting in your way.

[Awareness](http://iamfutureproof.com/tools/awareness) is close to perfect. It's just not *quite* customizable enough, doesn't blend in with the rest of the Windows tray icons very well, and has no mechanism for additional reminders if you ignore the sound it makes (or if you couldn't hear it for any number of reasons). It's also not open-source. If you're a Mac user, though, definitely check it out!

## Goals
* Once installed, you should never have to interact with the app. It should track your active/resting time and automatically notify you when it's time to take a break.
* Alerts should be non-intrusive so you don't ignore them. Sometimes you just have to work! If they're annoying or disrupt your work, you'll just dismiss them without a second thought and eventually abandon the app. They should just be a subtle reminder... a sound or flashing tray icon.
* The app should blend in with the OS. The tray icon should match the design of the built-in tray icons. If there are notifications, they should be done with the OS's existing notification system.
* Sometimes you have to work, so ignoring the rest stop notification is perfectly acceptable. Because of this, there should be different-sounding secondary reminders. You don't want to be able to ignore the rest stop notification and completely forget about it all the way until the next one.
* The tray icon should act as an at-a-glance indication of how long you've worked. Needing to hover over it for this is a needless interruption in itself. It should also act as a subtle visual notification by slowly flashing when a rest stop is overdue--functioning as a backup in case sound isn't coming through for some reason (volume low/muted, headphones plugged in, etc).

# Welcome to RestStop!
RestStop puts an hourglass icon in your tray, and reminds you when it's time to rest! Right click the hourglass to configure settings. Hover over it to see how long you've been working. You can also just glance at the hourglass icon... it's slowly trickling down to your next rest stop!

By default, rest stops are needed after 1 hour of continuous activity. After this, the hourglass will be depleted and appear completely empty. You'll also hear a calming bell toll. These are meant to be subtle indications that it's time to rest. You don't have to, though! There's nothing to dismiss, and nothing to stop you from working a bit more.

Every 10 minutes after this, you'll get an extra reminder that your rest stop is overdue. A slightly less calming bell will toll, and the hourglass will slowly flash red. Again, these are not meant to disrupt your work… only to help you keep in mind that it's probably time for a break.

Once you're ready to rest… just rest! Step away from the computer. Do some stretches. Grab some coffee. Whatever! As long as you're not active at the computer for at least 5 minutes, we'll consider you rested. Once you return from a rest and start using the computer again, we'll automatically reset your activity counter and start counting down to your next rest stop.

If you really need to, you can right click the tray icon and select “I swear I'm rested!” to immediately reset your activity. This should only be used if your cat bumps your mouse while you're resting and throws us off. Even if your cat does do that, though, we allow up to 10 pixels of slight mouse movement before we consider you active. Key presses also count as activity.

Besides that, though, there's nothing to interact with and nothing to get in your way… just subtle reminders to rest. If you'd like us to get in your way a little more, you can turn notifications on in the settings.

If you want us to get in your way even more, like popping up a screen-filling STOP WORKING window in front of whatever you might be working on, then this isn't the app for you (check out Stretchly instead). We think doing that will just annoy you and cause you to eventually abandon the app altogether. And hey, sometimes you really do need to get stuff done and can't take a break. In those cases we'll just be down in the tray whispering in your ear—not jumping in front of you and twisting your arm.
39 changes: 39 additions & 0 deletions RestStop.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27703.2000
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "gazugafan.RestStop", "gazugafan.RestStop\gazugafan.RestStop.csproj", "{08C3C082-EE6D-4BC2-9810-CC0094B7CFDC}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "RestStopSetup", "RestStopSetup\RestStopSetup.wixproj", "{9E9106CB-BC30-4F6F-80E3-E4A27B385EF2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{08C3C082-EE6D-4BC2-9810-CC0094B7CFDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{08C3C082-EE6D-4BC2-9810-CC0094B7CFDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{08C3C082-EE6D-4BC2-9810-CC0094B7CFDC}.Debug|x86.ActiveCfg = Debug|Any CPU
{08C3C082-EE6D-4BC2-9810-CC0094B7CFDC}.Debug|x86.Build.0 = Debug|Any CPU
{08C3C082-EE6D-4BC2-9810-CC0094B7CFDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{08C3C082-EE6D-4BC2-9810-CC0094B7CFDC}.Release|Any CPU.Build.0 = Release|Any CPU
{08C3C082-EE6D-4BC2-9810-CC0094B7CFDC}.Release|x86.ActiveCfg = Release|Any CPU
{08C3C082-EE6D-4BC2-9810-CC0094B7CFDC}.Release|x86.Build.0 = Release|Any CPU
{9E9106CB-BC30-4F6F-80E3-E4A27B385EF2}.Debug|Any CPU.ActiveCfg = Debug|x86
{9E9106CB-BC30-4F6F-80E3-E4A27B385EF2}.Debug|x86.ActiveCfg = Debug|x86
{9E9106CB-BC30-4F6F-80E3-E4A27B385EF2}.Debug|x86.Build.0 = Debug|x86
{9E9106CB-BC30-4F6F-80E3-E4A27B385EF2}.Release|Any CPU.ActiveCfg = Release|x86
{9E9106CB-BC30-4F6F-80E3-E4A27B385EF2}.Release|x86.ActiveCfg = Release|x86
{9E9106CB-BC30-4F6F-80E3-E4A27B385EF2}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {95A3F563-752D-4A78-8EE4-CD11E8184EE2}
EndGlobalSection
EndGlobal
148 changes: 148 additions & 0 deletions RestStopSetup/Product.wxs
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?define gazugafan.RestStop_TargetDir=$(var.gazugafan.RestStop.TargetDir)?>
<Product Id="277a969f-ecc6-4c80-bdc4-7bf202b73246" Name="RestStop" Language="1033" Version="1.0.0.0" Manufacturer="gazugafan" UpgradeCode="a59eeafd-a1f1-4233-bc99-c7ba8a1e9b88">

<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<UI>
<UIRef Id="WixUI_Minimal" />
<Publish Dialog="ExitDialog"
Control="Finish"
Event="DoAction"
Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
</UI>
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Start RestStop Now" />
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1"/>

<Property Id="WixShellExecTarget" Value="[#RestStop.exe]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

<Icon Id="icon.ico" SourceFile="..\gazugafan.RestStop\Icons\hourglassEmpty.ico" />
<Property Id="ARPPRODUCTICON" Value="icon.ico" />

<WixVariable Id="WixUILicenseRtf" Value="..\license.rtf" />

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate EmbedCab="yes" />

<Feature Id="ProductFeature" Title="RestStop" Level="1">
<ComponentGroupRef Id="ProductComponents" />
<ComponentGroupRef Id="Sounds_files" />
<ComponentRef Id="ApplicationShortcut" />
<ComponentGroupRef Id="Icons_files" />
</Feature>
</Product>

<Fragment>
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="ApplicationShortcut" Guid="0af417fc-7138-4cc1-ac14-3e73a67f62a2">
<Shortcut Icon="icon.ico" Id="ApplicationStartMenuShortcut" Name="RestStop" Description="RestStop" Target="[INSTALLFOLDER]RestStop.exe" WorkingDirectory="INSTALLFOLDER" />
<RemoveFolder Id="RemoveApplicationProgramsFolder" Directory="ApplicationProgramsFolder" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\RestStop" Name="installed" Type="integer" Value="1" KeyPath="yes" />
</Component>
</DirectoryRef>
</Fragment>

<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="RestStop">
<Directory Id="Sounds" Name="Sounds" />
<Directory Id="Icons" Name="Icons" />
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="RestStop" />
</Directory>
</Directory>
</Directory>
</Fragment>

<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="RestStop.exe.config" Guid="3d580980-6a1f-49ab-b1c9-13db9bab7611">
<File Id="RestStop.exe.config" Name="RestStop.exe.config" Source="$(var.gazugafan.RestStop_TargetDir)RestStop.exe.config" />
</Component>
<Component Id="RestStop.exe" Guid="f261c1ed-e198-45e0-bcb7-4af67602c03e">
<File Id="RestStop.exe" Name="RestStop.exe" Source="$(var.gazugafan.RestStop_TargetDir)RestStop.exe" />
</Component>
<Component Id="about.bmp" Guid="9da60d05-b60f-4d9c-bc9f-56da54e8b25f">
<File Id="about.bmp" Name="about.bmp" Source="$(var.gazugafan.RestStop_TargetDir)about.bmp" />
</Component>
<Component Id="about.txt" Guid="8bcfd2da-cbd0-4600-8071-93ad873a230c">
<File Id="about.txt" Name="about.txt" Source="$(var.gazugafan.RestStop_TargetDir)about.txt" />
</Component>
<Component Id="help.rtf" Guid="6fb3a4bb-2e25-49e9-ba34-3c0ad59a73fe">
<File Id="help.rtf" Name="help.rtf" Source="$(var.gazugafan.RestStop_TargetDir)help.rtf" />
</Component>
</ComponentGroup>
</Fragment>

<Fragment>
<ComponentGroup Id="Sounds_files" Directory="Sounds">
<Component Id="Sounds_Alert.wav" Guid="ae641359-295b-4e69-9b5a-4efcb7eb3a8b">
<File Id="Sounds_Alert.wav" Name="Alert.wav" Source="$(var.gazugafan.RestStop_TargetDir)Sounds\Alert.wav" />
</Component>
<Component Id="Sounds_Bell_Tones.wav" Guid="1077a581-5b8e-42cf-91e9-67ac4077dfe4">
<File Id="Sounds_Bell_Tones.wav" Name="Bell Tones.wav" Source="$(var.gazugafan.RestStop_TargetDir)Sounds\Bell Tones.wav" />
</Component>
<Component Id="Sounds_Ding_Ding.wav" Guid="8655668e-142c-41e3-a813-e05c96f54bc1">
<File Id="Sounds_Ding_Ding.wav" Name="Ding Ding.wav" Source="$(var.gazugafan.RestStop_TargetDir)Sounds\Ding Ding.wav" />
</Component>
<Component Id="Sounds_Gong.wav" Guid="0477d026-a177-4580-bc11-0e04f4084df2">
<File Id="Sounds_Gong.wav" Name="Gong.wav" Source="$(var.gazugafan.RestStop_TargetDir)Sounds\Gong.wav" />
</Component>
<Component Id="Sounds_Hand_Bell.wav" Guid="6cd2245d-4104-443e-80ee-f4b54542ade1">
<File Id="Sounds_Hand_Bell.wav" Name="Hand Bell.wav" Source="$(var.gazugafan.RestStop_TargetDir)Sounds\Hand Bell.wav" />
</Component>
<Component Id="Sounds_Standing_Bell.wav" Guid="8f952c1c-7592-4f7b-a5d3-4f8c45670240">
<File Id="Sounds_Standing_Bell.wav" Name="Standing Bell.wav" Source="$(var.gazugafan.RestStop_TargetDir)Sounds\Standing Bell.wav" />
</Component>
<Component Id="Sounds_Wind_Toll.wav" Guid="bfec88a1-9dd7-4dc8-b251-9670b778d6e4">
<File Id="Sounds_Wind_Toll.wav" Name="Wind Toll.wav" Source="$(var.gazugafan.RestStop_TargetDir)Sounds\Wind Toll.wav" />
</Component>
</ComponentGroup>
</Fragment>
<Fragment>
<ComponentGroup Id="Icons_files" Directory="Icons">
<Component Id="Icons_hourglass1.ico" Guid="aa8d415b-e27d-4b07-8311-54813c695423">
<File Id="Icons_hourglass1.ico" Name="hourglass1.ico" Source="$(var.gazugafan.RestStop_TargetDir)Icons\hourglass1.ico" />
</Component>
<Component Id="Icons_hourglass10.ico" Guid="d40ba856-b24c-4936-a76e-a7b0775c9efb">
<File Id="Icons_hourglass10.ico" Name="hourglass10.ico" Source="$(var.gazugafan.RestStop_TargetDir)Icons\hourglass10.ico" />
</Component>
<Component Id="Icons_hourglass2.ico" Guid="99fa5072-47e7-4385-878d-974d6d2295a1">
<File Id="Icons_hourglass2.ico" Name="hourglass2.ico" Source="$(var.gazugafan.RestStop_TargetDir)Icons\hourglass2.ico" />
</Component>
<Component Id="Icons_hourglass3.ico" Guid="5ec594e3-0a00-4798-b8ae-7d57f874bb79">
<File Id="Icons_hourglass3.ico" Name="hourglass3.ico" Source="$(var.gazugafan.RestStop_TargetDir)Icons\hourglass3.ico" />
</Component>
<Component Id="Icons_hourglass4.ico" Guid="92379bc6-0f74-4e65-bcae-28fd742f713f">
<File Id="Icons_hourglass4.ico" Name="hourglass4.ico" Source="$(var.gazugafan.RestStop_TargetDir)Icons\hourglass4.ico" />
</Component>
<Component Id="Icons_hourglass5.ico" Guid="2eb57a5d-228a-4dd3-b4e8-5a0318a68907">
<File Id="Icons_hourglass5.ico" Name="hourglass5.ico" Source="$(var.gazugafan.RestStop_TargetDir)Icons\hourglass5.ico" />
</Component>
<Component Id="Icons_hourglass6.ico" Guid="4ea03b4c-fdea-4e3d-adcd-92f900332bf0">
<File Id="Icons_hourglass6.ico" Name="hourglass6.ico" Source="$(var.gazugafan.RestStop_TargetDir)Icons\hourglass6.ico" />
</Component>
<Component Id="Icons_hourglass7.ico" Guid="174fac65-e0f4-42c0-8c8e-b6411378492a">
<File Id="Icons_hourglass7.ico" Name="hourglass7.ico" Source="$(var.gazugafan.RestStop_TargetDir)Icons\hourglass7.ico" />
</Component>
<Component Id="Icons_hourglass8.ico" Guid="a9e6d074-67b1-404a-86e1-b6ac8739f0de">
<File Id="Icons_hourglass8.ico" Name="hourglass8.ico" Source="$(var.gazugafan.RestStop_TargetDir)Icons\hourglass8.ico" />
</Component>
<Component Id="Icons_hourglass9.ico" Guid="26386f2f-f1ee-4866-b0dc-abf1ec8c5cc7">
<File Id="Icons_hourglass9.ico" Name="hourglass9.ico" Source="$(var.gazugafan.RestStop_TargetDir)Icons\hourglass9.ico" />
</Component>
<Component Id="Icons_hourglassEmpty.ico" Guid="e9b82355-2cf6-4612-93de-b76bd30be706">
<File Id="Icons_hourglassEmpty.ico" Name="hourglassEmpty.ico" Source="$(var.gazugafan.RestStop_TargetDir)Icons\hourglassEmpty.ico" />
</Component>
<Component Id="Icons_hourglassFull.ico" Guid="caf79cab-477c-445c-9583-c0ce4efb213f">
<File Id="Icons_hourglassFull.ico" Name="hourglassFull.ico" Source="$(var.gazugafan.RestStop_TargetDir)Icons\hourglassFull.ico" />
</Component>
<Component Id="Icons_hourglassRed.ico" Guid="ad1ce788-8e63-4e03-8db4-274bb9f0eb85">
<File Id="Icons_hourglassRed.ico" Name="hourglassRed.ico" Source="$(var.gazugafan.RestStop_TargetDir)Icons\hourglassRed.ico" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
Binary file added RestStopSetup/RestStopSetup.wax
Binary file not shown.
Loading

0 comments on commit dbf6c26

Please sign in to comment.