As these APIs are not truly universal on all editions of Windows, if an app were to program against them directly the app would not work on editions like HoloLens or Xbox. The text was updated successfully, but these errors were encountered:.
For applications that are already compatible with sandboxing i. This could perhaps be controlled via some sandbox capabilities options that are chosen at development time similar to the macOS model. Sorry, something went wrong. A good test of this feature would be, I can create an SQLite database in the user's documents folder. I shouldn't need permission to do this if it's a new file.
This is such a common scenario that the sandbox and the politics around it have never tried to solve for. An app should never need "broadFileAccess" but they should also make it so users can easily open documents and see their saved file right there. Why not create in AppData folder itself? A lot of users have complained apps creating random folders in their library folders like Documents, Music etc. Also, this kind of behavior from developers is what prompted MS to limit storage access in first place.
These are things I have encountered while building my photo-viewing app. If this post is too long, feel free to move it to a separate issue.
The scenarios themselves come first, followed by the problems with them in UWP and some possible solutions. I hope that this project will make time to think more creatively about how to deal with some of the file permissions issues. I put this in as point 0 as it influences all the others. A key principle of my app is to allow users to organise their photos how they like and not to force them into any patterns.
My app has quite a simple concept of allowing users to select files they want it to display. They can do this by selecting a folder, optionally including subfolders, or selecting individual files etc. They can make multiple selections. The app needs to maintain a list of the selected files including the order they were selected in etc , therefore it needs to be able to list files in folders, and the quicker and less resource-intensive this is, the better. My app has the option to auto-refresh the selected files to match the contents of the folders that the user selected to view.
This should ideally be fast. Also, it expects to be able to read properties simultaneously. This is self-explanatory. There is a button in the app that allows the user to duplicate the file they are currently viewing in the app. The file is one of those selected in scenario 1.
The user may have selected an individual file to view in scenario 1. The app would like to show a button that would load the remaining files from the same folder in this case, ideally via a 1-click operation. Users who make heavy use of this list may add hundreds or even thousands of files to it. Such as slideshow may consist of thousands of images, which were originally selected in multiple different ways.
The saved data file would store the file paths of these images, and when the data file is loaded it needs to be able to load the associated images. The user needs to be able to do the same things with these files that they can do with files selected another way. An important feature of this is that the neighboring files are ordered in the same way as in File Explorer. The neighboring files list should be resilient to problems with the file system indexer. The challenge here is simply that listing the StorageItems in a StorageFolder is incredibly slow and resource intensive compared to using the standard.
A quick test showed that in. Net it takes about 0. Net uses around 0. ContentsChanged method for watching for file system changes. However, it has absolutely no configuration options for what sort of changes to watch for, so it will fire on any change, even something like last access time I think, and include subfolders.
I agree that if you have no configuration options that firing on any change is the best option. It also does not tell you what changed. Combined with the speed issues in scenario 2, this makes for a doubly bad experience. If you look at the. In UWP, assuming that you managed to get permission for this folder, in order to determine what changed, you would first have to enumerate all the contents, which would literally take several days, then on a change you would have to enumerate all the contents again, taking several days, and in fact several weeks if you also want to check the date modified to detect file modifications, and look at the difference.
Also, at one stage, I tried adding a separate watching for each of sub-folders that had been added to the app in order to avoid having to query all the files for changes and basically it ground to a halt — it seems to create a new thread for each watcher which is not necessarily very efficient. Net without writing interop code. Also, for any alternative to StorageFile in UWP, it needs to be possible to get these properties ideally without the overhead of creating a StorageFile.
Also, there are some issues with these in UWP. Firstly, if you call any of the Get.. PropertiesAsync methods apart from RetrievePropertiesAsync simultaneously on the same StorageFile instance, they will fail, even though they are read-only as far as I can see so have no reason to. Secondly, fetching System. Size and System. DateModified using RetrievePropertiesAsync after the first time does not return an up-to-date result.
Finally, using SorageFile. GetBasicPropertiesAsync to get the file modified data is incredibly slow compared to. In UWP, it takes about 5ms per file, which is times slower, and also adds about an extra 60kB per file if you keep the StorageFile , compared to about 0. This duplicate button is not possible in UWP if the user opened the file individually or by double-clicking in File Explorer, unless the file is in the Pictures library assuming the Pictures library capability.
Worse, the app cannot even open the save file dialog to the current folder, since there is no way to set the starting folder of the save file dialog. This is a similar problem to scenario 5. If the user opened the file individually this is impossible, unless the file is in the Pictures library. The only general way to save access to files is via the FutureAccessList. However, this is beset with problems. It has quite a small limit of files which is easily exceeded.
The developer has to write code to handle the case when this happens, which is hampered by the fact that any of the APIs surround the FutureAccessList are quite slow, typically taking several milliseconds, and hence such a function has to be carefully debounced so as not to impact performance of the app. Furthermore, the app has to maintain a list of the tokens it is using and ensure this is in sync with the list, which is awkward.
It would be easier if the list could be accessed via file path, with a use count. This could be stored in the metadata currently but for some reason in order to obtain the metadata for a token you have to enumerate the whole list. Compare this with a. Net app where you can simply forget about the whole thing and spend zero days on it.
Due to the fact that the slideshow list would be stored in an external file which could then be deleted without the knowledge of the app, and also because this could exceed files, the FutureAccessList cannot be used for this purpose, so it is impossible unless the files are in the Pictures library. There are currently various issues with the neighboring files query, which I believe is related to the way it uses the file system indexer.
Firstly, it is quite common for the file system indexer to stop working properly. On my old PC this happened after every major Windows update. In this case, the neighboring files query would contain no files or be missing some files. I found disabling and re-enabling file content indexing fixed the problem. Also, some properties like title will be limited to a certain number of characters e. Another problem is that the allowed file extensions does not always include all media files. Scenarios are performance-related, and in the case of scenario 2 the APIs are simply incomplete for UWP and need to be completed.
The performance issues should be covered by the suggestions in your proposal. This should include an alternative for RetrievePropertiesAsync. Also, once you have permission to access a file for the current app session, you should be able to access it via any means, unlike currently where StorageFile.
Path will fail. Scenario 4 is a simple matter of change the default behavior to read-write, and I think most people agree with this. It could also be solved by just allowing access to the folder, as long as it was possible to get the current sort order. I know this is an increase in access rights, but it would also solve some other problems which is why I mention it.
The issue of some media files being omitted could be solved by Windows having a list of such allowed extensions that could be updated independently of a feature update so we do not have to wait a year for such a simple change assuming the list was then updated to add files such as. Scenarios are more tricky. Basically all of these require more permissive file access or additional capabilities.
I have sketched out a few ideas, some of which you might consider outrageous, but I think this is a very important area that needs exploring. Finally, my thoughts on periodic warnings for users about apps using capabilities - personally I find this kind of notification annoying, so I would be against it.
Better to make it easy for a user to investigate this, without giving them an intrusive notification. Maybe it could go so far as something like the using your location icon in the task bar, although even that is potentially annoying if there are too many. Few of us can tell the story of our people without beginning it with the Maafa slavery.
We have created false memories. Not only are our memories of African people untruthful, but the memories we have of Europeans are also untruthful. We lost our land. Any time you lose your mooring on the land, you lose your capacity to protect your possessions.
We have lost our independent production capacity. We have become consumers rather than producers. We have also independent control of ourselves. We have little or no control of our educational process, our economic situation, our communications, or our politics.
We have lost sensitivity. We have lost the ability to perceive when people are doing things to us which are detrimental. We have lost our solidarity…our unity.
Pick a name, any name — negro, colored, black or African American. Call a people by any name and they are still the same people, right? The name that you respond to determines the amount of your self worth. Similarly, the way a group of people collectively respond to a name can have devastating effects on their lives, particularly if they did not choose the name. Asians come from Asia and have pride in the Asia race. Europeans come from Europe and have pride in European accomplishments.
Negroes, I assume, come from Negroland — a mythical country with an uncertain past and an even more uncertain future…. The Spanish language comes from the Latin, which has its origins in Classical Greek. The word negro, in Greek, is derived from the root word necro, meaning dead. What was once referred to as a physical condition is now regarded as an appropriate state of mind for millions of Africans now residing in America.
The negro — a race of dead people with a dead history and no hope for resurrection as long as they remained ignorant of their past. This is triple death — the death of the mind, body, and spirit of African people.
Have you ever wondered why most reference to the color black have a negative and demeaning connotation? The negative distortion of blackness even applies to the food we eat. The way we perceive blackness has changed dramatically over the past years. Many things which which were once positive are now presented as negative. The ancient Kemetians, referred to themselves as The Black People.
They would also place black capstones on their pyramids and obelisks because they know of the inherent power of the color black as an absorber of both light and cosmic radiation. Black has always been and will continue to be, a source of power and influence. Consider, the following:. Solar energy cells are black. Dry cell batteries are powered by black chemicals.
Judges, priests, nuns and graduating students wear black robes. Chauffeur-driven limousines are often black. Shrines of the Black Madonna can be found throughout all of Europe. Africans have been programmed to think that black is something to be ashamed of. To redirect our thinking we must recognise and believe that black represents life and power! Everybody needs someone to look up to. A hero can be father, mother, sister, brother or anyone who can make a positive contribution to the life of another person.
Set was the symbol of evil and is the origin of the word Satan. The battle between Heru and Set is the origin of the classic confrontation between the forces of good and evil also regarded as light and darkness. This is why folder grouping was added to bliss. This way, you can group folders by the first 'n' characters of their name. Currently I have around seven hundred albums in my own collection. And remember to use only identification and structural tags!
I'm Dan, the founder and programmer of bliss. I write bliss to solve my own problems with my digital music collection. Privacy policy. Home Music Library Management blog. Broad or deep folder structures? July 02, in files and folders by Dan Gravell Music file and folder structures are a topic I've discussed before on the blog.
I have not seen other people discuss the merits of either structure. So unsure what is the best way of organize my music. Let's break this into some examples, using some example albums.
And so Thanks to Christian Guthier for the image above. More like this: Solving music file and tag inconsistencies A bare-minimum-data file organisation scheme Why you shouldn't change music file names File paths and case sensitivity. Subscribe via email Thanks for signing up to the blog! Can you confirm the sign up in an email my server just sent to you?
0コメント